Fixes #5: 't' is now used in drawPoly()

This commit is contained in:
ABelliqueux 2021-06-29 16:30:44 +02:00
parent d2f5a86ef0
commit 92d05f24a7
7 changed files with 232 additions and 114 deletions

View File

@ -43,6 +43,7 @@ typedef struct PRIM {
} PRIM; } PRIM;
typedef struct MESH { typedef struct MESH {
int totalVerts;
TMESH * tmesh; TMESH * tmesh;
PRIM * index; PRIM * index;
TIM_IMAGE * tim; TIM_IMAGE * tim;

View File

@ -8,13 +8,13 @@ void transformMesh(CAMERA * camera, MESH * meshes);
void enlightMesh(LEVEL * curLvl, MESH * actorPtr, SVECTOR * lgtang); 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); void drawPoly(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw);
// Tri drawing // 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 set3VertexLerPos(MESH * mesh, long t);
void set3Prism(POLY_GT3 * poly, MESH * mesh, DRAWENV * draw, int i); void set3Prism(POLY_GT3 * poly, MESH * mesh, DRAWENV * draw, int i);
void set3Tex(POLY_GT3 * poly, MESH * mesh, DRAWENV * draw, long t, 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); 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 //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 set4VertexLerPos(MESH * mesh, long t);
void set4Prism(POLY_GT4 * poly4, MESH * mesh, DRAWENV * draw, int i); void set4Prism(POLY_GT4 * poly4, MESH * mesh, DRAWENV * draw, int i);
void set4Tex(POLY_GT4 * poly4, MESH * mesh, DRAWENV * draw, long t, int i); void set4Tex(POLY_GT4 * poly4, MESH * mesh, DRAWENV * draw, long t, int i);

View File

@ -1,8 +1,8 @@
#include "level0.h" #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 = { CAMPOS level0_camPos_Camera = {
{ -770,459,623 }, { -770,459,623 },
@ -16,7 +16,7 @@ CAMPATH level0_camPath = {
}; };
MATRIX level0_lgtmat = { MATRIX level0_lgtmat = {
-1919, 3254, 1581, -2486, 3254, -22,
0,0,0, 0,0,0,
0,0,0, 0,0,0,
@ -106,13 +106,14 @@ TMESH level0_modelCube = {
}; };
MESH level0_meshCube = { MESH level0_meshCube = {
24,
&level0_modelCube, &level0_modelCube,
level0_modelCube_index, level0_modelCube_index,
0, 0,
0, 0,
{0}, {0},
{0,-236,23, 0}, {0,-236,23, 0},
{0,-1024,0}, {0,-1024,0, 0},
1, // isRigidBody 1, // isRigidBody
0, // isStaticBody 0, // isStaticBody
0, // isRound 0, // isRound
@ -903,14 +904,95 @@ TMESH level0_modelPlane = {
100 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 = { MESH level0_meshPlane = {
400,
&level0_modelPlane, &level0_modelPlane,
level0_modelPlane_index, level0_modelPlane_index,
0, 0,
0, 0,
{0}, {0},
{0,0,0, 0}, {0,0,0, 0},
{0,0,0}, {0,0,0, 0},
0, // isRigidBody 0, // isRigidBody
0, // isStaticBody 0, // isStaticBody
0, // isRound 0, // isRound
@ -998,4 +1080,5 @@ LEVEL level0 = {
&level0_camPath, &level0_camPath,
(CAMANGLE **)&level0_camAngles, (CAMANGLE **)&level0_camAngles,
&level0_nodePlane, &level0_nodePlane,
&level0_meshPlan
}; };

View File

@ -4,9 +4,9 @@
extern LEVEL level0; extern LEVEL level0;
extern CVECTOR level0_BGc;; extern CVECTOR level0_BGc;
extern VECTOR level0_BKc;; extern VECTOR level0_BKc;
extern CAMPOS level0_camPos_Camera; extern CAMPOS level0_camPos_Camera;
@ -72,3 +72,16 @@ extern NODE * level0_curNode;
extern NODE level0_nodePlane; 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;

View File

@ -968,6 +968,7 @@ extern unsigned long _binary_TIM_cat_tim_length;
TIM_IMAGE level1_tim_cat; TIM_IMAGE level1_tim_cat;
MESH level1_meshCube = { MESH level1_meshCube = {
324,
&level1_modelCube, &level1_modelCube,
level1_modelCube_index, level1_modelCube_index,
&level1_tim_cat, &level1_tim_cat,
@ -1321,7 +1322,7 @@ VANIM level1_modelCylindre_anim = {
0, 0,
0, 0,
1, 1,
0, 1,
{ {
//Frame 0 //Frame 0
{ 3,35,47 }, { 3,35,47 },
@ -1811,6 +1812,7 @@ extern unsigned long _binary_TIM_home_tim_length;
TIM_IMAGE level1_tim_home; TIM_IMAGE level1_tim_home;
MESH level1_meshCylindre = { MESH level1_meshCylindre = {
114,
&level1_modelCylindre, &level1_modelCylindre,
level1_modelCylindre_index, level1_modelCylindre_index,
&level1_tim_home, &level1_tim_home,
@ -2278,6 +2280,7 @@ TMESH level1_modelgnd = {
}; };
MESH level1_meshgnd = { MESH level1_meshgnd = {
144,
&level1_modelgnd, &level1_modelgnd,
level1_modelgnd_index, level1_modelgnd_index,
&level1_tim_home, &level1_tim_home,
@ -2595,6 +2598,7 @@ TMESH level1_modelgnd_001 = {
}; };
MESH level1_meshgnd_001 = { MESH level1_meshgnd_001 = {
90,
&level1_modelgnd_001, &level1_modelgnd_001,
level1_modelgnd_001_index, level1_modelgnd_001_index,
&level1_tim_home, &level1_tim_home,
@ -2912,6 +2916,7 @@ TMESH level1_modelgnd_003 = {
}; };
MESH level1_meshgnd_003 = { MESH level1_meshgnd_003 = {
90,
&level1_modelgnd_003, &level1_modelgnd_003,
level1_modelgnd_003_index, level1_modelgnd_003_index,
&level1_tim_home, &level1_tim_home,
@ -3229,6 +3234,7 @@ TMESH level1_modelgnd_002 = {
}; };
MESH level1_meshgnd_002 = { MESH level1_meshgnd_002 = {
90,
&level1_modelgnd_002, &level1_modelgnd_002,
level1_modelgnd_002_index, level1_modelgnd_002_index,
&level1_tim_home, &level1_tim_home,
@ -8840,6 +8846,7 @@ extern unsigned long _binary_TIM_lara_tim_length;
TIM_IMAGE level1_tim_lara; TIM_IMAGE level1_tim_lara;
MESH level1_meshLara = { MESH level1_meshLara = {
2082,
&level1_modelLara, &level1_modelLara,
level1_modelLara_index, level1_modelLara_index,
&level1_tim_lara, &level1_tim_lara,
@ -8999,6 +9006,7 @@ TMESH level1_modelobject = {
}; };
MESH level1_meshobject = { MESH level1_meshobject = {
36,
&level1_modelobject, &level1_modelobject,
level1_modelobject_index, level1_modelobject_index,
&level1_tim_home, &level1_tim_home,
@ -9074,6 +9082,7 @@ TMESH level1_modelPlan = {
}; };
MESH level1_meshPlan = { MESH level1_meshPlan = {
4,
&level1_modelPlan, &level1_modelPlan,
level1_modelPlan_index, level1_modelPlan_index,
&level1_tim_home, &level1_tim_home,
@ -9537,6 +9546,7 @@ TMESH level1_modelSphere = {
}; };
MESH level1_meshSphere = { MESH level1_meshSphere = {
150,
&level1_modelSphere, &level1_modelSphere,
level1_modelSphere_index, level1_modelSphere_index,
&level1_tim_home, &level1_tim_home,
@ -10000,6 +10010,7 @@ TMESH level1_modelSphere_001 = {
}; };
MESH level1_meshSphere_001 = { MESH level1_meshSphere_001 = {
150,
&level1_modelSphere_001, &level1_modelSphere_001,
level1_modelSphere_001_index, level1_modelSphere_001_index,
&level1_tim_home, &level1_tim_home,
@ -10167,6 +10178,7 @@ TMESH level1_modelwall = {
}; };
MESH level1_meshwall = { MESH level1_meshwall = {
36,
&level1_modelwall, &level1_modelwall,
level1_modelwall_index, level1_modelwall_index,
&level1_tim_home, &level1_tim_home,
@ -10402,6 +10414,7 @@ TMESH level1_modelwall_001 = {
}; };
MESH level1_meshwall_001 = { MESH level1_meshwall_001 = {
60,
&level1_modelwall_001, &level1_modelwall_001,
level1_modelwall_001_index, level1_modelwall_001_index,
&level1_tim_home, &level1_tim_home,
@ -10637,6 +10650,7 @@ TMESH level1_modelwall_002 = {
}; };
MESH level1_meshwall_002 = { MESH level1_meshwall_002 = {
60,
&level1_modelwall_002, &level1_modelwall_002,
level1_modelwall_002_index, level1_modelwall_002_index,
&level1_tim_home, &level1_tim_home,
@ -10804,6 +10818,7 @@ TMESH level1_modelwall_003 = {
}; };
MESH level1_meshwall_003 = { MESH level1_meshwall_003 = {
36,
&level1_modelwall_003, &level1_modelwall_003,
level1_modelwall_003_index, level1_modelwall_003_index,
&level1_tim_home, &level1_tim_home,

View File

@ -28,12 +28,16 @@ void drawPoly(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpr
long nclip, t = 0; 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. // 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 ) // mesh is POLY_GT3 ( triangle )
if (mesh->index[0].code == 4) { for (int i = 0; i < (mesh->totalVerts);) {
drawTri(mesh, Flag, atime, camMode, nextpri, ot, db, draw); 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 is quad
if (mesh->index[0].code == 8) { if (mesh->index[t].code == 8) {
drawQuad(mesh, Flag, atime, camMode, nextpri, ot, db, draw); t = drawQuad(mesh, Flag, atime, camMode, nextpri, ot, db, draw, t, i);
i += 4;
}
} }
}; };
void set3VertexLerPos(MESH * mesh, long t){ 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 drawQuad(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw, int t, int i) {
long nclip, t = 0; long nclip = 0;
// If mesh is quad // If mesh is quad
POLY_GT4 * poly4; 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 is not part of BG, draw them, else, discard
if ( !(mesh->isBG) || *camMode != 2 ) { if ( !(mesh->isBG) || *camMode != 2 ) {
poly4 = (POLY_GT4 *)*nextpri; poly4 = (POLY_GT4 *)*nextpri;
@ -343,16 +347,17 @@ void drawQuad(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpr
} }
*nextpri += sizeof( POLY_GT4 ); *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 drawTri(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpri, u_long * ot, char * db, DRAWENV * draw, int t, int i) {
long nclip, t = 0; long nclip = 0;
// mesh is POLY_GT3 ( triangle ) // mesh is POLY_GT3 ( triangle )
POLY_GT3 * poly; POLY_GT3 * poly;
// len member == # vertices, but here it's # of triangle... So, for each tri * 3 vertices ... // 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 is not part of precalculated background, draw them, else, discard
if ( !( mesh->isBG ) || *camMode != 2) { if ( !( mesh->isBG ) || *camMode != 2) {
poly = (POLY_GT3 *)*nextpri; poly = (POLY_GT3 *)*nextpri;
@ -412,9 +417,10 @@ void drawTri(MESH * mesh, long * Flag, int atime, int * camMode, char ** nextpri
} }
*nextpri += sizeof(POLY_GT3); *nextpri += sizeof(POLY_GT3);
} }
t+=1; t++;
} return t;
} }
//~ }
}; };
void drawBG(CAMANGLE * camPtr, char ** nextpri, u_long * otdisc, char * db) { void drawBG(CAMANGLE * camPtr, char ** nextpri, u_long * otdisc, char * db) {
// Draw BG image in two SPRT since max width == 256 px // Draw BG image in two SPRT since max width == 256 px

View File

@ -93,7 +93,7 @@ void LvlPtrSet(LEVEL * curLevel, LEVEL * level){
curLevel->camAngles = level->camAngles; curLevel->camAngles = level->camAngles;
curLevel->curNode = level->curNode; // Blank curLevel->curNode = level->curNode; // Blank
// Move these to drawPoly() // Move these to drawPoly()
curLevel->meshPlan = level->meshPlan; //~ curLevel->meshPlan = level->meshPlan;
//~ FntPrint("%x %x", curLevel->meshes, level->meshes); //~ FntPrint("%x %x", curLevel->meshes, level->meshes);
}; };
int LoadLevelCD(const char*const LevelName, u_long * LoadAddress){ int LoadLevelCD(const char*const LevelName, u_long * LoadAddress){