ArenaBrightness.cs
using Sandbox;
namespace PaintballBaddies;

/// <summary>Brightens every arena once at load: more ambient fill, a higher
/// auto-exposure ceiling and brighter restaurant fill lights. Local only.</summary>
public sealed class ArenaBrightness : Component
{
    public bool Applied {get;private set;}
    private float wait;
    protected override void OnUpdate()
    {
        if(Applied)return;
        wait+=Time.Delta;
        var camera=Scene.Camera;
        if(!camera.IsValid() || wait<1 || Scene.GetAllComponents<MapInstance>().Any(m=>m.Active && !m.IsLoaded))return;
        Applied=true;
        bool restaurant=ArenaSelection.Current(Scene)==ArenaSelection.Restaurant;
        // Auto exposure: let darker rooms open up further, and lift overall exposure.
        var tone=camera.Components.Get<Tonemapping>() ?? camera.Components.Create<Tonemapping>();
        if(!tone.AutoExposureEnabled){tone.AutoExposureEnabled=true;tone.MinimumExposure=.5f;tone.MaximumExposure=1.5f;tone.ExposureCompensation=0;}
        tone.ExposureCompensation+=.6f;
        tone.MaximumExposure=System.MathF.Max(tone.MaximumExposure,2.5f);
        tone.MinimumExposure=System.MathF.Max(tone.MinimumExposure,.8f);
        // Ambient fill so shadowed corners and faces stay readable.
        var ambient=Scene.GetAllComponents<AmbientLight>().FirstOrDefault();
        if(ambient.IsValid())ambient.Color=ambient.Color*1.8f;
        else
        {
            var go=new GameObject(true,"Arena ambient fill"){NetworkMode=NetworkMode.Never};
            go.Components.Create<AmbientLight>().Color=restaurant ? new Color(.34f,.3f,.26f) : new Color(.28f,.3f,.33f);
        }
        if(restaurant)
            foreach(var light in Scene.GetAllComponents<PointLight>().Where(l=>l.GameObject.Name.StartsWith("Restaurant warm fill")))
            {light.LightColor=light.LightColor*1.45f;light.Radius=System.MathF.Max(light.Radius,540);}
        Log.Info($"ARENA_BRIGHTNESS arena={ArenaMap.DisplayTitle(Scene)} exposure={tone.ExposureCompensation:0.00} max={tone.MaximumExposure:0.0}");
    }
}