diff --git a/Utils/MapEdit/Core.cpp b/Utils/MapEdit/Core.cpp index 65128afa2..04e83da01 100644 --- a/Utils/MapEdit/Core.cpp +++ b/Utils/MapEdit/Core.cpp @@ -23,6 +23,7 @@ #include "utils.h" #include "ExportAGB.h" +#include "ExportPSX.h" /*****************************************************************************/ @@ -58,8 +59,8 @@ BOOL CCore::New() { CNewMapGUI Dlg; int Width,Height; - Dlg.m_Width=TileLayerDefaultWidth; - Dlg.m_Height=TileLayerDefaultHeight; + Dlg.m_Width=TileLayerMinWidth; + Dlg.m_Height=TileLayerMinHeight; Dlg.m_Back=TRUE; Dlg.m_Mid=TRUE; @@ -133,6 +134,16 @@ int LayerCount; } } TileBank.Load(File,Version); + + +// Check Layers +int MapWidth=Layer[FindActionLayer()]->GetWidth(); +int MapHeight=Layer[FindActionLayer()]->GetHeight(); + for (i=0;iCheckLayerSize(MapWidth,MapHeight); + } + Init(); } @@ -572,6 +583,7 @@ void CCore::Toggle2d3d(CMapEditView *View) { Is3dFlag=!Is3dFlag; UpdateView(View); +// ExportPSX("c:/temp/test.pme"); } /*****************************************************************************/ @@ -623,11 +635,27 @@ CExportAGB Exp(ExportName); { Layer[i]->Export(this,Exp); } - Exp.ExportAll(this); + Exp.ExportTiles(this); + Exp.ExportPalette(); } /*****************************************************************************/ void CCore::ExportPSX(char *Filename) { +int LayerCount=Layer.size(); +char ExportName[256]; + + SetFileExt(Filename,ExportName,"PME"); + +CExportPSX Exp(ExportName); + +/* for (int i=0;iExport(this,Exp); + } +*/ + Layer[FindActionLayer()]->Export(this,Exp); + + Exp.ExportTiles(this); } \ No newline at end of file diff --git a/Utils/MapEdit/Core.h b/Utils/MapEdit/Core.h index 7713b0c34..3715b36f7 100644 --- a/Utils/MapEdit/Core.h +++ b/Utils/MapEdit/Core.h @@ -15,7 +15,6 @@ const float FileVersion=1.0f; -//#define UseLighting /*****************************************************************************/ class CMapEditView; diff --git a/Utils/MapEdit/Export.cpp b/Utils/MapEdit/Export.cpp index 2cc2aa590..d7edf6016 100644 --- a/Utils/MapEdit/Export.cpp +++ b/Utils/MapEdit/Export.cpp @@ -27,134 +27,3 @@ CExport::~CExport() } /*****************************************************************************/ -void CExport::ExportAll(CCore *Core) -{ - ExportTiles(Core); -} - -/*****************************************************************************/ -/*****************************************************************************/ -/*****************************************************************************/ -void CExport::ExportLayerTile(CCore *Core,char *LayerName,CMap &Map) -{ -int MapWidth=Map.GetWidth(); -int MapHeight=Map.GetHeight(); -int MinWidth=GetMinLayerTileWidth(); -int MinHeight=GetMinLayerTileHeight(); - -int ExpWidth=max(MapWidth,MinWidth); -int ExpHeight=max(MapHeight,MinHeight); - -sMapElem BlankElem={0,0,0}; - - ExportLayerTileStart(LayerName,ExpWidth,ExpHeight); - for (int Y=0; YGetTileBank(); -int ListSize=UsedTileList.size(),i; - - PrintTileList(); - for (i=0; iGetTile(ThisElem.Set,ThisElem.Tile); - - ParseTile(ThisTile); - } - CreateTilePalette(); - ExportTileStart(ListSize); - for (i=0; iGetTile(ThisElem.Set,ThisElem.Tile); - - ExportTile(ThisTile); - } - ExportTileEnd(); - - -// Palette - ExportPaletteStart(); - ExportPalette(); - ExportPaletteEnd(); - -} -/*****************************************************************************/ diff --git a/Utils/MapEdit/Export.h b/Utils/MapEdit/Export.h index b8c900c60..887875090 100644 --- a/Utils/MapEdit/Export.h +++ b/Utils/MapEdit/Export.h @@ -24,35 +24,10 @@ public: CExport(char *Filename); ~CExport(); - void ExportLayerTile(CCore *Core,char *LayerName,CMap &Map); - void ExportAll(CCore *Core); - - void PrintTileList(); +virtual void ExportLayerTile(CCore *Core,char *LayerName,int SubType,CMap &Map)=0; +virtual void ExportTiles(CCore *Core)=0; protected: - int FindTileInList(sMapElem &Tile); - int AddTileToList(CCore *Core,sMapElem &Tile); - - void ExportTiles(CCore *Core); - void ExportPalette(CCore *Core); - -virtual void ExportLayerTileStart(char *LayerName,int Width,int Height)=0; -virtual void ExportLayerTile(sMapElem &Elem,int NewIdx)=0; -virtual void ExportLayerTileEnd(char *LayerName)=0; -virtual int GetMinLayerTileWidth()=0; -virtual int GetMinLayerTileHeight()=0; -virtual BOOL IsTileValidExport(CCore *Core,sMapElem &Tile)=0; - -virtual void ExportTileStart(int TileCount)=0; -virtual void ParseTile(CTile &ThisTile)=0; -virtual void CreateTilePalette()=0; -virtual void ExportTile(CTile &ThisTile)=0; -virtual void ExportTileEnd()=0; - -virtual void ExportPaletteStart()=0; -virtual void ExportPalette()=0; -virtual void ExportPaletteEnd()=0; - char Drive[_MAX_DRIVE],Path[_MAX_DIR],Name[_MAX_FNAME],Ext[_MAX_EXT]; FILE *File; @@ -62,4 +37,5 @@ virtual void ExportPaletteEnd()=0; }; /*****************************************************************************/ -#endif \ No newline at end of file +#endif + diff --git a/Utils/MapEdit/Layer.h b/Utils/MapEdit/Layer.h index 84392fea4..60e822115 100644 --- a/Utils/MapEdit/Layer.h +++ b/Utils/MapEdit/Layer.h @@ -22,6 +22,11 @@ enum LAYER_TYPE LAYER_TYPE_MAX }; +enum +{ + SCREEN_WIDTH_TILE=30, + SCREEN_HEIGHT_TILE=20, +}; /*****************************************************************************/ class CCore; @@ -52,7 +57,8 @@ virtual void UpdateGUI(CCore *Core)=0; virtual int GetWidth()=0; virtual int GetHeight()=0; -virtual void Resize(int Width,int Height)=0; +virtual void CheckLayerSize(int Width,int Height){}; +virtual BOOL Resize(int Width,int Height)=0; virtual void Load(CFile *File,float Version)=0; virtual void Save(CFile *File)=0; diff --git a/Utils/MapEdit/LayerTile.cpp b/Utils/MapEdit/LayerTile.cpp index 8d3a20d7d..4d1e46d59 100644 --- a/Utils/MapEdit/LayerTile.cpp +++ b/Utils/MapEdit/LayerTile.cpp @@ -46,12 +46,14 @@ CLayerTile::CLayerTile(int _SubType,int Width,int Height,float Scale,BOOL Is3d,B if (ResizeFlag) { - Map.SetSize(Width/ScaleFactor,Height/ScaleFactor,TRUE); - } - else - { - Map.SetSize(Width,Height,TRUE); + Width=TileLayerMinWidth+(Width-TileLayerMinWidth)/ScaleFactor; + Height=TileLayerMinHeight+(Height-TileLayerMinHeight)/ScaleFactor; } + + if (Width ############################################################################### +Project: "TexGrab"=..\TexGrab\texgrab.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + Global: Package=<5> diff --git a/Utils/MapEdit/MapEditDoc.cpp b/Utils/MapEdit/MapEditDoc.cpp index f2d160da5..41f543ab7 100644 --- a/Utils/MapEdit/MapEditDoc.cpp +++ b/Utils/MapEdit/MapEditDoc.cpp @@ -198,8 +198,8 @@ void CMapEditDoc::SetLayer(int Layer) /*********************************************************************************/ void CMapEditDoc::OnExportAgb() { -char BASED_CODE AGBFilter[]= "AGB Data Type (*.c)|*.c|All Files (*.*)|*.*||"; -CFileDialog Dlg(FALSE,"*.c",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,AGBFilter); +char BASED_CODE Filter[]= "AGB Data Type (*.c)|*.c|All Files (*.*)|*.*||"; +CFileDialog Dlg(FALSE,"*.c",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,Filter); if (Dlg.DoModal()!=IDOK) return; @@ -213,7 +213,15 @@ char Filename[256]; /*********************************************************************************/ void CMapEditDoc::OnExportPsx() { - +char BASED_CODE Filter[]= "PSX Data Type (*.PME)|*.Pme|All Files (*.*)|*.*||"; +CFileDialog Dlg(FALSE,"*.pme",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,Filter); + + if (Dlg.DoModal()!=IDOK) return; + +char Filename[256]; + sprintf(Filename,"%s",Dlg.GetPathName()); + + Core.ExportAGB(Filename); } /*********************************************************************************/ diff --git a/Utils/MapEdit/MapEditView.cpp b/Utils/MapEdit/MapEditView.cpp index 7e277d297..0cbb5bea2 100644 --- a/Utils/MapEdit/MapEditView.cpp +++ b/Utils/MapEdit/MapEditView.cpp @@ -70,17 +70,11 @@ void CMapEditView::VideoMode(ColorsNumber & c, ZAccuracy & z, BOOL & dbuf) ///////////////////////////////////////////////////////////////////////////// void CMapEditView::OnCreateGL() { - glEnable(GL_TEXTURE_2D); // Enable Texture Mapping glShadeModel(GL_SMOOTH); // Enable Smooth Shading glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Background Color glClearDepth(1.0f); // Depth Buffer Setup glEnable(GL_DEPTH_TEST); // Enables Depth Testing glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do -#ifdef UseLighting - glEnable(GL_LIGHT0); // Quick And Dirty Lighting (Assumes Light0 Is SetUp) - glEnable(GL_LIGHTING); // Enable Lighting - glEnable(GL_COLOR_MATERIAL); // Enable Material Coloring -#endif glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations glEnable(GL_BLEND); // Enable Alpha Channel glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Alpha Blend Style diff --git a/Utils/MapEdit/TexCache.cpp b/Utils/MapEdit/TexCache.cpp index d6fad2851..19bc7d915 100644 --- a/Utils/MapEdit/TexCache.cpp +++ b/Utils/MapEdit/TexCache.cpp @@ -16,63 +16,44 @@ /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ -int CTexCache::GetTexIdx(char *Name,int Flags) +int CTexCache::GetTexIdx(char *Filename,int Flags) { -int ListSize=TexList.size(); - - for (int Count=0;CountTexAlignTable[i] && Size Buffer; -int Width=TexData->Width; -int Height=TexData->Height; -int Size=Width*Height; -// create RGB & alpha texture - Buffer.resize(Size*4); -u8 *RgbPtr=TexData->RGB; - +/* for (int i=0;iRGB; Buffer[(i*4)+2]=B; Buffer[(i*4)+3]=A; } - +*/ - ThisTex.Width=Width; - ThisTex.Height=Height; +void CTexCache::LoadTex(sTex &ThisTex,sRGBData *TexData) +{ +std::vector Buffer; +int TexWidth=TexData->Width; +int TexHeight=TexData->Height; +int GLWidth=AlignSize(TexWidth); +int GLHeight=AlignSize(TexHeight); +u8 *Src,*Dst; +u8 R,G,B,A; +// create RGB & alpha texture & ensuse texture is correct size for GL + + Buffer.resize(GLWidth*GLHeight*4); + Dst=&Buffer[0]; + for (int Y=0; YRGB[((Y*TexWidth)+X)*3]; + R=*Src++; + G=*Src++; + B=*Src++; + A=255; + if ((R==BlankRGB.rgbRed && G==BlankRGB.rgbGreen && B==BlankRGB.rgbBlue)) // Create alpha for transparent pixels (flagged with PINK!!) + { + A=0; + } + + } + else + { + R=255; + G=0; + B=255; + A=255; + } + *Dst++=R; + *Dst++=G; + *Dst++=B; + *Dst++=A; + } + } + + ThisTex.TexWidth=TexWidth; + ThisTex.TexHeight=TexHeight; + ThisTex.GLWidth=GLWidth; + ThisTex.GLHeight=GLHeight; + ThisTex.dW=1.0f/(GLWidth/16); + ThisTex.dW=((float)TexWidth/(float)GLWidth)/(GLWidth/16); + ThisTex.dH=((float)TexHeight/(float)GLHeight)/(GLHeight/16); glGenTextures(1, &ThisTex.TexID); glBindTexture(GL_TEXTURE_2D, ThisTex.TexID); - glTexImage2D(GL_TEXTURE_2D, 0, 4, Width, Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, &Buffer[0]); + glTexImage2D(GL_TEXTURE_2D, 0, 4, GLWidth, GLHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, &Buffer[0]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glBindTexture(GL_TEXTURE_2D, 0); @@ -148,7 +184,6 @@ u8 *RgbPtr=TexData->RGB; /**************************************************************************************/ /**************************************************************************************/ /**************************************************************************************/ - void CTexCache::Purge() { int ListSize=TexList.size(); @@ -161,4 +196,6 @@ int ListSize=TexList.size(); } TexList.clear(); -} \ No newline at end of file +} + +/**************************************************************************************/ diff --git a/Utils/MapEdit/TexCache.h b/Utils/MapEdit/TexCache.h index 2d1fd0f6d..134d96a0e 100644 --- a/Utils/MapEdit/TexCache.h +++ b/Utils/MapEdit/TexCache.h @@ -12,6 +12,7 @@ #include #include #include "Utils.h" +#include "List.h" struct sRGBData { @@ -22,11 +23,16 @@ struct sRGBData struct sTex { - char Name[256]; - char Path[256]; + char Filename[_MAX_PATH]; +// char Name[_MAX_FNAME]; GLuint TexID; int Flags; - int Width,Height; + int TexWidth,TexHeight; + int GLWidth,GLHeight; + float dW,dH; + BOOL Loaded; + + BOOL operator==(sTex const &v1) {return (!strcmp(Filename,v1.Filename) && Flags==v1.Flags);} }; const RGBQUAD BlankRGB={255,0,255}; @@ -38,20 +44,26 @@ class CTexCache { public: - int GetTexIdx(char *Name,int Flags); + int GetTexIdx(sTex &Tex) {return(TexList.Find(Tex));} + int GetTexIdx(char *Filename,int Flags); - int ProcessTexture(char *TexName,char *Path,int Flags,sRGBData *RGBData=0); + int ProcessTexture(char *Path,int Flags,sRGBData *RGBData=0); void Purge(); void LoadBMP(char *Filename,sRGBData &RGBData); void FreeBMP(sRGBData &RGBData); + void FixBMP(sRGBData &RGBData); + BOOL IsSizeOk(int Size); + int AlignSize(int Size); void LoadTex(sTex &ThisTex,sRGBData *TexData); + sTex &GetTex(int Id) {return(TexList[Id]);} GLuint GetTexGLId(int Id) {return(TexList[Id].TexID);} - std::vector TexList; + + CList TexList; }; diff --git a/Utils/MapEdit/TileSet.cpp b/Utils/MapEdit/TileSet.cpp index 751181e90..e7e08a9df 100644 --- a/Utils/MapEdit/TileSet.cpp +++ b/Utils/MapEdit/TileSet.cpp @@ -350,25 +350,21 @@ void CTileSet::Load(CCore *Core) } /*****************************************************************************/ + void CTileSet::Load2d(CCore *Core) { char Filename[_MAX_PATH]; CTexCache &TexCache=Core->GetTexCache(); -sRGBData ThisBmp; -sRGBData NewTex; _makepath( Filename, Drive, Path, Name, Ext); - TexCache.LoadBMP(Filename,ThisBmp); -int Width=ThisBmp.Width/16; -int Height=ThisBmp.Height/16; -u8 Buffer[16*16*3]; +int TexID=TexCache.ProcessTexture(Filename,0); +sTex &ThisTex=TexCache.GetTex(TexID); - NewTex.Width=16; - NewTex.Height=16; - NewTex.RGB=Buffer; +int Width=ThisTex.TexWidth/16; +int Height=ThisTex.TexHeight/16; - TRACE2("Load 2d TileBank (%i,%i)\n",Width,Height); + TRACE3("Load 2d TileBank %s (%i,%i)\n",Filename,Width,Height); Tile.push_back(CTile(0)); // Insert Blank @@ -376,17 +372,10 @@ u8 Buffer[16*16*3]; { for (int X=0; X Tile; +// std::vector Tile; + CList Tile; BOOL Loaded; int TileBrowserWidth; }; diff --git a/Utils/MapEdit/utils.cpp b/Utils/MapEdit/utils.cpp index c6b74e9f8..203330eaf 100644 --- a/Utils/MapEdit/utils.cpp +++ b/Utils/MapEdit/utils.cpp @@ -33,49 +33,31 @@ char szBuf[256]; void BuildGLBox(float XMin,float XMax,float YMin,float YMax,float ZMin,float ZMax) { // Bottom Face -#ifdef UseLighting - glNormal3f( 0.0f,-1.0f, 0.0f); -#endif glVertex3f( XMin, YMin, ZMin); glVertex3f( XMax, YMin, ZMin); glVertex3f( XMax, YMin, ZMax); glVertex3f( XMin, YMin, ZMax); // Front Face -#ifdef UseLighting - glNormal3f( 0.0f, 0.0f, 1.0f); -#endif glVertex3f( XMin, YMin, ZMax); glVertex3f( XMax, YMin, ZMax); glVertex3f( XMax, YMax, ZMax); glVertex3f( XMin, YMax, ZMax); // Back Face -#ifdef UseLighting - glNormal3f( 0.0f, 0.0f,-1.0f); -#endif glVertex3f( XMin, YMin, ZMin); glVertex3f( XMin, YMax, ZMin); glVertex3f( XMax, YMax, ZMin); glVertex3f( XMax, YMin, ZMin); // Right face -#ifdef UseLighting - glNormal3f( 1.0f, 0.0f, 0.0f); -#endif glVertex3f( XMax, YMin, ZMin); glVertex3f( XMax, YMax, ZMin); glVertex3f( XMax, YMax, ZMax); glVertex3f( XMax, YMin, ZMax); // Left Face -#ifdef UseLighting - glNormal3f(-1.0f, 0.0f, 0.0f); -#endif glVertex3f( XMin, YMin, ZMin); glVertex3f( XMin, YMin, ZMax); glVertex3f( XMin, YMax, ZMax); glVertex3f( XMin, YMax, ZMin); // Top Face -#ifdef UseLighting - glNormal3f( 0.0f, 1.0f, 0.0f); -#endif glVertex3f( XMin, YMax, ZMin); glVertex3f( XMin, YMax, ZMax); glVertex3f( XMax, YMax, ZMax); @@ -120,9 +102,6 @@ void BuildGLBoxNoNormals(float XMin,float XMax,float YMin,float YMax,float ZMin, /**************************************************************************************/ void BuildGLQuad(float XMin,float XMax,float YMin,float YMax,float Z) { -#ifdef UseLighting - glNormal3f( 0.0f, 0.0f, 1.0f); -#endif glVertex3f( XMin, YMin, Z); glVertex3f( XMax, YMin, Z); glVertex3f( XMax, YMax, Z);