module Base
{
    /* Scene-only 360-degree view cone. A model-less, texture-less clothing item
       worn for the length of a scene and taken off the moment it ends
       (ZR_Vision360.lua).

       The engine multiplies the player's view cone by the product of every worn
       item's VisionModifier and then clamps the result to 18..360 degrees
       (LightingJNI.calculateVisionCone, read in 42.20.4). That multiplier is the
       only term a mod can reach, so a full circle is bought by WEARING it.

       20, not 3: the multiplier lands AFTER the darkness / fatigue reduction, and
       in an unlit room the cone is already floored at 18 degrees - x3 would give
       54, not a circle. x20 takes even that floor past 360 and the clamp does the
       rest, so the circle is identical in daylight, in a dark house, drunk,
       panicked and exhausted.

       It declares NO ClothingItem, ON PURPOSE, and that is the whole point.
       Every worn item that HAS one is fed to the character texture compositor,
       and an empty model pair does NOT opt out of that - the engine reads it as
       a body OVERLAY and paints it straight into the player's composited skin
       texture (ModelInstanceTextureCreator.init:132 falls through to
       addClothingItem when the model name is blank; :434 then applies it to the
       character texture rather than to a model of its own). With no
       m_BaseTextures the layer's path resolved to "media/textures/null.png"
       (:303, unguarded concat of a null) - a full-body layer painted with a file
       that does not exist, which stripped the player of every texture the moment
       a scene started. With no ClothingItem the compositor's FIRST test,
       getClothingItem() == null, skips the item outright and the skin atlas is
       never touched.

       VisionModifier needs no visual: updateWornItemsVisionModifier reads it off
       the worn InventoryItem directly (IsoGameCharacter:15072-15078), with no
       reference to a ClothingItem, model or texture. Vanilla ships four
       wearables with a BodyLocation and no ClothingItem, so this is a supported
       shape, not a trick.

       Grab-proof by SLOT, not by geometry: ZomboRutScene's BODY_MOD_NAMESPACES
       already lists "zomborut", so _isBodyModSlot("ZomboRut:Vision") is true and
       every strip / grab / rip path short-circuits on it before any visual test
       runs. CanHaveHoles = false keeps _maxDamageAllClothing off it too, and it
       covers no body part, so the per-hit coverage grab can never select it. */
    item ZR_Vision360
    {
        DisplayCategory = Appearance,
        DisplayName = Awareness,
        ItemType = base:clothing,
        BodyLocation = ZomboRut:Vision,
        VisionModifier = 20.0,
        CanHaveHoles = false,
        WorldRender = false,
    }
}
