summaryrefslogtreecommitdiff
path: root/src/render.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/render.c')
-rw-r--r--src/render.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/render.c b/src/render.c
new file mode 100644
index 0000000..8ffd801
--- /dev/null
+++ b/src/render.c
@@ -0,0 +1,67 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <SDL.h>
+#include <GL/gl.h>
+#include <GL/glext.h>
+
+#include "fixer.h"
+
+#include "3dc.h"
+#include "platform.h"
+#include "inline.h"
+#include "gamedef.h"
+#include "module.h"
+#include "stratdef.h"
+#include "projfont.h"
+#include "krender.h"
+#include "kshape.h"
+#include "prototyp.h"
+#include "d3d_hud.h"
+#include "bh_types.h"
+#include "equipmnt.h"
+#include "pldghost.h"
+
+#define UseLocalAssert Yes
+#include "ourasert.h"
+
+extern DISPLAYBLOCK *ActiveBlockList[];
+extern int NumActiveBlocks;
+extern int GlobalAmbience;
+
+int LightIntensityAtPoint(VECTORCH *pointPtr)
+{
+ int intensity = 0;
+ int i, j;
+
+ DISPLAYBLOCK **activeBlockListPtr = ActiveBlockList;
+ for(i = NumActiveBlocks; i != 0; i--) {
+ DISPLAYBLOCK *dispPtr = *activeBlockListPtr++;
+
+ if (dispPtr->ObNumLights) {
+ for(j = 0; j < dispPtr->ObNumLights; j++) {
+ LIGHTBLOCK *lptr = dispPtr->ObLights[j];
+ VECTORCH disp = lptr->LightWorld;
+ int dist;
+
+ disp.vx -= pointPtr->vx;
+ disp.vy -= pointPtr->vy;
+ disp.vz -= pointPtr->vz;
+
+ dist = Approximate3dMagnitude(&disp);
+
+ if (dist<lptr->LightRange) {
+ intensity += WideMulNarrowDiv(lptr->LightBright,lptr->LightRange-dist,lptr->LightRange);
+ }
+ }
+ }
+ }
+ if (intensity>ONE_FIXED) intensity=ONE_FIXED;
+ else if (intensity<GlobalAmbience) intensity=GlobalAmbience;
+
+ /* KJL 20:31:39 12/1/97 - limit how dark things can be so blood doesn't go green */
+ if (intensity<10*256) intensity = 10*256;
+
+ return intensity;
+}