Editor/Decompiler/Formats/Descriptors/Left4DeadBspFormatDescriptor.cs
using BspImport.Decompiler.Formats.Readers;
namespace BspImport.Decompiler.Formats.Descriptors;
/// <summary>
/// Left 4 Dead BSP descriptor.
/// Uses standard lump header layout.
/// </summary>
public sealed class Left4DeadBspFormatDescriptor : IBspFormatDescriptor
{
private static readonly HashSet<string> Signatures = new( StringComparer.OrdinalIgnoreCase )
{
"env_outtro_stats",
"env_player_blocker",
"env_rock_launcher",
"env_tonemap_controller_ghost",
"env_tonemap_controller_infected",
"env_weaponfire",
"filter_activator_infected_class",
"func_button_timed",
"func_elevator",
"func_nav_avoidance_obstacle",
"func_nav_blocker",
"func_nav_stairs_toggle",
"func_orator",
"func_playerinfected_clip",
"func_ragdoll_fader",
"func_spawn_volume",
"info_director",
"info_elevator_floor",
"info_goal_infected_chase",
"info_map_parameters_versus",
"info_survivor_position",
"info_survivor_rescue",
"info_zombie_spawn",
"logic_versus_random",
"point_deathfall_camera",
"point_viewcontrol_survivor",
"prop_car_alarm",
"prop_car_glass",
"prop_door_rotating_checkpoint",
"prop_fuel_barrel",
"prop_glowing_object",
"prop_health_cabinet",
"prop_minigun",
"prop_mounted_machine_gun",
"trigger_auto_crouch",
"trigger_escape",
"trigger_finale",
"trigger_finale_dlc3",
"trigger_hurt_ghost",
"weapon_ammo_spawn",
"weapon_autoshotgun_spawn",
"weapon_first_aid_kit_spawn",
"weapon_hunting_rifle_spawn",
"weapon_molotov_spawn",
"weapon_pain_pills_spawn",
"weapon_pipe_bomb_spawn",
"weapon_pistol_spawn",
"weapon_pumpshotgun_spawn",
"weapon_rifle_spawn",
"weapon_smg_spawn"
};
public BspGameFormat GameFormat => BspGameFormat.Left4Dead;
public IReadOnlySet<int> SupportedVersions { get; } = new HashSet<int> { 20 };
public string DisplayName => "Left 4 Dead";
public int SpecificityScore => 100;
public LumpHeaderLayout LumpHeaderLayout => LumpHeaderLayout.Standard;
public BrushSideLayout BrushSideLayout => BrushSideLayout.Standard;
public StaticPropLayout StaticPropLayout => StaticPropLayout.V8;
public IBspStructReaders GetStructReaders( int bspVersion ) => new StandardBspStructReaders();
public bool MatchesMapName( string mapName )
{
return !string.IsNullOrEmpty( mapName ) && mapName.StartsWith( "l4d_", StringComparison.OrdinalIgnoreCase );
}
public bool MatchesEntities( IReadOnlyList<string> entityClassNames )
{
return Signatures.Overlaps( entityClassNames );
}
}