/*************************/ /*** Shade Layer Class ***/ /*************************/ #include "system\global.h" #include #include "utils\utils.h" #include "gfx\prim.h" #include "gfx\sprbank.h" #include "LayerTile.h" #include "LayerBack.h" #include "Game\game.h" /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ CLayerBack::CLayerBack(sLevelHdr *LevelHdr,sLayerHdr *Hdr) : CLayerTile(LevelHdr,Hdr) { Data=(sLayerShadeHdr*)MakePtr(Hdr,sizeof(sLayerHdr)); Data->GfxList=(sLayerShadeBackGfx*)MakePtr(Hdr,(int)Data->GfxList); Data->TypeList=(sLayerShadeBackGfxType*)MakePtr(Hdr,(int)Data->TypeList); ASSERT(Data->BandCount<=LAYER_SHADE_RGB_MAX); BandCount=Data->BandCount-1; } /*****************************************************************************/ CLayerBack::~CLayerBack() { } /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ void CLayerBack::init(DVECTOR &MapPos,int Shift) { MapXYShift=Shift; BandHeight=(MapHeight*16)/(BandCount); if (BandHeight>=512) BandHeight=511; for (int i=0; iRGB[i+0][0],Data->RGB[i+0][1],Data->RGB[i+0][2]); setRGB1(&Band[i],Data->RGB[i+0][0],Data->RGB[i+0][1],Data->RGB[i+0][2]); setRGB2(&Band[i],Data->RGB[i+1][0],Data->RGB[i+1][1],Data->RGB[i+1][2]); setRGB3(&Band[i],Data->RGB[i+1][0],Data->RGB[i+1][1],Data->RGB[i+1][2]); } PosDx=0; PosDy=0; XOfs=MapPos.vy; YOfs=MapPos.vy; } /*****************************************************************************/ void CLayerBack::shutdown() { } /*****************************************************************************/ void CLayerBack::think(DVECTOR &MapPos) { int _XOfs=MapPos.vx>>MapXYShift; int _YOfs=MapPos.vy>>MapXYShift; PosDx=(_XOfs-XOfs)<GfxList; for (i=0; iGfxCount; i++) { POLY_GT4 *Gt4=GetPrimGT4(); int PosX=(GfxList->PosX<PosY<TypeList[GfxList->Type]; Gt4->x0=PosX+(GfxList->Ofs[0][0]-(GfxW/2)*16); Gt4->y0=PosY+(GfxList->Ofs[0][1]-(GfxH/2)*16); Gt4->x1=PosX+(GfxList->Ofs[1][0]+(GfxW/2)*16); Gt4->y1=PosY+(GfxList->Ofs[1][1]-(GfxH/2)*16); Gt4->x2=PosX+(GfxList->Ofs[2][0]-(GfxW/2)*16); Gt4->y2=PosY+(GfxList->Ofs[2][1]+(GfxH/2)*16); Gt4->x3=PosX+(GfxList->Ofs[3][0]+(GfxW/2)*16); Gt4->y3=PosY+(GfxList->Ofs[3][1]+(GfxH/2)*16); setRGB0(Gt4,GfxList->RGB[0][0],GfxList->RGB[0][1],GfxList->RGB[0][2]); setRGB1(Gt4,GfxList->RGB[1][0],GfxList->RGB[1][1],GfxList->RGB[1][2]); setRGB2(Gt4,GfxList->RGB[2][0],GfxList->RGB[2][1],GfxList->RGB[2][2]); setRGB3(Gt4,GfxList->RGB[3][0],GfxList->RGB[3][1],GfxList->RGB[3][2]); setUVWH(Gt4,ThisType.U,ThisType.V,ThisType.W,ThisType.H); Gt4->u1--; Gt4->u3--; Gt4->v2--; Gt4->v3--; Gt4->clut=ThisType.Clut; Gt4->tpage=ThisType.TPage; AddPrim(ThisOT,Gt4); GfxList++; } // Render Back Shade for (i=0; i