The three virtues of a programmer: Laziness, Impatience, and Hubris. – Larry Wall
This actor sets properties for the zone its placed in, such as ambient lighting, gravity, location string etc. A number of subclasses hold presets for different types of environment, such as WaterZone and LavaZone.
This may seem obvious, but after adding a new ZoneInfo actor, the map geometry must be rebuilt for that actor's properties (e.g. ZoneLight) to take effect.
See Zonelight for more on this.
See ZoneInfo for the UT2003 version of this class.
- 1 Examples
- 2 Properties
- 3 Methods
- 4 Known Subclasses
- 5 Related Topics
- 6 Comments
This is a small map created by EntropicLqd with examples of all types of zone. Read the enclosed text file for more details. https://ut.rushbase.net/beyondunreal/wiki/examplemaps/dm-zoneexample.zip
Changing these properties for the LevelInfo affects all zones without a ZoneInfo actor.
- name ZoneTag
- Used to link ZoneTrigger objects to the zone. The Event property of the ZoneTrigger must match the
ZoneTagvalue for the zone to trigger (used to trigger PressureZones).
- vector ZoneGravity [replicated to clients]
- The gravity of a zone. It can be edited to pull objects in any direction (or not). Set it at a negative value to reverse the relevant gravity vector. Decrease the values to create a low-grav zone. Remember, a negative Z component means that the gravity pulls the player downwards. The default gravity for a zone is (0, 0, -950).
- vector ZoneVelocity [replicated to clients]
- The velocity of objects that enter the zone. It influences the velocity vector of players (making it increase/decrease) when they enter the zone. Can be used in combination with gravity zones for more realistic gravity effects.
- float ZoneGroundFriction
- The friction a player undergoes when walking/running. Decrease the value to create a slippery surface.
- float ZoneFluidFriction
- The friction of the fluid in the zone. Only works when there is fluid in any form (i.e. water, slime, tar etc., so
bWaterZone = True)
- float ZoneTerminalVelocity
- This is the fastest speed an object can travel within the zone. Actors attempting to travel faster than this have their speed capped at this value. This setting can be one reason why Kickers don't always behave quite as expected.
- name ZonePlayerEvent
- An event that will be posted to all actors whenever an actor that has bIsPlayer = true set enters or exits the zone. As far as I can tell this event is only posted when the number of "players" within the zone increases to 1 (on entry to the zone), and decreases to 0 (on exit to the zone).
- int DamagePerSec
- Amount of damage a player takes while in this zone.
- name DamageType
- Set this to SpecialDamage if you want to use the
- localized string DamageString
- see Legacy:Message_Placeholder#ZoneInfo.
- int MaxCarcasses
- The maximum number of dead bodies allowed within the zone. Set this is a low number in open areas to improve rendering speeds. Set it to 0 in lava zones and other instant death zones to preserve memory.
- sound EntrySound
- The sound to play when an actor enters the zone, e.g. Sound'UnrealShare.Generic.DSplash' for WaterZones.
- sound ExitSound
- The sound to play when an actor leaves the zone, e.g. Sound'UnrealShare.Generic.LavaEx' for LavaZones.
- class<Actor> EntryActor
- The "graphical effect" to display when an Actor enters the zone. Spawned at the point the actor enters, e.g. class'UnrealShare.WaterImpact' for WaterZones.
- class<Actor> ExitActor
- The "graphical effect" to display when an actor leaves the zone. Spawned at the point the actor leaves, e.g. class'UnrealShare.FlameExplosion' for LavaZones.
- bool bWaterZone
- Zone is slightly humid (indeed somewhat damp) when set to true. Desert dry if false.
- const bool bFogZone
- Allowes fog in this zone.
- const bool bKillZone
- The code is commented with Zone instantly kills those who enter but in fact this flag seems to do nothing.
- bool bNeutralZone
- Players can't take damage in this zone.
- bool bGravityZone
- Use ZoneGravity. Setting this to False doesn't seem to have any effect. (?)
- bool bPainZone
- True means that players will take damage according to the damage values in this zone. This will be set to True when
DamagePerSecis greater than 0 and the zone is triggered.
- bool bDestructive
- Destroys carcasses.
- bool bNoInventory
- If this is true then inventory items cannot exist within the zone (e.g. when they are dropped they are destroyed).
- bool bMoveProjectiles
- This zone should impart velocity to projectiles and effects.
- bool bBounceVelocity
- This velocity zone should bounce actors that land in it. (doesn't have any effect?)
per-Zone mesh LOD lighting control
The number of lights applied to the actor mesh is interpolated between the following properties, as a function of the MeshPolyCount for the previous frame.
- byte MinLightCount
- minimum number of lights to use (when MaxLightingPolyCount is exceeded)
- byte MaxLightCount
- maximum number of lights to use (when MeshPolyCount drops below MinLightingPolyCount)
- int MinLightingPolyCount
- int MaxLightingPolyCount
- localized string ZoneName
- This string will appear as a player's location on team game HUDs and scoreboards. This is overridden if the player is within the radius of a LocationID.
- byte AmbientBrightness, AmbientHue, AmbientSaturation [all replicated to clients]
- These set the color of the ambient lighting for the zone, and work just like the corresponding properties of a light. Ambient light looks pretty awful no matter how you use it though, so you may want to avoid this except for testing purposes. :)
- color FogColor [replicated to clients]
- float FogDistance
- const Texture (UT) EnvironmentMap
- float TexUPanSpeed, TexVPanSpeed [both replicated to clients]
- These give the panning speed for all surfaces in the zone whose U-Pan or V-Pan Surface Flags (UT) have been set.
- vector ViewFlash
- Obviously only the X component of this vector has an effect for fog calculation/rendering. Further research neccessary.
- vector ViewFog
- Sets a tint on the player's viewport while in that zone. PressureZone changes this value, to do the reddening effect seen in DM-Pressure.
It's worth mentioning the idiosyncasies of the ViewFog property here. I think is was me (Tarquin) and Elbundee who figured it out on the JailBreak forum: the vector is treated as XYZ = RGB, with the scale going from 0 to 1.
(also see Reverb)
- bool bReverbZone [replicated to clients]
- Whether this zone should use the reverb settings.
- bool bRaytraceReverb
- float SpeedOfSound
- byte MasterGain
- int CutoffHz
- byte Delay
- byte Gain
- Texture (UT) LensFlare
- float LensFlareOffset
- float LensFlareScale
- int ZonePlayerCount
- Current number of players in this zone.
- int NumCarcasses
- Current number of Carcasses in this zone. This number is increased and decreased by the carcass classes.
- LocationID LocationID
- This is a reference to the first item in the linked list of LocationIDs in this zone.
- SkyZoneInfo SkyZone
- Optional sky zone containing this zone's sky.
- LinkToSkybox ( ) [simulated]
- This function is called from PreBeginPlay and initialises the link to the Sky Zone for this zone. The SkyZoneInfo object linked to is determined by the detail settings on the client machine (if there is more than one).
- ActorEntered (Actor Other)
- This event fires whenever an actor enters the zone. It is responsible for posting any event specified by the ZonePlayerEvent property by calling the Trigger function. The function also applies any zone physics to objects with physics of PHYS_Projectile or objects of type Effects (UT).
- ActorLeaving (Actor Other)
- This event fires whenever an actor leaves the zone. It is responsible for posting any event specified by the ZonePlayerEvent property by calling the UnTrigger() function.
- MCloudZone (custom class; fixes CTF flag bug)
- CounterZone (custom: http://darendash.home.comcast.net/CounterZone.html )
- DuckingZone (DM-DuckingZone) (custom)
- JailZone (Jailbreak)
- JBArenaZone (Jailbreak)
- Jumpzone (custom)
- Iterator functions
See NoTransloc for more details on making a zone non-translocatable.
Might be worth mentioning that ZoneInfo has an iterator function; - Probably - not found an example of use yet, but then I've not looked.
A thought: we could do a "Types of Zone" or something page.
EntropicLqd: Isn't that already covered within the general Zones page? It might be worth linking the example map from the general zone page as well thinking about it.
Tarquin: not sure. Zones / Zoning etc is on the list of topics that need refactoring. your idea sounds good to me.
Wormbo: Is there any reason, why we should give event methods a special heading in class descriptions like this one?
EntropicLqd: I did it to be consistent with the rest of the stuff I'd already done. Although the distinction between events and functions in UnrealScript is somewhat logical in nature it is a pleasant distinction.
Mychaeel: Besides, events are customarily used for engine notifications (as opposed to "called from somewhere else in the available UnrealScript code"). I think making that distinction has its benefits.
Evilmrfrank: What exactly is the reverb option for. I noticed that the zone info actor in frigate used this option. Just wondering if it offers any better quality sound or picture or what? Also one more thing, why are many of the lights in official maps invisible in the editor? IS there any purpose other then just keeping them out of the way or are they invisible for a good reason?