This commit is contained in:
Daveo 2001-07-09 20:02:33 +00:00
parent 7b8e1fe8c4
commit 3aeddaf979
9 changed files with 111 additions and 235 deletions

View File

@ -53,10 +53,6 @@ int Count;
TextPtr+=strlen(TextPtr)+1; TextPtr+=strlen(TextPtr)+1;
TPH=atol(TextPtr); TPH=atol(TextPtr);
break; break;
// case 'm':
// TpStr= CheckFileString(String);
// Level.AddModel(TpStr);
// break;
case 'i': case 'i':
IncDir= CheckFileString(String); IncDir= CheckFileString(String);
IncDir.Upper(); IncDir.Upper();
@ -104,10 +100,11 @@ void Usage(char *ErrStr)
printf(" -o:[FILE] Set output File (AND Dir)\n"); printf(" -o:[FILE] Set output File (AND Dir)\n");
printf(" -s:nn Set Scaling value\n"); printf(" -s:nn Set Scaling value\n");
printf(" -t:p,w,h Set TPage No,Width,Height\n"); printf(" -t:p,w,h Set TPage No,Width,Height\n");
// printf(" -m: Add Model\n");
printf(" -d: Enable Debug output\n"); printf(" -d: Enable Debug output\n");
printf(" -i: Include Out Dir\n");
printf(" -q: Enable Quadding\n"); printf(" -q: Enable Quadding\n");
printf(" -l: Enable Local Geom\n"); printf(" -l: Enable Local Geom\n");
printf(" -p: Level Chunk Pak Info (X,Y) (Default=None(0,0)\n");
GObject::Error(ERR_FATAL,ErrStr); GObject::Error(ERR_FATAL,ErrStr);
} }

View File

@ -25,6 +25,8 @@
#include "Layers\MkLevelLayerTrigger.h" #include "Layers\MkLevelLayerTrigger.h"
#include "Layers\MkLevelLayerHazard.h" #include "Layers\MkLevelLayerHazard.h"
#define PSX_TILE2D_HEIGHT (12)
#define PSX_TILE3D_HEIGHT (16)
//*************************************************************************** //***************************************************************************
struct sLayerNameTable struct sLayerNameTable
@ -51,12 +53,11 @@ sLayerNameTable LayerNameTable[]=
//*************************************************************************** //***************************************************************************
int TSize,QSize,VSize; int TSize,QSize,VSize;
int Tile2dSize,Tile3dSize; int Tile2dSize,Tile3dSize;
const char *ModelExcludeGroupName="ModelExcludeList";
//*************************************************************************** //***************************************************************************
const GString ConfigFilename="MkLevel.ini"; const GString ConfigFilename="MkLevel.ini";
sExpLayerTile BlankTile={0,0}; sExpLayerTile BlankTile={0,0};
//sExpLayerTile BlankTile2d={-1,-1};
//sExpLayerTile BlankTile3d={0,0};
Vector3 DefVtxTable[8]= Vector3 DefVtxTable[8]=
{ {
@ -108,10 +109,25 @@ void CMkLevel::Init(const char *Filename,const char *OutFilename,const char *Inc
{ {
// Setup filenames and paths // Setup filenames and paths
GFName Path; GFName Path;
char *Ptr;
char Buffer[256];
strcpy(Buffer,Filename);
Ptr=Buffer;
while (*Ptr)
{
if (*Ptr=='\\' || *Ptr=='/') *Ptr=' ';
Ptr++;
}
while (*Ptr!=' ') Ptr--;
*Ptr--=0;
while (*Ptr!=' ') Ptr--; Ptr--;
while (*Ptr!=' ') Ptr--; Ptr++;
LevelName=Ptr;
InFilename=Filename; InFilename=Filename;
Path=Filename; Path=Filename;
LevelName=Path.File(); // LevelName=Path.File();
Path.File(""); Path.File("");
Path.Ext(""); Path.Ext("");
InPath=Path.FullName(); InPath=Path.FullName();
@ -165,7 +181,6 @@ GFName Path;
LocalGeom=_LocalGeom; LocalGeom=_LocalGeom;
AddDefVtx(OutVtxList); AddDefVtx(OutVtxList);
} }
//*************************************************************************** //***************************************************************************
@ -183,11 +198,16 @@ int CMkLevel::AddModel(const char *Name,int TriStart,int TriCount)
{ {
sMkLevelModel ThisModel; sMkLevelModel ThisModel;
int ModelID; int ModelID;
GString ModelName=Name;
ThisModel.Name=Name; ThisModel.Name=Name;
ThisModel.TriStart=TriStart; ThisModel.TriStart=TriStart;
ThisModel.TriCount=TriCount; ThisModel.TriCount=TriCount;
if (Config.FindKey(ModelExcludeGroupName,Name)!=-1)
{
ThisModel.TriCount=0;
}
ModelID=ModelList.Add(ThisModel); ModelID=ModelList.Add(ThisModel);
return(ModelID); return(ModelID);
} }
@ -440,7 +460,7 @@ int i,ListSize=UsedTile2dList.size();
for (i=1; i<ListSize; i++) for (i=1; i<ListSize; i++)
{ // Skip blank { // Skip blank
sUsedTile2d &ThisTile=UsedTile2dList[i]; sUsedTile2d &ThisTile=UsedTile2dList[i];
ThisTile.TexID=Create2dTile(ThisTile.Tile,ThisTile.Flags); ThisTile.TexID=Create2dTile(ThisTile.Tile,ThisTile.Flags,PSX_TILE2D_HEIGHT);
} }
} }
@ -513,8 +533,12 @@ CFaceStore &ThisList=ThisElem.FaceStore;
ThisElem.Elem3d.TriCount=ThisList.GetTriFaceCount(); ThisElem.Elem3d.TriCount=ThisList.GetTriFaceCount();
ThisElem.Elem3d.QuadCount=ThisList.GetQuadFaceCount(); ThisElem.Elem3d.QuadCount=ThisList.GetQuadFaceCount();
if (!ThisElem.Model)
{ // Gen max polys per tile (NOT MODEL)
if (MaxElemTri<ThisElem.Elem3d.TriCount) MaxElemTri=ThisElem.Elem3d.TriCount; if (MaxElemTri<ThisElem.Elem3d.TriCount) MaxElemTri=ThisElem.Elem3d.TriCount;
if (MaxElemQuad<ThisElem.Elem3d.QuadCount) MaxElemQuad=ThisElem.Elem3d.QuadCount; if (MaxElemQuad<ThisElem.Elem3d.QuadCount) MaxElemQuad=ThisElem.Elem3d.QuadCount;
}
} }
//*************************************************************************** //***************************************************************************
@ -656,6 +680,10 @@ CFaceStore &FaceList=ThisElem.FaceStore;
FaceList.SetTPageFlag(F,ThisTri.Flags); FaceList.SetTPageFlag(F,ThisTri.Flags);
FaceList.AddFace(F,true); FaceList.AddFace(F,true);
} }
if (IsTile)
ThisElem.Model=false;
else
ThisElem.Model=true;
return(ElemID); return(ElemID);
} }
@ -664,7 +692,7 @@ int CMkLevel::Create2dElem(int Tile,bool Local)
{ {
CFace F; CFace F;
int i; int i;
int TexID=Create2dTile(Tile,0); int TexID=Create2dTile(Tile,0,PSX_TILE3D_HEIGHT);
int ElemID=OutElem3d.size(); int ElemID=OutElem3d.size();
OutElem3d.resize(ElemID+1); OutElem3d.resize(ElemID+1);
@ -696,123 +724,8 @@ CFaceStore &FaceList=ThisElem.FaceStore;
return(ElemID); return(ElemID);
} }
/*
int CMkLevel::Create3dTile(int Tile,int Flags)
{
sExpTile &SrcTile=InTileList[Tile];
CFace F;
int i,ListSize,p;
CList<sExpTri> SortList;
CList<float> ZPosList;
sTileBank3d ThisTile;
int TileID=OutTileBank3d.size();
CFaceStore FaceStore;
ThisTile.TriStart=OutFaceList.GetFaceCount();
ThisTile.QuadCount=0;
ThisTile.QuadStart=0;
if (SrcTile.TriCount)
{
ThisTile.TriCount=SrcTile.TriCount;
for (i=0; i<SrcTile.TriCount; i++)
{
int ListPos;
sExpTri &ThisTri=InTriList[SrcTile.TriStart+i];
float ThisZPos;
ThisZPos=ThisTri.vtx[0].z;
if (ThisZPos<ThisTri.vtx[1].z) ThisZPos=ThisTri.vtx[1].z;
if (ThisZPos<ThisTri.vtx[2].z) ThisZPos=ThisTri.vtx[2].z;
ListSize=SortList.size();
for (ListPos=0; ListPos<ListSize; ListPos++)
{
if (ZPosList[ListPos]>ThisZPos) break;
}
SortList.insert(ListPos,ThisTri);
ZPosList.insert(ListPos,ThisZPos);
}
}
else
{
int TexID=Create2dTile(Tile,0);
ThisTile.TriCount=2;
for (int i=0; i<2; i++)
{
FlatFace[i].Flags=0;
FlatFace[i].TexID=TexID;
SortList.push_back(FlatFace[i]);
}
}
// Add sorted list to main list
ListSize=SortList.size();
for (i=0; i<ListSize; i++)
{
sExpTri &ThisTri=SortList[i];
CFace F;
bool SwapPnt=false;
if (SrcTile.TriCount)
{
F.TexName=InTexNameList[ThisTri.TexID];
F.Mat=-1;
}
else
{
F.Mat=ThisTri.TexID;
}
for (p=0; p<3; p++)
{
F.vtx[p]=ThisTri.vtx[p];
F.vtx[p].y=F.vtx[p].y;
F.uvs[p].u=ThisTri.uv[p][0];
F.uvs[p].v=ThisTri.uv[p][1];
}
if (Flags & PC_TILE_FLAG_MIRROR_X)
{
F.vtx[0].x=-F.vtx[0].x;
F.vtx[1].x=-F.vtx[1].x;
F.vtx[2].x=-F.vtx[2].x;
SwapPnt^=1;
}
if (Flags & PC_TILE_FLAG_MIRROR_Y)
{
F.vtx[0].y =1.0-F.vtx[0].y;
F.vtx[1].y =1.0-F.vtx[1].y;
F.vtx[2].y =1.0-F.vtx[2].y;
SwapPnt^=1;
}
if (SwapPnt)
{
Vector3 TmpV=F.vtx[0];
F.vtx[0]=F.vtx[1];
F.vtx[1]=TmpV;
sUV TmpUV=F.uvs[0];
F.uvs[0]=F.uvs[1];
F.uvs[1]=TmpUV;
}
OutFaceList.SetTPageFlag(F,ThisTri.Flags);
OutFaceList.AddFace(F,true);
}
OutTileBank3d.push_back(ThisTile);
return(TileID);
}
*/
//*************************************************************************** //***************************************************************************
int CMkLevel::Create2dTile(int Tile,int Flags) int CMkLevel::Create2dTile(int Tile,int Flags,int Height)
{ {
sExpTile &SrcTile=InTileList[Tile]; sExpTile &SrcTile=InTileList[Tile];
sMkLevelTex InTex; sMkLevelTex InTex;
@ -820,6 +733,7 @@ int Idx;
InTex.Tile=Tile; InTex.Tile=Tile;
InTex.Flags=Flags; InTex.Flags=Flags;
InTex.Height=Height;
Idx=Tex2dList.Find(InTex); Idx=Tex2dList.Find(InTex);
@ -829,13 +743,13 @@ int Idx;
} }
// Must be new, add it // Must be new, add it
InTex.TexID=BuildTileTex(SrcTile,Flags); InTex.TexID=BuildTileTex(SrcTile,Flags,InTex.Height);
Tex2dList.push_back(InTex); Tex2dList.push_back(InTex);
return(InTex.TexID); return(InTex.TexID);
} }
//*************************************************************************** //***************************************************************************
int CMkLevel::BuildTileTex(sExpTile &SrcTile,int Flags) int CMkLevel::BuildTileTex(sExpTile &SrcTile,int Flags,int Height)
{ {
Frame &InFrame=BmpList[SrcTile.Set]; Frame &InFrame=BmpList[SrcTile.Set];
Frame ThisFrame; Frame ThisFrame;
@ -869,6 +783,11 @@ int TexID;
if (Flags& PC_TILE_FLAG_MIRROR_X) ThisFrame.FlipX(); if (Flags& PC_TILE_FLAG_MIRROR_X) ThisFrame.FlipX();
if (Flags & PC_TILE_FLAG_MIRROR_Y) ThisFrame.FlipY(); if (Flags & PC_TILE_FLAG_MIRROR_Y) ThisFrame.FlipY();
if (Height!=16)
{
ThisFrame.Resize(16,Height);
}
TexID=TexGrab.AddMemFrame(TexName,ThisFrame); TexID=TexGrab.AddMemFrame(TexName,ThisFrame);
#ifdef _DEBUG #ifdef _DEBUG
@ -1064,8 +983,7 @@ int Pos=ftell(File);
sVtx Out; sVtx Out;
Out.vx=+In.vx; Out.vx=+In.vx;
// Out.vy=-In.vy;//+(Scale/2); // Offset it so the origin is centre centre Out.vy=+In.vy;
Out.vy=+In.vy;//+(Scale/2); // Offset it so the origin is centre centre
Out.vz=+In.vz; Out.vz=+In.vz;
Min.vx=__min(Min.vx,Out.vx); Min.vx=__min(Min.vx,Out.vx);
Min.vy=__min(Min.vy,Out.vy); Min.vy=__min(Min.vy,Out.vy);
@ -1171,7 +1089,11 @@ int Ofs=ftell(File);
Out.ElemID=ThisModel.ElemID; Out.ElemID=ThisModel.ElemID;
Out.BBox=ElemBBox; Out.BBox=ElemBBox;
printf("Writing Model %s (%i) (%i %i) (BBox %i,%i->%i,%i)\n",ThisModel.Name,Out.ElemID,ThisElem.Elem3d.TriCount,ThisElem.Elem3d.QuadCount,Out.BBox.XMin,Out.BBox.YMin,Out.BBox.XMax,Out.BBox.YMax); if (ThisModel.TriCount==0)
printf("Writing Model E:%i - %s - Dummy --\n",Out.ElemID,ThisModel.Name);
else
printf("Writing Model E:%i - %s - T:%i Q:%i BBox:%i,%i->%i,%i\n",Out.ElemID,ThisModel.Name,ThisElem.Elem3d.TriCount,ThisElem.Elem3d.QuadCount,Out.BBox.XMin,Out.BBox.YMin,Out.BBox.XMax,Out.BBox.YMax);
fwrite(&Out,1,sizeof(sModel),File); fwrite(&Out,1,sizeof(sModel),File);
} }

View File

@ -22,8 +22,9 @@ struct sMkLevelTex
int Tile; int Tile;
int Flags; int Flags;
int TexID; int TexID;
int Height;
bool operator ==(sMkLevelTex const &v1) {return(Tile==v1.Tile && Flags==v1.Flags);} bool operator ==(sMkLevelTex const &v1) {return(Tile==v1.Tile && Flags==v1.Flags && Height==v1.Height);}
}; };
//*************************************************************************** //***************************************************************************
@ -58,6 +59,7 @@ bool operator ==(sUsedTile3d const &v1) {return(Tile==v1.Tile);}
struct sOutElem3d struct sOutElem3d
{ {
bool LocalGeom; bool LocalGeom;
bool Model;
sElem3d Elem3d; sElem3d Elem3d;
CFaceStore FaceStore; CFaceStore FaceStore;
vector<sVtx> LocalVtxList; vector<sVtx> LocalVtxList;
@ -98,10 +100,10 @@ public:
void AddInfItem(const char *Name,int Val); void AddInfItem(const char *Name,int Val);
void Write(); void Write();
int Create2dTile(int Tile,int Flags); int Create2dTile(int Tile,int Flags,int Height);
int Create3dTile(int Tile,int Flags); int Create3dTile(int Tile,int Flags);
void MakeTexName(sExpTile &SrcTile,int Flags,GString &OutStr); void MakeTexName(sExpTile &SrcTile,int Flags,GString &OutStr);
int BuildTileTex(sExpTile &SrcTile,int Flags); int BuildTileTex(sExpTile &SrcTile,int Flags,int Height);
char *GetConfigStr(const char *Grp,const char *Key) {return(Config.GetStr(Grp,Key));} char *GetConfigStr(const char *Grp,const char *Key) {return(Config.GetStr(Grp,Key));}
int GetConfigInt(const char *Grp,const char *Key) {return(Config.GetInt(Grp,Key));} int GetConfigInt(const char *Grp,const char *Key) {return(Config.GetInt(Grp,Key));}

View File

@ -9,7 +9,7 @@
#include "system\vid.h" #include "system\vid.h"
/*****************************************************************************/ /*****************************************************************************/
sOT *OtList[2],*BaseOtPtr,*GUIOtPtr,*OtPtr; sOT *OtList[2],*BaseOtPtr,*OtPtr;
u32 DmaStart[2]; u32 DmaStart[2];
u8 *PrimBuffer[2],*PrimListStart,*PrimListEnd; u8 *PrimBuffer[2],*PrimListStart,*PrimListEnd;
u8 *CurrPrim,*EndPrim; u8 *CurrPrim,*EndPrim;
@ -26,8 +26,7 @@ void PrimInit()
PrimFlipFlag=0; PrimFlipFlag=0;
BaseOtPtr=(sOT*)OtList[PrimFlipFlag]; BaseOtPtr=(sOT*)OtList[PrimFlipFlag];
GUIOtPtr=BaseOtPtr; OtPtr=BaseOtPtr;
OtPtr=GUIOtPtr+MAX_OT_GUI;
CurrPrim=(u8*)PrimBuffer[PrimFlipFlag]; CurrPrim=(u8*)PrimBuffer[PrimFlipFlag];
EndPrim=CurrPrim+PRIMPOOL_SIZE; EndPrim=CurrPrim+PRIMPOOL_SIZE;
@ -60,8 +59,7 @@ void PrimDisplay()
PrimFlipFlag^=1; PrimFlipFlag^=1;
BaseOtPtr=(sOT*)OtList[PrimFlipFlag]; BaseOtPtr=(sOT*)OtList[PrimFlipFlag];
GUIOtPtr=BaseOtPtr; OtPtr=BaseOtPtr;
OtPtr=GUIOtPtr+MAX_OT_GUI;
CurrPrim=(u8*)PrimBuffer[PrimFlipFlag]; CurrPrim=(u8*)PrimBuffer[PrimFlipFlag];
EndPrim=CurrPrim+(PRIMPOOL_SIZE); EndPrim=CurrPrim+(PRIMPOOL_SIZE);
ResetOTagR(BaseOtPtr,MAX_OT_ALL); ResetOTagR(BaseOtPtr,MAX_OT_ALL);
@ -71,8 +69,7 @@ void PrimDisplay()
void FlushPrimPool() void FlushPrimPool()
{ {
BaseOtPtr=(sOT*)OtList[PrimFlipFlag]; BaseOtPtr=(sOT*)OtList[PrimFlipFlag];
GUIOtPtr=BaseOtPtr; OtPtr=BaseOtPtr;
OtPtr=GUIOtPtr+MAX_OT_GUI;
CurrPrim=(u8*)PrimBuffer[PrimFlipFlag]; CurrPrim=(u8*)PrimBuffer[PrimFlipFlag];
EndPrim=CurrPrim+(PRIMPOOL_SIZE); EndPrim=CurrPrim+(PRIMPOOL_SIZE);
ResetOTagR(BaseOtPtr,MAX_OT_ALL); ResetOTagR(BaseOtPtr,MAX_OT_ALL);

View File

@ -15,11 +15,10 @@
#include "gfx\primplus.h" #include "gfx\primplus.h"
#endif #endif
#define MAX_OT_GUI (0) //#define MAX_OT_GUI (0)
#define MAX_OT (16) #define MAX_OT (16)
#define MAX_OT_ALL (MAX_OT+MAX_OT_GUI) #define MAX_OT_ALL (MAX_OT)
#define MAX_PRIMS ((1024*2)+512) // Put back after overrender bug found (BAD DAVE!) ( put back in by evilpaul ;) #define MAX_PRIMS ((1024*2)) // Took off 512 as mid layer now pre-stored as TSPRTs
// bumped down a lil, cos we need memory hope this value works ok. Be ok once quadding is in
//#define USE_NTAGS 1 //#define USE_NTAGS 1
@ -308,7 +307,7 @@ typedef u32 sOT;
#define OTLIST_SIZE (MAX_OT_ALL*sizeof(sOT)) #define OTLIST_SIZE (MAX_OT_ALL*sizeof(sOT))
/********************************************************************************************************/ /********************************************************************************************************/
extern sOT *BaseOtPtr,*GUIOtPtr,*OtPtr; extern sOT *BaseOtPtr,*OtPtr;
extern u8 *CurrPrim,*EndPrim; extern u8 *CurrPrim,*EndPrim;
extern u8 *PrimListStart,*PrimListEnd; extern u8 *PrimListStart,*PrimListEnd;
//extern int PrimFlipFlag; //extern int PrimFlipFlag;
@ -330,12 +329,13 @@ LINE_G2 *DrawGLine(int _x0,int _y0,int _x1,int _y1,int _r1,int _g1,int _b1,int
/********************************************************************************************************/ /********************************************************************************************************/
/*** Inlines ********************************************************************************************/ /*** Inlines ********************************************************************************************/
/********************************************************************************************************/ /********************************************************************************************************/
/*
inline void AddGUIPrimToList(void *Prim,u32 Depth) inline void AddGUIPrimToList(void *Prim,u32 Depth)
{ {
ASSERT(Depth<MAX_OT_GUI); ASSERT(Depth<MAX_OT_GUI);
addPrim(GUIOtPtr+Depth,(u32*)Prim); addPrim(GUIOtPtr+Depth,(u32*)Prim);
} }
*/
/*-----------------------------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------------------------*/
inline void AddPrimToList(void *Prim,u32 Depth) inline void AddPrimToList(void *Prim,u32 Depth)
{ {

View File

@ -14,25 +14,44 @@ const u32 XInc=16<<0;
const u32 YInc=16<<16; const u32 YInc=16<<16;
/*****************************************************************************/ /*****************************************************************************/
//DVECTOR TileMapOfs={0,4}; // To line layers up :oP static const int TILE2D_WIDTH=16;
static const int TILE2D_HEIGHT=12;
static const int SCREEN_TILE2D_WIDTH=((512/TILE2D_WIDTH)+1);
static const int SCREEN_TILE2D_HEIGHT=((256/TILE2D_HEIGHT)+1);
/*****************************************************************************/ /*****************************************************************************/
/*****************************************************************************/ /*****************************************************************************/
/*****************************************************************************/ /*****************************************************************************/
CLayerTile::CLayerTile(sLevelHdr *LevelHdr,sLayerHdr *Hdr) CLayerTile::CLayerTile(sLevelHdr *LevelHdr,sLayerHdr *Hdr)
{ {
int Count=SCREEN_TILE2D_WIDTH*SCREEN_TILE2D_HEIGHT;
int MemSize=Count*sizeof(TSPRT);
LayerHdr=Hdr; LayerHdr=Hdr;
MapWidth=LayerHdr->Width; MapWidth=LayerHdr->Width;
MapHeight=LayerHdr->Height; MapHeight=LayerHdr->Height;
// printf("%i %i\n",MapWidth,MapHeight);
ElemBank2d=LevelHdr->ElemBank2d; ElemBank2d=LevelHdr->ElemBank2d;
Map=(sTileMapElem*)MakePtr(Hdr,sizeof(sLayerHdr)); Map=(sTileMapElem*)MakePtr(Hdr,sizeof(sLayerHdr));
PrimBank=(TSPRT*)MemAlloc(MemSize,"Mid Polyz");
TSPRT *PrimPtr=PrimBank;
for (int i=0; i<Count; i++)
{
setTSprt(PrimPtr);
setTSetShadeTex(PrimPtr,1);
PrimPtr->w=TILE2D_WIDTH;
PrimPtr->h=TILE2D_HEIGHT;
PrimPtr++;
}
} }
/*****************************************************************************/ /*****************************************************************************/
CLayerTile::~CLayerTile() CLayerTile::~CLayerTile()
{ {
MemFree(PrimBank);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -58,16 +77,10 @@ int XPos=MapPos.vx>>MapXYShift;
int YPos=MapPos.vy>>MapXYShift; int YPos=MapPos.vy>>MapXYShift;
MapXY.vx=XPos>>4; MapXY.vx=XPos>>4;
MapXY.vy=YPos/12; MapXY.vy=YPos/TILE2D_HEIGHT;
/* if (LayerHdr->SubType==1) // BODGE AND A HALF
{
MapXY.vx+=TileMapOfs.vx; MapXY.vy+=TileMapOfs.vy;
}
*/
ShiftX=XPos & 15; ShiftX=XPos & 15;
// ShiftY=YPos & 15; ShiftY=YPos%TILE2D_HEIGHT;
ShiftY=YPos%12;
if (MapXY.vx+SCREEN_TILE2D_WIDTH<=MapWidth) if (MapXY.vx+SCREEN_TILE2D_WIDTH<=MapWidth)
RenderW=SCREEN_TILE2D_WIDTH; RenderW=SCREEN_TILE2D_WIDTH;
@ -84,19 +97,18 @@ int YPos=MapPos.vy>>MapXYShift;
/*****************************************************************************/ /*****************************************************************************/
/*****************************************************************************/ /*****************************************************************************/
/*****************************************************************************/ /*****************************************************************************/
#if 1 // FT4 version
void CLayerTile::render() void CLayerTile::render()
{ {
sTileMapElem *MapPtr=GetMapPos(); sTileMapElem *MapPtr=GetMapPos();
u8 *PrimPtr=GetPrimPtr();
s16 TileX,TileY; s16 TileX,TileY;
sOT *ThisOT=OtPtr+LayerOT; sOT *ThisOT=OtPtr+LayerOT;
TSPRT *PrimPtr=PrimBank;
// Setup shift bits of pos // Setup shift bits of pos
TileY=-ShiftY; TileY=-ShiftY;
// Render it!! // Render it!!
for (int Y=0; Y<RenderH; Y++) for (int Y=0; Y<RenderH; Y++)
{ {
sTileMapElem *MapRow=MapPtr; sTileMapElem *MapRow=MapPtr;
@ -109,68 +121,17 @@ sOT *ThisOT=OtPtr+LayerOT;
if (ThisTile) if (ThisTile)
{ {
sElem2d *Tile=&ElemBank2d[ThisTile]; sElem2d *Tile=&ElemBank2d[ThisTile];
POLY_FT4 *Ft4=(POLY_FT4*)PrimPtr; PrimPtr->x0=TileX;
setPolyFT4(Ft4); PrimPtr->y0=TileY;
setShadeTex(Ft4,1); setTSprtTPage(PrimPtr,Tile->TPage);
setXYWH(Ft4,TileX,TileY,16,12); *(u32*)&PrimPtr->u0=*(u32*)&Tile->u0; // copy uv AND clut
setUVWH(Ft4,Tile->u0,Tile->v0,15,15); addPrim(ThisOT,PrimPtr);
Ft4->tpage=Tile->TPage; PrimPtr++;
Ft4->clut=Tile->Clut;
// addPrimNoCheck(ThisOT,Ft4);
addPrim(ThisOT,Ft4);
PrimPtr+=sizeof(POLY_FT4);
} }
TileX+=TILE2D_WIDTH; TileX+=TILE2D_WIDTH;
} }
MapPtr+=MapWidth; MapPtr+=MapWidth;
TileY+=TILE2D_HEIGHT; TileY+=TILE2D_HEIGHT;
} }
SetPrimPtr(PrimPtr);
} }
#else
void CLayerTile::render()
{
sTileMapElem *MapPtr=GetMapPos();
u8 *PrimPtr=GetPrimPtr();
s16 TileX,TileY;
sOT *ThisOT=OtPtr+LayerOT;
// Setup shift bits of pos
TileY=-ShiftY;
// Render it!!
for (int Y=0; Y<RenderH; Y++)
{
sTileMapElem *MapRow=MapPtr;
TileX=-ShiftX;
for (int X=0; X<RenderW; X++)
{
int ThisTile=*MapRow++;
if (ThisTile)
{
/**/ sElem2d *Tile=&ElemBank2d[ThisTile];
TSPRT_16 *SprPtr=(TSPRT_16*)PrimPtr;
setTSprt16(SprPtr);
setTSetShadeTex(SprPtr,1);
/**/ SprPtr->x0=TileX;
/**/ SprPtr->y0=TileY;
/**/ setTSprtTPage(SprPtr,Tile->TPage);
*(u32*)&SprPtr->u0=*(u32*)&Tile->u0; // copy uv AND clut
addPrimNoCheck(ThisOT,SprPtr);
PrimPtr+=sizeof(TSPRT_16);
}
// MapRow++;
TileX+=TILE2D_WIDTH;
}
MapPtr+=MapWidth;
TileY+=TILE2D_HEIGHT;
}
SetPrimPtr(PrimPtr);
}
#endif

View File

@ -18,22 +18,12 @@ class CLayerTile
public: public:
enum LAYER_TILE_TYPE enum LAYER_TILE_TYPE
{ // Stored reverse for rendering :o) { // Stored reverse for rendering :o)
LAYER_TILE_TYPE_FORE,
LAYER_TILE_TYPE_ACTION, LAYER_TILE_TYPE_ACTION,
LAYER_TILE_TYPE_MID, LAYER_TILE_TYPE_MID,
LAYER_TILE_TYPE_BACK, LAYER_TILE_TYPE_BACK,
LAYER_TILE_TYPE_MAX LAYER_TILE_TYPE_MAX
}; };
enum
{
TILE2D_WIDTH=16,
TILE2D_HEIGHT=12,
SCREEN_TILE2D_WIDTH=(32+2),
SCREEN_TILE2D_HEIGHT=(22+2),
SCREEN_TILE_SIZE=SCREEN_TILE2D_WIDTH*SCREEN_TILE2D_HEIGHT,
};
CLayerTile(sLevelHdr *LevelHdr,sLayerHdr *Hdr); CLayerTile(sLevelHdr *LevelHdr,sLayerHdr *Hdr);
virtual ~CLayerTile(); virtual ~CLayerTile();
@ -58,6 +48,7 @@ protected:
u16 ShiftX,ShiftY; u16 ShiftX,ShiftY;
sTileMapElem *Map; sTileMapElem *Map;
TSPRT *PrimBank;
}; };

Binary file not shown.

View File

@ -205,3 +205,9 @@ ConveyorSwitch=21
ExitMarker=20 ExitMarker=20
Swordfish=23 Swordfish=23
Log=24 Log=24
################################################
[ModelExcludeList]
Bubble=1
AcridBubble=1