Fixes #5: 't' is now used in drawPoly()
This commit is contained in:
parent
d2f5a86ef0
commit
92d05f24a7
@ -43,6 +43,7 @@ typedef struct PRIM {
|
||||
} PRIM;
|
||||
|
||||
typedef struct MESH {
|
||||
int totalVerts;
|
||||
TMESH * tmesh;
|
||||
PRIM * index;
|
||||
TIM_IMAGE * tim;
|
||||
|
@ -8,13 +8,13 @@ void transformMesh(CAMERA * camera, MESH * meshes);
|
||||
void enlightMesh(LEVEL * curLvl, MESH * actorPtr, SVECTOR * lgtang);
|
||||
void drawPoly(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw);
|
||||
// Tri drawing
|
||||
long drawTri(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw, int t, int i);
|
||||
void set3VertexLerPos(MESH * mesh, long t);
|
||||
void set3Prism(POLY_GT3 * poly, MESH * mesh, DRAWENV * draw, int i);
|
||||
void set3Tex(POLY_GT3 * poly, MESH * mesh, DRAWENV * draw, long t, int i);
|
||||
long interpolateTri(POLY_GT3 * poly, MESH * mesh, long t, long * Flag);
|
||||
void drawTri(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw);
|
||||
//Quad drawing
|
||||
void drawQuad(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw);
|
||||
long drawQuad(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw, int t, int i);
|
||||
void set4VertexLerPos(MESH * mesh, long t);
|
||||
void set4Prism(POLY_GT4 * poly4, MESH * mesh, DRAWENV * draw, int i);
|
||||
void set4Tex(POLY_GT4 * poly4, MESH * mesh, DRAWENV * draw, long t, int i);
|
||||
|
@ -1,8 +1,8 @@
|
||||
#include "level0.h"
|
||||
|
||||
CVECTOR level0_BGc = { 149, 218, 216, 0 };
|
||||
CVECTOR level0_BGc = { 92, 218, 216, 0 };
|
||||
|
||||
VECTOR level0_BKc = { 0, 255, 255, 0 };
|
||||
VECTOR level0_BKc = { 88, 4, 0, 0 };
|
||||
|
||||
CAMPOS level0_camPos_Camera = {
|
||||
{ -770,459,623 },
|
||||
@ -16,7 +16,7 @@ CAMPATH level0_camPath = {
|
||||
};
|
||||
|
||||
MATRIX level0_lgtmat = {
|
||||
-1919, 3254, 1581,
|
||||
-2486, 3254, -22,
|
||||
0,0,0,
|
||||
0,0,0,
|
||||
|
||||
@ -106,13 +106,14 @@ TMESH level0_modelCube = {
|
||||
};
|
||||
|
||||
MESH level0_meshCube = {
|
||||
24,
|
||||
&level0_modelCube,
|
||||
level0_modelCube_index,
|
||||
0,
|
||||
0,
|
||||
{0},
|
||||
{0,-236,23, 0},
|
||||
{0,-1024,0},
|
||||
{0,-1024,0, 0},
|
||||
1, // isRigidBody
|
||||
0, // isStaticBody
|
||||
0, // isRound
|
||||
@ -903,14 +904,95 @@ TMESH level0_modelPlane = {
|
||||
100
|
||||
};
|
||||
|
||||
SVECTOR level0_modelPlan_mesh[] = {
|
||||
{ -45,36,-3 },
|
||||
{ 48,36,-3 },
|
||||
{ -45,2,2 },
|
||||
{ 48,2,2 }
|
||||
};
|
||||
|
||||
SVECTOR level0_modelPlan_normal[] = {
|
||||
0,638,4046, 0,
|
||||
0,638,4046, 0,
|
||||
0,638,4046, 0,
|
||||
0,638,4046, 0
|
||||
};
|
||||
|
||||
SVECTOR level0_modelPlan_uv[] = {
|
||||
64,155, 0, 0,
|
||||
129,155, 0, 0,
|
||||
129,130, 0, 0,
|
||||
64,130, 0, 0
|
||||
};
|
||||
|
||||
CVECTOR level0_modelPlan_color[] = {
|
||||
80, 80, 80, 0,
|
||||
128, 128, 128, 0,
|
||||
128, 128, 128, 0
|
||||
};
|
||||
|
||||
PRIM level0_modelPlan_index[] = {
|
||||
0,1,3,2,8
|
||||
};
|
||||
|
||||
BODY level0_modelPlan_body = {
|
||||
{0, 0, 0, 0},
|
||||
-40,-40,194, 0,
|
||||
0,0,0, 0,
|
||||
1,
|
||||
ONE/1,
|
||||
-45,2,-3, 0,
|
||||
48,36,2, 0,
|
||||
0,
|
||||
};
|
||||
|
||||
TMESH level0_modelPlan = {
|
||||
level0_modelPlan_mesh,
|
||||
level0_modelPlan_normal,
|
||||
level0_modelPlan_uv,
|
||||
level0_modelPlan_color,
|
||||
1
|
||||
};
|
||||
|
||||
extern unsigned long _binary_TIM_home_tim_start[];
|
||||
|
||||
TIM_IMAGE level0_tim_home;
|
||||
|
||||
MESH level0_meshPlan = {
|
||||
4,
|
||||
&level0_modelPlan,
|
||||
level0_modelPlan_index,
|
||||
&level0_tim_home,
|
||||
_binary_TIM_home_tim_start,
|
||||
{0},
|
||||
{-40,-40,194, 0},
|
||||
{0,0,0},
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
&level0_modelPlan_body,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
};
|
||||
|
||||
MESH level0_meshPlane = {
|
||||
400,
|
||||
&level0_modelPlane,
|
||||
level0_modelPlane_index,
|
||||
0,
|
||||
0,
|
||||
{0},
|
||||
{0,0,0, 0},
|
||||
{0,0,0},
|
||||
{0,0,0, 0},
|
||||
0, // isRigidBody
|
||||
0, // isStaticBody
|
||||
0, // isRound
|
||||
@ -998,4 +1080,5 @@ LEVEL level0 = {
|
||||
&level0_camPath,
|
||||
(CAMANGLE **)&level0_camAngles,
|
||||
&level0_nodePlane,
|
||||
&level0_meshPlan
|
||||
};
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
extern LEVEL level0;
|
||||
|
||||
extern CVECTOR level0_BGc;;
|
||||
extern CVECTOR level0_BGc;
|
||||
|
||||
extern VECTOR level0_BKc;;
|
||||
extern VECTOR level0_BKc;
|
||||
|
||||
extern CAMPOS level0_camPos_Camera;
|
||||
|
||||
@ -72,3 +72,16 @@ extern NODE * level0_curNode;
|
||||
|
||||
extern NODE level0_nodePlane;
|
||||
|
||||
extern SVECTOR level0_modelPlan_normal[];
|
||||
|
||||
extern SVECTOR level0_modelPlan_uv[];
|
||||
|
||||
extern CVECTOR level0_modelPlan_color[];
|
||||
|
||||
extern PRIM level0_modelPlan_index[];
|
||||
|
||||
extern BODY level0_modelPlan_body;
|
||||
|
||||
extern TMESH level0_modelPlan;
|
||||
|
||||
extern MESH level0_meshPlan;
|
||||
|
@ -968,6 +968,7 @@ extern unsigned long _binary_TIM_cat_tim_length;
|
||||
TIM_IMAGE level1_tim_cat;
|
||||
|
||||
MESH level1_meshCube = {
|
||||
324,
|
||||
&level1_modelCube,
|
||||
level1_modelCube_index,
|
||||
&level1_tim_cat,
|
||||
@ -1321,7 +1322,7 @@ VANIM level1_modelCylindre_anim = {
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
{
|
||||
//Frame 0
|
||||
{ 3,35,47 },
|
||||
@ -1811,6 +1812,7 @@ extern unsigned long _binary_TIM_home_tim_length;
|
||||
TIM_IMAGE level1_tim_home;
|
||||
|
||||
MESH level1_meshCylindre = {
|
||||
114,
|
||||
&level1_modelCylindre,
|
||||
level1_modelCylindre_index,
|
||||
&level1_tim_home,
|
||||
@ -2278,6 +2280,7 @@ TMESH level1_modelgnd = {
|
||||
};
|
||||
|
||||
MESH level1_meshgnd = {
|
||||
144,
|
||||
&level1_modelgnd,
|
||||
level1_modelgnd_index,
|
||||
&level1_tim_home,
|
||||
@ -2595,6 +2598,7 @@ TMESH level1_modelgnd_001 = {
|
||||
};
|
||||
|
||||
MESH level1_meshgnd_001 = {
|
||||
90,
|
||||
&level1_modelgnd_001,
|
||||
level1_modelgnd_001_index,
|
||||
&level1_tim_home,
|
||||
@ -2912,6 +2916,7 @@ TMESH level1_modelgnd_003 = {
|
||||
};
|
||||
|
||||
MESH level1_meshgnd_003 = {
|
||||
90,
|
||||
&level1_modelgnd_003,
|
||||
level1_modelgnd_003_index,
|
||||
&level1_tim_home,
|
||||
@ -3229,6 +3234,7 @@ TMESH level1_modelgnd_002 = {
|
||||
};
|
||||
|
||||
MESH level1_meshgnd_002 = {
|
||||
90,
|
||||
&level1_modelgnd_002,
|
||||
level1_modelgnd_002_index,
|
||||
&level1_tim_home,
|
||||
@ -8840,6 +8846,7 @@ extern unsigned long _binary_TIM_lara_tim_length;
|
||||
TIM_IMAGE level1_tim_lara;
|
||||
|
||||
MESH level1_meshLara = {
|
||||
2082,
|
||||
&level1_modelLara,
|
||||
level1_modelLara_index,
|
||||
&level1_tim_lara,
|
||||
@ -8999,6 +9006,7 @@ TMESH level1_modelobject = {
|
||||
};
|
||||
|
||||
MESH level1_meshobject = {
|
||||
36,
|
||||
&level1_modelobject,
|
||||
level1_modelobject_index,
|
||||
&level1_tim_home,
|
||||
@ -9074,6 +9082,7 @@ TMESH level1_modelPlan = {
|
||||
};
|
||||
|
||||
MESH level1_meshPlan = {
|
||||
4,
|
||||
&level1_modelPlan,
|
||||
level1_modelPlan_index,
|
||||
&level1_tim_home,
|
||||
@ -9537,6 +9546,7 @@ TMESH level1_modelSphere = {
|
||||
};
|
||||
|
||||
MESH level1_meshSphere = {
|
||||
150,
|
||||
&level1_modelSphere,
|
||||
level1_modelSphere_index,
|
||||
&level1_tim_home,
|
||||
@ -10000,6 +10010,7 @@ TMESH level1_modelSphere_001 = {
|
||||
};
|
||||
|
||||
MESH level1_meshSphere_001 = {
|
||||
150,
|
||||
&level1_modelSphere_001,
|
||||
level1_modelSphere_001_index,
|
||||
&level1_tim_home,
|
||||
@ -10167,6 +10178,7 @@ TMESH level1_modelwall = {
|
||||
};
|
||||
|
||||
MESH level1_meshwall = {
|
||||
36,
|
||||
&level1_modelwall,
|
||||
level1_modelwall_index,
|
||||
&level1_tim_home,
|
||||
@ -10402,6 +10414,7 @@ TMESH level1_modelwall_001 = {
|
||||
};
|
||||
|
||||
MESH level1_meshwall_001 = {
|
||||
60,
|
||||
&level1_modelwall_001,
|
||||
level1_modelwall_001_index,
|
||||
&level1_tim_home,
|
||||
@ -10637,6 +10650,7 @@ TMESH level1_modelwall_002 = {
|
||||
};
|
||||
|
||||
MESH level1_meshwall_002 = {
|
||||
60,
|
||||
&level1_modelwall_002,
|
||||
level1_modelwall_002_index,
|
||||
&level1_tim_home,
|
||||
@ -10804,6 +10818,7 @@ TMESH level1_modelwall_003 = {
|
||||
};
|
||||
|
||||
MESH level1_meshwall_003 = {
|
||||
36,
|
||||
&level1_modelwall_003,
|
||||
level1_modelwall_003_index,
|
||||
&level1_tim_home,
|
||||
|
@ -28,12 +28,16 @@ void drawPoly(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpr
|
||||
long nclip, t = 0;
|
||||
// FIXME : t is not incremented, thus always 0. It works if the mesh only has tris or quads, but won't work with mixed meshes.
|
||||
// mesh is POLY_GT3 ( triangle )
|
||||
if (mesh->index[0].code == 4) {
|
||||
drawTri(mesh, Flag, atime, camMode, nextpri, ot, db, draw);
|
||||
for (int i = 0; i < (mesh->totalVerts);) {
|
||||
if (mesh->index[t].code == 4) {
|
||||
t = drawTri(mesh, Flag, atime, camMode, nextpri, ot, db, draw, t, i);
|
||||
i += 3;
|
||||
}
|
||||
// If mesh is quad
|
||||
if (mesh->index[0].code == 8) {
|
||||
drawQuad(mesh, Flag, atime, camMode, nextpri, ot, db, draw);
|
||||
if (mesh->index[t].code == 8) {
|
||||
t = drawQuad(mesh, Flag, atime, camMode, nextpri, ot, db, draw, t, i);
|
||||
i += 4;
|
||||
}
|
||||
}
|
||||
};
|
||||
void set3VertexLerPos(MESH * mesh, long t){
|
||||
@ -279,11 +283,11 @@ void set4Subdiv(void){
|
||||
//~ }
|
||||
|
||||
};
|
||||
void drawQuad(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw) {
|
||||
long nclip, t = 0;
|
||||
long drawQuad(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw, int t, int i) {
|
||||
long nclip = 0;
|
||||
// If mesh is quad
|
||||
POLY_GT4 * poly4;
|
||||
for (int i = 0; i < (mesh->tmesh->len * 4); i += 4) {
|
||||
//~ for (int i = 0; i < (mesh->tmesh->len * 4); i += 4) {
|
||||
// if mesh is not part of BG, draw them, else, discard
|
||||
if ( !(mesh->isBG) || *camMode != 2 ) {
|
||||
poly4 = (POLY_GT4 *)*nextpri;
|
||||
@ -343,16 +347,17 @@ void drawQuad(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpr
|
||||
}
|
||||
*nextpri += sizeof( POLY_GT4 );
|
||||
}
|
||||
t += 1;
|
||||
}
|
||||
t++;
|
||||
return t;
|
||||
}
|
||||
//~ }
|
||||
};
|
||||
void drawTri(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw) {
|
||||
long nclip, t = 0;
|
||||
long drawTri(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw, int t, int i) {
|
||||
long nclip = 0;
|
||||
// mesh is POLY_GT3 ( triangle )
|
||||
POLY_GT3 * poly;
|
||||
// len member == # vertices, but here it's # of triangle... So, for each tri * 3 vertices ...
|
||||
for ( int i = 0; i < (mesh->tmesh->len * 3); i += 3 ) {
|
||||
//~ for ( int i = 0; i < (mesh->tmesh->len * 3); i += 3 ) {
|
||||
// If mesh is not part of precalculated background, draw them, else, discard
|
||||
if ( !( mesh->isBG ) || *camMode != 2) {
|
||||
poly = (POLY_GT3 *)*nextpri;
|
||||
@ -412,9 +417,10 @@ void drawTri(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpri
|
||||
}
|
||||
*nextpri += sizeof(POLY_GT3);
|
||||
}
|
||||
t+=1;
|
||||
}
|
||||
t++;
|
||||
return t;
|
||||
}
|
||||
//~ }
|
||||
};
|
||||
void drawBG(CAMANGLE * camPtr, char ** nextpri, u_long * otdisc, char * db) {
|
||||
// Draw BG image in two SPRT since max width == 256 px
|
||||
|
@ -93,7 +93,7 @@ void LvlPtrSet(LEVEL * curLevel, LEVEL * level){
|
||||
curLevel->camAngles = level->camAngles;
|
||||
curLevel->curNode = level->curNode; // Blank
|
||||
// Move these to drawPoly()
|
||||
curLevel->meshPlan = level->meshPlan;
|
||||
//~ curLevel->meshPlan = level->meshPlan;
|
||||
//~ FntPrint("%x %x", curLevel->meshes, level->meshes);
|
||||
};
|
||||
int LoadLevelCD(const char*const LevelName, u_long * LoadAddress){
|
||||
|
Loading…
x
Reference in New Issue
Block a user