This commit is contained in:
parent
f6c9053001
commit
79f03a4cb0
197
Utils/MkLevel/Layers/MkLevelLayerRGB.cpp
Normal file
197
Utils/MkLevel/Layers/MkLevelLayerRGB.cpp
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
/*******************/
|
||||||
|
/*** Layer Shade ***/
|
||||||
|
/*******************/
|
||||||
|
|
||||||
|
#include <DaveLib.h>
|
||||||
|
#include <List2d.h>
|
||||||
|
|
||||||
|
#include "MkLevelLayer.h"
|
||||||
|
#include "MkLevelLayerShade.h"
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
CMkLevelLayerShade::CMkLevelLayerShade(sExpLayerHdr *LayerHdr)
|
||||||
|
{
|
||||||
|
int i,ListSize;
|
||||||
|
int *iPtr;
|
||||||
|
u8 *Ptr=(u8*)LayerHdr;
|
||||||
|
|
||||||
|
Type=LayerHdr->Type;
|
||||||
|
SubType=LayerHdr->SubType;
|
||||||
|
Width=LayerHdr->Width;
|
||||||
|
Height=LayerHdr->Height;
|
||||||
|
|
||||||
|
iPtr=(int*)(Ptr+sizeof(sExpLayerHdr));
|
||||||
|
|
||||||
|
ShadeHdr.BandCount=*iPtr++;
|
||||||
|
sRGBCol *RGB=(sRGBCol*)iPtr;
|
||||||
|
for (i=0; i<LAYER_SHADE_RGB_MAX; i++)
|
||||||
|
{
|
||||||
|
ShadeHdr.RGB[i][0]=RGB->R;
|
||||||
|
ShadeHdr.RGB[i][1]=RGB->G;
|
||||||
|
ShadeHdr.RGB[i][2]=RGB->B;
|
||||||
|
RGB++;
|
||||||
|
}
|
||||||
|
iPtr=(int*)RGB;
|
||||||
|
|
||||||
|
ListSize=*iPtr++;
|
||||||
|
GfxList.resize(ListSize);
|
||||||
|
sLayerShadeGfx *GfxPtr=(sLayerShadeGfx*)iPtr;
|
||||||
|
for (i=0; i<ListSize; i++)
|
||||||
|
{
|
||||||
|
sLayerShadeGfx &ThisGfx=GfxList[i];
|
||||||
|
GfxList[i]=*GfxPtr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
iPtr=(int*)GfxPtr;
|
||||||
|
ListSize=*iPtr++;
|
||||||
|
TypeNameList.resize(ListSize);
|
||||||
|
char *TypePtr=(char*)iPtr;
|
||||||
|
for (i=0; i<ListSize; i++)
|
||||||
|
{
|
||||||
|
TypeNameList[i]=TypePtr;
|
||||||
|
TypePtr+=strlen(TypePtr)+1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*** Pre-Process *************************************************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
// Build unique tiles, including pre-genned flips, and replace tile idx with new one
|
||||||
|
void CMkLevelLayerShade::PreProcess(CMkLevel *Core)
|
||||||
|
{
|
||||||
|
int i,ListSize=GfxList.size();
|
||||||
|
int Idx;
|
||||||
|
GString Path=Core->GetConfigStr("MISC","BackGfxDir");
|
||||||
|
CTexGrab &TexGrab=Core->GetTexGrab();
|
||||||
|
|
||||||
|
for (i=0; i<ListSize; i++)
|
||||||
|
{
|
||||||
|
sLayerShadeGfx &ThisGfx=GfxList[i];
|
||||||
|
sBackGfxList NewType;
|
||||||
|
|
||||||
|
NewType.Name=Path+TypeNameList[ThisGfx.Gfx]+".Bmp";
|
||||||
|
Idx=OutTypeList.Find(NewType);
|
||||||
|
|
||||||
|
if (Idx==-1)
|
||||||
|
{
|
||||||
|
TexGrab.ZeroColZero(true);
|
||||||
|
NewType.TexID=TexGrab.AddFile(NewType.Name);
|
||||||
|
TexGrab.ZeroColZero(false);
|
||||||
|
|
||||||
|
Idx=OutTypeList.Add(NewType);
|
||||||
|
}
|
||||||
|
ThisGfx.Gfx=Idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*** Process *****************************************************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
void CMkLevelLayerShade::Process(CMkLevel *Core)
|
||||||
|
{
|
||||||
|
int i,ListSize=OutTypeList.size();
|
||||||
|
CTexGrab &TexGrab=Core->GetTexGrab();
|
||||||
|
|
||||||
|
//printf("Process Shade Layer\n");
|
||||||
|
for (i=0; i<ListSize; i++)
|
||||||
|
{
|
||||||
|
sBackGfxList &ThisType=OutTypeList[i];
|
||||||
|
|
||||||
|
sTexOutInfo &ThisTex=TexGrab.GetTexInfo()[ThisType.TexID];
|
||||||
|
ThisType.Out.TPage=ThisTex.Tpage;
|
||||||
|
ThisType.Out.Clut=ThisTex.Clut;
|
||||||
|
ThisType.Out.U=ThisTex.u;
|
||||||
|
ThisType.Out.V=ThisTex.v;
|
||||||
|
ThisType.Out.W=ThisTex.w;
|
||||||
|
ThisType.Out.H=ThisTex.h;
|
||||||
|
// ThisType.TPage|=Trans[i]<<5;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
/** Write ********************************************************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
int CMkLevelLayerShade::Write(CMkLevel *Core,FILE *File,const char *LayerName)
|
||||||
|
{
|
||||||
|
sLayerHdr Hdr;
|
||||||
|
int ThisPos=ftell(File);
|
||||||
|
|
||||||
|
Hdr.Type=Type;
|
||||||
|
Hdr.SubType=SubType;
|
||||||
|
Hdr.Width=Width;
|
||||||
|
Hdr.Height=Height;
|
||||||
|
fwrite(&Hdr,sizeof(sLayerHdr),1,File);
|
||||||
|
|
||||||
|
int HdrPos=ftell(File);
|
||||||
|
fwrite(&ShadeHdr,sizeof(sLayerShadeHdr),1,File);
|
||||||
|
|
||||||
|
|
||||||
|
// Write Gfx Stuff
|
||||||
|
ShadeHdr.GfxList=(sLayerShadeBackGfx*)(WriteGfxList(File)-ThisPos);
|
||||||
|
ShadeHdr.TypeList=(sLayerShadeBackGfxType*)(WriteTypeList(File)-ThisPos);
|
||||||
|
|
||||||
|
// rewrite header
|
||||||
|
int RetPos=ftell(File);
|
||||||
|
fseek(File,HdrPos,SEEK_SET);
|
||||||
|
fwrite(&ShadeHdr,sizeof(sLayerShadeHdr),1,File);
|
||||||
|
fseek(File,RetPos,SEEK_SET);
|
||||||
|
|
||||||
|
|
||||||
|
Size=ftell(File)-ThisPos;
|
||||||
|
return(ThisPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
int CMkLevelLayerShade::WriteTypeList(FILE *File)
|
||||||
|
{
|
||||||
|
int Pos=ftell(File);
|
||||||
|
int i,ListSize=OutTypeList.size();
|
||||||
|
|
||||||
|
for (i=0; i<ListSize; i++)
|
||||||
|
{
|
||||||
|
sBackGfxList &ThisType=OutTypeList[i];
|
||||||
|
|
||||||
|
fwrite(&ThisType.Out,sizeof(sLayerShadeBackGfxType),1,File);
|
||||||
|
}
|
||||||
|
return(Pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
int CMkLevelLayerShade::WriteGfxList(FILE *File)
|
||||||
|
{
|
||||||
|
int Pos=ftell(File);
|
||||||
|
int i,ListSize=GfxList.size();
|
||||||
|
|
||||||
|
ShadeHdr.GfxCount=ListSize;
|
||||||
|
|
||||||
|
for (i=0; i<ListSize; i++)
|
||||||
|
{
|
||||||
|
sLayerShadeGfx &ThisGfx=GfxList[i];
|
||||||
|
sLayerShadeBackGfx Out;
|
||||||
|
|
||||||
|
Out.Type=ThisGfx.Gfx;
|
||||||
|
Out.PosX=ThisGfx.Pos.x;
|
||||||
|
Out.PosY=ThisGfx.Pos.y;
|
||||||
|
Out.Trans=ThisGfx.TransMode;
|
||||||
|
for (int p=0; p<4; p++)
|
||||||
|
{
|
||||||
|
Out.Ofs[p][0]=ThisGfx.Ofs[p].x;
|
||||||
|
Out.Ofs[p][1]=ThisGfx.Ofs[p].y;
|
||||||
|
Out.RGB[p][0]=ThisGfx.RGB[p].R;
|
||||||
|
Out.RGB[p][1]=ThisGfx.RGB[p].G;
|
||||||
|
Out.RGB[p][2]=ThisGfx.RGB[p].B;
|
||||||
|
}
|
||||||
|
fwrite(&Out,sizeof(sLayerShadeBackGfx),1,File);
|
||||||
|
}
|
||||||
|
return(Pos);
|
||||||
|
}
|
43
Utils/MkLevel/Layers/MkLevelLayerRGB.h
Normal file
43
Utils/MkLevel/Layers/MkLevelLayerRGB.h
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/*******************/
|
||||||
|
/*** Layer Shade ***/
|
||||||
|
/*******************/
|
||||||
|
|
||||||
|
#ifndef __MKLEVEL_LAYER_SHADE_HEADER__
|
||||||
|
#define __MKLEVEL_LAYER_SHADE_HEADER__
|
||||||
|
|
||||||
|
#include "MkLevelLayer.h"
|
||||||
|
#include <List2d.h>
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
struct sBackGfxList
|
||||||
|
{
|
||||||
|
GString Name;
|
||||||
|
int TexID;
|
||||||
|
sLayerShadeBackGfxType Out;
|
||||||
|
|
||||||
|
bool operator ==(sBackGfxList const &v1) {return(Name==v1.Name);}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
class CMkLevelLayerShade : public CMkLevelLayer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CMkLevelLayerShade(sExpLayerHdr *LayerHdr);
|
||||||
|
|
||||||
|
void PreProcess(CMkLevel *Core);
|
||||||
|
void Process(CMkLevel *Core);
|
||||||
|
int Write(CMkLevel *Core,FILE *File,const char *LayerName);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
int WriteTypeList(FILE *File);
|
||||||
|
int WriteGfxList(FILE *File);
|
||||||
|
|
||||||
|
CList<GString> TypeNameList;
|
||||||
|
CList<sLayerShadeGfx> GfxList;
|
||||||
|
|
||||||
|
CList<sBackGfxList> OutTypeList;
|
||||||
|
sLayerShadeHdr ShadeHdr;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user