/*******************/ /*** Layer Shade ***/ /*******************/ #include #include #include "MkLevelLayer.h" #include "MkLevelLayerShade.h" /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ CMkLevelLayerShade::CMkLevelLayerShade(sExpLayerHdr *LayerHdr) { int *iPtr; u8 *Ptr=(u8*)LayerHdr; u8 *RGB; Type=LayerHdr->Type; SubType=LayerHdr->SubType; Width=LayerHdr->Width; Height=LayerHdr->Height; iPtr=(int*)(Ptr+sizeof(sExpLayerHdr)); Count=*iPtr++; List.resize(LAYER_SHADE_RGB_MAX); for (int i=0; iGetConfigStr("MISC","BackGfxDir"); for (int i=0; i<2; i++) { if (!BackGfx[i].Empty()) { TexID[i]=AddBackGfx(Core,Path+BackGfx[i]+".Bmp"); } else { TexID[i]=-1; } } } /*****************************************************************************/ int CMkLevelLayerShade::AddBackGfx(CMkLevel *Core,const char *Filename) { sBackGfxList NewGfx; CTexGrab &TexGrab=Core->GetTexGrab(); NewGfx.Name=Filename; NewGfx.TexID=-1; int Idx=BackGfxList.Add(NewGfx); if (BackGfxList[Idx].TexID==-1) { TexGrab.ZeroColZero(true); BackGfxList[Idx].TexID=TexGrab.AddFile(BackGfxList[Idx].Name); TexGrab.ZeroColZero(false); } return(BackGfxList[Idx].TexID); } /*****************************************************************************/ /*****************************************************************************/ /*** Process *****************************************************************/ /*****************************************************************************/ /*****************************************************************************/ void CMkLevelLayerShade::Process(CMkLevel *Core) { CTexGrab &TexGrab=Core->GetTexGrab(); //printf("Process Shade Layer\n"); for (int i=0; i<2; i++) { sLayerShadeGfx &ThisGfx=Data.BackGfx[i]; if (TexID[i]==-1) { ThisGfx.TPage=0; } else { sTexOutInfo &ThisTex=TexGrab.GetTexInfo()[TexID[i]]; ThisGfx.TPage=ThisTex.Tpage; ThisGfx.Clut=ThisTex.Clut; ThisGfx.U=ThisTex.u; ThisGfx.V=ThisTex.v; ThisGfx.W=ThisTex.w; ThisGfx.H=ThisTex.h; ThisGfx.TPage|=Trans[i]<<5; ThisGfx.Flags=Flags[i]; } } } /*****************************************************************************/ /*****************************************************************************/ /** Write ********************************************************************/ /*****************************************************************************/ /*****************************************************************************/ int CMkLevelLayerShade::Write(FILE *File,const char *LayerName,const char *MapName) { sLayerHdr Hdr; int ThisPos=ftell(File); Hdr.Type=Type; Hdr.SubType=SubType; Hdr.Width=Width; Hdr.Height=Height; fwrite(&Hdr,sizeof(sLayerHdr),1,File); Data.Count=Count; for (int i=0; i