Оружие Игрока.Разбираемся(Автор : Heming)


 

Оружие Игрока
By SeriousHeming..
 

Статья предусматривает то, что вы умеете создавать директории для модов, а также что у вас имеется Visual C++ 6.0 он полностью настроен на работу с SDK. Также данная статья предусматривает, что Вы разобрались с редактированием классов Serious Sam: TSE. ©

Ну что-ж статья посвящена следующему:
  • Научиться изменять положение оружия от первого лица.
  • Научиться изменять поворот оружия от первого лица.
  • Научиться изменять урон оружия в игре.
Результаты (уже привык писать по традиции : D) :
 
Ak-47 посередине
PS:Калаш(работа -JD- )
Здесь калаш "играет" в роли Томмигана
Полный размер :
http://st-games.ucoz.net/Heming/SDK_Screen_3-weapon_ak-.jpg

 


PS:MP5 mini(работа VITEK )
Здесь MP5 "играют" в роли пистолетов
Полный размер :
http://st-games.ucoz.net/Heming/Screen_4-SDK-MP5_Mini-.jpg

 

Так же мы можем заменить обычный ножик...

Или сделать по хитроманчески : D

PS:[Dark Dagger Model](работа $оучаснеG http://www.serioussite.ru/load/dark_dagger_model/13-1-0-677)
Полный размер :
http://st-games.ucoz.net/Heming/SDK_Screen_5-SG_Knife-.jpg


Что нам для этого потребуется?
  • EntitiesMP/PlayerWeapons.es
  • EntitiesMP/WeaponsPositions.h
  • EntitiesMP/CannonBall.es
  • EntitiesMP/Flame.es
  • EntitiesMP/Projectile.es
Только и всего.
Итак, приступим, как бэ.

Начнем с простого - научимся изменять наклон оружия от первого лица :
 
 

Сейчас мы заходим в вашу workspace - Sources и ищем там файл EntitiesMP/Header Files/Common Headers/weaponspositions.h

Видим параметры:

 
wpn_fH // меняет наклон оружия вправо-влево.
wpn_fP // меняет наклон оружия вверх - вниз.
wpn_fB // меняет наклоняет оружие против часовой стрелки.
wpn_fX // Перемещает оружие влево - вправо.
wpn_fY // Перемещает оружие вверх - вниз
wpn_fZ // Перемещает оружие вперед-назад.


Например, мы хотим сделать повернутый нож. Но как мы найдем его в списке? Данные по оружию вы можете взять либо отсюда, либо из файла HUD.cpp.
Итак:

   Оружие:                                Значение:
   WEAPON_NONE,                              //  [0]
   WEAPON_KNIFE,                             //  [1]
   WEAPON_COLT,                              //  [2]
   WEAPON_DOUBLECOLT,                  //  [3]
   WEAPON_SINGLESHOTGUN,            //  [4]
   WEAPON_DOUBLESHOTGUN,           // [5]
   WEAPON_TOMMYGUN,                    //  [6]
   WEAPON_MINIGUN,                        //  [7]
   WEAPON_ROCKETLAUNCHER,         //  [8]
   WEAPON_GRENADELAUNCHER,       //  [9]
   WEAPON_CHAINSAW,                     // [10]
   WEAPON_FLAMER,                        // [11]
   WEAPON_LASER,                          // [12]
   WEAPON_SNIPER                         // [13]
   WEAPON_IRONCANNON,               // [14]

И, далее вставляйте свои значения.Удачи!

Далее мы хотим научится..
Научиться изменять урон оружия в игре.

Для этого нам потребуется:
  • EntitiesMP/CannonBall.es
  • EntitiesMP/Flame.es
  • EntitiesMP/Projectile.es
  • EntitiesMP/PlayerWeapons.es
Начнем с начала - с ножа.
Регулируем урон ножа
 
Где регулируется урон от ножа?Естесственно, в файле PlayerWeapons.es.
Итак, находим строку
// ***************** SWING KNIFE *****************

Далее, ищем там же строку:
    m_moWeapon.PlayAnim(m_iAnim, 0);
    if (CutWithKnife(0, 0, 3.0f, 2.0f, 0.5f, ((GetSP()->sp_bCooperative) ? 100.0f : 50.0f))) { // Урон от ножа
      autowait(m_fAnimWaitTime);
    } else if (TRUE) {
      autowait(m_fAnimWaitTime/2);
      CutWithKnife(0, 0, 3.0f, 2.0f, 0.5f, ((GetSP()->sp_bCooperative) ? 100.0f : 50.0f)); // Также урон от ножа
      autowait(m_fAnimWaitTime/2);
    }

Изменяйте значения 100 и 50. И вы узнаете, насколько нож может быть серьёзен.Только не сделайте Parse error 3.0 :D
 
Регулируем урон кольтов.
 
Итак, находим строку:

// ***************** FIRE COLT *****************

Далее, ищем строку:
    FireOneBullet(wpn_fFX[WEAPON_COLT], wpn_fFY[WEAPON_COLT], 500.0f,
      ((GetSP()->sp_bCooperative) ? 10.0f : 20.0f)); // Измените параметры 10 и 20 на ваше значение и радуйтесь
 
 
Регулируем урон дробовика.
 
Итак, находим строку:

// ***************** FIRE SINGLESHOTGUN *****************

Далее, ищем там же:

 500.0f, 10.0f, 14, afSingleShotgunPellets, 0.2f, 0.03f); // значение 10 - искомое.

Вот так все просто.

Редактировать урон двустволки и снайперки будет вашим "домашним заданием", а сейчас мы зациклимся немного на других оружиях. Например, таких как, например, огнемет, или скажем, рокетница.
Ранее мы регулировали мощность пули, теперь же мы регулируем мощность "видимых" частиц.

Начнем с рокетницы.
 
Регулируем урон рокетницы.

Player Weapons уже нам не понадобится, так как там хранится код, чем и как будет стрелять рокетница. Сейчас мы будем изменять урон от рокетницы и поэтому мы обратимся к файлу Projectile.es.

Ищем строки:
 
/************************************************************
 *              PLAYER ROCKET / GRENADE                     *
 ************************************************************/



О, здесь можно изменить множество интересных параметров в рокете. Рассмотрим, чтож..
void PlayerRocket(void) {
  // set appearance
  InitAsModel();
  SetPhysicsFlags(EPF_PROJECTILE_FLYING);
  SetCollisionFlags(ECF_PROJECTILE_SOLID);
  SetModel(MODEL_ROCKET); /* Выбирает используемую модель. В нашем случае она находится в папке с рокетницей */
  SetModelMainTexture(TEXTURE_ROCKET); /* Выбирает используемую текстуру. В нашем случае она находится также в папке с рокетницей */
  // start moving
  LaunchAsPropelledProjectile(FLOAT3D(0.0f, 0.0f, -30.0f), (CMovableEntity*)(CEntity*)m_penLauncher);
  SetDesiredRotation(ANGLE3D(0, 0, 0)); /* Cторона, в которую полетит рокета на игрока. Тут никаких отклонений от игрока */
  // play the flying sound
  m_soEffect.Set3DParameters(20.0f, 2.0f, 1.0f, 1.0f);
  PlaySound(m_soEffect, SOUND_FLYING, SOF_3D|SOF_LOOP);
  m_fFlyTime = 30.0f;
  if( GetSP()->sp_bCooperative)
  {
    m_fDamageAmount = 600.0f; // Повреждение на цель (Ps:600.0f - я поменял параметр)
    m_fRangeDamageAmount = 100.0f; // Повреждение в округе ( Скажем, рокетджамп отнимает 50 хп)
  }
  else
  {
    m_fDamageAmount = 500.0f;
    m_fRangeDamageAmount = 100.0f;
  }
  m_fDamageHotSpotRange = 4.0f; // Насколько далеко будет взрыв( m_fRangeDamageAmount = 100.0f;)
  m_fDamageFallOffRange = 8.0f;
  m_fSoundRange = 50.0f; // Максимальное расстояние звука от чего-либо
  m_bExplode = TRUE; // Взрывается при прикосновении чего либо?
  m_bLightSource = TRUE; // Имеет свет вокруг себя?
  m_bCanHitHimself = TRUE; // Может подбить сам себя и взорваться?
  m_bCanBeDestroyed = TRUE; // Снаряд может быть уничтожен?
  m_fWaitAfterDeath = 1.125f;
  m_tmExpandBox = 0.1f;
  m_tmInvisibility = 0.05f; // Шкала невидимости
  SetHealth(50.0f); // Здоровье (m_bCanBeDestroyed)
  m_pmtMove = PMT_FLYING; /* Projectile move type - Может просто лететь, как рокета, может рикошетить, как граната (PMT_SLIDING),  и так далее..
Виды бывают:
PMT_GUIDED
PMT_GUIDED_FAST
PMT_FLYING
PMT_SLIDING
PMT_FLYING_REBOUNDING
PMT_GUIDED_SLIDING */

По тем же параметрам вы сможете изменить и другие виды Projectile.
Вот и все.
Далее у нас идут 2 интересных вида, которые вы не сможете обнаружить в файле projectile.es.
Это Cannonball и Flame. Кстати, я так и не пойму, почему их не включили туда. Намного проще было бы сделать стреляющего ядрами биомеханоида..
 
Регулируем урон пушки SBC.

Мы хотим изменить урон ядра. Заходим в CannonBall.es и ищем строку:

#define IRON_DAMAGE_MIN
 
Видим рядом:

#define IRON_DAMAGE_MIN 400.0f // здесь указано минимальное повреждение от ядра
#define IRON_DAMAGE_MAX 750.0f // а здесь максимальное
 
Ничего трудного нет.
 
Регулируем урон огнемета, а точнее огня.

Что-ж, изменяем урон огня.
Итак, используя файл Flame.es ищем строки :

#define DAMAGE_AMMOUNT 30.0f

Ну, изменяем значение, и радуемся :D
 

 



Комментарии   

№ 10  |  06.03.2014  |  +1  
Где можна найти workspace?
Ответ Цитата

№ 9  |  09.04.2011  |  0  
Отлично! :)
Ответ Цитата

№ 8  |  04.04.2011  |  0  
Классная статья, но мне она не к чему :( X_X
Хотя на 5+ идёт
Ответ Цитата

№ 7  |  15.03.2011  |  0  
Соучасник, исправил ссылку.
Ответ Цитата

№ 6  |  15.03.2011  |  0  
Отличная статья COOL
Ответ Цитата

№ 5  |  15.03.2011  |  0  
Хорошая статья, молодец, только ссылку на кинжал нужно бы поправить ^_^

P.S. Там кстати на рукояти красными японскими иероглифами написано "Silent Hill" :D

Ответ Цитата

№ 4  |  13.03.2011  |  -2  
Стреляющиго ядрами биомеханойда можно найти в SVSE30!
Только я досих пор не пойму как так сделали?!
Ответ Цитата

№ 3  |  12.03.2011  |  0  
кулл
Ответ Цитата

№ 2  |  12.03.2011  |  0  
:)
Ответ Цитата

№ 1  |  12.03.2011  |  0  
О! В этом я еще не разбирался! Очень хорошо описал.
Очень интересный материал.
Молодец, модостроитель! :)
Ответ Цитата

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

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

Гость

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

Информация

Прочее

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

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

Голосование

Какая на ваш взгляд самая удачливая часть из Indie-Series?
1. Serious Sam: Double D (XXL)
2. Serious Sam: The Random Encounter
3. Serious Sam: Kamikaze Attack!
4. Serious Sam: The Greek Encounter

Статистика



На сайте: 9
Гостей: 8
Пользователей: 1
MentalVader