This is a reference for mappers wanting to use Dynamic Weather.
Get the latest version of DWeather HERE (24/10/04)
DWeather (short for Dynamic Weather) had humble beginnings. Originally, when I was building AS-MZ-HighRise, I had the idea that the rain in the level shouldn't be infinite. I wanted it to stop raining for a while, then to start raining again later on. At this point, I didn't have any coding experience at all. I harassed a coder friend and he mashed out a basic script that worked nicely. This had me curious. I fired up his script and edited it so that I could trigger some lights as well. I showed it to a mapper coder friend using a silly map I knocked out to demonstrate the effects and he loved it! From that point on, I've been learning more about coding and have come up with a little package that I'm quite proud of.
I initially set this page up for the Wanderlust guys (after their leader Kris had MAJOR difficulty getting a level to fade :P) so if/when they come to putting weather in their maps they will have the chance to experiment with DWeather and will have a handy reference. Please note this is not a tutorial, and as such you do not need to do/use everything listed on the page to get the desired effect. This is merely a reference for the various actor types that are used in DWeather. If you have any further questions about something, and it is not listed here, you can contact me using any one of the listed contact methods. Also, this reference assumes familiarity with many of the stock UT2004 actors, so if I mention something that you don't recognise, have a fish around the actor browser for it. If you still aren't sure, contact me. By the way, I am Australian. This means that I speak (and read/write) European English. REAL English. So, I don't care how YOU spell Colour, I spell it with a U. Kthx. Don't e-mail me about it.
Note that I am continuously changing the DWeather code to make it work better, optimize it etc. Because of this, you should check back here regularly to get the latest DWeather.u and read up on what has changed.
Finally, If you want to use DWeather in a map or mod, I don't mind as long as you credit me in some sort of readme and provide a link back to this page.
Firstly, you will need the latest instalment of DWeather. HERE. Point WinRAR to your UT2004 directory and the rest should take care of itself.
These files were last updated on the 24th of October, 2004.
Secondly, open up UnrealEd. After you have fired up UnrealEd, you will need to tell it to use the DWeather code. Go to the actor browser by either clicking the button with the pawn chess piece on the top toolbar (Image) or hitting the Actor Classes tab in the editor's browser that appears on start-up. Once you are here, hit the open package button (the stock-standard windows open button). Navigate to your UT2004/System directory and open up DWeather.u.
Initially, it will appear as if nothing has happened except the list in the Actor Browser has collapsed back to Actor. Expand the list and OH NOES! It all looks the same as it did before. That's because the various DWeather actors subclass existing actors, so you have to dig to find them. The different types of placeable actors are (colour coded according to type):
Click the name of an actor in the class list
to go to the relevant write-up.
To save you the trouble of searching through the Actor Browser, here is where to find most of these tasty morsels:
NOTE: If all you see is a bunch of titles, don't panic. Clicking a title will expand (or collapse) the write-up.
(thanks to SilentNiGHTS for teh crafty script)
DWAmbientSound can be accessed from Actor -> KeyPoint -> AmbientSound -> DWAmbientSound (Image)
The DWAmbientSound actor is an extension of the normal AmbientSound that allows the mapper to have one ambient sound playing, then when the ambient sound is triggered it will play a different sound. When it is triggered a second time, it will revert to the original sound, ad infinitum. This was set up so that I could have a map that played one ambient sound during the day and a different one at night. At the moment, the transition between the sounds is instantaneous so there is no fade. That is because I haven't gotten around to mulling about with that piece of code yet!
Select DWAmbientSound from the actor browser. Right-click where you want it to be and hit Add DWAmbientSound Here. Once you have it in there, double-click the DWAmbientSound you just placed (or when it is highlighted, press F4) and expand the Weather_Sound tab (Image).
Here you will see some properties divided up into 2 categories: Day, and ....... *drumroll*........ Night! (Image) Here, you can set what sound you want to play during the 'day' and 'night' (DaySound/NightSound) and choose their respective radii (sound distance) and volume (DaySoundRadius/Volume, NightSoundRadius/Volume). The final property, Phase, chooses what sound it be playing when the level starts (hey, it doesn't just know!). Choosing DWS_Day will mean that when the level starts, the DWAmbientSound will be playing whatever sound you chose for DaySound. Conversely, choosing DWS_Night will mean that when the level starts the DWAmbientSound will be playing the sound you chose for NightSound.
Please note: You can do whatever you want in the Sound tab, but it won't make any difference. You could choose a cow mooing as your ambient sound, but as soon as the level starts, the DWAmbient sound looks at what Phase you have chosen and plays the respective sound, regardless of what sound you specified under Sound -> AmbientSound. The only use this has is testing a sound in the editor to see how it works with your level, then putting it in the right field under Weather_Sound.
The only other property we are concerned with here is the Events -> Tag field. This is how we make the sound change. Give the DWAmbientSound a tag, then when that tag is triggered by something, it will change to next Phase, causing it to play the opposite sound.
DWChargingLight can be accessed from Actor -> DWParent -> DWLightParent -> DWChargingLight.
The DWChargingLight is a light that will fade up or down to a specified brightness when it is triggered, then fade back to the original brightness if it is triggered again. It can be specified a time over which it takes to fade and the minimum and maximum brightness.
Select DWChargingLight from the actor browser. Right-click where you want it to be and hit Add DWChargingLight Here. Once you have it in there, double-click the DWChargingLight you just placed (or when it is highlighted, press F4) and expand the DWChargingLight tab (Image).
The MaxBrightness and MinBrightness settings are the two levels of brightness the DWChargingLight will fade up and down to. It does not matter what you set LightColor -> LightBrightness to, this will be overridden in-game.
FirstState decides whether the light's brightness should be at the minimum or maximum initially. IS_Maximum makes the DWChargingLight begin with a brightness equal to that of the MaxBrightness. Conversely, IS_Minimum makes the DWChargingLight begin with a brightness equal to that of the MinBrightness.
Time is the length of time (in seconds) that the DWChargingLight will take to fade from one level of brightness to another.
CalculationInterval is the 'refresh rate' of the light. It is completely independent of the Time. It sets the time interval (in seconds) that it should update the light settings while fading. This means that if you choose an update rate of 5 seconds and a time of 20 seconds, the light will only update 4 times during the fade, which will look ugly. To get a decent looking fade, set calculation interval to something like 0.05 seconds.
DWFadingLight can be accessed from Actor -> Actor -> DWParent -> DWLightParent -> DWFadingLight.
The DWFadingLight is a light that will fade up and down between two different colours and brightness's over a specified period of time. This is basically the daddy of DWeather lights as you can have it fade between day colours and night colours, each with different brightness's. The only problem with this is that it is a little confusing to set up so help beginners I have made it default to night and day settings that can be changed later. Note that this fading is continuos, so once the light completes a fade it will fade back again, just like our Day/Night cycle in real life.
Select DWFadingLight from the actor browser. Right-click where you want it to be and hit Add DWFadingLight Here. Once you have it in there, double-click the DWFadingLight you just placed (or when it is highlighted, press F4) and expand the DWFadingLight tab and the Lighting tab (Image).
Under DWFadingLight, you will notice a whole heap of properties. Firstly, the colours, MaxColour and MinColour. These are where you choose your 'day' and 'night' colour. Note: It technically doesn't matter which one you make your day and which one you make your night, but as a general rule, make day the MaxColour and night the MinColour. To choose a colour, either expand the property and type in the colour value or click the property and hit the [...] button to the right of the property (Image).
Next, we have the MaxBrightness and MinBrightness. These are the brightness's that correspond with the MaxColour and MinColour. That is, when the light's colour is the MaxColour, it's brightness will be the MaxBrightness, and vice versa. Nothing really difficult here, but if you decided to follow my general rule about MinColour and MaxColour, then you should also have MinBrightness as the night brightness and MaxBrightness as the day brightness.
The other 3 properties we are concerned with here are FadePhase and FadeTime. FadePhase chooses what setting the light should be on when the map starts. If this is FF_Cosine, then the light will start out on the Max settings. Conversely, if it is set to FF_NegativeCosine then it will begin on the Min settings. FadePhase is pretty simple - it is the time (in seconds) that it will take to fade between the Max and the Min settings. Normally I would have explaned what the final property CalculationInterval did here but that has since been removed. The light now updates per tick, making it look much nicer.
Note: The fading does not take care of the Saturation (originally it did but produced some odd results, so I left this out). This means that whatever saturation you set under LightColor -> LightSaturation will be constant for the ride. The closer the saturation is to 255, the whiter the light gets, so set it to something decent like 170. Also, the radius and other light settings are also constant.
Anything you set in the LightColor tab (besides LightSaturation) is disregarded by the game once the level is started. The light checks what phase it should start in and changes its settings accordingly. The only use for the default LightColor and LightBrightness fields is for testing in the editor.
DWSunlight can be accessed from Actor -> DWParent -> DWLightParent -> DWFadingLight -> DWSunLight.
The DWSunlight is an extension of DWFadingLight that functions like the Sunlight actor. For how to use it's various properties, see DWFadingLight. It is useful for lighting up a whole level's worth of StaticMeshes, but it will NOT work on terrain or BSP (for some stupid hardcoded reason). To fade with BSP and Terrain, use a DWFadingLight and set it to bSpecialLit = True (in the DWFadingLight's properties -> Lighting) Once you have done this, select your TerrainInfo and also set it to bSpecialLit = True. For any BSP surfaces, select them and hit F5. Go to the flags tab and check Special Lit.
What this does is makes it so that the DWFadingLight you have chosen will only light things that are also bSpecialLit = True, causing your terrain and BSP surfaces to only be lit by that (and any other) SpecialLit DWFadingLight.
DWTriggerLight can be accessed from Actor -> DWParent -> DWLightParent -> DWTriggerLight.
The DWTriggerLight is a simple light that will toggle immediately between two specified sets of lighting settings when it is triggered, and will return to the previous set when triggered again.
There are 3 tabs we are concerned with: Weather_Day, Weather_Info and Weather_Night. Pretty obviously, all the settings in Weather_Day correspond to what the light would be in it's 'day' state and the Weather_Night settings correspond to what the light would be in it's 'night' state. I'm not going to go through them as they are pretty self-explanatory. The only thing we need to worry about is the Phase under Weather_Info. This tells the light what state to be in when the map is started. DWL_Day makes the light display the Weather_Day characteristics on level start, and vice versa for DWL_Night.
The only other property we are concerned with here is the Events -> Tag field. This is how we make the light change. Give the DWTriggerLight a tag, then when that tag is triggered by something, it will change to next Phase, causing it to change to the other phase (and hence display the other set of characteristics).
DWStaticMesh can be accessed from Actor -> StaticMeshActor -> DWStaticMesh (Image).
The DWStaticMesh is an extension of the StaticMeshActor that defaults to using dynamic lighting. Funnily enough, the normal StaticMeshActor class is by default already set to the correct settings, so the DWStaticMesh class is redundant and you shouldn't worry about it for now. It will serve some other purpose at some point but at the moment ignore it.
DWTimedTrigger can be accessed from Actor -> Triggers -> DWTimedTrigger (Image)
The DWTimedTrigger behaves like a normal trigger, but instead of waiting for an event to fire off it's own event, it waits for a certain amount of time.
In the DWTimedTrigger's properties there are 2 tabs we are concerned with, DWTimedTrigger and Events (Image). In DWTimedTrigger you will see bEnabled, bRepeating, bUseInstigator, MaxDelaySeconds and MinDelaySeconds.
bEnabled decides if the trigger will automatically start timing when the level begins. If this is set to True, the trigger will be timing right from the get-go. If it is set to false, the trigger will only start timing when it is triggered by something else (as this sets it to bEnabled = True). bRepeating will decide wether the trigger will repeat once the timer has counted down and the event triggered. If True, the trigger will start the timer again once it has done its job, making it an infinitely repeating trigger. If False, the trigger will only count down and trigger once. Don't worry about bUseInstigator, leave it as False.
The time the trigger takes can be somewhat random or it can be precise. To make it random, Set the MaxDelaySeconds to be higher than the MinDelaySeconds. For example, in my test level, the MaxDelaySeconds is set to 20 seconds and the MinDelaySeconds is set to 10 seconds (Image). This means that the trigger will randomly choose a time in that range and count it down. It is random for each new count-down it does.
That is all fantastic and wonderful, but it needs something to trigger. In the Events tab, put something in Event. In my example, I have the Event set to be TriggerMe (Image). This means that every actor that has a Tag of TriggerMe will be triggered by this DWTimedTrigger.
Also, if you plan on enabling/disabling the DWTimedTrigger, you will need to give it a Tag. In my example, I have the tag set to WaitForMe (Image). This means that, because my example is set to bEnabled = True, when something else fires off the Event = WaitForMe, this DWTimedTrigger will stop timing (and hence, stop triggering).
This is useful as you can use it in conjunction with the DWTriggerLight, DWChargingLight, DWWeatherEmitter, DWAmbientSound and ClientMaterialTrigger to have a level that changes from 'day' to 'night' at regular intervals.
ClientMaterialTrigger can be accessed from Actor -> Triggers -> MaterialTrigger -> ClientMaterialTrigger (Image).
The ClientMaterialTrigger behaves exactly like a normal MaterialTrigger, but it is replicated online so any connected clients will also see the effect.
This one is thanks to Wormbo, who so generously posted it on the Wiki. To use it, set up one or more MaterialSwitches or MaterialSequences, and then in the properties of the ClientMaterialTrigger, point it to the MaterialSwitch(es) or MaterialSequence(s) you created. When the ClientMaterialTrigger is triggered by something, it will cause the selected MaterialSwitch(es) or MaterialSequence(s) to proceed to their next action.
DWWeatherEmitter can be accessed from Actor -> xWeatherEffect -> DWWeatherEmitter (Image).
The DWWeatherEmitter behaves exactly like the normal xWeatherEffect, but can be triggered on and off. This was the beast that started it all, for use in AS-MZ-HighRise.
There are no new properties to deal with, only the Events tab. Here, you set the DWWeatherEmitter a tag. When that tag is triggered by something else, the rain / snow / whatever will fade in or out.
Note: There is as yet no option to choose whether the rain is falling immediately as the level begins or whether it is not. At the moment, it is falling as the level begins, and when it is triggered for the first time it will fade away. Any subsequent triggering will toggle it on or off accordingly.
DWZoneInfo can be accessed from Actor -> Info -> ZoneInfo -> DWZoneInfo (Image).
The DWZoneInfo functions exactly as the same as the regular ZoneInfo, but allows the mapper to fade the colour and the start/end distance of distance fog. The fading is the same as the fading seen using the DWFadingEmitter, and as such many of the properties are the same. Thus, most of the following information is directly copied from DWFadingLight but some of it is different so you should read it anyway.
Select DWZoneInfo from the actor browser. Right-click where you want it to be and hit Add DWZoneInfo Here. Once you have it in there, double-click the DWZoneInfo you just placed (or when it is highlighted, press F4) and expand the DWZoneInfo tab (Image).
In DWZoneInfo, you will see a whole heap of properties. Firstly, the colours, MaxColour and MinColour. These are where you choose your 'day' and 'night' colour. Note: It technically doesn't matter which one you make your day and which one you make your night, but as a general rule, make day the MaxColour and night the MinColour. To choose a colour, either expand the property and type in the colour value or click the property and hit the [...] button to the right of the property (Image).
Next the MinFogStart and MinFogEnd. These are the distances (in Unreal Units) that the fog will start (beginning of fog) and finish (be completely solid) when the colour is at the minimum. Following on from those are the MaxFogStart and MaxFogEnd. These are the distances (in Unreal Units) that the fog will start (beginning of fog) and finish (be completely solid) when the colour is at the maximum.
The other 3 properties we are concerned with here are FadePhase, FadeTime and CalculationInterval. FadePhase chooses what setting the fog should be on when the map starts. If this is FF_Cosine, then the fog will start out on the Max settings. Conversely, if it is set to FF_NegativeCosine then it will begin on the Min settings. FadePhase is pretty simple - it is the time (in seconds) that it will take to fade between the Max and the Min settings. Finally, CalculationInterval is the 'refresh rate' of the fog. It is completely independent of the FadeTime. It sets the time interval (in seconds) that it should update the fog settings. This means that if you choose an update rate of 5 seconds and a fade time of 20 seconds, the fog will only update 4 times during the fade, which will look ugly. To get a decent looking fade, set calculation interval to something like 0.05 seconds (the game itself only barely updates at this rate, so going any lower won't have an effect).
DWAmbientMonster can be accessed from Actor -> DWParent -> DWAmbientMonster.
The DWAmbientMonster is a simple actor that allows a mapper to have a number of weaker monsters roam a level. They spawn at random pathnodes around the level, and when one is killed it has no effect on a player's score (unless the gametype is invasion), respawning at another random pathnode.
Select DWAmbientMonster from the actor browser. Right-click where you want it to be and hit Add DWAmbientMonster Here. Once you have it in there, move the DWAmbientMonster somewhere out of the level (in a wall or static mesh is good) because no matter how hard I tried, I could not get the icon to be hidden in-game. It does not matter if the actor itself is embedded in geometry, it makes no physical interaction with the map. Then double-click the DWAmbientMonster you just moved (or when it is highlighted, press F4) and expand the DWAmbientMonster tab (Image).
The first sub-menu, AllowedMonsters, contains three boolean values: Manta, RazorFly and SkaarjPupae. These decide which of three weaker monsters will make an appearance in the map. Setting all to true will make the DWAmbientMonster randomly spawn any one of the three. Setting one to false will mean that only the other two are spawned, and so on.
Enabled decides whether the DWAmbientMonster should be spawning the monsters automatically. Setting this to true will cause the level to automatically be occupied by monsters. Setting this to false will cause the DWAmbientMonster to spawn nothing until it is triggered (only if OnTrigger is set to OT_ToggleEnabled).
MaxMonsters is pretty self-explanatory: it is the maximum amount of ambient monsters to be in the map at any one time. I would recommend a low number like 6 or 8 otherwise a normal deathmatch will practically become invasion.
MonsterTag is optional. Whatever is entered in this field will be the Tag of all the spawned monsters. This can be used in conjunction with a scripted trigger to kill all of the ambient monsters occupying a level at once.
OnTrigger decides what the DWAmbientMonster should do if it is triggered. If this is set to OT_ToggleEnabled, when the DWAmbientMonster is triggered it will either be turned off (if it was enabled when it was triggered), or it will be turned on (if it was not enabled when it was triggered). If this is set to OT_SpawnMonster the DWAmbientMonster will spawn a new monster regardless of how many are already in the level. If there are already the maximum number, triggering will cause a new one to be spawned anyway.
RespawnTime is the time between each spawning. At the start of the match (provided Enabled is true) the monsters will be spawned one per RespawnTime until the MaxMonsters is reached. When a monster is destroyed, it will respawn after this amount of time. If multiple monsters are destroyed in the same instant, they will spawn one per RespawnTime until the MaxMonsters is reached, just as they did at the start of the match.
DWEarthquake can be accessed from Actor -> DWParent -> DWEarthquake.
The DWEarthquake is an actor that allows a mapper to have 'earthquakes' occur at regular or semi-regular intervals. The screen shakes and any vehicles or players that are on the ground will be given an upwards (and random sideways) velocity to simulate the ground shaking. The further an actor is away from the DWEarthquake (think of the DWEarthquake as the epicentre), the weaker the effect.
Select DWEarthquake from the actor browser. Right-click where you want it to be and hit Add DWEarthquake Here. Once you have it placed, double-click the DWEarthquake you just placed (or when it is highlighted, press F4) and expand the DWEarthquake tab (Image).
The EarthquakeInterval sub-menu controls how often an earthquake will occur. Each earthquake will occur a random value (in seconds) between the max and min after the last earthquake. The random value is re-calculated again after each earthquake.
Enabled decides whether the DWEarthquake should be timing automatically. Setting this to true will cause the DWEarthquake to automatically be timing the earthquakes when the level begins. Setting this to false will cause the DWEarthquake to do nothing until it is triggered, at which point it will begin timing.
EarthquakeLengthOfTime is pretty self-explanatory: it is the length of time the pawns/vehicles on the ground will be given the up/sideways velocity when an earthquake occurs.
EarthquakeRadius is the maximum distance (in Unreal Units) around the DWEarthquake that a pawn or vehicle must be to be affected by the shaking. Anything after this distance will not be affected. The strength of the shaking increases as you head towards the centre.
DWFire can be accessed from Actor -> DWParent -> DWFire.
The DWFire is an actor that allows a mapper to place just one actor and have a nice looking fire. It will automatically do damage, so placing a PhysicsVolume to cause damage is not required and it can be triggered on and off.
Select DWFire from the actor browser. Right-click where you want it to be and hit Add DWFire Here. Once you have it placed, double-click the DWFire you just placed (or when it is highlighted, press F4) and expand the DWFire tab (Image).
Like any fire, the DWFire gives of a nice pretty flickering light. This light changes colour, intensity and radius all the time. To do this, it needs these some values to change to begin with! I have set the DWFire up to automatically have nice defaults, but should you so require it, you can customize it. Let's have a bot of a looksie at what you would need to change:
First of all the fire fluctuates (flickers) randomly between two different brightness levels. These levels are the BrightnessRange. The brightness of the light produced from the fire will always be between these two value, regardless of the LightBrightness setting in LightColor.
Next, the fire does damage to pawns and vehicles. The PawnPainRadius is how close a pawn (player, monster etc) needs to be to the fire in Unreal Units to be damaged by the fire. The VehiclePainRadius is the same, but for vehicles. I suggest you keep VehiclePainRadius about 100-200 Unreal Units larger than the PawnPainRadius, as vehicle collision works is differently, so requires a larger radius to be detected (hence having two different settings to begin with).
The DWFire actually has an Emitter component that gets spawned and destroyed when the fire starts and stops. This is defined in FireEffectClass. The default (DWFireEmitter) is a nice little fire, suitable for a campfire, car wreck etc. If you have made your own fire emitter class, you can select it here.
I mentioned before about being able to trigger the fire off and on. Well, how does the game know what to begin with? On or off? FireMode. Setting this to FM_Burning will have the fire burning at the beginning of the match (can be 'put out' by triggering later). Conversely, setting this to FM_Dead will have the fire begin... well actually... not begin at all! (you can of course trigger it to come on later).
LightColourRange is the two colours that the fire will pick a point between to become the LightColor. For a typical fire, it is recommended that you leave this at the default settings.
RadialFluctuation is the maximum amount the light produced by the DWFire will deviate either side of the LightRadius. This means that if your LightRadius (Lighting -> LightRadius) is set to 80 and your RadialFluctuation is set to 4, at any given time the actual, in-game light radius could be anywhere between 76 (80 - 4) and 84 (80 + 4).
Variance can be seen as an extension of BrightnessRange. It is a multiplier that effects the final brightness. A variance of 1.2 will result in the final calculated LightBrightness being up to 1.2 times that of the value plucked from BrightnessRange. The higher the Variance, the more the distinct the differences in the light brightness's will be.
DWHail can be accessed from Actor -> DWParent -> DWHail.
The DWHail spawns chunks of hail anywhere in a mapper-specified square range. They fall in the direction the DWHail actor is oriented. When they hit pawns or vehicles they cause a small amount of damage.
Select DWHail from the actor browser. Right-click where you want it to be and hit Add DWHail Here. Once you have it placed, double-click the DWHail you just placed (or when it is highlighted, press F4) and expand the DWHail tab (Image).
Enabled sets whether the DWHail should be spawning hail automatically or not. If this is true, the hail will be falling as soon as the level begins. If this is false, the hail will only start to fall when the DWHail is triggered (which sets this to true). If it is already Enabled, triggering will disable it (stopping the fall of hail).
NumberSpawned controls how many hail stones are spawned every SpawnInterval.
SpawnInterval controls how often the DWHail spawns new hail stones. Each spawn, the new interval is recalculated from the Max and Min values set here. This is done so you get a random effect, just as the hail falling in real life is random. To attain a decent looking effect, I suggest you set both the SpawnInterval and NumberSpawned to low numbers (like the defaults).
The only property here that (somewhat) warrants a decent explanation is the SpawnRange. It sets the distance in Unreal Units either sire of the DWHail actor that the hail stones will be spawned. For example, imagine this grid as a top-down view of our level and that the centre of the grid is the DWHail:
Say I want the hail to only spawn above point P. Point P is between (1,1) and (2,2) (ie: horizontally between 1 and 2 units away from our DWHail),
so our XMin is 1, XMax is 2, YMin is 1 and YMax is 2.
This means that the hail stones are spawned in the following (highlighted) range:
But what if I need to extend this range, say, to cover another point Q as well?
If I want the range of the DWHail to cover both P and Q, I need to look at their locations with respect to the DWHail. Point P is still in the same place it was before, but point Q is between (-1,0) and (-2,-1). Taking into account the location of P, this means our SpawnRange XMin is -2, XMax is 2, YMin is -1 and YMax is 2.
This means that the hail stones are spawned in the following (highlighted) range:
That is all well and good, but how do you find out the distances you need to input? Once you have your DWHail placed in your map at the height from which you want the hail to fall, and oriented in the direction you want them to fall at, go to the top view of the editor and zoom out until you can see the whole area you want hail to fall on. Holding down the Shift and Control buttons, click and drag with the middle mouse button from the DWHail actor horizontally left until you reach the edge of the area you want hail in. The little number is the distance in Unreal Units. Since this is negative (with respect to the DWHail), when you add this to the SpawnRange, make it negative. This applies for measuring down too. For right/up, leave the values positive.
"If it wasn't for the last minute, nothing would ever get done" - Anon
Any comments, suggestions, further questions? E-mail me at firstname.lastname@example.org or send me a personal message at either my clan's site (-SCB-MarZer at [SCB]) or at the Atari boards (MarZer at AtariCommunity). Alternatively, you could post in the DWeather thread on the Atari boards.