summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/avp/language.c7
-rw-r--r--src/avp/win95/d3d_hud.cpp5
-rw-r--r--src/opengl.c123
3 files changed, 66 insertions, 69 deletions
diff --git a/src/avp/language.c b/src/avp/language.c
index cd4fc0e..e27b1df 100644
--- a/src/avp/language.c
+++ b/src/avp/language.c
@@ -71,10 +71,8 @@ void InitTextStrings(void)
for (i=1; i<MAX_NO_OF_TEXTSTRINGS; i++)
{
/* scan for a quote mark */
- if (*textPtr == 0) /* TODO: probably a broken hack (added for predator demo)... */
- break;
-
- while (*textPtr++ != '"');
+ while (*textPtr++ != '"')
+ if (*textPtr == '@') return; /* '@' should be EOF */
/* now pointing to a text string after quote mark*/
TextStringPtr[i] = textPtr;
@@ -94,6 +92,7 @@ void InitTextStrings(void)
#endif
}
}
+
void KillTextStrings(void)
{
UnloadTextFile(LanguageFilename[AvP.Language],TextBufferPtr);
diff --git a/src/avp/win95/d3d_hud.cpp b/src/avp/win95/d3d_hud.cpp
index 3b0f1b4..b9fa78e 100644
--- a/src/avp/win95/d3d_hud.cpp
+++ b/src/avp/win95/d3d_hud.cpp
@@ -292,8 +292,13 @@ void LoadCommonTextures(void)
extern char LevelName[];
if (!strcmp(LevelName,"invasion_a"))
{
+#if !ALIEN_DEMO
ChromeImageNumber = CL_LoadImageOnce("Envrnmts\\Invasion\\water2.RIM",LIO_D3DTEXTURE|LIO_RELATIVEPATH|LIO_RESTORABLE|LIO_TRANSPARENT);
WaterShaftImageNumber = CL_LoadImageOnce("Envrnmts\\Invasion\\water-shaft.RIM",LIO_D3DTEXTURE|LIO_RELATIVEPATH|LIO_RESTORABLE|LIO_TRANSPARENT);
+#else /* alien demo has these in common */
+ ChromeImageNumber = CL_LoadImageOnce("Common\\water2.RIM",LIO_D3DTEXTURE|LIO_RELATIVEPATH|LIO_RESTORABLE|LIO_TRANSPARENT);
+ WaterShaftImageNumber = CL_LoadImageOnce("Common\\water-shaft.RIM",LIO_D3DTEXTURE|LIO_RELATIVEPATH|LIO_RESTORABLE|LIO_TRANSPARENT);
+#endif
}
else if (!strcmp(LevelName,"genshd1"))
{
diff --git a/src/opengl.c b/src/opengl.c
index 1201895..d93e925 100644
--- a/src/opengl.c
+++ b/src/opengl.c
@@ -2679,14 +2679,13 @@ void D3D_DrawWaterTest(MODULE *testModulePtr)
}
-/* TODO: doubled this from 256 to 512 because of overflows in DrawMoltenMetal_Clipped */
-VECTORCH MeshVertex[512];
+VECTORCH MeshVertex[256];
#define TEXTURE_WATER 0
-VECTORCH MeshWorldVertex[512];
-unsigned int MeshVertexColour[512];
-unsigned int MeshVertexSpecular[512];
-char MeshVertexOutcode[512];
+VECTORCH MeshWorldVertex[256];
+unsigned int MeshVertexColour[256];
+unsigned int MeshVertexSpecular[256];
+char MeshVertexOutcode[256];
void D3D_DrawWaterPatch(int xOrigin, int yOrigin, int zOrigin)
{
@@ -3782,7 +3781,7 @@ void D3D_DrawMoltenMetalMesh_Unclipped(void)
int i, x, y, z;
int start;
- CheckTriangleBuffer( /*256*/ 273, 0, 450, 0, (D3DTexture *)-1, -1, -1);
+ CheckTriangleBuffer(256, 0, 450, 0, (D3DTexture *)-1, -1, -1);
start = varrc;
for (i=0; i<256; i++) {
@@ -3792,36 +3791,22 @@ void D3D_DrawMoltenMetalMesh_Unclipped(void)
if (point->vz < 1) point->vz = 1;
- x = (point->vx*(Global_VDB_Ptr->VDB_ProjX+1))/point->vz+Global_VDB_Ptr->VDB_CentreX;
- y = (point->vy*(Global_VDB_Ptr->VDB_ProjY+1))/point->vz+Global_VDB_Ptr->VDB_CentreY;
-
- if (x<Global_VDB_Ptr->VDB_ClipLeft) {
- x=Global_VDB_Ptr->VDB_ClipLeft;
- } else if (x>Global_VDB_Ptr->VDB_ClipRight) {
- x=Global_VDB_Ptr->VDB_ClipRight;
- }
-
- if (y<Global_VDB_Ptr->VDB_ClipUp) {
- y=Global_VDB_Ptr->VDB_ClipUp;
- } else if (y>Global_VDB_Ptr->VDB_ClipDown) {
- y=Global_VDB_Ptr->VDB_ClipDown;
- }
-
- sf = pointWS->vx*WaterUScale+(1.0f/256.0f);
- tf = pointWS->vy*WaterVScale+(1.0f/256.0f);
-
+ xf = ((float)point->vx*((float)Global_VDB_Ptr->VDB_ProjX+1.0f))/((float)point->vz*(float)ScreenDescriptorBlock.SDB_CentreX);
+ yf = -((float)point->vy*((float)Global_VDB_Ptr->VDB_ProjY+1.0f))/((float)point->vz*(float)ScreenDescriptorBlock.SDB_CentreY);
+
z = point->vz + HeadUpDisplayZOffset;
- rhw = 1.0f / (float)point->vz;
+ rhw = 1.0f / (float)point->vz;
+ zf = 1.0f - 2.0f*ZNear/(float)z;
+ sf = pointWS->vx*WaterUScale+(1.0f/256.0f);
+ tf = pointWS->vy*WaterVScale+(1.0f/256.0f);
+
b = (MeshVertexColour[i] >> 0) & 0xFF;
g = (MeshVertexColour[i] >> 8) & 0xFF;
r = (MeshVertexColour[i] >> 16) & 0xFF;
a = (MeshVertexColour[i] >> 24) & 0xFF;
- xf = ((float)x - (float)ScreenDescriptorBlock.SDB_CentreX - 0.5f) / ((float)ScreenDescriptorBlock.SDB_CentreX - 0.5f);
- yf = -((float)y - (float)ScreenDescriptorBlock.SDB_CentreY - 0.5f) / ((float)ScreenDescriptorBlock.SDB_CentreY - 0.5f);
- zf = 1.0f - 2.0f*ZNear/(float)z;
-
+
varrp->v[0] = xf/rhw;
varrp->v[1] = yf/rhw;
varrp->v[2] = zf/rhw;
@@ -3865,17 +3850,32 @@ void D3D_DrawMoltenMetalMesh_Unclipped(void)
void D3D_DrawMoltenMetalMesh_Clipped(void)
{
- /* clipping unnecessary. */
D3D_DrawMoltenMetalMesh_Unclipped();
+ return;
#if 0
- int i, x, y, z;
+ int i, x, y, z, c, start;
float ZNear = (float) (Global_VDB_Ptr->VDB_ClipZ * GlobalScale);
VECTORCH *point = MeshVertex;
VECTORCH *pointWS = MeshWorldVertex;
- CheckTriangleBuffer(256, 0, 450, 0, (D3DTexture *)-1, -1, -1);
+ /* how many triangles drawn the first time, (450-c the second time) */
+ c = 0;
+ for (x=0; x<15; x++) {
+ for(y=0; y<15; y++) {
+ int p1 = 0+x+(16*y);
+ int p2 = 1+x+(16*y);
+ int p3 = 16+x+(16*y);
+ int p4 = 17+x+(16*y);
+
+ if (MeshVertexOutcode[p1]&&MeshVertexOutcode[p2]&&MeshVertexOutcode[p3]&&MeshVertexOutcode[p4])
+ c += 2;
+ }
+ }
+
+ CheckTriangleBuffer(256, 0, c, 0, (D3DTexture *)-1, -1, -1);
+ start = varrc;
for (i=0; i<256; i++)
{
@@ -3915,27 +3915,28 @@ void D3D_DrawMoltenMetalMesh_Clipped(void)
yf = -((float)y - (float)ScreenDescriptorBlock.SDB_CentreY - 0.5f) / ((float)ScreenDescriptorBlock.SDB_CentreY - 0.5f);
zf = 1.0f - 2.0f*ZNear/(float)z;
- tarr[i].v[0] = xf/rhw;
- tarr[i].v[1] = yf/rhw;
- tarr[i].v[2] = zf/rhw;
- tarr[i].v[3] = 1.0f/rhw;
+ varrp->v[0] = xf/rhw;
+ varrp->v[1] = yf/rhw;
+ varrp->v[2] = zf/rhw;
+ varrp->v[3] = 1.0f/rhw;
- tarr[i].t[0] = sf;
- tarr[i].t[1] = tf;
+ varrp->t[0] = sf;
+ varrp->t[1] = tf;
+
+ varrp->c[0] = r;
+ varrp->c[1] = g;
+ varrp->c[2] = b;
+ varrp->c[3] = a;
+
+ varrp++;
+ varrc++;
- tarr[i].c[0] = r;
- tarr[i].c[1] = g;
- tarr[i].c[2] = b;
- tarr[i].c[3] = a;
-
point++;
pointWS++;
}
/* CONSTRUCT POLYS */
{
- int tc = 0;
-
for (x=0; x<15; x++)
{
for(y=0; y<15; y++)
@@ -3945,8 +3946,6 @@ void D3D_DrawMoltenMetalMesh_Clipped(void)
int p3 = 16+x+(16*y);
int p4 = 17+x+(16*y);
- if (p3 > 255)
- continue;
#if 0
#if 0
if (MeshVertexOutcode[p1]&&MeshVertexOutcode[p2]&&MeshVertexOutcode[p3])
@@ -3970,15 +3969,15 @@ void D3D_DrawMoltenMetalMesh_Clipped(void)
#endif
#endif
if (MeshVertexOutcode[p1]&&MeshVertexOutcode[p2]&&MeshVertexOutcode[p3]&&MeshVertexOutcode[p4]) {
-#if 0
- tris[tc+0].a = p1;
- tris[tc+0].b = p2;
- tris[tc+0].c = p3;
- tris[tc+1].a = p2;
- tris[tc+1].b = p4;
- tris[tc+1].c = p3;
-#endif
- tc += 2;
+ tarrp[0].a = start+p1;
+ tarrp[0].b = start+p2;
+ tarrp[0].c = start+p3;
+ tarrp[1].a = start+p2;
+ tarrp[1].b = start+p4;
+ tarrp[1].c = start+p3;
+
+ tarrp += 2;
+ tarrc += 2;
}
}
}
@@ -4000,9 +3999,6 @@ void D3D_DrawMoltenMetalMesh_Clipped(void)
p[2] = 17+x+(16*y);
p[3] = 16+x+(16*y);
- if (p[3] > 255)
- continue;
-
if (!(MeshVertexOutcode[p[0]]&&MeshVertexOutcode[p[1]]&&MeshVertexOutcode[p[2]]&&MeshVertexOutcode[p[3]]))
{
for (i=0; i<4; i++)
@@ -4035,11 +4031,8 @@ void D3D_DrawMoltenMetalMesh_Clipped(void)
if(RenderPolygon.NumberOfVertices<3) continue;
GouraudTexturedPolygon_ClipWithPositiveX();
if(RenderPolygon.NumberOfVertices<3) continue;
-
- if (CurrTextureHandle == NULL)
- D3D_ZBufferedGouraudPolygon_Output(&fakeHeader,RenderPolygon.Vertices);
- else
- D3D_ZBufferedGouraudTexturedPolygon_Output(&fakeHeader,RenderPolygon.Vertices);
+
+ /* draw polygon */
}
}
}