Worst-case scenario: the UEd Goblin wipes the map and burns down your house.

Difference between revisions of "Legacy:ZoneInfo (UT)"

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search
 
(One intermediate revision by the same user not shown)
Line 149: Line 149:
  
 
'''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.
 
'''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?
 

Revision as of 05:51, 7 April 2005

UT :: Actor >> Info (UT) >> ZoneInfo (Package: Engine)

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.

See zoning for more on working with zones, and Actor Overview for more on actors in general.

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.

Examples

This is a small map created by EntropicLqd with examples of all types of zone. Read the enclosed text file for more details.

http://wiki.beyondunreal.com/dl.php/wiki/examplemaps/dm-zoneexample.zip

Properties

Changing these properties for the LevelInfo affects all zones without a ZoneInfo actor.

ZoneInfo Group

Zone Properties

name ZoneTag 
Used to link ZoneTrigger objects to the zone. The Event property of the ZoneTrigger must match the ZoneTag value 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 DamageString.
localized string DamageString 
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.

Zone Flags

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 
Zone instantly kills those who enter.
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 DamagePerSec is 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 

LocationStrings Group

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.

ZoneLight Group

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.

Reverb Group

(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[6] 
byte Gain[6] 

LensFlare Group

Texture (UT) LensFlare[12] 
float LensFlareOffset[12] 
float LensFlareScale[12] 

Script-only

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.

Methods

Iterator Functions

ZoneActors (class<Actor> BaseClass, out Actor Actor) 
Iterates through all actors in this zone.

Other Functions

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.

Known Subclasses

Some of these merely differ from ZoneInfo by their default properties, for instance WaterZone. Others, such as PressureZone add new scripted behavior.

Related Topics

See NoTransloc for more details on making a zone non-translocatable.

Comments

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.