Source Modding — Часть 1 — Основы основ
В мире существует множество игровых движков, но нет ни одного движка, похожего на Source своей историей и особенностями.
В этом (пилотном) уроке мы разберем простейшие действия с исходными кодами SDK, а также внесем наше первое изменение в код Half-Life 2.

Вступление
Немножко терминов
Сам по себе Source SDK — набор утилит и программ, помогающих в разработке собственных уровней и модификаций для игры, а также исходные коды Half-Life 2 и эпизодов.
Игра/Мод (Для сурса нет никакой разницы, игра это или мод :p) — скомпилированные исходные коды SDK.
Так почему же именно Source?!
- Модульность. Это может показаться минусом для некоторых, но почти все подсистемы движка вынесены в отдельные модули, каждый из которых может быть заменен без пересборки всего движка.
- Чрезвычайная гибкость. При достаточном количестве усилий вы можете сделать на Source игру абсолютно любого жанра.
- Движок и SDK разрабатывались огромным количеством людей, поэтому код SDK (а также утекший в сеть три раза код движка разных версий, но об этом позже ( ͡° ͜ʖ ͡°) ) состоит из множества разных стилей программирования! Я почти уверен, что именно работа с Source SDK подарила мне умение (но не желание. ) читать чужой код.
- Порог вхождения. Он не слишком низок и не слишком высок. Достаточно знать C++ и уметь вчитываться в документацию!
- К моменту появления идеи о написании туториала у автора попросту не было новой версии юнити.
Что нам необходимо?
- Ну прежде всего хотя бы базовые знания C++ (Достаточно знать его на уровне Си с классами).
- Любая Microsoft Visual Studio с Multibyte MFC Library и Microsoft Build Tools 2013 (v120/v120_xp). Чтобы не морочить себе голову, можно просто установить VS2013. или любой другой.
- Steam с установленным Source SDK Base 2013 [Single|Multi]player (также необходимо в свойствах «игры» установить бета-версию upstream, иначе мод будет падать)
- В будущем также знание 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 из скриптов:
- Откройте src/creategameprojects.bat в любом текстовом редакторе.
- Удалите из командной строки часть /hl2
- Сохраните файл и сгенерируйте проект.
Другие скрипты
Рядом с creategameprojects.bat также лежит его клон для bash а также два интересных файла — createallprojects.bat и его клон для bash.
Эти два скрипта заставляют VPC создавать проекты не только для чистых библиотек мода, но и для различных утилит, таких как vrad (Radiosity!) или height2normal.
Сейчас использовать я его вам настоятельно не рекомендую, так как свои собственные компиляторы карт нам пока не нужны.
Первичная сборка и запуск
Сборка
Чтобы удостовериться, что вы всё сделали правильно, необходимо собрать всё сгенерированное решение. Итак, собираем (вы же ведь открыли решение в IDE?):
- Переключите конфигурацию в Release.
ВАЖНО: При сборке в Debug мод крайне нестабилен. - Соберите ВСЁ решение (F6)
- Если сборка закончилась с ошибками, повторите шаг 2.
- Если ошибки повторяются, пересоздайте проекты (creategameprojects) и повторите все шаги начиная с 1.
После сборки в папке game/mod_hl2/bin/ или game/mod_episodic/bin/ должны появится наши клиентская и серверная библиотеки!
Запуск — Способ 1 — Steam
- Копируем нашу папку mod_xxx в путь/до/Steam/steamapps/sourcemods/
- Перезапускаем Steam (либо запускаем, если еще этого не сделали. )
- Ищем в библиотеке «My First Episodic Mod» или «My First HL2 Mod»
- В свойствах устанавливаем дополнительные параметры командной строки:
- Запускаем, в консоли запускаем карту sdk_vehicles (SP) или dm_lockdown (MP)
Запуск — Способ 2 — Visual Studio
Я рекомендую использовать именно этот способ — не копировать же бинарники мода каждый раз после сборки!
- Заходим в свойства проекта (не решения. ) во вкладку Debugging
- В поле Command вписываем:
- В поле Working Directory вписываем:
- В поле Command Arguments вписываем:
- Сохраняем, запускаем (F5)!
- Запускаем, в консоли запускаем карту sdk_vehicles (SP) или dm_lockdown (MP)
Если карта загрузилась и вы можете передвигаться и двигать камеру мышью — сборка успешна!

Первая модификация в коде
Функции семейства Msg()
Функции Msg() , DevMsg() , Warning() , DevWarning() и ConColorMsg() являются чем-то вроде классического printf() , но в мире программирования под Source SDK. Эти функции так или иначе выводят какой-то текст в консоль разработчика и debug output.
Говорящий пистолет!
Давайте научим пистолет писать сообщение с количеством патронов в магазине:
SOURCE
1) исток 2) источник 3) исходный 4) ключ 5) начало 6) первоисточник 7) первопричина • alternate supply source — источник питания запасной artificial light source — источник света искусственный axial point source — точечный осевой источник clock pulse source — генератор тактовых импульсов field without source — поле без источников finite source model — модель с конечным источником gas-discharge light source — источник света газоразрядный graph with source — граф с источником ground power source — источник питания наземной industrial gamma ray source — машиностр. гамма-установка промышленная limited source input — входящий поток из ограниченного источника luminescent light source — источник света люминесцентный mobile gamma ray source — машиностр. гамма-установка передвижная modulated light source — источник света модулированный nuclear radiation source — источник ядерного излучения on-board power source — источник питания бортовой radioactive light source — источник света радиоактивный solid-state light source — источник света твердотельный spark light source — источник света искровой telephone traffic source — источник телефонной нагрузки unlimited source input — входящий поток из неограниченного источника — arc source — bare source — beta source — capillary-arc source — capillary-type ion source — constant-current source — cosmic source — dipole source — directional source — dislocation source — distributed source — electron-emitting source — equal-energy source — ergodic source — exhausted source — external source — field source — finite source — Frank-Read source — gamma source — gamma-ray source — gas emission source — heat source — hollow source — impulse source — incandescent source — incoherent source — infinite source — information source — infra-red source — ionization source — isotope source — Josephson source — light source — line source — lumped source — message source — monochromatic source — negative-ion source — neutron source — noise source — nuclear source — periodic source — perturbation source — plane source — plasma source — plasma-excitation source — point source — power source — primary source — pulsed source — pump source — radiation source — radioactive source — regular source — ring source — sandwiched source — second source — slit source — sound source — source activity — source arc — source document — source electrode — source function — source image — source impedance — source information — source intensity — source language — source material — source node — source of ambiguity — source of automaton — source of digraph — source of error — source of field — source of inaccuracy — source of nonhomogeneity — source of uncertainty — source of variance — source of variation — source power — source program — source region — source resistance — source strength — source vertex — souro source — spark source — standard source — stationary source — steady source — swept-signal source — thermal-neutron source — transient source — virtual source — voltage source — volume source — vortex source — vorticity source — welding source — white source. смотреть
source
It is best to make inquiries at the original sources. — Лучше наводить справки, пользуясь первоисточниками.
A well-placed source says the minister will resign. — По сведениям из достоверного источника министр уйдёт в отставку.
parts and materials sourced from abroad — детали и материалы, поставляемые из-за границы
Англо-русский современный словарь . 2014 .
Полезное
Смотреть что такое «source» в других словарях:
Source — Engine … Википедия
source — [ surs ] n. f. • v. 1354; sourse XIIe; fém. de so(u)rs, anc. p. p. de sourdre 1 ♦ Eau qui sort de terre; issue naturelle ou artificielle par laquelle une eau souterraine se déverse à la surface du sol. ⇒ fontaine, griffon, 1. point (d eau).… … Encyclopédie Universelle
Source — may refer to:Film and television* The Source (documentary) , a 1999 documentary movie about the Beat generation * The Source (film) , a 2002 science fiction movie, also known as The Secret Craft in the UK and The Surge for its American DVD… … Wikipedia
source — Source. s. f. Endroit où l eau commence à sourdre, à sortir de terre, pour avoir un cours continuel. Claire source. vive source. source qui ne tarit jamais. ce ruisseau ne provient pas des pluyes, c est une eau qui coule de source. trouver une… … Dictionnaire de l’Académie française
source — n 1: a point of origin the source of the conflict 2: one that supplies information held the reporter in contempt for refusing to reveal her source Merriam Webster’s Dictionary of Law. Merriam Webster. 1996 … Law dictionary
source — Source, Origo, Scaturigo, Scatebra, Caput riuulorum, a surgendo. La source d une lignée, là ou toute la lignée rapporte son commencement, Genus. La source dont vient tout le mal, Seminarium. La source dont procede quelque tristesse, Fons moeroris … Thresor de la langue françoyse
source — [sôrs] n. [ME sours < OFr sourse < pp. of sourdre, to rise < L surgere: see SURGE] 1. a spring, fountain, etc. that is the starting point of a stream 2. that from which something comes into existence, develops, or derives [the sun is our … English World dictionary
Source — Source, n. [OE. sours, OF. sourse, surse, sorse, F. source, fr. OF. sors, p. p. of OF. sordre, surdre, sourdre, to spring forth or up, F. sourdre, fr. L. surgere to lift or raise up, to spring up. See
Source — [sɔ:s] die; <aus engl. source »Quelle«, dies über altfr. surse zu lat. surgere »entstehen«> die Eingangselektrode beim Feldeffekttransistor … Das große Fremdwörterbuch
source — ► NOUN 1) a place, person, or thing from which something originates. 2) a spring or other place from which a river or stream issues. 3) a person, book, or document that provides information or evidence. ► VERB ▪ obtain from a particular source.… … English terms dictionary
Source — (fr., spr. Surs), 1) die Quelle, der Ursprung; bes. 2) die Handelsquelle (wo eine Waare aus der ersten Hand bezogen wird) … Pierer’s Universal-Lexikon
Source
![]()
![]()
English
Català
Čeština
Deutsch
Español
Eesti
Français
Magyar
Italiano
Nederlands
Norsk
Polski
Português
Português do Brasil
Русский
Українська
Svenska
Türkçe
日本語
中文(中国大陆)
中文(台灣)
한국어
ქართული
עברית
Edit
Page history
Purge this page
Move
Quake ▶
GoldSrc ▶
Source ▶
Source 2
Source — это движок для разработки 3D игр, созданный компанией Valve, является преемником GoldSource. Source используется как самой Valve, так и сторонними компаниями. Так же, как и GoldSource, движок может использоваться для создания различных модификаций от сообщества людей по всему миру.
![]()
![]()
Contents
Рендерер
- Версии 3.0 (и ниже) шейдеры и Normal mapping для моделей и карты
- Авторские шейдеры на языке HLSL
- Отражения с помощью cubemap
- Отражения cubemap также поддерживают анизотропную фильтрацию (во всех играх начиная с
)
- Phong также поддерживается брашами уровней (во всех играх начиная с
)
- Вода также поддерживает карты потоков (во всех играх начиная с
)
- Деформируемые поверхности создающие более разнообразный горизонт и добавляющие эффект параллакса на удалённых объектах
- Динамически обрабатываемая органика (трава, деревья и т. д.)
- Поддержка DX8-DX9 (DX6-DX9 с некоторыми изменениями и исправленными функциями шейдеров)
Система материалов
- Взамен традиционных текстур, Source работает с наборами материалов, которые определяют, из чего сделан объект, какая для него нужна текстура. Также определяется, как объект разламывается при разбивании, как он будет звучать при разбивании или волочении по другой поверхности, и какая у него масса и плавучесть. Эта система намного более гибкая по сравнению с любой системой, основанной только на текстурах
- Материалы могут взаимодействовать с объектами или NPC. Например, такие материалы как грязь или снег заставляют машины скользить, терять управление
Сетевой код в Source
- Проверен временем и игроками со всего мира
- Поддержка игры по локальной сети и через сеть Интернет
- Анализ прогноза для интерполяции нарушений работы сети
- Оптимизация для соединений 56кб/с с их большими потерями пакетов и высокой задержкой
Продвинутые персонажи
- Детализованные и правдоподобные персонажи
- Реалистичные глаза
- Фокусируются на игроке/объекте, а не просто параллельно направлены (в никуда)
- Правильное строение глаза, для реалистичного отражения
Физика
- Мир с более реалистичным взаимодействием
- Звуки и графические эффекты взаимосвязаны с физикой (событиями)
- Персонажи под управлением ИИ адекватно взаимодействуют с физически смоделированными объектами
- Верёвки/кабели, механизмы, расчёт сопротивляемости материалов, моделирование физики тряпичной куклы
- Может задаваться уровнем в зависимости от его конфигурации
- Движения анимируются костями
- Настраиваемые пользователем физические процессы
- Транспорт
- Занос и скольжение колёс
- Реалистичная подвеска с пружинами на каждом колесе
- Реалистичный уклон во время разгона/торможения и поворотов
- Индивидуально настраиваемые параметры — мощность(л.с), передача, максимальная скорость, скорость перемещения, материал шин, сцепление шин с поверхностью, упругость/гашение (демпфирование) вибрация пружины и т. д.
- Одновременно несколько игроков в транспорте в сетевом режиме
- Поддержка воздушной подушки для лёгкой симуляции
Продвинутый ИИ
-
позволяет контролировать ИИ в редакторе уровней Hammer
- Усложнённая навигация: персонажи, умеющие бегать, летать, прыгать, приседать, карабкаться по ступенькам и лестницам и зарываться под землю
- ИИ реагирует на окружающую среду, используя зрение, слух, обоняние определяет статус друг/враг других сущностей
- В бою ИИ, использующий Battle AI, применяет отряды для группового реагирования — когда действовать заранее, отступать, вести огонь под прикрытием и т. д.
Звуковая система
- 7.1, 5.1 системы объёмного звука, поддержка системы из 4-ёх колонок
- Высококачественный пространственный 3D звук
- Пользовательская обработка плагинами DSP
- Автоматическая DSP обработка, основанная на окружающей геометрии декомпрессия
- 16-bit 44KHz, стереозвук со всеми функциями
- MP3 декомпрессия (требуется лицензия Miles)
- Поддержка потокового аудио на любой волне
- Склейка wav-файлов в реальном времени
- Готовые эффекты Допплера для кодированных звуков
- Готовые эффекты, отражающие дистанцию для кодированных звуков
Пользовательский интерфейс
- Браузер серверов — показывает все активные игровые сервера и позволяет игроку выбрать, на каком из них играть. Игроки могут фильтровать и сортировать списки серверов для ускорения отображения и выбора сервера.
- Friends instant messenger — (На стадии разработки) позволяет игрокам общаться с одним или несколькими друзьями в и вне игры, а также вступать приглашать друзей в игру. Не стоит больше беспокоиться, попадёте ли вы на один сервер, вы легко можете воспользоваться данной функцией. Кнопка Друзья была удалена из игрового меню и перешла в Steam Community в игре ⇧ Shift + Tab ⇆ .
- VGUI — собственный графический пользовательский интерфейс компании Valve, имитирующий большинство элементов управления Windows, но отображаемый средствами движка Source для внутри- и внеигрового отображения UI. Некоторые особенности:
- Динамичное внутриигровое отображение HUD
- Различные виджеты/контроллеры (кнопки, отображение в виде древа, html-контроль и т. д.)
- Поддержка тем и пользовательской визуализации
- Независимость платформы
- Локализация текста (поддержка кодировки Юникод)
Программирование
- Весь код написан на C/C++ с использованием Visual Studio .NET 2003. Лёгкое и быстрое создание новых сущностей из существующих базовых.
- Встроенная система мониторинга производительности
- Система измерения производительности графики, встроенная в движок
- Модульный дизайн кода (через DLL библиотеки) позволяет заменять компоненты кода для лёгкой модернизации или замены
- DX9 шейдеры записаны на языке HLSL.
- Система VScript позволяет использовать на картах внешние языки программирования, такие как Squirrel и Lua, для создания более сложных систем (во всех играх начиная с
)
- Отражения cubemap также поддерживают анизотропную фильтрацию (во всех играх начиная с