#ifndef WEAPON_FLAGS_H
#define WEAPON_FLAGS_H

#include "globalincs/flagset.h"

namespace Weapon {

	FLAG_LIST(Info_Flags) {
		Homing_heat,						// if set, this weapon homes via seeking heat
		Homing_aspect,						// if set, this weapon homes via chasing aspect
		Electronics,						// Takes out electronics systems.
		Spawn,								// Spawns projectiles on detonation.
		Remote,								// Can be remotely detonated by parent.
		Puncture,							// Punctures armor, damaging subsystems.
		Supercap,							// This is a weapon which does supercap class damage (meaning, it applies real damage to supercap ships)
		Cmeasure,							// Weapon acts as a countermeasure
		Homing_javelin,						// WC Saga Javelin HS style heatseeker, locks only on target's engines
		Turns,								// Set this if the weapon ever changes heading. If you don't set this and the weapon turns, collision detection won't work, I promise!
		Swarm,								// Missile "swarms".. ie changes heading and twists on way to target
		Trail,								// Has a trail
		Big_only,							// Only big ships (cruiser, capital, etc.) can arm this weapon
		Child,								// No ship can have this weapon.  It gets created by weapon detonations.
		Bomb,								// Bomb-type missile, can be targeted
		Huge,								// Huge damage (generally 500+), probably only fired at huge ships.
		No_dumbfire,						// Missile cannot be fired dumbfire (ie requires aspect lock)
		No_doublefire,						// Disables linked firing for secondaries - EatThePath
		Thruster,							// Has thruster cone and/or glow
		In_tech_database,
		Player_allowed,						// allowed to be on starting wing ships/in weaponry pool
		Default_player_weapon,				// added to the weapons pool by default
		Bomber_plus,						// Fire this missile only at a bomber or big ship.  But not a fighter.
		Corkscrew,							// corkscrew style missile
		Particle_spew,						// spews particles as it travels
		Emp,								// weapon explodes with a serious EMP effect
		Energy_suck,						// energy suck primary (impact effect)
		Flak,								// use for big-ship turrets - flak gun
		Beam,								// if this is a beam weapon : NOTE - VERY SPECIAL CASE
		Tag,								// this weapon has a tag effect when it hits
		Shudder,							// causes the weapon to shudder. shudder is proportional to the mass and damage of the weapon
		Mflash,								// has muzzle flash
		Lockarm,							// if the missile was fired without a lock, it does significanlty less damage on impact
		Ballistic,							// ballistic primaries - Goober5000
		Pierce_shields,						// shield pierceing -Bobboau
		Default_in_tech_database,			// this entry's default tech database status, as specified in weapons.tbl; used when the tech db is "reset to default" - Goober5000
		Local_ssm,							// localized ssm. ship that fires ssm is in mission.  ssms also warp back in during mission
		Tagged_only,						// can only fire if target is tagged
		Small_only,							// can only be used against small ships like fighters or bombers
		Same_turret_cooldown,				// the weapon has the same cooldown time on turrets
		Mr_no_lighting,						// don't render with lighting, regardless of user options
		Transparent,						// render as transparent
		Training,							// Weapon does shield/hull damage, but doesn't hurt subsystems, whack you, or put marks on your ship.
		Smart_spawn,						// Spawn weapon that is fired via turrets like normal weapons
		Inherit_parent_target,				// child weapons home in on the target their parent is homing on.
		No_emp_kill,						// though weapon has hitpoints it can not be disabled by EMP
		Variable_lead_homing,				// allows user defined scaler to be added to lead (to enable, lead, pure or lag pursuit for missiles)
		Untargeted_heat_seeker,				// forces heat seeker to lose target immeadiately (and acquire a random new one)
		No_radius_doubling,					// removes the radius doubling effect bombs have for collisions
		Non_subsys_homing,					// spreads fired missiles around the target ships hull
		No_life_lost_if_missed,				// prevents game from shortening the lifeleft of the missed but still homing missiles
		Custom_seeker_str,					// sets the game to use custom seeker strengths instead of default values
		Can_be_targeted,					// allows non-bomb weapons to be targeted
		Shown_on_radar,						// allows non-bombs be visible on radar
		Show_friendly,						// allows friendly weapon radar dots be drawn
		Capital_plus,						// AI will not use this weapon on fighters or bombers
		External_weapon_fp,					// will try to use external models FPs if possible
		External_weapon_lnch,				// render external secondary as a launcher
		Takes_blast_damage,					// This weapon can take blast damage
		Takes_shockwave_damage,				// This weapon can take shockwave damage
		Dont_show_on_radar,					// Force a weapon to not show on radar
		Render_flak,						// Even though this is a flak weapon, render the shell
		Ciws,								// This weapons' burst and shockwave damage can damage bombs (Basically, a reverse for TAKES_BLAST/SHOCKWAVE_DAMAGE
		Antisubsysbeam,						// This beam can target subsystems as per normal
		Nolink,								// This weapon can not be linked with others
		Use_emp_time_for_capship_turrets,	// override MAX_TURRET_DISRUPT_TIME in emp.cpp - Goober5000
		No_linked_penalty,					// This weapon does not count into linked firing penalty
		No_homing_speed_ramp,				// Disables the 1s long speed ramping when firing locked-on secondaries
		Cmeasure_aspect_home_on,			// This countermeasure flag makes aspect seekers home on the countermeasure instead of going into dumbfire mode
		Turret_Interceptable,				// These two flags mark a weapon as being interceptable by the AI
		Fighter_Interceptable,				// (like WIF_BOMB), without forcing it to be tagetable -MageKing17
		Aoe_Electronics,					// Apply electronics effect across the weapon's entire area of effect instead of just on the impacted ship -MageKing17
		Apply_Recoil,						// Apply Recoil using weapon and ship info
        Dont_spawn_if_shot,                 // Prevent shot down parent weapons from spawning children (DahBlount)
        Die_on_lost_lock,                   // WIF_LOCKED_HOMING missiles will die if they lose their lock
		Has_display_name,					// Goober5000
		No_impact_spew,						// Goober5000
		Require_exact_los,					// If secondary or in turret, will only fire if ship has line of sight to target
		Can_damage_shooter,					// this weapon and any of its descendants can damage its shooter - Asteroth
		Heals,								// 'damage' heals instead of actually damaging - Asteroth
		Vampiric,						    // damage applied also brings back health to the shooter - Strygon
		SecondaryNoAmmo,					// Secondaries that only use energy
		No_collide,
		Multilock_target_dead_subsys,
		No_evasion,							// AI will not attempt to dodge this weapon - Asteroth
		Dont_merge_indicators,				// This secondary lead indicator won't be merged with the primary lead indicator even if this is a homing weapon.
		No_fred,							// not available in fred
		Detonate_on_expiration,				// Secondary weapons always detonate when their lifetime runs out, but now primary weapons can too
		Ignores_countermeasures,			// The weapon will never be affected by countermeasures
		Freespace_1_missile_behavior,		// Bundles several observed behaviors missiles had in the freespace 1 release
		Dogfight_weapon,                    // Dogfight weapons are intended as balanced variants for multiplayer. This flag can be used to filter them out when necessary.
		Mine,								// weapon is a stationary proximity mine (subset of secondary): zero velocity, infinite lifetime

        NUM_VALUES
	};

	FLAG_LIST(Weapon_Flags) {
		Lock_warning_played,		// set when a lock warning sound is played for the player (needed since we don't want to play multiple lock sounds)
		Already_applied_stats,		// for use in ship_apply_local and ship_apply_global damage functions so that we don't record multiple hits (stats) for one impact
		Played_flyby_sound,			// flyby sound has been played for this weapon
		Consider_for_flyby_sound,	// consider for flyby
		Dead_in_water,				// a missiles engines have died
		Locked_when_fired,			// fired with a lock
		Destroyed_by_weapon,		// destroyed by damage from other weapon
		Spawned,					//Spawned from a spawning type weapon
        No_homing,                  // this weapon should ignore any homing behavior it'd usually have
		Overridden_homing,          // Homing is overridden by an external source (probably scripting)
		Multi_homing_update_needed, // this is a newly spawned homing weapon which needs to update client machines
		Multi_Update_Sent,			// Marks this missile as already being updated once by the server
		Begun_detonation,			// The engine has set this weapon to detonate momentarily
		No_thruster,                // Disable rendering thrusters for this weapon instance
		Glowmaps_disabled,			// No glowmaps for this weapon instance
		Draw_as_wireframe,			// Render wireframe for this weapon instance
		Render_full_detail,			// Render full detail for this weapon instance
		Render_without_light,		// Render without light for this weapon instance
		Render_without_diffuse,		// Render without diffuse for this weapon instance
		Render_without_glowmap,		// Render without glowmap for this weapon instance
		Render_without_normalmap,	// Render without normal map for this weapon instance
		Render_without_heightmap,	// Render without height map for this weapon instance
		Render_without_ambientmap,	// Render without ambient for this weapon instance
		Render_without_specmap,		// Render without spec for this weapon instance
		Render_without_reflectmap,	// Render without reflect for this weapon instance


		NUM_VALUES
	};

	FLAG_LIST(Burst_Flags) {
		Fast_firing,
		Random_length,
		Resets,
		Num_firepoints_burst_shots, // Burst shots is set to however many firepoints the firer has
		Burst_only_loop_sounds, // start/loop/end sounds trigger on the start and end of bursts in addition to the trigger state

		NUM_VALUES
	};

	FLAG_LIST(Beam_Info_Flags) {
		Burst_share_random,
		Track_own_texture_tiling,
		Direct_fire_lead_target,

		NUM_VALUES
	};
}

#endif
