diff --git a/src/Core/CLightParameters.cpp b/src/Core/CLightParameters.cpp
deleted file mode 100644
index de763227..00000000
--- a/src/Core/CLightParameters.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#include "CLightParameters.h"
-
-CLightParameters::CLightParameters(CPropertyStruct *pStruct, EGame game)
- : mpStruct(pStruct), mGame(game)
-{
-}
-
-CLightParameters::~CLightParameters()
-{
-}
-
-int CLightParameters::LightLayerIndex()
-{
- if (!mpStruct) return 0;
-
- TLongProperty *pParam;
-
- if (mGame <= ePrime)
- pParam = (TLongProperty*) mpStruct->PropertyByIndex(0xD);
- else
- pParam = (TLongProperty*) mpStruct->PropertyByID(0x1F715FD3);
-
- if (!pParam) return 0;
- else return pParam->Get();
-}
diff --git a/src/Core/CLightParameters.h b/src/Core/CLightParameters.h
index 849a3c61..3f77ed3b 100644
--- a/src/Core/CLightParameters.h
+++ b/src/Core/CLightParameters.h
@@ -4,15 +4,59 @@
#include "Core/Resource/CGameArea.h"
#include "Core/Resource/Script/IProperty.h"
+enum EWorldLightingOptions
+{
+ eUnknown1 = 0,
+ eNormalLighting = 1,
+ eUnknown2 = 2,
+ eDisableWorldLighting = 3
+};
+
class CLightParameters
{
CPropertyStruct *mpStruct;
EGame mGame;
+ TLongProperty *mpLightLayer;
+ TLongProperty *mpWorldLightingOptions;
+
public:
- CLightParameters(CPropertyStruct *pStruct, EGame game);
- ~CLightParameters();
- int LightLayerIndex();
+ CLightParameters(CPropertyStruct *pStruct, EGame Game)
+ : mpStruct(pStruct)
+ , mGame(Game)
+ , mpLightLayer(nullptr)
+ , mpWorldLightingOptions(nullptr)
+ {
+ if (mpStruct)
+ {
+ if (mGame <= ePrime)
+ {
+ mpWorldLightingOptions = (TLongProperty*) mpStruct->PropertyByIndex(0x7);
+ mpLightLayer = (TLongProperty*) mpStruct->PropertyByIndex(0xD);
+ }
+ else
+ {
+ mpWorldLightingOptions = (TLongProperty*) mpStruct->PropertyByIndex(0x6B5E7509);
+ mpLightLayer = (TLongProperty*) mpStruct->PropertyByID(0x1F715FD3);
+ }
+ }
+ }
+
+ inline int LightLayerIndex() const
+ {
+ if (!mpLightLayer)
+ return 0;
+ else
+ return mpLightLayer->Get();
+ }
+
+ inline EWorldLightingOptions WorldLightingOptions() const
+ {
+ if (mpWorldLightingOptions)
+ return (EWorldLightingOptions) mpWorldLightingOptions->Get();
+ else
+ return eNormalLighting;
+ }
};
#endif // CLIGHTPARAMETERS_H
diff --git a/src/Core/Core.pro b/src/Core/Core.pro
index 1832fe9a..62702aca 100644
--- a/src/Core/Core.pro
+++ b/src/Core/Core.pro
@@ -251,7 +251,6 @@ SOURCES += \
ScriptExtra/CSpacePirateExtra.cpp \
ScriptExtra/CWaypointExtra.cpp \
CAreaAttributes.cpp \
- CLightParameters.cpp \
CRayCollisionTester.cpp \
Log.cpp \
OpenGL/CDynamicVertexBuffer.cpp \
diff --git a/src/Core/Scene/CScriptNode.cpp b/src/Core/Scene/CScriptNode.cpp
index cc07a862..ab0330b4 100644
--- a/src/Core/Scene/CScriptNode.cpp
+++ b/src/Core/Scene/CScriptNode.cpp
@@ -154,16 +154,30 @@ void CScriptNode::Draw(FRenderOptions Options, int ComponentIndex, const SViewIn
// Draw model
if (UsesModel())
{
- CGraphics::SetupAmbientColor();
+ EWorldLightingOptions LightingOptions = (mpLightParameters ? mpLightParameters->WorldLightingOptions() : eNormalLighting);
+
+ if (CGraphics::sLightMode == CGraphics::eWorldLighting && LightingOptions == eDisableWorldLighting)
+ {
+ CGraphics::sNumLights = 0;
+ CGraphics::sVertexBlock.COLOR0_Amb = CColor::skBlack;
+ CGraphics::sPixelBlock.LightmapMultiplier = 1.f;
+ CGraphics::UpdateLightBlock();
+ }
+
+ else
+ {
+ LoadLights(ViewInfo);
+ CGraphics::UpdateLightBlock();
+ }
+
LoadModelMatrix();
- LoadLights(ViewInfo);
- CGraphics::UpdateVertexBlock();
// Draw model if possible!
if (mpActiveModel)
{
if (mpExtra) CGraphics::sPixelBlock.TevColor = mpExtra->TevColor();
else CGraphics::sPixelBlock.TevColor = CColor::skWhite;
+
CGraphics::sPixelBlock.TintColor = TintColor(ViewInfo);
CGraphics::UpdatePixelBlock();
diff --git a/templates/dkcr/Properties.xml b/templates/dkcr/Properties.xml
index 5130e74e..b4579003 100644
--- a/templates/dkcr/Properties.xml
+++ b/templates/dkcr/Properties.xml
@@ -1701,7 +1701,7 @@
-
+
diff --git a/templates/dkcr/Structs/LightParameters.xml b/templates/dkcr/Structs/LightParameters.xml
index c6bdb697..da90c281 100644
--- a/templates/dkcr/Structs/LightParameters.xml
+++ b/templates/dkcr/Structs/LightParameters.xml
@@ -4,9 +4,15 @@
1.0, 1.0, 1.0, 1.0
-
+
1
-
+
+
+
+
+
+
+
true
diff --git a/templates/mp1/Structs/LightParameters.xml b/templates/mp1/Structs/LightParameters.xml
index d988805c..6bd1db11 100644
--- a/templates/mp1/Structs/LightParameters.xml
+++ b/templates/mp1/Structs/LightParameters.xml
@@ -8,7 +8,14 @@
-
+
+
+
+
+
+
+
+
diff --git a/templates/mp2/Properties.xml b/templates/mp2/Properties.xml
index 62c66fee..42f14f55 100644
--- a/templates/mp2/Properties.xml
+++ b/templates/mp2/Properties.xml
@@ -3040,7 +3040,7 @@
-
+
diff --git a/templates/mp2/Structs/LightParameters.xml b/templates/mp2/Structs/LightParameters.xml
index ace90e7c..7543cbc2 100644
--- a/templates/mp2/Structs/LightParameters.xml
+++ b/templates/mp2/Structs/LightParameters.xml
@@ -22,9 +22,15 @@
true
-
+
1
-
+
+
+
+
+
+
+
1
diff --git a/templates/mp2demo/Properties.xml b/templates/mp2demo/Properties.xml
index e0373900..7ebc5e36 100644
--- a/templates/mp2demo/Properties.xml
+++ b/templates/mp2demo/Properties.xml
@@ -2761,7 +2761,7 @@
-
+
diff --git a/templates/mp2demo/Structs/LightParameters.xml b/templates/mp2demo/Structs/LightParameters.xml
index ace90e7c..7543cbc2 100644
--- a/templates/mp2demo/Structs/LightParameters.xml
+++ b/templates/mp2demo/Structs/LightParameters.xml
@@ -22,9 +22,15 @@
true
-
+
1
-
+
+
+
+
+
+
+
1
diff --git a/templates/mp3/Properties.xml b/templates/mp3/Properties.xml
index 013f828b..9a99c110 100644
--- a/templates/mp3/Properties.xml
+++ b/templates/mp3/Properties.xml
@@ -2302,7 +2302,7 @@
-
+
diff --git a/templates/mp3/Structs/LightParameters.xml b/templates/mp3/Structs/LightParameters.xml
index 2ed010d5..463f21a8 100644
--- a/templates/mp3/Structs/LightParameters.xml
+++ b/templates/mp3/Structs/LightParameters.xml
@@ -10,9 +10,15 @@
true
-
+
1
-
+
+
+
+
+
+
+
true
diff --git a/templates/mp3proto/Properties.xml b/templates/mp3proto/Properties.xml
index f7af1107..1d46013e 100644
--- a/templates/mp3proto/Properties.xml
+++ b/templates/mp3proto/Properties.xml
@@ -886,7 +886,7 @@
-
+
diff --git a/templates/mp3proto/Structs/LightParameters.xml b/templates/mp3proto/Structs/LightParameters.xml
index ace90e7c..7543cbc2 100644
--- a/templates/mp3proto/Structs/LightParameters.xml
+++ b/templates/mp3proto/Structs/LightParameters.xml
@@ -22,9 +22,15 @@
true
-
+
1
-
+
+
+
+
+
+
+
1