aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/slice_renderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/bladerunner/slice_renderer.cpp')
-rw-r--r--engines/bladerunner/slice_renderer.cpp28
1 files changed, 18 insertions, 10 deletions
diff --git a/engines/bladerunner/slice_renderer.cpp b/engines/bladerunner/slice_renderer.cpp
index e0845eeba3..34c910742c 100644
--- a/engines/bladerunner/slice_renderer.cpp
+++ b/engines/bladerunner/slice_renderer.cpp
@@ -22,6 +22,7 @@
#include "bladerunner/slice_renderer.h"
+#include "bladerunner/aesc.h"
#include "bladerunner/bladerunner.h"
#include "bladerunner/lights.h"
#include "bladerunner/set_effects.h"
@@ -46,6 +47,10 @@ SliceRenderer::SliceRenderer(BladeRunnerEngine *vm) {
SliceRenderer::~SliceRenderer() {
}
+void SliceRenderer::setAESC(AESC *aesc) {
+ _aesc = aesc;
+}
+
void SliceRenderer::setView(const View &view) {
_view = view;
}
@@ -349,6 +354,8 @@ void SliceRenderer::drawInWorld(int animationId, int animationFrame, Vector3 pos
_modelMatrix
);
+ Vector3 cameraPosition(_view._cameraPosition.x, _view._cameraPosition.z, _view._cameraPosition.y); // not a bug
+
SliceRendererLights sliceRendererLights = SliceRendererLights(_lights);
_lights->setupFrame(_view._frame);
@@ -364,7 +371,7 @@ void SliceRenderer::drawInWorld(int animationId, int animationFrame, Vector3 pos
float setEffectsColorCoeficient;
Color setEffectColor;
_setEffects->calculateColor(
- _view._cameraPosition,
+ cameraPosition,
Vector3(_position.x, _position.y, _position.z + _frameBottomZ + sliceLine * _frameSliceHeight),
&setEffectsColorCoeficient,
&setEffectColor);
@@ -401,7 +408,7 @@ void SliceRenderer::drawInWorld(int animationId, int animationFrame, Vector3 pos
if (sliceLineIterator._currentY & 1) {
_setEffects->calculateColor(
- _view._cameraPosition,
+ cameraPosition,
Vector3(_position.x, _position.y, _position.z + _frameBottomZ + sliceLine * _frameSliceHeight),
&setEffectsColorCoeficient,
&setEffectColor);
@@ -416,7 +423,7 @@ void SliceRenderer::drawInWorld(int animationId, int animationFrame, Vector3 pos
_setEffectColor.b = setEffectColor.b * 31.0f * 65536.0f;
if (frameY >= 0 && frameY < 480) {
- drawSlice((int)sliceLine, true, frameLinePtr, zBufferLinePtr);
+ drawSlice((int)sliceLine, true, frameLinePtr, zBufferLinePtr, frameY);
}
sliceLineIterator.advance();
@@ -480,7 +487,7 @@ void SliceRenderer::drawOnScreen(int animationId, int animationFrame, int screen
while (currentSlice < _frameSliceCount) {
if (currentY >= 0 && currentY < 480) {
memset(lineZbuffer, 0xFF, 640 * 2);
- drawSlice(currentSlice, false, frameLinePtr, lineZbuffer);
+ drawSlice(currentSlice, false, frameLinePtr, lineZbuffer, currentY);
currentSlice += sliceStep;
currentY--;
frameLinePtr -= 640;
@@ -488,7 +495,7 @@ void SliceRenderer::drawOnScreen(int animationId, int animationFrame, int screen
}
}
-void SliceRenderer::drawSlice(int slice, bool advanced, uint16 *frameLinePtr, uint16 *zbufLinePtr) {
+void SliceRenderer::drawSlice(int slice, bool advanced, uint16 *frameLinePtr, uint16 *zbufLinePtr, int y) {
if (slice < 0 || (uint32)slice >= _frameSliceCount)
return;
@@ -523,14 +530,15 @@ void SliceRenderer::drawSlice(int slice, bool advanced, uint16 *frameLinePtr, ui
if (vertexZ >= 0 && vertexZ < 65536) {
int color555 = palette.color555[p[2]];
if (advanced) {
- Color256 color = palette.color[p[2]];
+ Color256 aescColor = { 0, 0, 0 };
+ _aesc->getColor(&aescColor, vertexX, y, vertexZ);
- color.r = (int)(_setEffectColor.r + _lightsColor.r * color.r) >> 16;
- color.g = (int)(_setEffectColor.g + _lightsColor.g * color.g) >> 16;
- color.b = (int)(_setEffectColor.b + _lightsColor.b * color.b) >> 16;
+ Color256 color = palette.color[p[2]];
+ color.r = ((int)(_setEffectColor.r + _lightsColor.r * color.r) >> 16) + aescColor.r;
+ color.g = ((int)(_setEffectColor.g + _lightsColor.g * color.g) >> 16) + aescColor.g;
+ color.b = ((int)(_setEffectColor.b + _lightsColor.b * color.b) >> 16) + aescColor.b;
int bladeToScummVmConstant = 256 / 32;
-
color555 = _pixelFormat.RGBToColor(CLIP(color.r * bladeToScummVmConstant, 0, 255), CLIP(color.g * bladeToScummVmConstant, 0, 255), CLIP(color.b * bladeToScummVmConstant, 0, 255));
}
for (int x = previousVertexX; x != vertexX; ++x) {