This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
CnC_Renegade/Code/Combat/weaponmanager.cpp

745 lines
38 KiB
C++
Raw Permalink Normal View History

/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** 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, see <http://www.gnu.org/licenses/>.
*/
/***********************************************************************************************
*** Confidential - Westwood Studios ***
***********************************************************************************************
* *
* Project Name : Commando *
* *
* $Archive:: /Commando/Code/Combat/weaponmanager.cpp $*
* *
* $Author:: Byon_g $*
* *
* $Modtime:: 1/02/02 3:05p $*
* *
* $Revision:: 106 $*
* *
*---------------------------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#include "weaponmanager.h"
#include "weapons.h"
#include "debug.h"
#include "damage.h"
#include "combatchunkid.h"
#include "simpledefinitionfactory.h"
#include "persistfactory.h"
#include "assets.h"
#include "surfaceeffects.h"
/*
** Weapon Type Names
*/
char *WeaponStyleNames[ NUM_WEAPON_HOLD_STYLES ] = {
"C4", // WEAPON_HOLD_STYLE_C4 = 0,
"---", // WEAPON_HOLD_STYLE_NOT_USED,
"Shoulder", // WEAPON_HOLD_STYLE_AT_SHOULDER, // 2
"Hip", // WEAPON_HOLD_STYLE_AT_HIP,
"Launcher", // WEAPON_HOLD_STYLE_LAUNCHER,
"Handgun", // WEAPON_HOLD_STYLE_HANDGUN,
"Beacon", // WEAPON_HOLD_STYLE_BEACON
"Empty Hands", // WEAPON_HOLD_STYLE_EMPTY_HANDS,
"At Chest", // WEAPON_HOLD_STYLE_AT_CHEST,
"Hands Down", // WEAPON_HOLD_STYLE_HANDS_DOWN,
};
/*
** WeaponDefinitionClass
*/
SimplePersistFactoryClass<WeaponDefinitionClass, CHUNKID_WEAPON_DEF> _WeaponDefPersistFactory;
DECLARE_DEFINITION_FACTORY(WeaponDefinitionClass, CLASSID_DEF_WEAPON, "Weapon") _WeaponDefDefFactory;
uint32 WeaponDefinitionClass::Get_Class_ID (void) const { return CLASSID_DEF_WEAPON; }
const PersistFactoryClass & WeaponDefinitionClass::Get_Factory (void) const { return _WeaponDefPersistFactory; }
WeaponDefinitionClass::WeaponDefinitionClass( void ) :
Style( 1 ),
SwitchTime( 0 ),
ReloadTime( 0 ),
KeyNumber( 0 ),
CanSnipe( false ),
CanReceiveGenericCnCAmmo( true ),
// LegacyFireSoundDefID( 0 ),
EjectPhysDefID( 0 ),
MuzzleFlashPhysDefID( 0 ),
Rating( 0.1f ),
FirstPersonOffset( 0,0,0 ),
RecoilImpulse( 0.0f ),
ReloadSoundDefID( 0 ),
EmptySoundDefID( 0 ),
PrimaryAmmoDefID( 0 ),
SecondaryAmmoDefID( 0 ),
ClipSize( 0 ),
RecoilTime( 0.1f ),
RecoilScale( 1.0f ),
AGiveWeaponsWeapon( false ),
MaxInventoryRounds( 100 ),
IconNameID( 0 ),
IconTextureUV( 0,0,0,0 ),
IconOffset( 0,0 )
{
#ifdef PARAM_EDITING_ON
int i;
// EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_INT, Style);
EnumParameterClass *param;
param = new EnumParameterClass( &Style );
param->Set_Name ( "Style" );
for ( i = 0; i <= WEAPON_HOLD_STYLE_HANDGUN; i++ ) {
param->Add_Value ( WeaponStyleNames[i], i );
}
param->Add_Value ( WeaponStyleNames[WEAPON_HOLD_STYLE_BEACON], WEAPON_HOLD_STYLE_BEACON );
GENERIC_EDITABLE_PARAM(WeaponDefinitionClass,param)
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_FILENAME, Model);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_FILENAME, IdleAnim);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_FILENAME, FireAnim);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_FILENAME, BackModel);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_FLOAT, SwitchTime);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_FLOAT, ReloadTime);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_FLOAT, KeyNumber);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_BOOL, CanSnipe);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_BOOL, CanReceiveGenericCnCAmmo);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_FLOAT, Rating);
PHYS_DEF_PARAM( WeaponDefinitionClass, EjectPhysDefID, "ProjectileDef" );
PHYS_DEF_PARAM( WeaponDefinitionClass, MuzzleFlashPhysDefID, "TimedDecorationPhysDef" );
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_FILENAME, FirstPersonModel );
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_VECTOR3, FirstPersonOffset );
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_FLOAT, RecoilImpulse);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_FILENAME, HUDIconTextureName );
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_SOUNDDEFINITIONID, ReloadSoundDefID);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_SOUNDDEFINITIONID, EmptySoundDefID);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_AMMOOBJDEFINITIONID, PrimaryAmmoDefID);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_AMMOOBJDEFINITIONID, SecondaryAmmoDefID);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_INT, ClipSize);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_INT, MaxInventoryRounds);
FLOAT_UNITS_PARAM( WeaponDefinitionClass, RecoilTime, 0.0f, 10.0f, "seconds" );
FLOAT_EDITABLE_PARAM( WeaponDefinitionClass, RecoilScale, 0.0f, 10.0f );
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_BOOL, AGiveWeaponsWeapon);
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_STRINGSDB_ID, IconNameID );
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_FILENAME, IconTextureName );
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_RECT, IconTextureUV );
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_VECTOR2, IconOffset );
EDITABLE_PARAM( WeaponDefinitionClass, ParameterClass::TYPE_STRING, HumanFiringAnimation);
#endif //PARAM_EDITING_ON
}
/*
**
*/
enum {
CHUNKID_WEAPON_DEF_VARIABLES = 1205091654,
CHUNKID_WEAPON_DEF_PARENT,
MICROCHUNKID_WEAPON_DEF_STYLE = 1,
MICROCHUNKID_WEAPON_DEF_MODEL,
MICROCHUNKID_WEAPON_DEF_IDLE_ANIM,
MICROCHUNKID_WEAPON_DEF_FIRE_ANIM,
MICROCHUNKID_WEAPON_DEF_BACK_MODEL,
MICROCHUNKID_WEAPON_DEF_XXXXX,
XXXMICROCHUNKID_WEAPON_DEF_RATE_OF_FIRE,
MICROCHUNKID_WEAPON_DEF_SWITCH_TIME,
MICROCHUNKID_WEAPON_DEF_RELOAD_TIME,
XXXMICROCHUNKID_WEAPON_DEF_HELP_ANGLE,
XXXMICROCHUNKID_WEAPON_DEF_MUZZLE_FLASH_MODEL,
XXXMICROCHUNKID_WEAPON_DEF_MUZZLE_FLASH_DURATION,
XXXMICROCHUNKID_WEAPON_DEF_EJECT_EMITTER,
XXXMICROCHUNKID_WEAPON_DEF_TILT,
XXXMICROCHUNKID_WEAPON_DEF_KEY_NUMBER,
MICROCHUNKID_WEAPON_DEF_CAN_SNIPE,
XXXMICROCHUNKID_WEAPON_DEF_SOUND_RADIUS,
LEGACY_MICROCHUNKID_WEAPON_DEF_FIRE_SOUND_DEFID,
MICROCHUNKID_WEAPON_DEF_EJECT_PHYS_DEF_ID,
MICROCHUNKID_WEAPON_DEF_MUZZLE_FLASH_PHYS_DEF_ID,
MICROCHUNKID_WEAPON_DEF_RATING,
MICROCHUNKID_WEAPON_DEF_FIRST_PERSON_MODEL,
MICROCHUNKID_WEAPON_DEF_FIRST_PERSON_OFFSET,
MICROCHUNKID_WEAPON_DEF_RECOIL_IMPULSE,
XXX_MICROCHUNKID_WEAPON_DEF_HUD_MODEL,
MICROCHUNKID_WEAPON_DEF_RELOAD_SOUND_DEFID,
MICROCHUNKID_WEAPON_DEF_PRIMARY_AMMO_DEF_ID,
MICROCHUNKID_WEAPON_DEF_SECONDARY_AMMO_DEF_ID,
MICROCHUNKID_WEAPON_DEF_CLIP_SIZE,
MICROCHUNKID_WEAPON_DEF_RECOIL_TIME,
MICROCHUNKID_WEAPON_DEF_RECOIL_SCALE,
MICROCHUNKID_WEAPON_DEF_A_GIVE_WEAPONS_WEAPON,
XXXMICROCHUNKID_WEAPON_DEF_FIRST_PERSON_TYPE,
MICROCHUNKID_WEAPON_DEF_HUD_ICON_TEXTURE_NAME,
MICROCHUNKID_WEAPON_DEF_MAX_INVENTORY_ROUNDS,
XXXMICROCHUNKID_WEAPON_DEF_FIRST_PERSON_TYPE_NAME,
MICROCHUNKID_WEAPON_DEF_KEY_NUMBER,
MICROCHUNKID_WEAPON_ICON_NAME_ID,
MICROCHUNKID_WEAPON_ICON_TEXTURE_NAME,
MICROCHUNKID_WEAPON_ICON_TEXTURE_UV,
MICROCHUNKID_WEAPON_ICON_OFFSET,
MICROCHUNKID_HUMAN_FIRING_ANIMATION,
MICROCHUNKID_WEAPON_DEF_EMPTY_SOUND_DEFID,
MICROCHUNKID_WEAPON_DEF_GENERIC_AMMO_OK
};
bool WeaponDefinitionClass::Save( ChunkSaveClass & csave )
{
csave.Begin_Chunk( CHUNKID_WEAPON_DEF_PARENT );
DefinitionClass::Save( csave );
csave.End_Chunk();
csave.Begin_Chunk( CHUNKID_WEAPON_DEF_VARIABLES );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_WEAPON_DEF_STYLE, Style );
WRITE_MICRO_CHUNK_WWSTRING( csave, MICROCHUNKID_WEAPON_DEF_MODEL, Model );
WRITE_MICRO_CHUNK_WWSTRING( csave, MICROCHUNKID_WEAPON_DEF_IDLE_ANIM, IdleAnim );
WRITE_MICRO_CHUNK_WWSTRING( csave, MICROCHUNKID_WEAPON_DEF_FIRE_ANIM, FireAnim );
WRITE_MICRO_CHUNK_WWSTRING( csave, MICROCHUNKID_WEAPON_DEF_BACK_MODEL, BackModel );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_WEAPON_DEF_SWITCH_TIME, SwitchTime );
WRITE_SAFE_MICRO_CHUNK( csave, MICROCHUNKID_WEAPON_DEF_RELOAD_TIME, ReloadTime, float );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_WEAPON_DEF_KEY_NUMBER, KeyNumber );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_WEAPON_DEF_CAN_SNIPE, CanSnipe );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_WEAPON_DEF_GENERIC_AMMO_OK, CanReceiveGenericCnCAmmo );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_WEAPON_DEF_EJECT_PHYS_DEF_ID, EjectPhysDefID );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_WEAPON_DEF_MUZZLE_FLASH_PHYS_DEF_ID, MuzzleFlashPhysDefID );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_WEAPON_DEF_RATING, Rating );
WRITE_MICRO_CHUNK_WWSTRING( csave, MICROCHUNKID_WEAPON_DEF_FIRST_PERSON_MODEL, FirstPersonModel );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_WEAPON_DEF_FIRST_PERSON_OFFSET, FirstPersonOffset );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_WEAPON_DEF_RECOIL_IMPULSE, RecoilImpulse );
WRITE_MICRO_CHUNK_WWSTRING( csave, MICROCHUNKID_WEAPON_DEF_HUD_ICON_TEXTURE_NAME, HUDIconTextureName );
WRITE_MICRO_CHUNK ( csave, MICROCHUNKID_WEAPON_DEF_RELOAD_SOUND_DEFID, ReloadSoundDefID );
WRITE_MICRO_CHUNK ( csave, MICROCHUNKID_WEAPON_DEF_EMPTY_SOUND_DEFID, EmptySoundDefID);
WRITE_MICRO_CHUNK ( csave, MICROCHUNKID_WEAPON_DEF_PRIMARY_AMMO_DEF_ID, PrimaryAmmoDefID );
WRITE_MICRO_CHUNK ( csave, MICROCHUNKID_WEAPON_DEF_SECONDARY_AMMO_DEF_ID, SecondaryAmmoDefID );
WRITE_SAFE_MICRO_CHUNK( csave, MICROCHUNKID_WEAPON_DEF_CLIP_SIZE, ClipSize, int );
WRITE_MICRO_CHUNK ( csave, MICROCHUNKID_WEAPON_DEF_RECOIL_TIME, RecoilTime );
WRITE_MICRO_CHUNK ( csave, MICROCHUNKID_WEAPON_DEF_RECOIL_SCALE, RecoilScale );
WRITE_MICRO_CHUNK ( csave, MICROCHUNKID_WEAPON_DEF_A_GIVE_WEAPONS_WEAPON, AGiveWeaponsWeapon );
WRITE_SAFE_MICRO_CHUNK( csave, MICROCHUNKID_WEAPON_DEF_MAX_INVENTORY_ROUNDS,MaxInventoryRounds, int );
WRITE_MICRO_CHUNK ( csave, MICROCHUNKID_WEAPON_ICON_NAME_ID, IconNameID );
WRITE_MICRO_CHUNK_WWSTRING( csave, MICROCHUNKID_WEAPON_ICON_TEXTURE_NAME, IconTextureName );
WRITE_MICRO_CHUNK ( csave, MICROCHUNKID_WEAPON_ICON_TEXTURE_UV, IconTextureUV );
WRITE_MICRO_CHUNK ( csave, MICROCHUNKID_WEAPON_ICON_OFFSET, IconOffset );
WRITE_MICRO_CHUNK_WWSTRING( csave, MICROCHUNKID_HUMAN_FIRING_ANIMATION, HumanFiringAnimation );
csave.End_Chunk();
return true;
}
bool WeaponDefinitionClass::Load( ChunkLoadClass &cload )
{
while (cload.Open_Chunk()) {
switch(cload.Cur_Chunk_ID()) {
case CHUNKID_WEAPON_DEF_PARENT:
DefinitionClass::Load( cload );
break;
case CHUNKID_WEAPON_DEF_VARIABLES:
while (cload.Open_Micro_Chunk()) {
switch(cload.Cur_Micro_Chunk_ID()) {
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_STYLE, Style );
READ_MICRO_CHUNK_WWSTRING( cload, MICROCHUNKID_WEAPON_DEF_MODEL, Model );
READ_MICRO_CHUNK_WWSTRING( cload, MICROCHUNKID_WEAPON_DEF_IDLE_ANIM, IdleAnim );
READ_MICRO_CHUNK_WWSTRING( cload, MICROCHUNKID_WEAPON_DEF_FIRE_ANIM, FireAnim );
READ_MICRO_CHUNK_WWSTRING( cload, MICROCHUNKID_WEAPON_DEF_BACK_MODEL, BackModel );
// READ_MICRO_CHUNK( cload, LEGACY_MICROCHUNKID_WEAPON_DEF_FIRE_SOUND_DEFID, LegacyFireSoundDefID );
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_SWITCH_TIME, SwitchTime );
READ_SAFE_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_RELOAD_TIME, ReloadTime, float);
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_KEY_NUMBER, KeyNumber );
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_CAN_SNIPE, CanSnipe );
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_GENERIC_AMMO_OK, CanReceiveGenericCnCAmmo );
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_EJECT_PHYS_DEF_ID, EjectPhysDefID );
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_MUZZLE_FLASH_PHYS_DEF_ID, MuzzleFlashPhysDefID );
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_RATING, Rating );
READ_MICRO_CHUNK_WWSTRING( cload, MICROCHUNKID_WEAPON_DEF_FIRST_PERSON_MODEL, FirstPersonModel );
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_FIRST_PERSON_OFFSET, FirstPersonOffset );
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_RECOIL_IMPULSE, RecoilImpulse );
READ_MICRO_CHUNK_WWSTRING( cload, MICROCHUNKID_WEAPON_DEF_HUD_ICON_TEXTURE_NAME, HUDIconTextureName );
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_RELOAD_SOUND_DEFID, ReloadSoundDefID );
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_EMPTY_SOUND_DEFID, EmptySoundDefID);
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_PRIMARY_AMMO_DEF_ID, PrimaryAmmoDefID );
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_SECONDARY_AMMO_DEF_ID, SecondaryAmmoDefID );
READ_SAFE_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_CLIP_SIZE, ClipSize, int );
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_RECOIL_TIME, RecoilTime );
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_RECOIL_SCALE, RecoilScale );
READ_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_A_GIVE_WEAPONS_WEAPON, AGiveWeaponsWeapon );
READ_SAFE_MICRO_CHUNK( cload, MICROCHUNKID_WEAPON_DEF_MAX_INVENTORY_ROUNDS,MaxInventoryRounds, int );
READ_MICRO_CHUNK ( cload, MICROCHUNKID_WEAPON_ICON_NAME_ID, IconNameID );
READ_MICRO_CHUNK_WWSTRING ( cload, MICROCHUNKID_WEAPON_ICON_TEXTURE_NAME, IconTextureName );
READ_MICRO_CHUNK ( cload, MICROCHUNKID_WEAPON_ICON_TEXTURE_UV, IconTextureUV );
READ_MICRO_CHUNK ( cload, MICROCHUNKID_WEAPON_ICON_OFFSET, IconOffset );
READ_MICRO_CHUNK_WWSTRING ( cload, MICROCHUNKID_HUMAN_FIRING_ANIMATION, HumanFiringAnimation );
default:
Debug_Say(( "Unrecognized WeaponDef Variable chunkID\n" ));
break;
}
cload.Close_Micro_Chunk();
}
break;
default:
Debug_Say(( "Unrecognized WeaponDef chunkID\n" ));
break;
}
cload.Close_Chunk();
}
return true;
}
/*
** AmmoDefinitionClass
*/
SimplePersistFactoryClass<AmmoDefinitionClass, CHUNKID_AMMO_DEF> _AmmoDefPersistFactory;
DECLARE_DEFINITION_FACTORY(AmmoDefinitionClass, CLASSID_DEF_AMMO, "Ammo") _AmmoDefDefFactory;
uint32 AmmoDefinitionClass::Get_Class_ID (void) const { return CLASSID_DEF_AMMO; }
const PersistFactoryClass & AmmoDefinitionClass::Get_Factory (void) const { return _AmmoDefPersistFactory; }
AmmoDefinitionClass::AmmoDefinitionClass( void ) :
Warhead( 0 ),
Damage( 1 ),
Range( 10 ),
EffectiveRange( 10 ),
Velocity( 1 ),
Gravity( 0 ),
Elasticity( 1.0f ),
RateOfFire( 1 ),
SprayAngle( 0 ),
SprayCount( 1 ),
AquireTime( 0 ),
BurstDelayTime( 0 ),
BurstMax( 0 ),
SoftPierceLimit( 0 ),
TurnRate( 0 ),
TimeActivated( false ),
TerrainActivated( false ),
IsTracking( false ),
// WeaponDefID( 0 ),
ExplosionDefID( 0 ),
RandomTrackingScale( 0 ),
DisplayLaser( false ),
ChargeTime( 0 ),
ContinuousSoundDefID( 0 ),
FireSoundDefID( 0 ),
MaxBounces( 0 ),
SprayBulletCost( 1 ),
AmmoType( AMMO_TYPE_NORMAL ),
BeaconDefID( 0 ),
C4TriggerTime1( 0 ),
C4TriggerTime2( 0 ),
C4TriggerTime3( 0 ),
C4TriggerRange1( 0 ),
C4TriggerRange2( 0 ),
C4TriggerRange3( 0 ),
C4TimingSound1ID( 0 ),
C4TimingSound2ID( 0 ),
C4TimingSound3ID( 0 ),
AliasedSpeed( 0 ),
HitterType( SurfaceEffectsManager::HITTER_TYPE_BULLET ),
BeamEnabled(false),
BeamColor(1,1,1),
BeamTime(0.3f),
BeamWidth(0.25f),
BeamEndCaps(true),
BeamSubdivisionEnabled(false),
BeamSubdivisionScale(1.0f),
BeamSubdivisionFrozen(false),
IconNameID( 0 ),
IconTextureUV( 0,0,0,0 ),
IconOffset( 0,0 ),
GrenadeSafetyTime( 0 )
{
#ifdef PARAM_EDITING_ON
int i;
EnumParameterClass *param;
param = new EnumParameterClass( &AmmoType );
param->Set_Name ( "Ammo Type" );
param->Add_Value ( "Normal", AmmoDefinitionClass::AMMO_TYPE_NORMAL );
param->Add_Value ( "Remote C4", AmmoDefinitionClass::AMMO_TYPE_C4_REMOTE );
param->Add_Value ( "Timed C4", AmmoDefinitionClass::AMMO_TYPE_C4_TIMED );
param->Add_Value ( "Proximity C4", AmmoDefinitionClass::AMMO_TYPE_C4_PROXIMITY );
GENERIC_EDITABLE_PARAM(AmmoDefinitionClass,param)
// EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_WEAPONOBJDEFINITIONID, WeaponDefID);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FILENAME, ModelFilename);
// EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_INT, Warhead);
param = new EnumParameterClass( &Warhead );
param->Set_Name ( "Warhead" );
for ( i = 0; i < ArmorWarheadManager::Get_Num_Warhead_Types(); i++ ) {
param->Add_Value ( ArmorWarheadManager::Get_Warhead_Name( i ), i );
}
GENERIC_EDITABLE_PARAM(AmmoDefinitionClass,param)
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, Damage);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, Range);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, EffectiveRange);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, Velocity);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, Gravity);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, Elasticity);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, RateOfFire);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_ANGLE, SprayAngle);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_INT, SprayCount);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_INT, SprayBulletCost);
// EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FILENAME, TrailEmitter);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, AquireTime);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, BurstDelayTime);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_INT, BurstMax);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_INT, SoftPierceLimit);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_ANGLE, TurnRate);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_BOOL, TimeActivated);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_BOOL, TerrainActivated);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_BOOL, IsTracking);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_EXPLOSIONDEFINITIONID, ExplosionDefID);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, RandomTrackingScale);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_BOOL, DisplayLaser);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, ChargeTime);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_SOUNDDEFINITIONID, ContinuousSoundDefID);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_SOUNDDEFINITIONID, FireSoundDefID);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FILENAME, ContinuousEmitterName );
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_INT, MaxBounces);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, C4TriggerTime1 );
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, C4TriggerTime2 );
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, C4TriggerTime3 );
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, C4TriggerRange1 );
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, C4TriggerRange2 );
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, C4TriggerRange3 );
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_SOUNDDEFINITIONID, C4TimingSound1ID );
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_SOUNDDEFINITIONID, C4TimingSound2ID );
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_SOUNDDEFINITIONID, C4TimingSound3ID );
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, AliasedSpeed );
param = new EnumParameterClass( &HitterType );
param->Set_Name ( "HitterType" );
for ( i = 0; i < SurfaceEffectsManager::Num_Hitter_Types(); i++ ) {
param->Add_Value ( SurfaceEffectsManager::Hitter_Type_Name( i ), i );
}
GENERIC_EDITABLE_PARAM(AmmoDefinitionClass,param)
GenericDefParameterClass *beacon_param = new GenericDefParameterClass (&BeaconDefID);
beacon_param->Set_Class_ID (CLASSID_GAME_OBJECT_DEF_BEACON);
beacon_param->Set_Name ("Beacon Object");
GENERIC_EDITABLE_PARAM (AmmoDefinitionClass, beacon_param);
/*
** Beam effect parameters
*/
PARAM_SEPARATOR( AmmoDefinitionClass, "Instant Bullet Beam Effects");
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_BOOL, BeamEnabled);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_VECTOR3, BeamColor);
FLOAT_UNITS_PARAM( AmmoDefinitionClass, BeamTime, 0.01f, 10.0f, "seconds");
FLOAT_UNITS_PARAM( AmmoDefinitionClass, BeamWidth, 0.01f, 10.0f, "meters");
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_BOOL, BeamEndCaps);
FILENAME_PARAM( AmmoDefinitionClass, BeamTexture, "Texture filename",".tga");
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_BOOL, BeamSubdivisionEnabled);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_BOOL, BeamSubdivisionFrozen);
FLOAT_EDITABLE_PARAM( AmmoDefinitionClass, BeamSubdivisionScale, 0.01f,10.0f);
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_STRINGSDB_ID, IconNameID );
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FILENAME, IconTextureName );
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_RECT, IconTextureUV );
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_VECTOR2, IconOffset );
EDITABLE_PARAM( AmmoDefinitionClass, ParameterClass::TYPE_FLOAT, GrenadeSafetyTime );
#endif
}
/*
**
*/
enum {
CHUNKID_AMMO_DEF_VARIABLES = 1206091429,
CHUNKID_AMMO_DEF_PARENT,
XXXMICROCHUNKID_AMMO_DEF_WEAPON_DEF_ID = 1,
MICROCHUNKID_AMMO_DEF_MODEL,
MICROCHUNKID_AMMO_DEF_WARHEAD,
MICROCHUNKID_AMMO_DEF_DAMAGE,
MICROCHUNKID_AMMO_DEF_RANGE,
MICROCHUNKID_AMMO_DEF_VELOCITY,
MICROCHUNKID_AMMO_DEF_GRAVITY,
XXXMICROCHUNKID_AMMO_DEF_ELASTICITY,
XXXMICROCHUNKID_AMMO_DEF_CLIP_SIZE,
MICROCHUNKID_AMMO_DEF_SPRAY_ANGLE,
MICROCHUNKID_AMMO_DEF_SPRAY_COUNT,
MICROCHUNKID_AMMO_DEF_TRAIL_EMITTER,
MICROCHUNKID_AMMO_DEF_AQUIRE_TIME,
MICROCHUNKID_AMMO_DEF_BURST_DELAY_TIME,
MICROCHUNKID_AMMO_DEF_BURST_MAX,
XXXXMICROCHUNKID_AMMO_DEF_EXPLOSION,
MICROCHUNKID_AMMO_DEF_SOFT_PIERCE_LIMIT,
MICROCHUNKID_AMMO_DEF_TURN_RATE,
MICROCHUNKID_AMMO_DEF_TIME_ACTIVATED,
MICROCHUNKID_AMMO_DEF_TERRAIN_ACTIVATED,
MICROCHUNKID_AMMO_DEF_IS_TRACKING,
XXXMICROCHUNKID_AMMO_DEF_ACTIVATE_SOUND_RADIUS,
MICROCHUNKID_AMMO_DEF_EFFECTIVE_RANGE,
MICROCHUNKID_AMMO_DEF_EXPLOSION_DEF_ID,
MICROCHUNKID_AMMO_DEF_RANDOM_TRACKING_SCALE,
MICROCHUNKID_AMMO_DEF_DISPLAY_LASER,
MICROCHUNKID_AMMO_DEF_CHARGE_TIME,
MICROCHUNKID_AMMO_DEF_CONTINUOUS_SOUND_DEF_ID,
MICROCHUNKID_AMMO_DEF_CONTINUOUS_EMITTER_NAME,
MICROCHUNKID_AMMO_DEF_MAX_BOUNCES,
MICROCHUNKID_AMMO_DEF_SPRAY_BULLET_COST,
MICROCHUNKID_AMMO_DEF_AMMO_TYPE,
XXXMICROCHUNKID_AMMO_DEF_C4_DETONATE_SOUND_ID,
XXXMICROCHUNKID_AMMO_DEF_C4_TIMING_SOUND_ID,
MICROCHUNKID_AMMO_DEF_C4_TRIGGER_TIME_1,
MICROCHUNKID_AMMO_DEF_C4_TRIGGER_TIME_2,
MICROCHUNKID_AMMO_DEF_C4_TRIGGER_TIME_3,
MICROCHUNKID_AMMO_DEF_C4_TRIGGER_RANGE_1,
MICROCHUNKID_AMMO_DEF_C4_TRIGGER_RANGE_2,
MICROCHUNKID_AMMO_DEF_C4_TRIGGER_RANGE_3,
MICROCHUNKID_AMMO_DEF_C4_TIMING_SOUND_1_ID,
MICROCHUNKID_AMMO_DEF_C4_TIMING_SOUND_2_ID,
MICROCHUNKID_AMMO_DEF_C4_TIMING_SOUND_3_ID,
MICROCHUNKID_AMMO_DEF_ELASTICITY,
MICROCHUNKID_AMMO_DEF_ALIASED_SPEED,
MICROCHUNKID_AMMO_DEF_HITTER_TYPE,
MICROCHUNKID_AMMO_DEF_BEACON_DEFID,
MICROCHUNKID_AMMO_DEF_RATE_OF_FIRE,
MICROCHUNKID_AMMO_DEF_BEAM_ENABLED,
MICROCHUNKID_AMMO_DEF_BEAM_COLOR,
MICROCHUNKID_AMMO_DEF_BEAM_TIME,
MICROCHUNKID_AMMO_DEF_BEAM_WIDTH,
MICROCHUNKID_AMMO_DEF_BEAM_TEXTURE,
MICROCHUNKID_AMMO_DEF_BEAM_SUBDIVISION_ENABLED,
MICROCHUNKID_AMMO_DEF_BEAM_SUBDIVISION_SCALE,
MICROCHUNKID_AMMO_DEF_BEAM_SUBDIVISION_FROZEN,
MICROCHUNKID_AMMO_DEF_BEAM_END_CAPS,
MICROCHUNKID_AMMO_ICON_NAME_ID,
MICROCHUNKID_AMMO_ICON_TEXTURE_NAME,
MICROCHUNKID_AMMO_ICON_TEXTURE_UV,
MICROCHUNKID_AMMO_ICON_OFFSET,
MICROCHUNKID_AMMO_DEF_FIRE_SOUND_DEFID,
MICROCHUNKID_AMMO_GRENADE_SAFETY_TIME,
};
bool AmmoDefinitionClass::Save( ChunkSaveClass & csave )
{
csave.Begin_Chunk( CHUNKID_AMMO_DEF_PARENT );
DefinitionClass::Save( csave );
csave.End_Chunk( );
csave.Begin_Chunk( CHUNKID_AMMO_DEF_VARIABLES );
WRITE_MICRO_CHUNK_WWSTRING( csave, MICROCHUNKID_AMMO_DEF_MODEL, ModelFilename );
// WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_WEAPON_DEF_ID, WeaponDefID );
WRITE_SAFE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_WARHEAD, Warhead, int );
WRITE_SAFE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_DAMAGE, Damage, float );
WRITE_SAFE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_RANGE, Range, float );
WRITE_SAFE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_VELOCITY, Velocity, float );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_GRAVITY, Gravity );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_ELASTICITY, Elasticity );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_RATE_OF_FIRE, RateOfFire );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_SPRAY_ANGLE, SprayAngle );
WRITE_SAFE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_SPRAY_COUNT, SprayCount, int );
WRITE_MICRO_CHUNK_WWSTRING( csave, MICROCHUNKID_AMMO_DEF_TRAIL_EMITTER, TrailEmitter );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_AQUIRE_TIME, AquireTime );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_BURST_DELAY_TIME, BurstDelayTime );
WRITE_SAFE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_BURST_MAX, BurstMax, int );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_SOFT_PIERCE_LIMIT, SoftPierceLimit );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_TURN_RATE, TurnRate );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_TIME_ACTIVATED, TimeActivated );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_TERRAIN_ACTIVATED, TerrainActivated );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_IS_TRACKING, IsTracking );
WRITE_SAFE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_EFFECTIVE_RANGE, EffectiveRange, float );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_EXPLOSION_DEF_ID, ExplosionDefID );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_RANDOM_TRACKING_SCALE, RandomTrackingScale );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_DISPLAY_LASER, DisplayLaser );
WRITE_SAFE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_CHARGE_TIME, ChargeTime, float );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_CONTINUOUS_SOUND_DEF_ID, ContinuousSoundDefID );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_FIRE_SOUND_DEFID, FireSoundDefID );
WRITE_MICRO_CHUNK_WWSTRING( csave, MICROCHUNKID_AMMO_DEF_CONTINUOUS_EMITTER_NAME, ContinuousEmitterName );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_MAX_BOUNCES, MaxBounces );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_SPRAY_BULLET_COST, SprayBulletCost );
WRITE_SAFE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_AMMO_TYPE, AmmoType, int );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_C4_TRIGGER_TIME_1, C4TriggerTime1 );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_C4_TRIGGER_TIME_2, C4TriggerTime2 );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_C4_TRIGGER_TIME_3, C4TriggerTime3 );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_C4_TRIGGER_RANGE_1, C4TriggerRange1 );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_C4_TRIGGER_RANGE_2, C4TriggerRange2 );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_C4_TRIGGER_RANGE_3, C4TriggerRange3 );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_C4_TIMING_SOUND_1_ID, C4TimingSound1ID );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_C4_TIMING_SOUND_2_ID, C4TimingSound2ID );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_C4_TIMING_SOUND_3_ID, C4TimingSound3ID );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_ALIASED_SPEED, AliasedSpeed );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_HITTER_TYPE, HitterType );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_BEACON_DEFID, BeaconDefID );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_BEAM_ENABLED, BeamEnabled );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_BEAM_COLOR, BeamColor );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_BEAM_TIME, BeamTime );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_BEAM_WIDTH, BeamWidth );
WRITE_MICRO_CHUNK_WWSTRING( csave, MICROCHUNKID_AMMO_DEF_BEAM_TEXTURE, BeamTexture );
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_BEAM_SUBDIVISION_ENABLED, BeamSubdivisionEnabled);
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_BEAM_SUBDIVISION_SCALE, BeamSubdivisionScale);
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_BEAM_SUBDIVISION_FROZEN, BeamSubdivisionFrozen);
WRITE_MICRO_CHUNK( csave, MICROCHUNKID_AMMO_DEF_BEAM_END_CAPS, BeamEndCaps);
WRITE_MICRO_CHUNK ( csave, MICROCHUNKID_AMMO_ICON_NAME_ID, IconNameID );
WRITE_MICRO_CHUNK_WWSTRING( csave, MICROCHUNKID_AMMO_ICON_TEXTURE_NAME, IconTextureName );
WRITE_MICRO_CHUNK ( csave, MICROCHUNKID_AMMO_ICON_TEXTURE_UV, IconTextureUV );
WRITE_MICRO_CHUNK ( csave, MICROCHUNKID_AMMO_ICON_OFFSET, IconOffset );
WRITE_MICRO_CHUNK ( csave, MICROCHUNKID_AMMO_GRENADE_SAFETY_TIME, GrenadeSafetyTime );
csave.End_Chunk();
return true;
}
bool AmmoDefinitionClass::Load( ChunkLoadClass &cload )
{
while (cload.Open_Chunk()) {
switch(cload.Cur_Chunk_ID()) {
case CHUNKID_AMMO_DEF_PARENT:
DefinitionClass::Load( cload );
break;
case CHUNKID_AMMO_DEF_VARIABLES:
while (cload.Open_Micro_Chunk()) {
switch(cload.Cur_Micro_Chunk_ID()) {
READ_MICRO_CHUNK_WWSTRING( cload, MICROCHUNKID_AMMO_DEF_MODEL, ModelFilename );
// READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_WEAPON_DEF_ID, WeaponDefID );
READ_SAFE_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_WARHEAD, Warhead, int );
READ_SAFE_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_DAMAGE, Damage, float );
READ_SAFE_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_RANGE, Range, float );
READ_SAFE_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_VELOCITY, Velocity, float );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_GRAVITY, Gravity );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_ELASTICITY, Elasticity );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_RATE_OF_FIRE, RateOfFire );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_SPRAY_ANGLE, SprayAngle );
READ_SAFE_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_SPRAY_COUNT, SprayCount, int );
READ_MICRO_CHUNK_WWSTRING( cload, MICROCHUNKID_AMMO_DEF_TRAIL_EMITTER, TrailEmitter );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_AQUIRE_TIME, AquireTime );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_BURST_DELAY_TIME, BurstDelayTime );
READ_SAFE_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_BURST_MAX, BurstMax, int );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_SOFT_PIERCE_LIMIT, SoftPierceLimit );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_TURN_RATE, TurnRate );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_TIME_ACTIVATED, TimeActivated );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_TERRAIN_ACTIVATED, TerrainActivated );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_IS_TRACKING, IsTracking );
READ_SAFE_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_EFFECTIVE_RANGE, EffectiveRange, float );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_EXPLOSION_DEF_ID, ExplosionDefID );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_RANDOM_TRACKING_SCALE, RandomTrackingScale );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_DISPLAY_LASER, DisplayLaser );
READ_SAFE_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_CHARGE_TIME, ChargeTime, float );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_CONTINUOUS_SOUND_DEF_ID, ContinuousSoundDefID );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_FIRE_SOUND_DEFID, FireSoundDefID );
READ_MICRO_CHUNK_WWSTRING( cload, MICROCHUNKID_AMMO_DEF_CONTINUOUS_EMITTER_NAME, ContinuousEmitterName );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_MAX_BOUNCES, MaxBounces );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_SPRAY_BULLET_COST, SprayBulletCost );
READ_SAFE_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_AMMO_TYPE, AmmoType, int );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_C4_TRIGGER_TIME_1, C4TriggerTime1 );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_C4_TRIGGER_TIME_2, C4TriggerTime2 );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_C4_TRIGGER_TIME_3, C4TriggerTime3 );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_C4_TRIGGER_RANGE_1, C4TriggerRange1 );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_C4_TRIGGER_RANGE_2, C4TriggerRange2 );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_C4_TRIGGER_RANGE_3, C4TriggerRange3 );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_C4_TIMING_SOUND_1_ID, C4TimingSound1ID );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_C4_TIMING_SOUND_2_ID, C4TimingSound2ID );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_C4_TIMING_SOUND_3_ID, C4TimingSound3ID );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_ALIASED_SPEED, AliasedSpeed );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_HITTER_TYPE, HitterType );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_BEACON_DEFID, BeaconDefID );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_BEAM_ENABLED, BeamEnabled );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_BEAM_COLOR, BeamColor );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_BEAM_TIME, BeamTime );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_BEAM_WIDTH, BeamWidth );
READ_MICRO_CHUNK_WWSTRING( cload, MICROCHUNKID_AMMO_DEF_BEAM_TEXTURE, BeamTexture );
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_BEAM_SUBDIVISION_ENABLED, BeamSubdivisionEnabled);
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_BEAM_SUBDIVISION_SCALE, BeamSubdivisionScale);
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_BEAM_SUBDIVISION_FROZEN, BeamSubdivisionFrozen);
READ_MICRO_CHUNK( cload, MICROCHUNKID_AMMO_DEF_BEAM_END_CAPS, BeamEndCaps);
READ_MICRO_CHUNK ( cload, MICROCHUNKID_AMMO_ICON_NAME_ID, IconNameID );
READ_MICRO_CHUNK_WWSTRING ( cload, MICROCHUNKID_AMMO_ICON_TEXTURE_NAME, IconTextureName );
READ_MICRO_CHUNK ( cload, MICROCHUNKID_AMMO_ICON_TEXTURE_UV, IconTextureUV );
READ_MICRO_CHUNK ( cload, MICROCHUNKID_AMMO_ICON_OFFSET, IconOffset );
READ_MICRO_CHUNK ( cload, MICROCHUNKID_AMMO_GRENADE_SAFETY_TIME, GrenadeSafetyTime );
default:
Debug_Say(( "Unrecognized AmmoDef Variable chunkID\n" ));
break;
}
cload.Close_Micro_Chunk();
}
break;
default:
Debug_Say(( "Unrecognized AmmoDef chunkID\n" ));
break;
}
cload.Close_Chunk();
}
// Init the model name from the model filename
::Get_Render_Obj_Name_From_Filename( ModelName, ModelFilename );
if ( ModelName.Is_Empty() ) {
ModelName = "NULL";
}
return true;
}
/*
**
*/
bool WeaponManager::IsWeaponHelpDisabled = false;
const WeaponDefinitionClass *WeaponManager::Find_Weapon_Definition( const char *name )
{
return (const WeaponDefinitionClass *)DefinitionMgrClass::Find_Typed_Definition( name, CLASSID_DEF_WEAPON );
}
const WeaponDefinitionClass *WeaponManager::Find_Weapon_Definition( int id )
{
return (const WeaponDefinitionClass *)DefinitionMgrClass::Find_Definition( id );
}
const AmmoDefinitionClass *WeaponManager::Find_Ammo_Definition( const char *name )
{
return (const AmmoDefinitionClass *)DefinitionMgrClass::Find_Typed_Definition( name, CLASSID_DEF_AMMO );
}
const AmmoDefinitionClass *WeaponManager::Find_Ammo_Definition( int id )
{
return (const AmmoDefinitionClass *)DefinitionMgrClass::Find_Definition( id );
}