DB/Light: Difference between revisions

From wowdev
Jump to navigation Jump to search
No edit summary
Line 16: Line 16:
  10 ParamsStorm Integer Used in rainy/snowy/sandstormy weather.
  10 ParamsStorm Integer Used in rainy/snowy/sandstormy weather.
  11 ParamsStormWat Integer Used in rainy/snowy/sandstormy weather while being underwater.
  11 ParamsStormWat Integer Used in rainy/snowy/sandstormy weather while being underwater.
  12 ParamsDeath Integer Only 4, 3 and sometimes 2 values are used. Seems to be ignored by 3.3.5a client.
  12 ParamsDeath Integer Only 4 and in newer ones 3 are used as value here (with some exceptions). Changing this seems to have no effect in 3.3.5a (is death light setting hardcoded?)
  13 ParamsUnk1 Integer Only set for some entries in DeathknightStart, Northrend and NexusRaid. They have other values too!
  13 ParamsUnk1 Integer Following 3 Params are used only in WotLK records, and not very commonly. Perhaps used in different phases.
  14 ParamsUnk2 Integer These may be for different phases.
  14 ParamsUnk2 Integer
  15 ParamsUnk3 Integer
  15 ParamsUnk3 Integer


Line 24: Line 24:


===LightRec::ConvertDBToGameCoords()===  
===LightRec::ConvertDBToGameCoords()===  
  pos.x = 17066.666 - pos.x / 36.0f;
  pos.x = 17066.666 - pos.x / 36;
  pos.y = 17066.666 - pos.y / 36.0f;  
  pos.y = 17066.666 - pos.y / 36;  
  pos.z = pos.z / 36.0f;
  pos.z = pos.z / 36;
  falloffStart = falloffStart / 36.0f;
  falloffStart = falloffStart / 36;
  falloffEnd = falloffEnd / 36.0f;
  falloffEnd = falloffEnd / 36;




For the record, the convertion above doesnt translate light into world coordinates(the ones that are used in wow net protocol). Considering x is at index 0 in position field, y is at index 1 and z is at index 2, the correct formulas would be     
For the record, the convertion above doesnt translate light into world coordinates(the ones that are used in wow net protocol). Considering x is at index 0 in position field, y is at index 1 and z is at index 2, the correct formulas would be     
  worldPos.x = 17066.666 - position.z / 36.0f;
  worldPos.x = 17066.666 - position.z / 36;
  worldPos.y = 17066.666 - position.x / 36.0f;  
  worldPos.y = 17066.666 - position.x / 36;  
  worldPos.z = position.y / 36.0f;
  worldPos.z = position.y / 36;


==6.0.1.18179==
==6.0.1.18179==

Revision as of 17:38, 7 June 2017

This is the starting file for what controls the lights, fogs, sky color, water color, and well other similar items. This information prior to 1.9 used to be stored in the .LIT files but in 1.9 was moved to Light.dbc and the other Light DBC files.

Light(skybox) with X/Y/Z 0/0/0 and inner/outer radiuses 0/0 is worldwide and overwrites default one, but doesn't overlap another, local and specific ones, it only transitions into them between their outer and inner radiuses.

Structure

All "Params" fields are refference to LightParams.dbc.ID and corresponding records in LightIntBand.dbc, LightFloatBand.dbc and LightSkybox.dbc.

Column 	Field 		Type 		Notes
1 	ID		Integer 	
2 	iRefID_Map	Integer 	
3 	position	Float[3]	X/Y/Z position of the center of light(skybox) sphere. To get them, spawn a model in Noggit on that place, get its X/Y/Z coords and multiply them by 36.
6 	falloffStart 	Float		Inner radius, where is only this light(skybox) present. To get this, take radius in yards and multiply it by 36.
7 	falloffEnd 	Float		Outer radius, in space between outer and inner radius is a soft transition from this light(skybox) to surrounding/worldwide ones. Again, yards*36.
8 	ParamsClear	Integer 	Used in clear weather.
9 	ParamsClearWat 	Integer		Used in clear weather while being underwater.
10 	ParamsStorm 	Integer		Used in rainy/snowy/sandstormy weather.
11 	ParamsStormWat 	Integer		Used in rainy/snowy/sandstormy weather while being underwater.
12 	ParamsDeath	Integer		Only 4 and in newer ones 3 are used as value here (with some exceptions). Changing this seems to have no effect in 3.3.5a (is death light setting hardcoded?)
13 	ParamsUnk1 	Integer		Following 3 Params are used only in WotLK records, and not very commonly. Perhaps used in different phases.
14 	ParamsUnk2 	Integer		
15 	ParamsUnk3 	Integer		

Amaroth 7th June 2017

LightRec::ConvertDBToGameCoords()

pos.x = 17066.666 - pos.x / 36;
pos.y = 17066.666 - pos.y / 36; 
pos.z = pos.z / 36;
falloffStart = falloffStart / 36;
falloffEnd = falloffEnd / 36;


For the record, the convertion above doesnt translate light into world coordinates(the ones that are used in wow net protocol). Considering x is at index 0 in position field, y is at index 1 and z is at index 2, the correct formulas would be

worldPos.x = 17066.666 - position.z / 36;
worldPos.y = 17066.666 - position.x / 36; 
worldPos.z = position.y / 36;

6.0.1.18179

struct LightRec {
  uint32_t m_ID;
  foreign_key<uint32_t, &MapRec::m_ID> m_continentID;
  float m_x; // (0,0,0) = global light, used as fallback if in no other light. If there is no (0,0,0) entry for a continent, use m_ID == 1 as fallback
  float m_y;
  float m_z;
  float m_falloffStart;
  float m_falloffEnd;
  enum {
    params_standard,
    params_standard_underwater,
    params_stormy,
    params_stormy_underwater,
    params_death,
    params_unk_5,
    params_unk_6,
    params_unk_7,
    params_num,
  };
  foreign_key<uint32_t, &LightParamsRec::m_ID> m_lightParamsID[params_num];
};