mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-12-25 07:14:50 +01:00
461 lines
24 KiB
C++
461 lines
24 KiB
C++
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of version 2 of the GNU General Public License as published by
|
|
the Free Software Foundation
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
|
|
802
|
|
%{
|
|
#include "StdH.h"
|
|
#include "Models/Items/ItemHolder/ItemHolder.h"
|
|
#include "Models/Weapons/Colt/ColtItem.h"
|
|
#include "Models/Weapons/SingleShotgun/SingleShotgunItem.h"
|
|
#include "Models/Weapons/DoubleShotgun/DoubleShotgunItem.h"
|
|
#include "Models/Weapons/TommyGun/TommyGunItem.h"
|
|
#include "Models/Weapons/MiniGun/MiniGunItem.h"
|
|
#include "Models/Weapons/GrenadeLauncher/GrenadeLauncherItem.h"
|
|
#include "Models/Weapons/RocketLauncher/RocketLauncherItem.h"
|
|
#include "ModelsMP/Weapons/Sniper/SniperItem.h"
|
|
#include "ModelsMP/Weapons/Sniper/Body.h"
|
|
#include "ModelsMP/Weapons/Flamer/FlamerItem.h"
|
|
#include "ModelsMP/Weapons/Chainsaw/ChainsawItem.h"
|
|
#include "ModelsMP/Weapons/Chainsaw/BladeForPlayer.h"
|
|
#include "Models/Weapons/Laser/LaserItem.h"
|
|
#include "Models/Weapons/Cannon/Cannon.h"
|
|
|
|
#include "EntitiesMP/PlayerWeapons.h"
|
|
|
|
%}
|
|
|
|
uses "EntitiesMP/Item";
|
|
|
|
// weapon type
|
|
enum WeaponItemType {
|
|
1 WIT_COLT "Colt",
|
|
2 WIT_SINGLESHOTGUN "Single shotgun",
|
|
3 WIT_DOUBLESHOTGUN "Double shotgun",
|
|
4 WIT_TOMMYGUN "Tommygun",
|
|
5 WIT_MINIGUN "Minigun",
|
|
6 WIT_ROCKETLAUNCHER "Rocket launcher",
|
|
7 WIT_GRENADELAUNCHER "Grenade launcher",
|
|
8 WIT_SNIPER "Sniper",
|
|
9 WIT_FLAMER "Flamer",
|
|
10 WIT_LASER "Laser",
|
|
11 WIT_CHAINSAW "Chainsaw",
|
|
12 WIT_CANNON "Cannon",
|
|
13 WIT_GHOSTBUSTER "obsolete",
|
|
};
|
|
|
|
// event for sending through receive item
|
|
event EWeaponItem {
|
|
INDEX iWeapon, // weapon collected
|
|
INDEX iAmmo, // weapon ammo (used only for leaving weapons, -1 for deafult ammount)
|
|
BOOL bDropped, // for dropped weapons (can be picked even if weapons stay)
|
|
};
|
|
|
|
%{
|
|
extern void CPlayerWeapons_Precache(ULONG ulAvailable);
|
|
%}
|
|
|
|
|
|
class CWeaponItem : CItem {
|
|
name "Weapon Item";
|
|
thumbnail "Thumbnails\\WeaponItem.tbn";
|
|
|
|
properties:
|
|
1 enum WeaponItemType m_EwitType "Type" 'Y' = WIT_COLT, // weapon
|
|
|
|
components:
|
|
0 class CLASS_BASE "Classes\\Item.ecl",
|
|
|
|
// ************** COLT **************
|
|
30 model MODEL_COLT "Models\\Weapons\\Colt\\ColtItem.mdl",
|
|
31 model MODEL_COLTCOCK "Models\\Weapons\\Colt\\ColtCock.mdl",
|
|
32 model MODEL_COLTMAIN "Models\\Weapons\\Colt\\ColtMain.mdl",
|
|
33 model MODEL_COLTBULLETS "Models\\Weapons\\Colt\\ColtBullets.mdl",
|
|
34 texture TEXTURE_COLTMAIN "Models\\Weapons\\Colt\\ColtMain.tex",
|
|
35 texture TEXTURE_COLTCOCK "Models\\Weapons\\Colt\\ColtCock.tex",
|
|
36 texture TEXTURE_COLTBULLETS "Models\\Weapons\\Colt\\ColtBullets.tex",
|
|
|
|
// ************** SINGLE SHOTGUN ************
|
|
40 model MODEL_SINGLESHOTGUN "Models\\Weapons\\SingleShotgun\\SingleShotgunItem.mdl",
|
|
41 model MODEL_SS_SLIDER "Models\\Weapons\\SingleShotgun\\Slider.mdl",
|
|
42 model MODEL_SS_HANDLE "Models\\Weapons\\SingleShotgun\\Handle.mdl",
|
|
43 model MODEL_SS_BARRELS "Models\\Weapons\\SingleShotgun\\Barrels.mdl",
|
|
44 texture TEXTURE_SS_HANDLE "Models\\Weapons\\SingleShotgun\\Handle.tex",
|
|
45 texture TEXTURE_SS_BARRELS "Models\\Weapons\\SingleShotgun\\Barrels.tex",
|
|
|
|
// ************** DOUBLE SHOTGUN **************
|
|
50 model MODEL_DOUBLESHOTGUN "Models\\Weapons\\DoubleShotgun\\DoubleShotgunItem.mdl",
|
|
51 model MODEL_DS_HANDLE "Models\\Weapons\\DoubleShotgun\\Dshotgunhandle.mdl",
|
|
52 model MODEL_DS_BARRELS "Models\\Weapons\\DoubleShotgun\\Dshotgunbarrels.mdl",
|
|
54 model MODEL_DS_SWITCH "Models\\Weapons\\DoubleShotgun\\Switch.mdl",
|
|
56 texture TEXTURE_DS_HANDLE "Models\\Weapons\\DoubleShotgun\\Handle.tex",
|
|
57 texture TEXTURE_DS_BARRELS "Models\\Weapons\\DoubleShotgun\\Barrels.tex",
|
|
58 texture TEXTURE_DS_SWITCH "Models\\Weapons\\DoubleShotgun\\Switch.tex",
|
|
|
|
// ************** TOMMYGUN **************
|
|
70 model MODEL_TOMMYGUN "Models\\Weapons\\TommyGun\\TommyGunItem.mdl",
|
|
71 model MODEL_TG_BODY "Models\\Weapons\\TommyGun\\Body.mdl",
|
|
72 model MODEL_TG_SLIDER "Models\\Weapons\\TommyGun\\Slider.mdl",
|
|
73 texture TEXTURE_TG_BODY "Models\\Weapons\\TommyGun\\Body.tex",
|
|
|
|
// ************** MINIGUN **************
|
|
80 model MODEL_MINIGUN "Models\\Weapons\\MiniGun\\MiniGunItem.mdl",
|
|
81 model MODEL_MG_BARRELS "Models\\Weapons\\MiniGun\\Barrels.mdl",
|
|
82 model MODEL_MG_BODY "Models\\Weapons\\MiniGun\\Body.mdl",
|
|
83 model MODEL_MG_ENGINE "Models\\Weapons\\MiniGun\\Engine.mdl",
|
|
84 texture TEXTURE_MG_BODY "Models\\Weapons\\MiniGun\\Body.tex",
|
|
99 texture TEXTURE_MG_BARRELS "Models\\Weapons\\MiniGun\\Barrels.tex",
|
|
|
|
// ************** ROCKET LAUNCHER **************
|
|
90 model MODEL_ROCKETLAUNCHER "Models\\Weapons\\RocketLauncher\\RocketLauncherItem.mdl",
|
|
91 model MODEL_RL_BODY "Models\\Weapons\\RocketLauncher\\Body.mdl",
|
|
92 texture TEXTURE_RL_BODY "Models\\Weapons\\RocketLauncher\\Body.tex",
|
|
93 model MODEL_RL_ROTATINGPART "Models\\Weapons\\RocketLauncher\\RotatingPart.mdl",
|
|
94 texture TEXTURE_RL_ROTATINGPART "Models\\Weapons\\RocketLauncher\\RotatingPart.tex",
|
|
95 model MODEL_RL_ROCKET "Models\\Weapons\\RocketLauncher\\Projectile\\Rocket.mdl",
|
|
96 texture TEXTURE_RL_ROCKET "Models\\Weapons\\RocketLauncher\\Projectile\\Rocket.tex",
|
|
|
|
// ************** GRENADE LAUNCHER **************
|
|
100 model MODEL_GRENADELAUNCHER "Models\\Weapons\\GrenadeLauncher\\GrenadeLauncherItem.mdl",
|
|
101 model MODEL_GL_BODY "Models\\Weapons\\GrenadeLauncher\\Body.mdl",
|
|
102 model MODEL_GL_MOVINGPART "Models\\Weapons\\GrenadeLauncher\\MovingPipe.mdl",
|
|
103 model MODEL_GL_GRENADE "Models\\Weapons\\GrenadeLauncher\\GrenadeBack.mdl",
|
|
104 texture TEXTURE_GL_BODY "Models\\Weapons\\GrenadeLauncher\\Body.tex",
|
|
105 texture TEXTURE_GL_MOVINGPART "Models\\Weapons\\GrenadeLauncher\\MovingPipe.tex",
|
|
|
|
// ************** SNIPER **************
|
|
110 model MODEL_SNIPER "ModelsMP\\Weapons\\Sniper\\Sniper.mdl",
|
|
111 model MODEL_SNIPER_BODY "ModelsMP\\Weapons\\Sniper\\Body.mdl",
|
|
112 texture TEXTURE_SNIPER_BODY "ModelsMP\\Weapons\\Sniper\\Body.tex",
|
|
|
|
// ************** FLAMER **************
|
|
130 model MODEL_FLAMER "ModelsMP\\Weapons\\Flamer\\FlamerItem.mdl",
|
|
131 model MODEL_FL_BODY "ModelsMP\\Weapons\\Flamer\\Body.mdl",
|
|
132 model MODEL_FL_RESERVOIR "ModelsMP\\Weapons\\Flamer\\FuelReservoir.mdl",
|
|
133 model MODEL_FL_FLAME "ModelsMP\\Weapons\\Flamer\\Flame.mdl",
|
|
134 texture TEXTURE_FL_BODY "ModelsMP\\Weapons\\Flamer\\Body.tex",
|
|
135 texture TEXTURE_FL_FLAME "ModelsMP\\Effects\\Flame\\Flame.tex",
|
|
136 texture TEXTURE_FL_FUELRESERVOIR "ModelsMP\\Weapons\\Flamer\\FuelReservoir.tex",
|
|
|
|
// ************** LASER **************
|
|
140 model MODEL_LASER "Models\\Weapons\\Laser\\LaserItem.mdl",
|
|
141 model MODEL_LS_BODY "Models\\Weapons\\Laser\\Body.mdl",
|
|
142 model MODEL_LS_BARREL "Models\\Weapons\\Laser\\Barrel.mdl",
|
|
143 texture TEXTURE_LS_BODY "Models\\Weapons\\Laser\\Body.tex",
|
|
144 texture TEXTURE_LS_BARREL "Models\\Weapons\\Laser\\Barrel.tex",
|
|
|
|
// ************** CHAINSAW **************
|
|
150 model MODEL_CHAINSAW "ModelsMP\\Weapons\\Chainsaw\\ChainsawItem.mdl",
|
|
151 model MODEL_CS_BODY "ModelsMP\\Weapons\\Chainsaw\\Body.mdl",
|
|
152 model MODEL_CS_BLADE "ModelsMP\\Weapons\\Chainsaw\\Blade.mdl",
|
|
153 model MODEL_CS_TEETH "ModelsMP\\Weapons\\Chainsaw\\Teeth.mdl",
|
|
154 texture TEXTURE_CS_BODY "ModelsMP\\Weapons\\Chainsaw\\Body.tex",
|
|
155 texture TEXTURE_CS_BLADE "ModelsMP\\Weapons\\Chainsaw\\Blade.tex",
|
|
156 texture TEXTURE_CS_TEETH "ModelsMP\\Weapons\\Chainsaw\\Teeth.tex",
|
|
|
|
// ************** CANNON **************
|
|
170 model MODEL_CANNON "Models\\Weapons\\Cannon\\Cannon.mdl",
|
|
171 model MODEL_CN_BODY "Models\\Weapons\\Cannon\\Body.mdl",
|
|
173 texture TEXTURE_CANNON "Models\\Weapons\\Cannon\\Body.tex",
|
|
|
|
// ************** FLARE FOR EFFECT **************
|
|
190 texture TEXTURE_FLARE "Models\\Items\\Flares\\Flare.tex",
|
|
191 model MODEL_FLARE "Models\\Items\\Flares\\Flare.mdl",
|
|
|
|
// ************** REFLECTIONS **************
|
|
200 texture TEX_REFL_BWRIPLES01 "Models\\ReflectionTextures\\BWRiples01.tex",
|
|
201 texture TEX_REFL_BWRIPLES02 "Models\\ReflectionTextures\\BWRiples02.tex",
|
|
202 texture TEX_REFL_LIGHTMETAL01 "Models\\ReflectionTextures\\LightMetal01.tex",
|
|
203 texture TEX_REFL_LIGHTBLUEMETAL01 "Models\\ReflectionTextures\\LightBlueMetal01.tex",
|
|
204 texture TEX_REFL_DARKMETAL "Models\\ReflectionTextures\\DarkMetal.tex",
|
|
205 texture TEX_REFL_PURPLE01 "Models\\ReflectionTextures\\Purple01.tex",
|
|
|
|
// ************** SPECULAR **************
|
|
210 texture TEX_SPEC_WEAK "Models\\SpecularTextures\\Weak.tex",
|
|
211 texture TEX_SPEC_MEDIUM "Models\\SpecularTextures\\Medium.tex",
|
|
212 texture TEX_SPEC_STRONG "Models\\SpecularTextures\\Strong.tex",
|
|
|
|
// ************** SOUNDS **************
|
|
213 sound SOUND_PICK "Sounds\\Items\\Weapon.wav",
|
|
|
|
functions:
|
|
void Precache(void) {
|
|
PrecacheSound(SOUND_PICK);
|
|
switch (m_EwitType) {
|
|
case WIT_COLT: CPlayerWeapons_Precache(1<<(INDEX(WEAPON_COLT )-1)); break;
|
|
case WIT_SINGLESHOTGUN: CPlayerWeapons_Precache(1<<(INDEX(WEAPON_SINGLESHOTGUN )-1)); break;
|
|
case WIT_DOUBLESHOTGUN: CPlayerWeapons_Precache(1<<(INDEX(WEAPON_DOUBLESHOTGUN )-1)); break;
|
|
case WIT_TOMMYGUN: CPlayerWeapons_Precache(1<<(INDEX(WEAPON_TOMMYGUN )-1)); break;
|
|
case WIT_MINIGUN: CPlayerWeapons_Precache(1<<(INDEX(WEAPON_MINIGUN )-1)); break;
|
|
case WIT_ROCKETLAUNCHER: CPlayerWeapons_Precache(1<<(INDEX(WEAPON_ROCKETLAUNCHER )-1)); break;
|
|
case WIT_GRENADELAUNCHER: CPlayerWeapons_Precache(1<<(INDEX(WEAPON_GRENADELAUNCHER)-1)); break;
|
|
case WIT_SNIPER: CPlayerWeapons_Precache(1<<(INDEX(WEAPON_SNIPER )-1)); break;
|
|
case WIT_FLAMER: CPlayerWeapons_Precache(1<<(INDEX(WEAPON_FLAMER )-1)); break;
|
|
case WIT_CHAINSAW: CPlayerWeapons_Precache(1<<(INDEX(WEAPON_CHAINSAW )-1)); break;
|
|
case WIT_LASER: CPlayerWeapons_Precache(1<<(INDEX(WEAPON_LASER )-1)); break;
|
|
case WIT_CANNON: CPlayerWeapons_Precache(1<<(INDEX(WEAPON_IRONCANNON )-1)); break;
|
|
}
|
|
}
|
|
/* Fill in entity statistics - for AI purposes only */
|
|
BOOL FillEntityStatistics(EntityStats *pes)
|
|
{
|
|
pes->es_strName = m_strDescription;
|
|
pes->es_ctCount = 1;
|
|
pes->es_ctAmmount = 1;
|
|
pes->es_fValue = 1;
|
|
pes->es_iScore = 0;//m_iScore;
|
|
return TRUE;
|
|
}
|
|
|
|
// render particles
|
|
void RenderParticles(void) {
|
|
// no particles when not existing or in DM modes
|
|
if (GetRenderType()!=CEntity::RT_MODEL || GetSP()->sp_gmGameMode>CSessionProperties::GM_COOPERATIVE
|
|
|| !ShowItemParticles())
|
|
{
|
|
return;
|
|
}
|
|
switch (m_EwitType) {
|
|
case WIT_COLT: Particles_Atomic(this, 1.5f, 1.5f, PT_STAR07, 12); break;
|
|
case WIT_SINGLESHOTGUN: Particles_Atomic(this, 1.5f, 1.5f, PT_STAR07, 12); break;
|
|
case WIT_DOUBLESHOTGUN: Particles_Atomic(this, 1.5f, 1.5f, PT_STAR07, 12); break;
|
|
case WIT_TOMMYGUN: Particles_Atomic(this, 1.5f, 1.5f, PT_STAR07, 12); break;
|
|
case WIT_MINIGUN: Particles_Atomic(this, 1.5f, 1.5f, PT_STAR07, 12); break;
|
|
case WIT_ROCKETLAUNCHER: Particles_Atomic(this, 1.5f, 1.5f, PT_STAR07, 12); break;
|
|
case WIT_GRENADELAUNCHER: Particles_Atomic(this, 1.5f, 1.5f, PT_STAR07, 12); break;
|
|
case WIT_SNIPER: Particles_Atomic(this, 1.5f, 1.5f, PT_STAR07, 12); break;
|
|
case WIT_FLAMER: Particles_Atomic(this, 1.5f, 1.5f, PT_STAR07, 12); break;
|
|
case WIT_CHAINSAW: Particles_Atomic(this, 1.5f, 1.5f, PT_STAR07, 12); break;
|
|
case WIT_LASER: Particles_Atomic(this, 1.5f, 1.5f, PT_STAR07, 12); break;
|
|
case WIT_GHOSTBUSTER: Particles_Atomic(this, 1.5f, 1.5f, PT_STAR07, 12); break;
|
|
case WIT_CANNON: Particles_Atomic(this, 1.5f, 1.5f, PT_STAR07, 12); break;
|
|
}
|
|
}
|
|
|
|
|
|
// set weapon properties depending on weapon type
|
|
void SetProperties(void)
|
|
{
|
|
BOOL bDM = FALSE;//m_bRespawn || m_bDropped;
|
|
FLOAT3D vDMStretch = FLOAT3D( 2.0f, 2.0f, 2.0f);
|
|
|
|
switch (m_EwitType) {
|
|
// *********** COLT ***********
|
|
case WIT_COLT:
|
|
m_fRespawnTime = (m_fCustomRespawnTime>0) ? m_fCustomRespawnTime : 10.0f;
|
|
m_strDescription.PrintF("Colt");
|
|
AddItem(MODEL_COLT, TEXTURE_COLTMAIN, 0, 0, 0);
|
|
AddItemAttachment(COLTITEM_ATTACHMENT_BULLETS, MODEL_COLTBULLETS, TEXTURE_COLTBULLETS, TEX_REFL_LIGHTBLUEMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(COLTITEM_ATTACHMENT_COCK, MODEL_COLTCOCK, TEXTURE_COLTCOCK, TEX_REFL_LIGHTBLUEMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(COLTITEM_ATTACHMENT_BODY, MODEL_COLTMAIN, TEXTURE_COLTMAIN, TEX_REFL_LIGHTBLUEMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
StretchItem( bDM ? vDMStretch : FLOAT3D(4.5f, 4.5f, 4.5f));
|
|
break;
|
|
|
|
// *********** SINGLE SHOTGUN ***********
|
|
case WIT_SINGLESHOTGUN:
|
|
m_fRespawnTime = (m_fCustomRespawnTime>0) ? m_fCustomRespawnTime : 10.0f;
|
|
m_strDescription.PrintF("Single Shotgun");
|
|
AddItem(MODEL_SINGLESHOTGUN, TEXTURE_SS_HANDLE, 0, 0, 0);
|
|
AddItemAttachment(SINGLESHOTGUNITEM_ATTACHMENT_BARRELS, MODEL_SS_BARRELS, TEXTURE_SS_BARRELS, TEX_REFL_DARKMETAL, TEX_SPEC_WEAK, 0);
|
|
AddItemAttachment(SINGLESHOTGUNITEM_ATTACHMENT_HANDLE, MODEL_SS_HANDLE, TEXTURE_SS_HANDLE, TEX_REFL_DARKMETAL, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(SINGLESHOTGUNITEM_ATTACHMENT_SLIDER, MODEL_SS_SLIDER, TEXTURE_SS_BARRELS, TEX_REFL_DARKMETAL, TEX_SPEC_MEDIUM, 0);
|
|
StretchItem( bDM ? vDMStretch : (FLOAT3D(3.5f, 3.5f, 3.5f)) );
|
|
break;
|
|
|
|
// *********** DOUBLE SHOTGUN ***********
|
|
case WIT_DOUBLESHOTGUN:
|
|
m_fRespawnTime = (m_fCustomRespawnTime>0) ? m_fCustomRespawnTime : 10.0f;
|
|
m_strDescription.PrintF("Double Shotgun");
|
|
AddItem(MODEL_DOUBLESHOTGUN, TEXTURE_DS_HANDLE, 0, 0, 0);
|
|
AddItemAttachment(DOUBLESHOTGUNITEM_ATTACHMENT_BARRELS, MODEL_DS_BARRELS, TEXTURE_DS_BARRELS, TEX_REFL_BWRIPLES01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(DOUBLESHOTGUNITEM_ATTACHMENT_HANDLE, MODEL_DS_HANDLE, TEXTURE_DS_HANDLE, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(DOUBLESHOTGUNITEM_ATTACHMENT_SWITCH, MODEL_DS_SWITCH, TEXTURE_DS_SWITCH, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
StretchItem( bDM ? vDMStretch : (FLOAT3D(3.0f, 3.0f, 3.0f)));
|
|
break;
|
|
|
|
|
|
// *********** TOMMYGUN ***********
|
|
case WIT_TOMMYGUN:
|
|
m_fRespawnTime = (m_fCustomRespawnTime>0) ? m_fCustomRespawnTime : 10.0f;
|
|
m_strDescription.PrintF("Tommygun");
|
|
AddItem(MODEL_TOMMYGUN, TEXTURE_TG_BODY, 0, 0, 0);
|
|
AddItemAttachment(TOMMYGUNITEM_ATTACHMENT_BODY, MODEL_TG_BODY, TEXTURE_TG_BODY, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(TOMMYGUNITEM_ATTACHMENT_SLIDER, MODEL_TG_SLIDER, TEXTURE_TG_BODY, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
StretchItem( bDM ? vDMStretch : (FLOAT3D(3.0f, 3.0f, 3.0f)));
|
|
break;
|
|
|
|
// *********** MINIGUN ***********
|
|
case WIT_MINIGUN:
|
|
m_fRespawnTime = (m_fCustomRespawnTime>0) ? m_fCustomRespawnTime : 10.0f;
|
|
m_strDescription.PrintF("Minigun");
|
|
AddItem(MODEL_MINIGUN, TEXTURE_MG_BODY, 0, 0, 0);
|
|
AddItemAttachment(MINIGUNITEM_ATTACHMENT_BARRELS, MODEL_MG_BARRELS, TEXTURE_MG_BARRELS, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(MINIGUNITEM_ATTACHMENT_BODY, MODEL_MG_BODY, TEXTURE_MG_BODY, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(MINIGUNITEM_ATTACHMENT_ENGINE, MODEL_MG_ENGINE, TEXTURE_MG_BARRELS, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
StretchItem( bDM ? vDMStretch : (FLOAT3D(1.75f, 1.75f, 1.75f)));
|
|
break;
|
|
|
|
// *********** ROCKET LAUNCHER ***********
|
|
case WIT_ROCKETLAUNCHER:
|
|
m_fRespawnTime = (m_fCustomRespawnTime>0) ? m_fCustomRespawnTime : 10.0f;
|
|
m_strDescription.PrintF("Rocket launcher");
|
|
AddItem(MODEL_ROCKETLAUNCHER, TEXTURE_RL_BODY, 0, 0, 0);
|
|
AddItemAttachment(ROCKETLAUNCHERITEM_ATTACHMENT_BODY, MODEL_RL_BODY, TEXTURE_RL_BODY, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(ROCKETLAUNCHERITEM_ATTACHMENT_ROTATINGPART, MODEL_RL_ROTATINGPART, TEXTURE_RL_ROTATINGPART, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(ROCKETLAUNCHERITEM_ATTACHMENT_ROCKET1, MODEL_RL_ROCKET, TEXTURE_RL_ROCKET, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(ROCKETLAUNCHERITEM_ATTACHMENT_ROCKET2, MODEL_RL_ROCKET, TEXTURE_RL_ROCKET, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(ROCKETLAUNCHERITEM_ATTACHMENT_ROCKET3, MODEL_RL_ROCKET, TEXTURE_RL_ROCKET, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(ROCKETLAUNCHERITEM_ATTACHMENT_ROCKET4, MODEL_RL_ROCKET, TEXTURE_RL_ROCKET, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
StretchItem( bDM ? vDMStretch : (FLOAT3D(2.5f, 2.5f, 2.5f)));
|
|
break;
|
|
|
|
// *********** GRENADE LAUNCHER ***********
|
|
case WIT_GRENADELAUNCHER:
|
|
m_fRespawnTime = (m_fCustomRespawnTime>0) ? m_fCustomRespawnTime : 10.0f;
|
|
m_strDescription.PrintF("Grenade launcher");
|
|
AddItem(MODEL_GRENADELAUNCHER, TEXTURE_GL_BODY, 0, 0, 0);
|
|
AddItemAttachment(GRENADELAUNCHERITEM_ATTACHMENT_BODY, MODEL_GL_BODY, TEXTURE_GL_BODY, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(GRENADELAUNCHERITEM_ATTACHMENT_MOVING_PART, MODEL_GL_MOVINGPART, TEXTURE_GL_MOVINGPART, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(GRENADELAUNCHERITEM_ATTACHMENT_GRENADE, MODEL_GL_GRENADE, TEXTURE_GL_MOVINGPART, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
StretchItem( bDM ? vDMStretch : (FLOAT3D(2.5f, 2.5f, 2.5f)));
|
|
break;
|
|
|
|
// *********** SNIPER ***********
|
|
case WIT_SNIPER:
|
|
m_fRespawnTime = (m_fCustomRespawnTime>0) ? m_fCustomRespawnTime : 10.0f;
|
|
m_strDescription.PrintF("Sniper");
|
|
AddItem(MODEL_SNIPER, TEXTURE_SNIPER_BODY, 0, 0, 0);
|
|
AddItemAttachment(SNIPERITEM_ATTACHMENT_BODY, MODEL_SNIPER_BODY, TEXTURE_SNIPER_BODY, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
SetItemAttachmentAnim(SNIPERITEM_ATTACHMENT_BODY, BODY_ANIM_FORITEM1);
|
|
StretchItem( bDM ? vDMStretch : (FLOAT3D(3.0f, 3.0f, 3.0f)));
|
|
break;
|
|
|
|
// *********** FLAMER ***********
|
|
case WIT_FLAMER:
|
|
m_fRespawnTime = (m_fCustomRespawnTime>0) ? m_fCustomRespawnTime : 10.0f;
|
|
m_strDescription.PrintF("Flamer");
|
|
AddItem(MODEL_FLAMER, TEXTURE_FL_BODY, 0, 0, 0);
|
|
AddItemAttachment(FLAMERITEM_ATTACHMENT_BODY, MODEL_FL_BODY,
|
|
TEXTURE_FL_BODY, TEX_REFL_BWRIPLES02, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(FLAMERITEM_ATTACHMENT_FUEL, MODEL_FL_RESERVOIR,
|
|
TEXTURE_FL_FUELRESERVOIR, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(FLAMERITEM_ATTACHMENT_FLAME, MODEL_FL_FLAME,
|
|
TEXTURE_FL_FLAME, 0, 0, 0);
|
|
StretchItem( bDM ? vDMStretch : (FLOAT3D(2.5f, 2.5f, 2.5f)));
|
|
break;
|
|
|
|
// *********** CHAINSAW ***********
|
|
case WIT_CHAINSAW: {
|
|
m_fRespawnTime = (m_fCustomRespawnTime>0) ? m_fCustomRespawnTime : 10.0f;
|
|
m_strDescription.PrintF("Chainsaw");
|
|
AddItem(MODEL_CHAINSAW, TEXTURE_CS_BODY, 0, 0, 0);
|
|
AddItemAttachment(CHAINSAWITEM_ATTACHMENT_CHAINSAW, MODEL_CS_BODY, TEXTURE_CS_BODY, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(CHAINSAWITEM_ATTACHMENT_BLADE, MODEL_CS_BLADE, TEXTURE_CS_BLADE, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
CModelObject *pmoMain, *pmo;
|
|
pmoMain = &(GetModelObject()->GetAttachmentModel(ITEMHOLDER_ATTACHMENT_ITEM)->amo_moModelObject);
|
|
pmo = &(pmoMain->GetAttachmentModel(CHAINSAWITEM_ATTACHMENT_BLADE)->amo_moModelObject);
|
|
AddAttachmentToModel(this, *pmo, BLADEFORPLAYER_ATTACHMENT_TEETH, MODEL_CS_TEETH, TEXTURE_CS_TEETH, 0, 0, 0);
|
|
|
|
StretchItem( bDM ? vDMStretch : (FLOAT3D(2.0f, 2.0f, 2.0f)));
|
|
break; }
|
|
|
|
// *********** LASER ***********
|
|
case WIT_LASER:
|
|
m_fRespawnTime = (m_fCustomRespawnTime>0) ? m_fCustomRespawnTime : 10.0f;
|
|
m_strDescription.PrintF("Laser");
|
|
AddItem(MODEL_LASER, TEXTURE_LS_BODY, 0, 0, 0);
|
|
AddItemAttachment(LASERITEM_ATTACHMENT_BODY, MODEL_LS_BODY, TEXTURE_LS_BODY, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(LASERITEM_ATTACHMENT_LEFTUP, MODEL_LS_BARREL, TEXTURE_LS_BARREL, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(LASERITEM_ATTACHMENT_LEFTDOWN, MODEL_LS_BARREL, TEXTURE_LS_BARREL, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(LASERITEM_ATTACHMENT_RIGHTUP, MODEL_LS_BARREL, TEXTURE_LS_BARREL, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
AddItemAttachment(LASERITEM_ATTACHMENT_RIGHTDOWN, MODEL_LS_BARREL, TEXTURE_LS_BARREL, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
StretchItem( bDM ? vDMStretch : (FLOAT3D(2.5f, 2.5f, 2.5f)));
|
|
break;
|
|
|
|
// *********** CANNON ***********
|
|
case WIT_CANNON:
|
|
m_fRespawnTime = (m_fCustomRespawnTime>0) ? m_fCustomRespawnTime : 30.0f;
|
|
m_strDescription.PrintF("Cannon");
|
|
AddItem(MODEL_CANNON, TEXTURE_CANNON, 0, 0, 0);
|
|
AddItemAttachment(CANNON_ATTACHMENT_BODY, MODEL_CN_BODY, TEXTURE_CANNON, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
// AddItemAttachment(CANNON_ATTACHMENT_NUKEBOX, MODEL_CN_NUKEBOX, TEXTURE_CANNON, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
// AddItemAttachment(CANNON_ATTACHMENT_LIGHT, MODEL_CN_LIGHT, TEXTURE_CANNON, TEX_REFL_LIGHTMETAL01, TEX_SPEC_MEDIUM, 0);
|
|
StretchItem( bDM ? vDMStretch : (FLOAT3D(3.0f, 3.0f, 3.0f)));
|
|
break;
|
|
}
|
|
// add flare
|
|
AddFlare(MODEL_FLARE, TEXTURE_FLARE, FLOAT3D(0,0.6f,0), FLOAT3D(3,3,0.3f) );
|
|
};
|
|
|
|
procedures:
|
|
ItemCollected(EPass epass) : CItem::ItemCollected {
|
|
ASSERT(epass.penOther!=NULL);
|
|
|
|
// if weapons stays
|
|
if (GetSP()->sp_bWeaponsStay && !(m_bPickupOnce||m_bRespawn)) {
|
|
// if already picked by this player
|
|
BOOL bWasPicked = MarkPickedBy(epass.penOther);
|
|
if (bWasPicked) {
|
|
// don't pick again
|
|
return;
|
|
}
|
|
}
|
|
|
|
// send weapon to entity
|
|
EWeaponItem eWeapon;
|
|
eWeapon.iWeapon = m_EwitType;
|
|
eWeapon.iAmmo = -1; // use default ammo amount
|
|
eWeapon.bDropped = m_bDropped;
|
|
// if weapon is received
|
|
if (epass.penOther->ReceiveItem(eWeapon)) {
|
|
if(_pNetwork->IsPlayerLocal(epass.penOther)) {IFeel_PlayEffect("PU_Weapon");}
|
|
// play the pickup sound
|
|
m_soPick.Set3DParameters(50.0f, 1.0f, 1.0f, 1.0f);
|
|
PlaySound(m_soPick, SOUND_PICK, SOF_3D);
|
|
m_fPickSoundLen = GetSoundLength(SOUND_PICK);
|
|
if (!GetSP()->sp_bWeaponsStay || m_bDropped || (m_bPickupOnce||m_bRespawn)) {
|
|
jump CItem::ItemReceived();
|
|
}
|
|
}
|
|
return;
|
|
};
|
|
|
|
Main()
|
|
{
|
|
if ( m_EwitType==WIT_GHOSTBUSTER) {
|
|
m_EwitType=WIT_LASER;
|
|
}
|
|
|
|
Initialize(); // initialize base class
|
|
StartModelAnim(ITEMHOLDER_ANIM_BIGOSCILATION, AOF_LOOPING|AOF_NORESTART);
|
|
ForceCollisionBoxIndexChange(ITEMHOLDER_COLLISION_BOX_BIG);
|
|
SetProperties(); // set properties
|
|
|
|
if (!m_bDropped) {
|
|
jump CItem::ItemLoop();
|
|
} else if (TRUE) {
|
|
wait() {
|
|
on (EBegin) : {
|
|
SpawnReminder(this, m_fRespawnTime, 0);
|
|
call CItem::ItemLoop();
|
|
}
|
|
on (EReminder) : {
|
|
SendEvent(EEnd());
|
|
resume;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
};
|