This article's documentation is for anything that uses the Source engine. Click here for more information.
This article relates to the game "Alien Swarm". Click here for more information.

Обзор кода Alien Swarm

Материал из Valve Developer Community
Перейти к: навигация, поиск

English (en)Русский (ru)
Править
Note.pngПримечание:Смотрите Создание мода на Swarm SDK для инструкций по компиляции исходного кода Alien Swarm и настройке Visual Studio.

Классы Alien Swarm

Это обзор основного числа C++ классов в Alien Swarm. Большинство файлов исходного кода Alien Swarm начинаются с asw_. Название класса начинается на CASW_ для серверных классов и C_ASW_ для классов клиента.

CASW_Player
Это класс игрока Alien Swarm. В отличие от многих игр движка Source, игрок в Alien Swarm это невидимая сущность-командующий. Она не двигается. Если игрок контролирует солдата, то вызывается метод GetMarine(), который возвращает солдата под управлением игрока.
CASW_Marine
Эта сущность и является солдатом, который бегает по уровням и убивает пришельцев. Наследуется от CAI_BaseNPC класса. Когда солдат "населен" это значит, что он находится под прямым контролем CASW_Player. Когда солдат находится под прямым контролем, его AI отключается, он становится предсказуемой сущностью и управляется вводом игрока.
Полезные методы:
GetCommander() - возвращает CASW_Player который контролирует солдата.
GetMarineResource() - возвращает ассоциированный CASW_Marine_Resource.
GetASWWeapon( nSlot ) - возвращает оружие, экипированное в указанном слоте (где слотом может являться ASW_INVENTORY_SLOT_PRIMARY, ASW_INVENTORY_SLOT_SECONDARY или ASW_INVENTORY_SLOT_EXTRA).
GetMarineProfile() - возвращает профиль для этого солдата.
IsInhabited() - возвращает true если солдата контролирует игрок, false если он находится по контролем AI.
CASW_Marine_Resource
Этот класс содержит некоторые сетевые данные насчет каждого солдата (похожие на ресурсы игрока в других играх движка Source). Он разный для всех солдат в игре. Ресурс солдата существует ещё перед тем, как солдат выбран в брифинге (перед тем как создана сущность asw_marine). Ресурс солдата также остается после смерти солдата и удаления его сущности.
Полезные методы:
GetMarineEntity() - если есть хоть один существующий солдат для этого ресурса, будет возвращен он.
IsInhabited() - возвращает true если солдат под управлением игрока, false если под контролем AI.
GetCommander() - возвращает CASW_Player владеющего этим солдатом.
GetProfile() - возвращает профиль для этого солдата.
CASW_Marine_Profile
Этот класс представляет собой статичные данные относительно каждого персонажа в игре. Предоставляет доступ к таким профилям как Sarge, Jæger, Wildcat и другим. Из этого класса вы можете получить их имя, портрет, умения.
CASW_Game_Resource
Содержит массив ресурсов солдат, целей и других игровых состояниях. Вы можете получить экземпляр класса через глобальную функцию ASWGameResource().
Используйте GetMaxMarineResources() и GetMarineResource(i) чтобы пройтись по всем ресурсам солдат. Если вы хотите пройтись по солдатам, можете использовать GetMarineEntity() для каждого ресурса солдата.
Используйте ASW_MAX_OBJECTIVES и GetObjective(i) чтобы пройтись по каждой цели.
CAlienSwarm
Игровый правила для Alien Swarm. Управляет всеми состояниями игры, выбирает солдат, снаряжение, создает солдат, завершает миссию, подключает игроков и прочее. Вы можете получить доступ к экземпляру класса через ASWGameRules().
Полезные методы:
GetSkillLevel() - возвращает 1, 2, 3 или 4 (легко, нормально, сложно, безумие, соответственно)
GetGameState() - возвращает текущее состояние игры. Смотрите ASW_GameState enum для возможных состояний.
StartMission() - вызывается когда все игроки выбрали их солдат и лидер нажал кнопку "Начать Миссию".
MissionComplete( bool bSuccess ) - вызывается при завершении миссии.
CASW_Weapon
Это базовый класс оружия для всех оружий в Alien Swarm.
CASW_WeaponInfo
Содержит статичные данные, ассоциированные с каждым типом оружия, прочитанную из скриптов оружия в swarm/scripts.
CASW_Objective
Это базовый класс для каждой цели. Цели получают события из CASW_Mission_Manager и помечают себя как выполненные/невыполненные и потенциально завершают миссию.
Полезные методы:
IsObjectiveComplete()
IsObjectiveHidden()
GetObjectiveProgress()
CASW_Alien
Это базовый класс для всех пришельцев в Alien Swarm (кроме CASW_Buzzer и CASW_Grub).
CASW_Egg
Это яйцо пришельцев, которое плодит паразитов.
CASW_Door
Этот класс используется для дверей. Двери могут самостоятельно открываться, быть запаянными, получать повреждения и падать. Имеют ассоциированный CASW_Door_Area переключатель для переключения авто-открытия и известия о том, что солдат в пределах зоны сварки.
CASW_Button_Area
Этот переключатель представляет собой интерактивную панель-кнопку. Может быть заблокирована и игроку придется выполнить мини-игру с проводами чтобы открыть ее.
CASW_Computer_Area
Похожа на CASW_Button_Are, но для компьютера, обычно используется для Цели "Скачать". Если заблокирована, начнется мини-игра "взломай тумблер".
CASW_Marine_Skills
Этот класс возвращает основанные на умении значения для каждого солдата в игре. Может быть использована улучшения наносимого урона, скорости передвижения и прочего. У каждого солдата свои умения, основанные на его профиле и количестве очков умений, которое он может иметь. Количество очков умений, которое солдат может иметь, устанавливается для игроков через CASW_Game_Resource.
CASW_Spawner
Эта сущность используется для создания пришельцев на уровне. Устанавливается левел-дизайнером и имеет много полей ввода и вводов для контроля над частотой спавна, максимального количества пришельцев, анимацию появления для пришельца.
CASW_Campaign_Save
Играя в Alien Swarm через главное меню, игра всегда находится в режиме кампании. Это значит имеется активный объект CASW_Campaign_Save, который содержит информацию о текущей кампании в которую вы играете, какие миссии были завершены, как много попыток было у каждой миссии и какие солдаты были выбраны у игроков в прошлый раз (также количество очков умений каждого солдата, если вы играете со специальными очками умений).
Вы можете получить сохранение текущей игры через: ASWGameRules()->GetCampaignSave().
CASW_Campaign_Info
Описывает данные для кампании. Каждая кампания имеет название, текстуры и массив Campaign_Mission_t, который описывает каждую миссию и как они взаимодействуют друг с другом.
Полезные методы:
GetNumMissions()
GetMission(i)
CASW_Melee_System
Этот класс осуществляет работу с "предсказуемыми" рукопашными атаками (их анимация, события анимации и движение управляемое анимацией предсказуемы и синхронизированы между клиентом и сервером, как и обычное передвижение игрока). Класс CASW_Melee_Attack описывает каждую анимацию атаки, ее повреждение, зону действия и возможность комбинирования с другой атакой.

Другие интересные файлы

asw_shareddefs.cpp/.h
Содержит различные определения, collision-группы, классификации и прочее для Alien Swarm.
clientmode_asw.cpp/.h
Присутствует на клиенте и получает вызовы функций при инициализации уровня, его освобождении и обновление кадров.
asw_playeranimstate.cpp/.h
Отвечает за анимацию солдата. Исходя из типа перемещения сущности, углов и событий анимации решается, какую анимацию проиграть.
asw_marine_gamemovement.cpp/.h
Отвечает за команды перемещения и передвижение солдата.
asw_input.cpp, asw_in_main.cpp, asw_in_mouse.cpp
Эти файлы читают ввод с клавиатуры/мыши и превращают его в CUserCmd которая управляет солдатом, прицелом и стрельбой. Они также отвечают за вертикальное автоприцеливание на стороне клиента и представление позиции мыши в мировую координату.

Подробнее

  • Присоединяйтесь к hlcoders: mailing list и IRC channel
  • По вопросам относительно специфики кода Alien Swarm, вы можете обратиться сюда: [email protected].