How to produce a skybox – 3.3.5.
What is a skybox? The answer is fairly simple, a skybox is a way to light up your zone in WoW. Aside from lightning up the environment, it also allows us to manipulate the way the sky looks (that is why it is called the skybox, but I consider this to be the 2nd order importance of it).The undeniable truth is, that it is really important to light up your zone properly, this produces a very good impression of your zone. However, this process can be quite tidious and certainly it is not easy to do. In this tutorial I will do my best to show you how to produce such a skybox!
This is a super huge tutorial, I did my best to nail out the details, however, due to its size I am aware that there will be lots of minor spelling errors, grammar errors and such, please, do let me know about those, I will do my best to get those fixed! Also if you have any suggestions about the tutorial, I will welcome them!
All files required for this tutorial can be downloaded via this link:
You'll be better off with these files. When we get to DBC works in this tutorial it is good just to see how it works and once we are done, you can just go ahead and try changing some cells here and there.
What software we need
- MyDbcEditor – simple Dbc files editor
- WDBX Editor – more advanced Dbc editor, you can use this instead of MyDbcEditor, however, we are going to use this one to produce BGR codes for our skybox (BGR is pretty much RGB in reverse order).
Lets get all the files that we might need
- From the latest client patch, we need to extract these: Light.dbc, LightParams.dbc, LightSkyBox.dbc, LightIntBands.dbc, LightFloatBands.dbc a Map.dbc.
- In case you want to put there a skybox model to represent your sky, it is good to get your model in advance. The easiest way is just to take a model from higher expansions and downport it to 3.3.5.. It is certainly possible to produce your own 3D model for the skybox, but that is mostly a 3D modeling stuff, and we are not going concern ourselves about this.
Basic information about light Dbc files
First of all, lets make a little excursion into light Dbc files and lets try to understand what each file does.
1) Light.dbc –this perhaps the most important Dbc file we are going to work with today. This Dbc file is essential when defining a new skybox. In case you want to purely copy a already existing skybox, then this is the only Dbc file you need to edit. The structure is following:
1. Id of each skybox – not really interesting for us
2. Id of map – this Id comes from Map.Dbc, Id of map on which we want to place our skybox
3. X client side coordinate – X coor. For skybox placement, has to be multiplied by 36!
4. Z client side coordinate – Z coor. For skybox placement, has to be multiplied by 36!
5. Y client side coordinate – Y coor. For skybox placement, has to be multiplied by 36!
6. Inner radius of skybox – at this radius, the skybox won't overlap with other skyboxes, has to be multiplied by 36!
7. Outer radius of skybox – at this radius, the skybox will overlap with other skyboxes, has to be multiplied by 36!
8. Row Id from Lightparams.dbc, for normal weather
9. Row Id from Lightparams.dbc, for normal weather under water
10. Row Id from Lightparams.dbc, for rainy weather
11. Row Id from Lightparams.dbc, for rainy weather under water
12. Row Id from Lightparams.dbc, for spirit world
13. & other - Row Ids for other phases
You can read more at: https://wowdev.wiki/DB/Light
BEWARE! WoWDevWiki states the order of cooridinates in the standard way (x,y,z), but in fact it is switeched in case of Light.dbc (x,z,y)
2) LightParams.dbc – we have already touched this Dbc when talking about Light.dbc, each row in this Dbc file defines a unique lightning (skybox) setting, those settings can then be used in Light.dbc.
1. Defines Id of each lightning (skybox), this Id is then used in Light.dbc, it is also used as reference for rows in LightIntBand.dbc & LightFloatBand.dbc
2. Boolean value – Hightlight sky – not sure on this one
3. Id of skybox model (refence to row # in LightSkybox.dbc – we will also mention it later
4. Integer value, defines the clouds
5. Defines how much brightness/ fog will be added, float 0 - 1
6. Defines transparency of shallow River Water
7. Defines transparency of deep River Water
8. Defines transparency of shallow Ocean Water
9. Defines transparency of deep Ocean Water
10. Values from 0 -1, now sure on this one
You can read more at: https://wowdev.wiki/DB/LightParams
3) LightIntBand.dbc – this Dbc file defines colours of our skybox, in fact, this is super important Dbc, because it really allows you to customise lightning in your zone. To edit this Dbc file we are going to use WDBX editor. The reason why is fairly simple, WDBX allows us to read and produce BGR codes (simillar to RGB). These BGR codes are then used by the skybox. Functionality of this file is following: for each Id (row) in LightParams.dbc there is 18 rows in LightIntBand.dbc, for instance, for row #1 in LightParams.dbc the first 18 rows in LightIntBand.dbc are bound to this LightParams.dbc row. Generally if we wanted to know what are the numbers of rows that correspond to our LightParams.dbc row the pattern is following: multiply the # of row in LightParams.dbc by 18, then we subtract 17 and the following 17 rows are bound to our original row in LightParams.dbc.
Collums in each row:
1. Id of row –has to correspond to LightParams.dbc!
2. Integer value, defines how many lightning phases there are, max number is 15
3. - 18. Time values for each phases (if we wrote 2 in collum # 2 we need to fill in first 2 collums), time is give in half minutes. Say we wanted to put in there 7 am, value 840 corresponds to this time.
19. - 34. BGR codes,these define the colours of our skybox, they follow the same order as our time phases, in case we work with 2 phases, then we need to fill in only first 2 collumds, to produce these BGR codes we can use Colour function in WDBX editor.
Each rows – below are described functionalities of each row's collums from 19. to 34.
1. Defines colour of general lightning
2. Defines colour of dispersed light
3. Colour of topmost part of sky
4. Colour of middle part of sky
5. Colour of sky going to the horizon
6. Colour of sky just above the horizion
7. Colour of the horizon
8. Colour of fog in the background (mountains and such)
10. Colour of sun, solar disk and sunrays
11. First colour of clouds
12. Second colour of clouds
13. Third colour of clouds
15. Colour of shallow Ocean Water
16. Colour of deep Ocean Water
17. Colour of shallow River Water
18. Colour of deep River Water
You can read more at: https://wowdev.wiki/DB/LightIntBand
4) LightFloatBand.dbc – this Dbc has simillar structure to LightIntBand.dbc, however, this Dbc controls the amount of fox, its density, clouds density, and Moon shine. For every Id from LightParams.dbc there are 6 rows in LightFloatBand.dbc. This Dbc uses very same logic as LightIntBand.dbc, to get the 6 rows corresponding with your LightParams.dbc row you need to multiply the original # by 6 and subtract 5, to get your first row in LightParams.dbc.
Collums in each row:
1. Row Id – has to correspond to Id row from (first row is LightParams.dbc * 6 - 5)
2. Integer value, defines how many phases of lightning there are, maximum is 15
3. - 18. Time values for each phase (if we wrote 2 in collum # 2 we need to fill in first 2 collums), time is give in half minutes. Say we wanted to put in there 7 am, value 840 corresponds to this time.
Uses very same logic as LightIntBand.dbc
19. - 34. float values, in case we defined only 2 phases of lightning we need to fill in only first 2 collums.
Functionality of collums in each row (collums 19. - 34, down below are rows)
1. Defines distance of fog multiplied by 36, from this distance on everything will be shrouded in fog
2. Fog density value, this says at which distance value the fog starts, float values from 0 – 0.999
3. Brightness of Sun and Moon when overlapped by clouds
4. Cloud density float value from 0 - 1
You can read more at: https://wowdev.wiki/DB/LightFloatBand
5) LightSkybox.dbc – the simpliest Dbc of all, this file allows us to add skybox models, and edit their properties (such as transparency), we are not going to use this Dbc in our tutorial, but you can definetly go ahead and try experimenting with this one.
1. Defines Id of each skybox model, this Id is then used in LightParams.dbc
2. Path to our model: „Environments/Stars/[MODEL].mdx“
3. Integer values flagy, defines properties of the model, such as transparency, 0 – skybox used animation based on time, 2 – shows Sun, Moon and clouds, skybox can be transparent, 4 – produces procedural mist. The most commonly used value is 2.
You can read more at: https://wowdev.wiki/DB/LightSkybox
Right now we have covered all the important things about the Dbc files. I admit there were lots of it, for sure you don't have to know all of it, but it is good to have a decent image of the structure. You can also read more at WoWDevWiki. Now we will proceed with the creation of a skybox.
Creation of custom skybox:
Now lets try to make use of our newly gained knowledge of Light Dbc files and lets try producing a custom WoW skybox at Hyjal!
First of all, we need to get our client coordinates of the place – X=20540 Y= 11690 Z=1600
We can get these fairly easily in Noggit.
First we insert a new row in LightParams.dbc – 954. For now we can leave this row be, or we can copy parameters of some other row. We will return to this later.
Now we continue by adding a new row in Light.dbc –first of all lets write our X, Z,Y coordinates 3 multiplied by 36. Then we need to think of the inner and outer radius of our skybox. Lets say 1388 and 1666, once again we have to multiply these numbers by 36. After that we can insert the Id of our row from LightParams.dbc - 954.
Now lets move to the harder part – LightIntBand.dbc and LightFloatBand.dbc.
Lets continue with LightIntband.dbc. It is nessesary to open this Dbc files in WDBX editor. First we need to add 18 new lines starting with number: 954*18 – 17 down to number 954*18. To make things easier for us, it is always good to fill in all general datas to our newly added row, so that we can just copy it to all that will follow. All together we will be adding 3 phases of lightning – early morning – day – night. So we will use 3 collums of datas – se we will use 3 collums for time and 3 collums for data. First lets put in time value for morning phase, lets say we want to be from Midnight to 8:00, that means we put 960 (480 minutes * 2) into 3rd collum, day-time phase will be untill 19:00, that means 2280 will go into the 4th colum. Same datas can be used for following 17 rows, but it is not must do, you could have different number of phases for each setting.
Right now we can move to BGR codes, lets get back to our first row #(954*18 – 17) – starting with collum #19 there are our collums with BGR codes. Lets say we want our skybox to have purple-blue-white like colour. So we generate our colours using Color function. Do 19. We proceed with filling in datas for morning, day and night, for each setting (yep, it is lots of work). At this point I highly recommend you using the Dbc files attached for this tutorial, makes everything much simplier, and to elevate your understanding of topic, just spend some time playing with the Dbcs.
Now we are about to edit LightFloatBand.dbc. We no longer need to use WDBX editor, but you can surely use it if you feel comfortable in it. Once again we need to insert 6 new rows, once again their Ids need to correspond to our original Id in LightParams.dbc. The first row has to have Id: 954*6 - 6, 5 more rows follow.
We want it to be pretty foggy in the morning,lets set the fog distance in collum #19 (1st row) to 9000 , for following collums lets set the value a bit higher. Simillarly we go on with the next row, this time we put in values from 0 – 1. Next row we fill in 0s or 1s, this one shouldn't really convern us, next row is about cloud density, lets say we want morning to be clouds, whereas nights should be clear (it is good to work with this row in case you don't want to add in skybox model, which is our case). That is all for LightFloatBand.dbc.
Next Dbc is LightSkyBox.dbc, I don't want to put in any skybox model this time, so we are not going to use this Dbc. But feel free to give it a try yourself, it is a good starting exercise.
If we had added in custom skybox model, we would have returned back to LightParams.dbc to fill in our skybox model row Id, defaulty this value in LightParams.dbc should be set to 0. (Collum 3)
As of now we are done! Lets put all our edited Dbcs, blps and m2s into patch, and lets také a look what it looks like in-game
We can see that our skybox works in-game! In case you have managed to get it all working, then well done! This is no easy task!
If you find yourself running into any troubles with the skybox creation, or if you just want to discuss anything, feel free to ask!