Editor/Decompiler/Formats/Descriptors/AlienSwarmBspFormatDescriptor.cs
using BspImport.Decompiler.Formats.Readers;
namespace BspImport.Decompiler.Formats.Descriptors;
public sealed class AlienSwarmBspFormatDescriptor : IBspFormatDescriptor
{
private static readonly IBspStructReaders _readers = new StandardBspStructReaders();
private static readonly HashSet<string> Signatures = new( StringComparer.OrdinalIgnoreCase )
{
"asw_alien_goo",
"asw_ambient_generic",
"asw_ammo_autogun",
"asw_ammo_drop",
"asw_ammo_flamer",
"asw_ammo_mining_laser",
"asw_ammo_pdw",
"asw_ammo_pistol",
"asw_ammo_rifle",
"asw_ammo_shotgun",
"asw_ammo_vindicator",
"asw_barrel_explosive",
"asw_barrel_radioactive",
"asw_bloodhound",
"asw_boomer",
"asw_broadcast_camera",
"asw_buzzer",
"asw_camera_control",
"asw_client_corpse",
"asw_colonist",
"asw_debrief_info",
"asw_director_control",
"asw_door",
"asw_drone",
"asw_drone_jumper",
"asw_drone_uber",
"asw_egg",
"asw_emitter",
"asw_env_explosion",
"asw_env_shake",
"asw_env_spark",
"asw_equip_req",
"asw_gamerules",
"asw_grub",
"asw_grub_sac",
"asw_harvester",
"asw_holdout_mode",
"asw_holdout_spawner",
"asw_holo_sentry",
"asw_holoscan",
"asw_hurt_nearest_marine",
"asw_info_heal",
"asw_info_message",
"asw_intro_control",
"asw_jukebox",
"asw_marines_past_area",
"asw_marker",
"asw_menu_flashlight",
"asw_mortarbug",
"asw_objective_countdown",
"asw_objective_destroy_goo",
"asw_objective_dummy",
"asw_objective_escape",
"asw_objective_kill_aliens",
"asw_objective_kill_eggs",
"asw_objective_survive",
"asw_objective_triggered",
"asw_order_nearby_aliens",
"asw_parasite",
"asw_pickup_ammo_bag",
"asw_pickup_autogun",
"asw_pickup_chainsaw",
"asw_pickup_fire_extinguisher",
"asw_pickup_flamer",
"asw_pickup_flares",
"asw_pickup_flashlight",
"asw_pickup_grenades",
"asw_pickup_medkit",
"asw_pickup_mines",
"asw_pickup_mining_laser",
"asw_pickup_pdw",
"asw_pickup_pistol",
"asw_pickup_prifle",
"asw_pickup_rifle",
"asw_pickup_sentry",
"asw_pickup_shotgun",
"asw_pickup_stim",
"asw_pickup_vindicator",
"asw_pickup_welder",
"asw_polytest",
"asw_prop_laserable",
"asw_queen",
"asw_queen_retreat_spot",
"asw_ranger",
"asw_remote_turret",
"asw_scanner_noise",
"asw_sentry_top_machinegun",
"asw_shieldbug",
"asw_simple_drone",
"asw_snow_volume",
"asw_spawn_group",
"asw_spawner",
"asw_stylincam",
"asw_tech_marine_req",
"asw_trigger_fall",
"asw_vehicle_jeep",
"asw_weapon_blink",
"asw_weapon_jump_jet",
"info_node_marine_hint",
"trigger_asw_button_area",
"trigger_asw_chance",
"trigger_asw_computer_area",
"trigger_asw_door_area",
"trigger_asw_jump",
"trigger_asw_marine_knockback",
"trigger_asw_supplies_chatter",
"trigger_asw_synup_chatter"
};
public BspGameFormat GameFormat => BspGameFormat.AlienSwarm;
public IReadOnlySet<int> SupportedVersions { get; } = new HashSet<int> { 21 };
public string DisplayName => "Alien Swarm";
public int SpecificityScore => 100;
public LumpHeaderLayout LumpHeaderLayout => LumpHeaderLayout.Standard;
public BrushSideLayout BrushSideLayout => BrushSideLayout.ThinFlag;
public StaticPropLayout StaticPropLayout => StaticPropLayout.V9;
public IBspStructReaders GetStructReaders( int bspVersion ) => _readers;
public bool MatchesMapName( string mapName )
{
return !string.IsNullOrEmpty( mapName ) && mapName.StartsWith( "asi_", StringComparison.OrdinalIgnoreCase );
}
public bool MatchesEntities( IReadOnlyList<string> entityClassNames )
{
return Signatures.Overlaps( entityClassNames );
}
}