The INI files contain weather and light specifications for the tracks in NFS:HS. They originate from the HRZ files found in NFS3, but with the enhancements made in NFS:HS they have been augmented with new features.
There are four INI files; one for each of the time/weather combinations available. The names of the files correspond to the conditions, as follows:
| TR.INI | Daytime |
| TRW.INI | Daytime with weather turned on |
| TRN.INI | Nighttime |
| TRNW.INI | Nighttime with weather turned on |
All you need to edit the INI files is a text editor; by default Windows will use Notepad for editing INI files. If you have selected a different text editor, make sure you save the file in ASCII format or it will appear corrupted to the game and crash it.
By editing the INI files, you can change the weather, light and sky color among other things. You can add thunder, rain or snow, change the position and size of the sun, alter the fog and edit the color and brightness of the light sources on the track. With careful editing you can change the atmosphere of a track only by changing values in the INI files - creating a misty summer morning or a chilling night scene. By editing the INI files you can add the final thouch to the tracks you make - letting them appear just the way you want.
The strip contains information on the horizon and its properties.
This is a boolean which specifies whether the screen should be filled with black before each frame is drawn, in which case the value is 1, if not the value is 0. When set to 1, no pixmap or horizon is drawn. This is useful if the track does not contain any horizon or pixmap (see below).
This feature is not used on any of the original tracks in NFS:HS, the ones from NFS3 included. In NFS2 however, it was used on Monolithic Studios, and in NFS3 for the PlayStation it was used on the Easter Egg track Caverns. There is also a corresponding function in the .FRD files (where the track model is kept), which specifies the ShouldDrawBlack variable individually for each slice of the track. This is used in the Temple on the track Lost Canyons.
This is a boolean and tells if the pixmap (see below) should be mirrored in the two halves of the horizon (1) or if it should be repeated with the same orientation in the two halves (0). For prominent horizons such as hills, it is often best to make a pixmap which can be repeated seamlessly in the two halves and set hrzMirror to 0, otherwise the mirroring of the two halves will cause a Rorschach effect at the seam. When you want there to be a scene only in the one end of the horizon, draw it in one end of your pixmap set hrzMirror to 1.
This specifies whether the track has a pixmap, i.e. a background landscape. This is a boolean value set to 1 if a horizon pixmap is used, and a 0 if not. This can be used to leave out the pixmap if none is needed, such as on a track set on an island in the middle of the ocean.
This specifies the offset for the pixmap and clouds relative to the logical horizon (the actual middle of the 3D world itself). Normally this offset has a negative value, placing it below the logical horizon. In most cases, a value at around -1000 to -1500 is used.
This is a single? precision floating point value indicating the height of the Gouraud shaded region of the sky and ground.
This is a single? precision floating point value indicating the position of the center of the Gouraud shaded region of the sky and ground.
This value specifies how high in the 3D world the top of the pixmap is relative to the horizon offset, hrzBottomYOff. The pixmap will appear closer or further away depending on the radius of the horizon; hrzRadius, so you will probably want to adjust the latter before you adjust hrzPmxTop. Commonly the value is at around 1500.0-2000.0 for a horizon with a radius at around 2000.0 and a hrzBottomYOff at -1000.
This specifies the bottom of the pixmap in the same manner as hrzPmxTop specifies the top. Commonly the bottom of the pixmap is slightly above the physical horizon and lying at 500-1000, placing the bottom of the pixmap near the logical horizon. When this is the case, the pixmap's bottom should be a bit below the horizon offset with a margin of about 50 units, to hide the seam where the sky and ground meet at the logical horizon.
This specifies the RGB color for the sky at the position of the horizon. The RGB values are expressed in normal 24-bit format and can each range from 0-255, where 0 is dark and 255 is bright.
This specifies the RGB color of the sky at the point opposite of the sun.
This specifies the RGB color at the top of the sky. This will gradually blend with the hrzSunColor and hrzOppositeSunColor values towards the horizon, above the top of the Gouraud shaded area the sky will be a solid color.
This specifies the RGB color at the top of the ground visible outside the track area.
This specifies the RGB color at the bottom of the ground visible outside the track area.
This specifies the radius of the horizon, and affects the appearance of the pixmap, clouds and shading. Common values range from 1500.0-2500.0.
This specifies the rotation around the horizontal axis, Theta (or ?), of the horizon in a counter-clockwise direction and is expressed in revolutions. A revolution is a full 360º rotation. To convert degrees to revolutions, use the following formula:
r=d/360
where d is the angle in degrees and r the result expressed in revolutions. Round the result off to 2 decimals.
Note that you cannot use this formula directly in the INI file; you must calculate the result and insert it 'as is'.
This is an integer and indicates the type of clouds to be applied. A value of 0 means no clouds will appear, a value of 1 means the clouds will be blended with the sky and finally a value of 2 means they will be blended as additive.
This is an integer and specifies the intensity, or brightness of the clouds. The value can range from 0 to 255, where 0 is dark and 255 bright.
This is an integer describing the variance of the clouds, i.e. the contrast between the bright and dark areas. Values may range from 0 to 255, where 0 means no variance and 255 full variance.
This is a fixed point variable and tells if the clouds produce a Nimbus effect in thunderstorms. The Nimbus effect is simply the refraction of light within the clouds which make them light up with the flashes. Values may range from 0.00 to 1.00, where 0.00 means there is no Nimbus effect at all and 1.00 there should be a strong Nimbus effect.
This is a boolean value which simply tells whether the fog on the track should affect the clouds, in which case it is set to 1; if not it is set to 0.
This is an integer specifying the windspeed. The windspeed affects the drifting of the clouds, as well as special effects such as rain and smoke. A value of 0 means the cloudsa and effects do not drift. For slow drift, use values around 20, for faster drifts use values between 60 and 90.
This is an integer describing the direction of the wind (in a counter-clockwise direction), again affecting both the clouds and special effects. Unlike the other angles in the INI file, this is expressed in degrees and can thus range from 0 to 359.
These two values describe if lightning shoud occur and if so, how often. When lightningChance is set to a value above 0, there is lightningChance percent chance lightning will strike in lightningOffTicks time.
If you want frequent flashes, set the percentage of lightningChance reasonably high and lightningOffTicks low. If you want occasional flashes, set both lightningChance and lightningOffTicks low. Note that if you set the lightningChance too high, flashes will occur with a distinct recurrence which might appear unnatural.
This is an integer and tells, in percent, how great the chance is a flash will occur in the period specified in lightningOffTicks. Normally, keep this value below 80 for a naturally random recurrence and adjust the lightningOffTicks value to determine the periodicity of the flashes. If you don't want any lightning set this to 0.
This specifies the periodicity of the lightning in ticks.
Fog comes in two forms; global and dynamic. The global fog affects the entire track in all areas where no dynamic fog zone has been defined. Dynamic fog zones let you add specific fog to a region of the track, and also fade smoothly between the different fogs.
This specifies the color of the global fog in 24-bit RGB. Each value is an integer and may range from 0 to 255 where 0 is dark and 255 bright. The scenery is blended towards this color by the amount specified in fogDensity.
This specifies the density of the fog in percent, ranging from 0 for no fog at all up to 100 for completely opaque fog.
This is a fixed point value and tells if the horizon should get affected by the fog, ranging from 0.00 for no effect up to 1.00 for full effect. Normally keep this at around 0.70-0.80.
This value is an integer and specifies how many fog regions have been defined, thus it should equal the number of dynamic fog regions in your INI file.
These are dynamic fog regions which specify a fog unique to a certain part of the track. fog region specifies the number of the region in the list and should start with 0 for the first region, followed by 1,2,3... etc for each subsequent fog region. startSlice, centerSlice and endSlice specify three positions along the track for the fog region. At each position the fog will have the properties specified in the *_color and *_density variables below the respective Slice entry. Between these positions, the game will gradually blend the nearest two values to fade between the different fogs.
The positions along the track specified in the Slice variables correspond to the rows of polygons making up the track. To determine the desired slice, you can open the track in T3ed and select Segment mode. Then move to the block you want and select it. In the lower right corner of the window you will see the number of the block. To determine the number of the first slice of that block, multiply the block number by 8. This will give you a preliminary value to use which you can fine tune later.
Note that where two fog regions join, they should both have the same color and density at the joining ends. Otherwise the fog will instantly switch from the one value to the other as you drive inbetween the regions. Similarly, where either end of a fog region does not join another region, they should have the same values as the global fog specified in fogColor and fogDensity to avoid switching.
If you need to cover a large section of the track with an even fog area, use two fog regions where the values at the opposing ends are the same as their adjacent fogs, and the four values in between have the values you want for the large fog area. Then set the centerSlice of both fog regions 10-50 slices in from the Slices at the opposing ends, so to create a transition region at either end. Finally set the two adjacent Slices of the two fog regions to any value in between the two centerSlices to make them join and complete the fog area.
This specifies the type of weather to be used, where 0 means no weather, 1 means rain and 2 means snow.
startSlice specifies an optional slice where the weather should start and can be used if you want to restrict the weather to a certain region of the track. Again, the Slice value refers to the slices of the track. Look above in the explanation of fog regions for information on how to determine the desired Slice value. If you want the weather to cover the entire track, set this variable and endSlice to 0.
This variable is connected to the startSlice and specifies the slice at which the weather should end.
When you have restricted the weather to a certain part of the track using startSlice and endSlice, this specifies a number of slices at either ends of the weather region across which the weather should be faded, that is gradually become denser as you drive into it. Reasonable values range from 5 for a quick transition up to 50 for a smooth transition.
Together with the other Time variables, this lets you choose to have the weather come and go periodically. stayTimeOn specifies how long the weather should remain active before the break, and is counted in ticks.
When you have chosen to have the weather come and go periodically in the stayTimeOn and StayTimeOff variables, this specifies a time during which the weather should fade out. Again, this is measured in ticks.
Like the stayTimeOn variable, this is used for making the weather break periodically and specifies how long the break should last before the weather comes back on. If you want the weather to remain constant, set this variable to 0.
While the fadeTimeOff variable specifies a time over which the weather should fade out, this specifies a time during which the weather should fade back in after the break. As is the case with the other Time values, this is measured in ticks.
This specifies the density of the weather in percent. 0 means there will be no downpour, and 100 that the downpour will be as dense as the game permits.
These speficy the ambient light for the track and are measured in percent. At a value of 0, the track will be completely dark, while at a value of 100 it will be as bright as has been specified in the internal shading values of the track file itself. If you want to make the track dark, choose values which lie at around 20 or more, anything less will make the track unplayable when the headlights have been busted. If you want the track to be fully lit, set the values to 100 or near.
These two values are used to determine the source of the incoming light for the car shading. Both have two decimals and specify the angle around the horizontal axis (Theta) and vertical axis (Rho). Both are expressed in revolutions. lightTheta expresses the horizontal angle in a conter-clockwise direction, where 0.00 equals East, 0.25 equals North, 0.50 equals West and 0.75 equals South. lightRho expresses the vertical angle ranging from 0.00 for Zenith where the sun is placed at the top of the sky, and 0.39 where it lies at the horizon. Normally set lightTheta to the value opposite that of the angleTheta of the Sun (see below) and lightRho to the same value as the angleRho for the Sun.
This specifies the intensity and color of the car shadow. i tells the intesity of the shadow and may range from 0 (none) to 255 (fully opaque). r,g,b specify the color in normal 24-bit RGB format, thus each value can range from 0 (dark) to 255 (bright). For most cases, set i to around 100, and and each of r,g,b to 255.
These variables specify certain special effects which can be used on the tracks.
This is a boolean and tells if there should be 'shooting stars' on the track, in which case it should be set to 1, otherwise it should be set to 0.
When the track features a sun, this specifies the intensity of the sun and lens flares which appear when the sun is in view. Each of r,g,b can range from 0 to 255 and specify the intensity of the respective color, where 0 means no flare and 255 full intensity. If you don't want a flare to appear, for instance if you have a clouded sky with only a vague sun or a moon at night, set each of r,g,b to 0. For an intense flare, set each of r,g,b to 255.
This lets you add fireworks to the track, but it is a restricted effect which depends on the date the game was installed. If the game was installed before the 4th of July, fireworks will only have appeared on the 4th of July, if it was installed later than the 4th of July fireworks will always appear when this option is set.
fireworks tells whether fireworks should appear. A value of 0 means no fireworks. fireworksAngle expresses the Rho or vertical angle of the fireworks and is expressed in revolutions, where 0.00 places them at the top of the sky and 0.39 at the horizon. However, the Theta or horizontal angle of the fireworks cannot be specified; they will always appear opposite the Sun.
This contains information on the sun of the track, however the sun may also be a moon (!).
This is a boolean and indicates whether the track should have a sun (1) or not (0). If this variable is left out on tracks made from the NFS3 tracks, the sun will appear ???where???.
These specify the position of the sun on the horizon in revolutions. angleTheta expresses the horizontal angle and may range from 0.00 to 1.00. angleRho expresses the vertical angle and may range from 0.00 to 0.39. To make the sun appear within the view, normally set the angleRho between 0.10 and 0.30, however it might be obscured by the pixmap if the latter is high, and the inFront variable (see below) has been set to 0.
This is a decimal value expressing the radius of the sun. For a normal sun, set this to around 200.0, for a big sun set it to around 300.0, and for an oversize novelty sun set it to 500.0 - or a bit above :).
This boolean tells if the sun should rotate around its own axis as you turn, in which case it should be set to 1. If your sun is a moon (!), for obvious reasons you might not want to use this, so then set it to 0.
This boolean tells if the sun should be pasted on top of the sky (0) or blended with it (1).
A boolean which specifies whether the sun should appear in front of the pixmap (1) or behind it (0).
The track glows contain the specifiactions of the track's glows, which are the light sources seen on lamp posts and similar. The values specified in the track glows were previously common for all the tracks, but since the inclusion of specific variables in the INI files their appearence can be edited. Normally you will find most of the glows to have the same values on all the original tracks. Not all of the glows are used, on many tracks only two or three are.
These arrays specify the color and behaviour of the glows. A total of 32, named glow0 through to glow31 appear in the original files, however on not all of them are used on every track.
[i,r,g,b] specify the intensity and RGB color of the light, and can all range from 0 to 255.
f is a boolean and tells if the glow is solid (0) or flashes (1), in which case t tells how long the glow should wait in between changing its state. At a low t value, such as 2 or 3, the glow will flash very quickly. I would not recommend using values lower than 5 as the resulting strobe effect can appear disturbing. At a slightly higher value, such as 6 or 7, the flashing is slow enough to be suitable for objects such as flashing stoplights or similar.
d is a fixed point value with two decimals, specifying the diameter of the glow itself. An diameter of 0 means the glow will not appear, which is useful for placing light sources without any glow with T3ed's Light Ray Tracer.
There are also three unknown variables which only appear in some of the INI files, and always with the same values (0,0), T0. Experimenting with these values does not seem to have any noticable effect other than in some cases eliminating the respective glow. Since these variables are not present in many of the INI files and when they appear always have the same consistent values, it can be assumed they do not have any proper use in the game. These variables might be part of features which were left out or never put in. They are however redundant and can be left out.