/*************************/ /*** 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]); } XOfs=MapPos.vy; YOfs=MapPos.vy; } /*****************************************************************************/ void CLayerBack::shutdown() { } /*****************************************************************************/ void CLayerBack::think(DVECTOR &MapPos) { XOfs=MapPos.vx>>MapXYShift; YOfs=MapPos.vy>>MapXYShift; if (YOfs<1) YOfs=1; } /*****************************************************************************/ const int BM=16; const int BB=16; void CLayerBack::render() { sOT *ThisOT=OtPtr+(MAX_OT-1); int i,ThisY=-YOfs; // Render Back Sprites sLayerShadeBackGfx *GfxList=Data->GfxList; for (i=0; iGfxCount; i++) { int PosX=(GfxList->PosX*BB)-XOfs; int PosY=(GfxList->PosY*BB)-YOfs; if (PosX>0-64 && PosX<512+64) if (PosY>0-64 && PosY<256+64) { POLY_GT4 *sGt4,*Gt4=GetPrimGT4(); sLayerShadeBackGfxType &ThisType=Data->TypeList[GfxList->Type]; Gt4->x0=PosX+(GfxList->Ofs[0][0])*BM; Gt4->y0=PosY+(GfxList->Ofs[0][1])*BM; Gt4->x1=PosX+(GfxList->Ofs[1][0])*BM; Gt4->y1=PosY+(GfxList->Ofs[1][1])*BM; Gt4->x2=PosX+(GfxList->Ofs[2][0])*BM; Gt4->y2=PosY+(GfxList->Ofs[2][1])*BM; Gt4->x3=PosX+(GfxList->Ofs[3][0])*BM; Gt4->y3=PosY+(GfxList->Ofs[3][1])*BM; setRGB0(Gt4,GfxList->RGB[0][0]>>1,GfxList->RGB[0][1]>>1,GfxList->RGB[0][2]>>1); setRGB1(Gt4,GfxList->RGB[1][0]>>1,GfxList->RGB[1][1]>>1,GfxList->RGB[1][2]>>1); setRGB2(Gt4,GfxList->RGB[2][0]>>1,GfxList->RGB[2][1]>>1,GfxList->RGB[2][2]>>1); setRGB3(Gt4,GfxList->RGB[3][0]>>1,GfxList->RGB[3][1]>>1,GfxList->RGB[3][2]>>1); setUVWH(Gt4,ThisType.U,ThisType.V,ThisType.W,ThisType.H); Gt4->u1--; Gt4->u3--; Gt4->v2--; Gt4->v3--; Gt4->clut=ThisType.Clut; setSemiTrans(Gt4,1); Gt4->tpage=ThisType.TPage;// | GfxList->Trans<<5; AddPrim(ThisOT,Gt4); } /* // Bodge it cos artist made the fuckers too big sGt4=GetPrimGT4(); *sGt4=*Gt4; Gt4->x0--; Gt4->y0--; Gt4->x1++; Gt4->y1--; Gt4->x2--; Gt4->y2++; Gt4->x3++; Gt4->y3++; AddPrim(ThisOT,sGt4); */ GfxList++; } // Render Back Shade if (BandHeight>256) BandHeight=256; // if (ThisY<0) BandHeight=256; for (i=0; i