#include "cbase.h" #include "asw_shareddefs.h" #include "asw_medals_shared.h" #include "asw_achievements.h" bool IsAlienClass( Class_T npc_class ) { return ( npc_class == CLASS_ASW_DRONE || npc_class == CLASS_ASW_PARASITE || npc_class == CLASS_ASW_SHIELDBUG || npc_class == CLASS_ASW_BUZZER || npc_class == CLASS_ASW_HARVESTER || npc_class == CLASS_ASW_GRUB || npc_class == CLASS_ASW_QUEEN_DIVER || npc_class == CLASS_ASW_QUEEN_GRABBER || npc_class == CLASS_ASW_ALIEN_GOO || npc_class == CLASS_ASW_SHAMAN || npc_class == CLASS_ASW_BOOMER || npc_class == CLASS_ASW_RANGER || npc_class == CLASS_ASW_EGG ); } // npc_class == CLASS_ASW_ZOMBIE || // npc_class == CLASS_ASW_HYDRA || // npc_class == CLASS_BLOB || // npc_class == CLASS_ASW_BOOMERMINI || // npc_class == CLASS_ASW_MEATBUG || // npc_class == CLASS_ASW_RUNNER || // npc_class == CLASS_ASW_FLOCK || // ); //} bool IsDamagingWeaponClass( Class_T weapon_class ) { return ( weapon_class == CLASS_ASW_RIFLE || weapon_class == CLASS_ASW_MINIGUN || weapon_class == CLASS_ASW_PDW || weapon_class == CLASS_ASW_FLECHETTE || weapon_class == CLASS_ASW_TESLA_TRAP || weapon_class == CLASS_ASW_SHOTGUN || weapon_class == CLASS_ASW_SENTRY_FLAMER || weapon_class == CLASS_ASW_SENTRY_CANNON || weapon_class == CLASS_ASW_SENTRY_FREEZE || weapon_class == CLASS_ASW_RICOCHET || weapon_class == CLASS_ASW_RAILGUN || weapon_class == CLASS_ASW_PRIFLE || weapon_class == CLASS_ASW_PISTOL || weapon_class == CLASS_ASW_MINING_LASER || weapon_class == CLASS_ASW_MINES || weapon_class == CLASS_ASW_LASER_MINES || weapon_class == CLASS_ASW_HORNET_BARRAGE || weapon_class == CLASS_ASW_HEALGRENADE || weapon_class == CLASS_ASW_GRENADES || weapon_class == CLASS_ASW_GRENADE_LAUNCHER || weapon_class == CLASS_ASW_FREEZE_GRENADES || weapon_class == CLASS_ASW_FLAMER || weapon_class == CLASS_ASW_ELECTRIFIED_ARMOR || weapon_class == CLASS_ASW_CHAINSAW || weapon_class == CLASS_ASW_AUTOGUN || weapon_class == CLASS_ASW_ASSAULT_SHOTGUN || weapon_class == CLASS_ASW_SENTRY_GUN || weapon_class == CLASS_ASW_T75 || weapon_class == CLASS_ASW_RIFLE_GRENADE || weapon_class == CLASS_ASW_GRENADE_VINDICATOR || weapon_class == CLASS_ASW_GRENADE_CLUSER || weapon_class == CLASS_MISSILE || weapon_class == CLASS_ASW_FLAMER_PROJECTILE || weapon_class == CLASS_ASW_GRENADE_PRIFLE); } bool IsWeaponClass( Class_T entity_class ) { return ( entity_class == CLASS_ASW_RIFLE || entity_class == CLASS_ASW_SNIPER_RIFLE || entity_class == CLASS_ASW_MINIGUN || entity_class == CLASS_ASW_PDW || entity_class == CLASS_ASW_FLECHETTE || entity_class == CLASS_ASW_FIRE_EXTINGUISHER || entity_class == CLASS_ASW_WELDER || entity_class == CLASS_ASW_TESLA_TRAP || entity_class == CLASS_ASW_STIM || entity_class == CLASS_ASW_SHOTGUN || entity_class == CLASS_ASW_SENTRY_FLAMER || entity_class == CLASS_ASW_SENTRY_CANNON || entity_class == CLASS_ASW_SENTRY_FREEZE || entity_class == CLASS_ASW_RICOCHET || entity_class == CLASS_ASW_RAILGUN || entity_class == CLASS_ASW_PRIFLE || entity_class == CLASS_ASW_PISTOL || entity_class == CLASS_ASW_MINING_LASER || entity_class == CLASS_ASW_MINES || entity_class == CLASS_ASW_MEDKIT || entity_class == CLASS_ASW_MEDICAL_SATCHEL || entity_class == CLASS_ASW_HEAL_GUN || entity_class == CLASS_ASW_LASER_MINES || entity_class == CLASS_ASW_HORNET_BARRAGE || entity_class == CLASS_ASW_HEALGRENADE || entity_class == CLASS_ASW_GRENADES || entity_class == CLASS_ASW_GRENADE_LAUNCHER || entity_class == CLASS_ASW_FREEZE_GRENADES || entity_class == CLASS_ASW_FLASHLIGHT || entity_class == CLASS_ASW_FLARES || entity_class == CLASS_ASW_FLAMER || entity_class == CLASS_ASW_ELECTRIFIED_ARMOR || entity_class == CLASS_ASW_NORMAL_ARMOR || entity_class == CLASS_ASW_CHAINSAW || entity_class == CLASS_ASW_BUFF_GRENADE || entity_class == CLASS_ASW_AUTOGUN || entity_class == CLASS_ASW_ASSAULT_SHOTGUN || entity_class == CLASS_ASW_AMMO_BAG || entity_class == CLASS_ASW_SENTRY_GUN || entity_class == CLASS_ASW_T75 || entity_class == CLASS_ASW_RIFLE_GRENADE || entity_class == CLASS_ASW_GRENADE_VINDICATOR || entity_class == CLASS_ASW_GRENADE_CLUSER || entity_class == CLASS_MISSILE || entity_class == CLASS_ASW_FLAMER_PROJECTILE || entity_class == CLASS_ASW_TESLA_GUN || entity_class == CLASS_ASW_SMART_BOMB ); } // used by powerups bool IsBulletBasedWeaponClass( Class_T weapon_class ) { return ( weapon_class == CLASS_ASW_RIFLE || weapon_class == CLASS_ASW_MINIGUN || weapon_class == CLASS_ASW_PDW || weapon_class == CLASS_ASW_FLECHETTE || weapon_class == CLASS_ASW_SHOTGUN || weapon_class == CLASS_ASW_RICOCHET || weapon_class == CLASS_ASW_RAILGUN || weapon_class == CLASS_ASW_PRIFLE || weapon_class == CLASS_ASW_PISTOL || weapon_class == CLASS_ASW_AUTOGUN || weapon_class == CLASS_ASW_ASSAULT_SHOTGUN); } bool IsSentryClass( Class_T entity_class ) { return ( entity_class == CLASS_ASW_SENTRY_GUN || entity_class == CLASS_ASW_SENTRY_FLAMER || entity_class == CLASS_ASW_SENTRY_FREEZE || entity_class == CLASS_ASW_SENTRY_CANNON || entity_class == CLASS_ASW_REMOTE_TURRET ); } ConVar asw_visrange_generic( "asw_visrange_generic", "400", FCVAR_CHEAT | FCVAR_REPLICATED, "Vismon range" ); #ifdef CLIENT_DLL IMPLEMENT_AUTO_LIST( IHealthTrackedAutoList ); #endif // certain props are exempt from our auto stuck freeing code, since they break easily bool CanMarineGetStuckOnProp( const char *szModelName ) { if ( !Q_stricmp( szModelName, "models/props/crates/supplycrate.mdl" ) ) return false; if ( !Q_stricmp( szModelName, "models/swarmprops/barrelsandcrates/cardbox1breakable.mdl" ) ) return false; return true; } class CASW_Medal_Achievement_Pair { public: CASW_Medal_Achievement_Pair( int nMedal, int nAchievement ) { m_nMedal = nMedal; m_nAchievement = nAchievement; } int m_nMedal; int m_nAchievement; }; CASW_Medal_Achievement_Pair s_MedalAchievements[]= { CASW_Medal_Achievement_Pair( MEDAL_CLEAR_FIRING, ACHIEVEMENT_ASW_NO_FRIENDLY_FIRE ), CASW_Medal_Achievement_Pair( MEDAL_SHIELDBUG_ASSASSIN, ACHIEVEMENT_ASW_SHIELDBUG ), CASW_Medal_Achievement_Pair( MEDAL_EXPLOSIVES_MERIT, ACHIEVEMENT_ASW_GRENADE_MULTI_KILL ), CASW_Medal_Achievement_Pair( MEDAL_SHARPSHOOTER, ACHIEVEMENT_ASW_ACCURACY ), CASW_Medal_Achievement_Pair( MEDAL_PERFECT, ACHIEVEMENT_ASW_NO_DAMAGE_TAKEN ), CASW_Medal_Achievement_Pair( MEDAL_IRON_FIST, ACHIEVEMENT_ASW_MELEE_KILLS ), CASW_Medal_Achievement_Pair( MEDAL_COLLATERAL_DAMAGE, ACHIEVEMENT_ASW_BARREL_KILLS ), CASW_Medal_Achievement_Pair( MEDAL_GOLDEN_HALO, ACHIEVEMENT_ASW_INFESTATION_CURING ), CASW_Medal_Achievement_Pair( MEDAL_BLOOD_HALO, ACHIEVEMENT_ASW_ALL_HEALING ), CASW_Medal_Achievement_Pair( MEDAL_PEST_CONTROL, ACHIEVEMENT_ASW_EGGS_BEFORE_HATCH ), CASW_Medal_Achievement_Pair( MEDAL_EXTERMINATOR, ACHIEVEMENT_ASW_MELEE_PARASITE ), CASW_Medal_Achievement_Pair( MEDAL_ELECTRICAL_SYSTEMS_EXPERT, ACHIEVEMENT_ASW_PROTECT_TECH ), CASW_Medal_Achievement_Pair( MEDAL_SMALL_ARMS_SPECIALIST, ACHIEVEMENT_ASW_FAST_RELOADS_IN_A_ROW ), CASW_Medal_Achievement_Pair( MEDAL_GUNFIGHTER, ACHIEVEMENT_ASW_GROUP_DAMAGE_AMP ), CASW_Medal_Achievement_Pair( MEDAL_BUGSTOMPER, ACHIEVEMENT_ASW_BOOMER_KILL_EARLY ), CASW_Medal_Achievement_Pair( MEDAL_RECKLESS_EXPLOSIVES_MERIT, ACHIEVEMENT_ASW_STUN_GRENADE ), CASW_Medal_Achievement_Pair( MEDAL_LIFESAVER, ACHIEVEMENT_ASW_DODGE_RANGER_SHOT ), CASW_Medal_Achievement_Pair( MEDAL_HUNTER, ACHIEVEMENT_ASW_FREEZE_GRENADE ), CASW_Medal_Achievement_Pair( MEDAL_SPEED_RUN_LANDING_BAY, ACHIEVEMENT_ASW_SPEEDRUN_LANDING_BAY ), CASW_Medal_Achievement_Pair( MEDAL_SPEED_RUN_DESCENT, ACHIEVEMENT_ASW_SPEEDRUN_DESCENT ), CASW_Medal_Achievement_Pair( MEDAL_SPEED_RUN_OUTSIDE, ACHIEVEMENT_ASW_SPEEDRUN_DEIMA ), CASW_Medal_Achievement_Pair( MEDAL_SPEED_RUN_PLANT, ACHIEVEMENT_ASW_SPEEDRUN_RYDBERG ), CASW_Medal_Achievement_Pair( MEDAL_SPEED_RUN_OFFICE, ACHIEVEMENT_ASW_SPEEDRUN_RESIDENTIAL ), CASW_Medal_Achievement_Pair( MEDAL_SPEED_RUN_DESCENT, ACHIEVEMENT_ASW_SPEEDRUN_DESCENT ), CASW_Medal_Achievement_Pair( MEDAL_SPEED_RUN_SEWERS, ACHIEVEMENT_ASW_SPEEDRUN_SEWER ), CASW_Medal_Achievement_Pair( MEDAL_SPEED_RUN_MINE, ACHIEVEMENT_ASW_SPEEDRUN_TIMOR ), CASW_Medal_Achievement_Pair( MEDAL_ALL_SURVIVE_A_MISSION, ACHIEVEMENT_ASW_MISSION_NO_DEATHS ) }; bool MedalMatchesAchievement( int nMedalIndex, int nAchievementIndex ) { int nPairs = NELEMS( s_MedalAchievements ); for ( int i = 0; i < nPairs; i++ ) { if ( nMedalIndex == s_MedalAchievements[i].m_nMedal && nAchievementIndex == s_MedalAchievements[i].m_nAchievement ) return true; } return false; } int GetAchievementIndexForMedal( int nMedalIndex ) { int nPairs = NELEMS( s_MedalAchievements ); for ( int i = 0; i < nPairs; i++ ) { if ( nMedalIndex == s_MedalAchievements[i].m_nMedal ) return s_MedalAchievements[i].m_nAchievement; } return -1; }