В этой статье мы добавим новый вид биомеханоида со своим типом атаки, текстурой и снярядом.
Начало работы
Откроем файл Walker.es. На 10 строчке обнаружим перечисление WalkerChar. Эти типы противника должны быть вам знакомы – Soldier стреляет лазером, а Sergeant – ракетами. По аналогии добавьте сюда еще один тип, WLC_GENERAL.
enum WalkerChar { 0 WLC_SOLDIER "Soldier", // soldier 1 WLC_SERGEANT "Sergeant", // sergeant 2 WLC_GENERAL "General", // general }
Добавление ресурсов
Чтобы новый вид биомеханоида отличался текстурой и звуками, перейдите в components и объявите там новые ресурсы.
// ********** GENERAL ********** 80 sound SOUND_GENERAL_FIRE "Models\\Weapons\\DoubleShotgun\\Sounds\\Fire.wav", 81 texture TEXTURE_WALKER_GENERAL "Models\\Enemies\\Walker\\Walker03.tex", 82 texture TEXTURE_WALKER_GENERAL_GUN "Models\\Enemies\\Walker\\GeneralRocketLauncher.tex",
Создайте эти текстуры для нового биомеханоида и скопируйте в указанную папку.
Закэшируйте ресурсы через условный оператор в функции Precache. Таким образом, ресурсы загрузятся в память при запуске уровня, предотвратив зависание во время игры.
if (m_EwcChar==WLC_GENERAL) { PrecacheSound(SOUND_GENERAL_FIRE); PrecacheTexture(TEXTURE_WALKER_GENERAL); PrecacheTexture(TEXTURE_WALKER_GENGUN); }
Добавление сообщения в NETRICSA
Для корректного отображения сообщения в NETRICSA перейдите к функции GetComputerMessageName и по аналогии добавьте в нее текстовый файл.
Остается одна проблема – модель (model) в таких текстовых файлах указывается не в Walker.es, и даже не в проекте EntitiesMP, а в GameMP. Перейдите в GameMP, CompModels.cpp, затем на строку 248. Вы увидите код, который отвечает за рендеринг модели в нетриксе, который можно написать по аналогии.
Примечание: это плохое решение от Croteam, но с ним придется смириться. Если Вы делаете самостоятельную EntitiesMP.dll для использования вне модификаций, в текстовом файле описания можно использовать текстуру, а не модель.
Добавление атаки
Введение в Projectile
С помощью класса Projectile происходит запуск практически любого снаряда в игре, будь то боло клира, ракета биомеханоида, бомба безголового подрывника и многих других. Заметим, что пушечные ядра и лазерные лучи к этим типам не относятся. Вы могли знать о полном списке этих снарядов, используя Eruptor в Serious Editor. В данной статье добавление нового вида Projectile не рассматривается, но Вы с легкостью можете создать свой тип снаряда, создав его по аналогии с ракетой – PRT_WALKER_ROCKET.
Определение процедуры атаки
Вернемся в Walker.es. В разделе procedures находится процедура Fire(EVoid). В ней определяется поведение биомеханоида при стрельбе. В ней Вы обнаружите, что виды атак разделяются по типу WalkerChar, который мы добавляли ранее. Используйте условный оператор, чтобы не нарушить логику других видов биомеханоидов.
if (m_EwcChar==WLC_GENERAL) { StartModelAnim(WALKER_ANIM_FIRERIGHT, AOF_LOOPING); ShootProjectile(PRT_LARVA_PLASMA, FIRE_RIGHT_ARM*m_fSize, ANGLE3D(0, 0, 0)); PlaySound(m_soFire1, SOUND_GENERAL_FIRE, SOF_3D); if (GetSP()->sp_gdGameDifficulty<=CSessionProperties::GD_EASY) { m_fLockOnEnemyTime = 1.0f; } else { m_fLockOnEnemyTime = 0.5f; } autocall CEnemyBase::LockOnEnemy() EReturn; StartModelAnim(WALKER_ANIM_FIRELEFT, AOF_LOOPING); ShootProjectile(PRT_LARVA_PLASMA, FIRE_LEFT_ARM*m_fSize, ANGLE3D(0, 0, 0)); PlaySound(m_soFire2, SOUND_GENERAL_FIRE, SOF_3D); }
В данном примере тип Projectile был заменен на PRT_LARVA_PLASMA. Таким образом, новый биомеханоид будет стрелять другим видом снаряда. Не забудьте закэшировать снаряд в функции Precache.
Настройка параметров
Перейдите в процедуру Main. Здесь вы можете найти все основные параметры биомеханоида.
Расшифровка | |
m_fMaxHealth | Максимальное здоровье |
SetHealth(…) | Установка текущего здоровья |
m_fBlowUpAmount | Урон, который нужно нанести, чтобы биомеханоид развалился на куски. Биомеханоид никогда не разлетается на куски, поэтому установлено очень большое значение – 1е+006. |
m_fBodyParts | Количество кусков |
m_iScore | Значение очков, которое получит игрок за победу над противником (смотрите очки в таблице лидеров и NETRICSA) |
m_fThreatDistance | Дистанция, в пределах которой биомеханоид начинает стрелять |
m_fWalkSpeed | Скорость ходьбы (при патрулировании) |
m_fAttackRunSpeed | Скорость бега (противник замечен) |
m_fCloseRunSpeed | Скорость бега в ближнем бою |
m_fDamageWounded | Сколько урона нужно нанести, чтобы проигралась анимация урона (WOUND). У биомеханоида нет такой анимации, поэтому установлено очень большое значение – 1е+006. |
Наконец, установим параметры.
if (m_EwcChar==WLC_GENERAL) { SetHealth(400.0f); m_fMaxHealth = 400.0f; m_fSize = 1.0f; SetModelMainTexture(TEXTURE_WALKER_GENERAL); AddAttachment(WALKER_ATTACHMENT_ROCKETLAUNCHER_LT, MODEL_ROCKETLAUNCHER, TEXTURE_WALKER_GENERAL_GUN); AddAttachment(WALKER_ATTACHMENT_ROCKETLAUNCHER_RT, MODEL_ROCKETLAUNCHER, TEXTURE_WALKER_GENERAL_GUN); GetModelObject()->StretchModel(FLOAT3D(1,1,1)); ModelChangeNotify(); CModelObject *pmoRight = &GetModelObject()->GetAttachmentModel(WALKER_ATTACHMENT_ROCKETLAUNCHER_RT)->amo_moModelObject; pmoRight->StretchModel(FLOAT3D(-1,1,1)); m_fBlowUpAmount = 1E10f; m_iScore = 1000; m_fThreatDistance = 15; }
На этом добавление нового вида противника завершено.
Комментарии
За такое плюс пологается?
Молодец.
Единственное..Синий текст на темном фоне вообще не видно.. Юзай более светлый оттенок.
Насчет синего текста, я что-то не могу поменять.. Может, пора менять браузер
// render particles
void RenderParticles(void) {
switch (m_prtType) {
Найти немогу!
Кстати для какой версии?
Тоесть биомех будет за тя?!
МЕЧТАЮ О БОТЕ КОТОРЫЙ ЗА ТЕБЯ!!! %)