Добавление нового вида противника в SS: TSE 1.07


В этой статье мы добавим новый вид биомеханоида со своим типом атаки, текстурой и снярядом.

Начало работы


Откроем файл 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;
 }

На этом добавление нового вида противника завершено.



Комментарии   

[Материал]  |  № 23  |  25.11.2018  |  0  
и правда как эти файлы .es получить
Ответ Цитата

[Материал]  |  № 22  |  09.07.2013  |  +1  
А где брать эти файлы .es?
Ответ Цитата

[Материал]  |  № 20  |  27.02.2012  |  +3  
petr_kustov раз ты такой умный, выложи ка пару новых монстриков на сайт :З Сделанных за короткое время
Ответ Цитата

[Материал]  |  № 18  |  05.10.2011  |  -1  
Я и без статьи добавлял, все это можно сделать без статьи просто по образцу, но 5 поставлю потому что статья хорошая для новичков =) :D
Ответ Цитата

[Материал]  |  № 19  |  05.10.2011  |  +6  
Только не надо тут понтов.. <_<
Ответ Цитата

[Материал]  |  № 16  |  12.07.2011  |  +4  
ЧЕРТ! Ты крут!! откуда взял? сам сделал?! :D
За такое плюс пологается?
Ответ Цитата

[Материал]  |  № 17  |  20.07.2011  |  +3  
Вообще, написал сам.
Ответ Цитата

[Материал]  |  № 14  |  26.06.2011  |  +3  
Шикарная статья! Помнится, я когда-то, хотел об этом написать, но как то руки не доходили, а ты описал лучше некуда)
Молодец.
Единственное..Синий текст на темном фоне вообще не видно.. Юзай более светлый оттенок.
Ответ Цитата

[Материал]  |  № 15  |  27.06.2011  |  +1  
Большое спасибо!)
Насчет синего текста, я что-то не могу поменять.. Может, пора менять браузер
Ответ Цитата

[Материал]  |  № 11  |  17.06.2011  |  0  
Кстати где находиться:

// render particles
void RenderParticles(void) {
switch (m_prtType) {

Найти немогу! :(
Ответ Цитата

[Материал]  |  № 12  |  17.06.2011  |  +1  
нажми комбинацию Ctrl+F, введи в строку белую одну сточку слов и он найдёт, не забуть нажать Enter, чтобы он нашёл :)
Ответ Цитата

[Материал]  |  № 13  |  17.06.2011  |  0  
Уууу! Спасиб! :D
Ответ Цитата

[Материал]  |  № 7  |  16.06.2011  |  0  
Слушай, а как это делать надо, обязательно в новом моде или как-то по другому, я попробовать сделать хочу :)
Кстати для какой версии?
Ответ Цитата

[Материал]  |  № 9  |  16.06.2011  |  0  
Примерно для обоих.
Ответ Цитата

[Материал]  |  № 10  |  16.06.2011  |  -1  
кстати в XBOX моде там не Kleer Spawner, а Gizmo Spawner, и ещё после смерти этого биомеха из него куча лягушек этих повыскакивало :D
Ответ Цитата

[Материал]  |  № 6  |  16.06.2011  |  0  
Круто! %)
Ответ Цитата

[Материал]  |  № 5  |  15.06.2011  |  0  
Круто
Ответ Цитата

[Материал]  |  № 3  |  15.06.2011  |  +1  
Friend!!! %)
Тоесть биомех будет за тя?! :)
МЕЧТАЮ О БОТЕ КОТОРЫЙ ЗА ТЕБЯ!!! %) %) %)
Ответ Цитата

[Материал]  |  № 4  |  15.06.2011  |  +1  
Я создал такого монстра, который стреляет жизнями и броней. Только пока положение не могу настроить...
Ответ Цитата

[Материал]  |  № 8  |  16.06.2011  |  +1  
:D
Ответ Цитата

[Материал]  |  № 21  |  13.06.2012  |  +2  
Короче говоря, он ими срет :D
Ответ Цитата

[Материал]  |  № 2  |  15.06.2011  |  +1  
Статья - класс ^_^
Ответ Цитата

[Материал]  |  № 1  |  15.06.2011  |  0  
Ухты! Шикаааааааааааарно! :)
Ответ Цитата

Оставьте комментарий

Мини-профиль

Гость

Вы в группе: Гости
Ваш IP: 18.116.51.117

Сейчас обсуждают

maximmoz2454
AzuNeko5
SeriousRoman27
BaBuinel41
Boffy1662
Boffy61
BaBuinel5
AzuNeko6
Ar2R-devil-PiNKy18
Ar2R-devil-PiNKy17

МЕМЫ

НОВЫЙ
Serious_Stepan 3 1

Файлы

-SR-
406 28 2

Tenshi
6660 1797 73

Tenshi
2156 582 2

Mechanixx
3541 1009 19

DUKE_NUKEM
2372 1037 23

Категории раздела

Croteam [4]
Материалы по студии разработчика игр CroTeam.
Интервью с разработчиками [9]
Интервью с разработчиками, а также их издателями.
Serious Sam 1 [9]
Статьи о Serious Sam 1
Serious Sam 2 [6]
Статьи о Serious Sam 2
Serious Sam HD [4]
Статьи о HD-серии, ремейков классических версий Сэма.
Serious Sam 3: BFE [10]
Статьи о Serious Sam 3: BFE
Уроки по Serious Editor 1 [60]
Уроки по Serious Editor 2 [3]
Самое серьёзное редактирование, на русском!
Уроки по Serious Editor 3 [40]
Уроки по работе с редактором.
Serious Engine [6]
Описание возможностей всех движков компании Croteam
Разное [26]
Всё что не подошло не под одну из вышеупомянутых категорий.
Serious Sam: Revolution [1]
Материалы по SS: Revolution, серьёзном обновлении классических Крутых Сэмов.
Serious Sam 1.05/1.07 SDK [10]
SDK - набор исходников для Serious Sam: The Second Encounter 1.05/1.07.

Видео

Serious Lяп. Тридцать восьмой выпуск
165 5.0

Выживание в Затопленном Городе: Бесконечные перезапуски! - Aftermath (Serious Sam Map) №5
135 5.0

Обновлённый "Нож брутальным хватом"
210 5.0

Serious Sam Xbox - улучшенная классика
243 5.0

Взрывная поездка в прошлое - Aftermath (Serious Sam Map) №4
161 5.0

Статистика



На сайте: 11
Гостей: 10
Пользователей: 1
JustRick