Skip to content

Commit 690de3c

Browse files
committed
Merge branch 'exorcisingtoddfrommyoblivioncopy' into 'master'
Support ESM4::Light with no spotlight data again See merge request OpenMW/openmw!4465
2 parents b555c98 + ec564b1 commit 690de3c

File tree

2 files changed

+34
-28
lines changed

2 files changed

+34
-28
lines changed

components/esm4/loadligh.cpp

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,11 @@ void ESM4::Light::load(ESM4::Reader& reader)
4848
break;
4949
case ESM::fourCC("DATA"):
5050
{
51-
if (subHdr.dataSize != 32 && subHdr.dataSize != 48 && subHdr.dataSize != 64)
51+
// 24: older TES4 records (found in GOG release)
52+
// 32: newer TES4 records, FO3/FNV
53+
// 48: TES5
54+
// 64: FO4/FO76
55+
if (subHdr.dataSize != 24 && subHdr.dataSize != 32 && subHdr.dataSize != 48 && subHdr.dataSize != 64)
5256
{
5357
reader.skipSubRecordData();
5458
break;
@@ -57,21 +61,23 @@ void ESM4::Light::load(ESM4::Reader& reader)
5761
reader.get(mData.radius);
5862
reader.get(mData.colour);
5963
reader.get(mData.flags);
60-
reader.get(mData.falloff);
61-
reader.get(mData.FOV);
62-
// TES5, FO4
63-
if (subHdr.dataSize >= 48)
64+
if (subHdr.dataSize >= 32)
6465
{
65-
reader.get(mData.nearClip);
66-
reader.get(mData.frequency);
67-
reader.get(mData.intensityAmplitude);
68-
reader.get(mData.movementAmplitude);
69-
if (subHdr.dataSize == 64)
66+
reader.get(mData.falloff);
67+
reader.get(mData.FOV);
68+
if (subHdr.dataSize >= 48)
7069
{
71-
reader.get(mData.constant);
72-
reader.get(mData.scalar);
73-
reader.get(mData.exponent);
74-
reader.get(mData.godRaysNearClip);
70+
reader.get(mData.nearClip);
71+
reader.get(mData.frequency);
72+
reader.get(mData.intensityAmplitude);
73+
reader.get(mData.movementAmplitude);
74+
if (subHdr.dataSize == 64)
75+
{
76+
reader.get(mData.constant);
77+
reader.get(mData.scalar);
78+
reader.get(mData.exponent);
79+
reader.get(mData.godRaysNearClip);
80+
}
7581
}
7682
}
7783
reader.get(mData.value);

components/esm4/loadligh.hpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ namespace ESM4
5656

5757
struct Data
5858
{
59-
std::int32_t time;
60-
std::uint32_t radius;
61-
std::uint32_t colour; // RGBA
59+
std::int32_t time = 0;
60+
std::uint32_t radius = 0;
61+
std::uint32_t colour = 0; // RGBA
6262
// flags:
6363
// 0x00000001 = Dynamic
6464
// 0x00000002 = Can be Carried
@@ -70,19 +70,19 @@ namespace ESM4
7070
// 0x00000100 = Pulse Slow
7171
// 0x00000200 = Spot Light
7272
// 0x00000400 = Spot Shadow
73-
std::int32_t flags;
73+
std::int32_t flags = 0;
7474
float falloff = 1.f;
7575
float FOV = 90; // FIXME: FOV in degrees or radians?
76-
float nearClip; // TES5+
77-
float frequency; // TES5+
78-
float intensityAmplitude; // TES5+
79-
float movementAmplitude; // TES5+
80-
float constant; // FO4
81-
float scalar; // FO4
82-
float exponent; // FO4
83-
float godRaysNearClip; // FO4
84-
std::uint32_t value; // gold
85-
float weight;
76+
float nearClip = 0.f; // TES5+
77+
float frequency = 0.f; // TES5+
78+
float intensityAmplitude = 0.f; // TES5+
79+
float movementAmplitude = 0.f; // TES5+
80+
float constant = 0.f; // FO4
81+
float scalar = 0.f; // FO4
82+
float exponent = 0.f; // FO4
83+
float godRaysNearClip = 0.f; // FO4
84+
std::uint32_t value = 0; // gold
85+
float weight = 0.f;
8686
};
8787

8888
ESM::FormId mId; // from the header

0 commit comments

Comments
 (0)