From 72651463f8c972ed478b1b0dfaeaf32812085122 Mon Sep 17 00:00:00 2001 From: Daveo Date: Tue, 23 Jan 2001 21:53:48 +0000 Subject: [PATCH] --- Utils/MapEdit/Core.cpp | 188 +++++++--- Utils/MapEdit/Core.h | 7 +- Utils/MapEdit/Layer.cpp | 42 ++- Utils/MapEdit/Layer.h | 43 ++- Utils/MapEdit/LayerCollision.cpp | 610 ++----------------------------- Utils/MapEdit/LayerCollision.h | 76 +--- Utils/MapEdit/LayerDef.h | 4 + Utils/MapEdit/LayerTile.cpp | 57 ++- Utils/MapEdit/LayerTile.h | 11 +- Utils/MapEdit/MainFrm.h | 13 +- Utils/MapEdit/Map.cpp | 7 +- Utils/MapEdit/Map.h | 2 +- Utils/MapEdit/MapEdit.clw | 73 +++- Utils/MapEdit/MapEdit.cpp | 1 + Utils/MapEdit/MapEdit.dsp | 26 +- Utils/MapEdit/MapEdit.rc | 117 +++--- Utils/MapEdit/TileSet.cpp | 98 +++-- Utils/MapEdit/TileSet.h | 14 +- Utils/MapEdit/resource.h | 23 +- tools/MapEdit/MapEdit.exe | Bin 208896 -> 212992 bytes tools/MapEdit/collision.bmp | Bin 17462 -> 17462 bytes 21 files changed, 498 insertions(+), 914 deletions(-) diff --git a/Utils/MapEdit/Core.cpp b/Utils/MapEdit/Core.cpp index 415a38cb5..db71fc58a 100644 --- a/Utils/MapEdit/Core.cpp +++ b/Utils/MapEdit/Core.cpp @@ -15,10 +15,12 @@ #include "MainFrm.h" #include "NewMapGUI.h" +#include "AddLayerDlg.h" #include "Core.h" #include "Layer.h" #include "LayerTile.h" +#include "LayerCollision.h" #include "utils.h" #include "ExportAGB.h" @@ -30,7 +32,15 @@ /*****************************************************************************/ CCore::CCore() { +CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); +CMultiBar *ParamBar=Frm->GetParamBar(); + CurrentMousePos=CPoint(0,0); + +// Add default param bar items + ParamBar->RemoveAll(); + ParamBar->Add(Frm->GetLayerList(),IDD_LAYER_LIST_DIALOG,TRUE,TRUE); + } /*****************************************************************************/ @@ -43,14 +53,8 @@ int ListSize=Layer.size(); /*****************************************************************************/ void CCore::Init() { -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CMultiBar *ParamBar=Frm->GetParamBar(); - - ParamBar->RemoveAll(); -// Add default param bar items - ParamBar->Add(Frm->GetLayerList(),IDD_LAYER_LIST_DIALOG,TRUE,TRUE); UpdateParamBar(); - UpdateAll(NULL); +// UpdateAll(NULL); } /*****************************************************************************/ @@ -61,10 +65,6 @@ int Width,Height; Dlg.m_Width=TileLayerMinWidth; Dlg.m_Height=TileLayerMinHeight; - Dlg.m_Back=TRUE; - Dlg.m_Mid=TRUE; - Dlg.m_Fore=FALSE; - #ifndef _DEBUG if (Dlg.DoModal()!=IDOK) return FALSE; #endif @@ -72,11 +72,12 @@ int Width,Height; Height=Dlg.m_Height; // Create Tile Layers -// Type Width Height Scale 3d? Resizable? - if (Dlg.m_Back) Layer.push_back(new CLayerTile( LAYERTILE_BACK, 32, 32, 4.0f, FALSE, FALSE)); - if (Dlg.m_Mid) Layer.push_back(new CLayerTile( LAYERTILE_MID, Width, Height, 2.0f, FALSE, TRUE)); - Layer.push_back(new CLayerTile( LAYERTILE_ACTION, Width, Height, 1.0f, TRUE, TRUE)); - if (Dlg.m_Fore) Layer.push_back(new CLayerTile( LAYERTILE_FORE, Width, Height, 0.5f, FALSE, TRUE)); +// Type Width Height Scale 3d? Resizable? +// AddLayer(LAYER_TYPE_TILE,LAYERTILE_BACK,32,32); +// AddLayer(LAYER_TYPE_TILE,LAYERTILE_MID, Width, Height); + AddLayer(LAYER_TYPE_TILE,LAYERTILE_ACTION, Width, Height); +// AddLayer(LAYER_TYPE_COLLISION,-1, Width, Height); +// AddLayer(LAYER_TYPE_TILE,LAYERTILE_FORE, Width, Height); ActiveLayer=FindActionLayer(); MapCam.Zero(); @@ -89,30 +90,31 @@ int Width,Height; } /*****************************************************************************/ - void CCore::Load(CFile *File) { -float Version; +int Version; - File->Read(&Version,sizeof(float)); - TRACE1("Load Version %g\n",Version); + File->Read(&Version,sizeof(int)); + if (Version>100000) Version=1; // Check fix for changing version to int from float - if (Version>=1.0) + if (VersionRead(&MapCam,sizeof(Vector3)); - File->Read(&MapCamOfs,sizeof(Vector3)); - File->Read(&TileCam,sizeof(Vector3)); - File->Read(&TileCamOfs,sizeof(Vector3)); + CString mexstr; + mexstr.Format("Old File Format\n\nPlease re-save\n"); + AfxMessageBox(mexstr,MB_OK | MB_ICONEXCLAMATION); + + } + + TRACE1("Load Version %i\n",Version); + + File->Read(&MapCam,sizeof(Vector3)); + File->Read(&MapCamOfs,sizeof(Vector3)); + File->Read(&TileCam,sizeof(Vector3)); + File->Read(&TileCamOfs,sizeof(Vector3)); - File->Read(&TileViewFlag,sizeof(BOOL)); - File->Read(&GridFlag,sizeof(BOOL)); - File->Read(&Is3dFlag,sizeof(BOOL)); - } - if (Version>=1.1) - { - - } - + File->Read(&TileViewFlag,sizeof(BOOL)); + File->Read(&GridFlag,sizeof(BOOL)); + File->Read(&Is3dFlag,sizeof(BOOL)); // Layers int LayerCount; @@ -127,7 +129,10 @@ int LayerCount; switch (Type) { case LAYER_TYPE_TILE: - Layer.push_back(new CLayerTile(File,Version)); + AddLayer(new CLayerTile(File,Version)); + break; + case LAYER_TYPE_COLLISION: + AddLayer(new CLayerCollision(File,Version)); break; } @@ -144,14 +149,14 @@ int MapHeight=Layer[FindActionLayer()]->GetHeight(); } Init(); -// MapCam.Zero(); + } /*****************************************************************************/ void CCore::Save(CFile *File) { // Version 1 - File->Write(&FileVersion,sizeof(float)); + File->Write(&FileVersion,sizeof(int)); File->Write(&MapCam,sizeof(Vector3)); File->Write(&MapCamOfs,sizeof(Vector3)); @@ -230,11 +235,8 @@ void CCore::RenderTileView(CMapEditView *View) { Vector3 &ThisCam=GetCam(); - TileBank.RenderSet(this,ThisCam,Is3dFlag); - - -// Get Cursor Pos - TileBank.FindCursorPos(this,View,GetCam(),CurrentMousePos); + GetTileBank().RenderSet(this,ThisCam,Is3dFlag); + GetTileBank().FindCursorPos(this,View,GetCam(),CurrentMousePos); } /*****************************************************************************/ @@ -243,9 +245,7 @@ Vector3 &ThisCam=GetCam(); void CCore::SetMode(int NewMode) { BOOL RedrawFlag=FALSE; - RedrawFlag=Layer[ActiveLayer]->SetMode(NewMode); - } /*****************************************************************************/ @@ -256,9 +256,9 @@ BOOL RedrawFlag=FALSE; if (TileViewFlag) { if (nFlags & MK_RBUTTON) - RedrawFlag=TileBank.SelectCancel(); + RedrawFlag=GetTileBank().SelectCancel(); else - RedrawFlag=TileBank.SelectL(DownFlag); + RedrawFlag=GetTileBank().SelectL(DownFlag); } else { @@ -267,7 +267,7 @@ BOOL RedrawFlag=FALSE; RedrawFlag=Layer[ActiveLayer]->LButtonControl(this,View,nFlags,CursorPos,DownFlag); } } - TileBank.SetActiveBrushL(); + GetTileBank().SetActiveBrushL(); if (RedrawFlag) View->Invalidate(); } @@ -285,9 +285,9 @@ BOOL RedrawFlag=FALSE; if (TileViewFlag) { if (nFlags & MK_LBUTTON) - RedrawFlag=TileBank.SelectCancel(); + RedrawFlag=GetTileBank().SelectCancel(); else - RedrawFlag=TileBank.SelectR(DownFlag); + RedrawFlag=GetTileBank().SelectR(DownFlag); } else { @@ -296,7 +296,7 @@ BOOL RedrawFlag=FALSE; RedrawFlag=Layer[ActiveLayer]->RButtonControl(this,View,nFlags,CursorPos,DownFlag); } } - TileBank.SetActiveBrushR(); + GetTileBank().SetActiveBrushR(); if (RedrawFlag) View->Invalidate(); } @@ -429,20 +429,88 @@ CLayerList *List=(CLayerList*)Frm->GetDialog(IDD_LAYER_LIST_DIALOG); } else { + bool IsCol=Layer[NewLayer]->GetType()==LAYER_TYPE_COLLISION; + TileBank.SetCollision(IsCol); ActiveLayer=NewLayer; + UpdateParamBar(); } } +/*****************************************************************************/ +CLayer *CCore::AddLayer(CLayer *NewLayer) +{ +int ListSize=Layer.size(); +int NewIdx=CLayer::GetLayerIdx(NewLayer->GetType(),NewLayer->GetSubType()); +int Idx=ListSize; + + TRACE3("Add Layer %i %i @ %i\n",NewLayer->GetType(),NewLayer->GetSubType(),NewIdx); + + for (Idx=0; IdxGetType(),Layer[Idx]->GetSubType()); + if (NewIdxGetMainWnd(); -CMultiBar *ParamBar=Frm->GetParamBar(); -CLayerList *List=(CLayerList*)Frm->GetDialog(IDD_LAYER_LIST_DIALOG); +std::vector List; +CAddLayerDlg Dlg; +int NewLayerId=0; +int Sel; - TRACE1("Add Layer %i\n",CurrentLayer); + +// Build Unused List + Dlg.Sel=&Sel; + Sel=0; + for (int i=0; iGetWidth(); +int Height=Layer[FindActionLayer()]->GetHeight(); + + AddLayer(CLayer::InfoTable[NewLayerId].Type,CLayer::InfoTable[NewLayerId].SubType,Width,Height); + + } /*****************************************************************************/ @@ -467,12 +535,12 @@ void CCore::DeleteLayer(int CurrentLayer) /*****************************************************************************/ void CCore::UpdateGrid(CMapEditView *View,BOOL Toggle) { -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CToolBar *ToolBar=Frm->GetToolBar(); +//CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); +//CToolBar *ToolBar=Frm->GetToolBar(); if (Toggle) GridFlag=!GridFlag; - ToolBar->GetToolBarCtrl().PressButton(ID_TOOLBAR_GRID,GridFlag); +// ToolBar->GetToolBarCtrl().PressButton(ID_TOOLBAR_GRID,GridFlag); UpdateView(View); } @@ -567,14 +635,14 @@ void CCore::MirrorY(CMapEditView *View) /*****************************************************************************/ void CCore::ActiveBrushLeft(CMapEditView *View) { - TileBank.SetActiveBrushL(); + GetTileBank().SetActiveBrushL(); UpdateView(View); } /*****************************************************************************/ void CCore::ActiveBrushRight(CMapEditView *View) { - TileBank.SetActiveBrushR(); + GetTileBank().SetActiveBrushR(); UpdateView(View); } @@ -676,7 +744,7 @@ Vector3 &ThisCam=GetCam(); if (ThisCam.y<0) ThisCam.y=0; } if (ThisCam.z<0.1) ThisCam.z=0.1f; - TRACE1("ZoomVal %f\n",ThisCam.z); +// TRACE1("ZoomVal %f\n",ThisCam.z); UpdateView(View); } diff --git a/Utils/MapEdit/Core.h b/Utils/MapEdit/Core.h index 93fa0b016..5df6cbd48 100644 --- a/Utils/MapEdit/Core.h +++ b/Utils/MapEdit/Core.h @@ -12,7 +12,7 @@ #include "TexCache.h" #include "TileSet.h" -const float FileVersion=1.01f; +const s32 FileVersion=2; #define SCREEN_MAP_WIDTH 30 #define SCREEN_MAP_HEIGHT 20 @@ -47,11 +47,11 @@ public: void Zoom(CMapEditView *View,float Dst); // TileBank + CTileBank &GetTileBank() {return(TileBank);} void UpdateTileView(CMapEditView *View,BOOL Toggle=FALSE); void UpdateTileViewGUI() {TileBank.UpdateGUI(this,TileViewFlag);} - CTileBank &GetTileBank() {return(TileBank);} CTile &GetTile(int Bank,int TileNo) {return(TileBank.GetTile(Bank,TileNo));} void TileBankLoad(char *Filename); void TileBankDelete(); @@ -63,11 +63,12 @@ public: void ActiveBrushRight(CMapEditView *View); BOOL IsTileValid(int Set,int Tile); - // Param Bar void UpdateParamBar(); // Layers + void AddLayer(int Type, int SubType, int Width, int Height); + CLayer *AddLayer(CLayer *Layer); void SetLayer(int Layer); void AddLayer(int Layer); void DeleteLayer(int Layer); diff --git a/Utils/MapEdit/Layer.cpp b/Utils/MapEdit/Layer.cpp index cbded51bf..770f1e006 100644 --- a/Utils/MapEdit/Layer.cpp +++ b/Utils/MapEdit/Layer.cpp @@ -8,11 +8,51 @@ #include #include - #include "Core.h" #include "Layer.h" +#include "LayerDef.h" #include "Utils.h" /*****************************************************************************/ +sLayerInfoTable CLayer::InfoTable[]= +{ + //Type SubType Name delete?Scale 3d Resizable + {LAYER_TYPE_TILE, LAYERTILE_BACK, "Back", true, 4.0f, false, false}, + {LAYER_TYPE_TILE, LAYERTILE_MID, "Mid", true, 2.0f, false, true}, + {LAYER_TYPE_TILE, LAYERTILE_ACTION, "Action", false, 1.0f, true, true}, + {LAYER_TYPE_TILE, LAYERTILE_FORE, "Fore", true, 0.5f, false, true}, + {LAYER_TYPE_COLLISION, LAYER_SUBTYPE_NONE, "Collision", true, 1.0f, false, true}, +}; + +int CLayer::InfoTableSize=sizeof(InfoTable)/sizeof(sLayerInfoTable); + +/*****************************************************************************/ +/*****************************************************************************/ +/*****************************************************************************/ +void CLayer::SetDefaultParams() +{ +int Idx=CLayer::GetLayerIdx(GetType(),GetSubType()); + + ScaleFactor=InfoTable[Idx].ScaleFactor; + ResizeFlag=InfoTable[Idx].ResizeFlag; + Render3dFlag=InfoTable[Idx].Render3dFlag; + VisibleFlag=TRUE; +} + +/*****************************************************************************/ +int CLayer::GetLayerIdx(int Type,int SubType) +{ + + for (int i=0; i #include @@ -17,6 +16,7 @@ #include "Core.h" #include "Layer.h" #include "LayerTile.h" +#include "LayerCollision.h" #include "Utils.h" #include "Select.h" #include "Export.h" @@ -25,57 +25,40 @@ /*****************************************************************************/ /*****************************************************************************/ // New Layer -CLayerTile::CLayerTile(int _SubType,int Width,int Height) +CLayerCollision::CLayerCollision(int _SubType,int Width,int Height) { - SubType=_SubType; - if (SubType==LAYERTILE_BACK) // Back is fixed size - { - Width=32; - Height=32; - } + SubType=LAYER_SUBTYPE_NONE; SetDefaultParams(); Mode=MouseModePaint; - if (ResizeFlag) - { - Width=TileLayerMinWidth+(Width-TileLayerMinWidth)/ScaleFactor; - Height=TileLayerMinHeight+(Height-TileLayerMinHeight)/ScaleFactor; - } - - if (Width=1.0) - { - File->Read(&Render3dFlag,sizeof(BOOL)); - File->Read(&ScaleFactor,sizeof(float)); - File->Read(&ResizeFlag,sizeof(BOOL)); - File->Read(&VisibleFlag,sizeof(BOOL)); - File->Read(&Mode,sizeof(MouseMode)); - File->Read(&SubType,sizeof(int)); - Map.Load(File,Version); - } +// Version 2 + File->Read(&Render3dFlag,sizeof(BOOL)); + File->Read(&ScaleFactor,sizeof(float)); + File->Read(&ResizeFlag,sizeof(BOOL)); + File->Read(&VisibleFlag,sizeof(BOOL)); + File->Read(&Mode,sizeof(MouseMode)); + File->Read(&SubType,sizeof(int)); + Map.Load(File,Version); TRACE1("%s\t",GetName()); TRACE1("Scl:%g\t",ScaleFactor); @@ -83,7 +66,7 @@ void CLayerTile::Load(CFile *File,float Version) } /*****************************************************************************/ -void CLayerTile::Save(CFile *File) +void CLayerCollision::Save(CFile *File) { // Always Save current version @@ -96,584 +79,39 @@ void CLayerTile::Save(CFile *File) Map.Save(File); } -/*****************************************************************************/ -void CLayerTile::CheckLayerSize(int Width,int Height) -{ - if (Resize(Width,Height)) - { - CString mexstr; - mexstr.Format("%s Layer Resized to Correct Size\nPlease re-save\n", GetName()); - AfxMessageBox(mexstr,MB_OK | MB_ICONEXCLAMATION); - } - -} - -/*****************************************************************************/ -BOOL CLayerTile::Resize(int Width,int Height) -{ - if (!ResizeFlag) return(FALSE); // Its a fixed size, so DONT DO IT! - -int ThisWidth=Map.GetWidth(); -int ThisHeight=Map.GetHeight(); - Width=TileLayerMinWidth+(Width-TileLayerMinWidth)/ScaleFactor; - Height=TileLayerMinHeight+(Height-TileLayerMinHeight)/ScaleFactor; - - if (ThisWidth!=Width || ThisHeight!=Height) - { - Map.Resize(Width,Height); - return(TRUE); - } - return(FALSE); -} - -/*****************************************************************************/ -/*****************************************************************************/ -/*****************************************************************************/ -void CLayerTile::Render(CCore *Core,Vector3 &CamPos,BOOL Is3d) -{ -Vector3 ThisCam=Core->OffsetCam(CamPos,GetScaleFactor()); - - if (Is3d && Render3dFlag) - { - glEnable(GL_DEPTH_TEST); - Render(Core,ThisCam,Map,TRUE); - glDisable(GL_DEPTH_TEST); - } - else - { - Render(Core,ThisCam,Map,FALSE); - } -} - -/*****************************************************************************/ -void CLayerTile::RenderCursorPaint(CCore *Core,Vector3 &CamPos,BOOL Is3d) -{ -CTileBank &TileBank=Core->GetTileBank(); -Vector3 ThisCam=Core->OffsetCam(CamPos,GetScaleFactor()); -CPoint &CursPos=Core->GetCursorPos(); -CMap &Brush=TileBank.GetActiveBrush(); -Vector3 Ofs; - - if (!Brush.IsValid()) return; - - if (CursPos.x<0 || CursPos.y<0) return; - - Ofs.x=-(CursPos.x-(int)ThisCam.x); - Ofs.y=-(CursPos.y-(int)ThisCam.y); - ThisCam.x-=(int)ThisCam.x; - ThisCam.y-=(int)ThisCam.y; -TRACE2("-> %f %f\n",Ofs.x,Ofs.y); - - - if (Is3d && Render3dFlag) - { - glEnable(GL_DEPTH_TEST); - Render(Core,ThisCam,Brush,TRUE,0.5,&Ofs); - glDisable(GL_DEPTH_TEST); - } - else - { - Render(Core,ThisCam,Brush,FALSE,0.5,&Ofs); - } -} - -/*****************************************************************************/ -void CLayerTile::Render(CCore *Core,Vector3 &ThisCam,CMap &ThisMap,BOOL Render3d,float Alpha,Vector3 *Ofs) -{ -int MapWidth=ThisMap.GetWidth(); -int MapHeight=ThisMap.GetHeight(); -float ZoomW=Core->GetZoomW(); -float ZoomH=Core->GetZoomH(); -float ScrOfsX=(ZoomW/2); -float ScrOfsY=(ZoomH/2); -Vector3 &Scale=Core->GetScaleVector(); - -int StartX=(int)ThisCam.x; -int StartY=(int)ThisCam.y; -float ShiftX=ThisCam.x - (int)ThisCam.x; -float ShiftY=ThisCam.y - (int)ThisCam.y; - - if (StartX<0) StartX=0; - if (StartY<0) StartY=0; - -int DrawW=ZoomW+8; -int DrawH=ZoomH+8; - - if (StartX+DrawW>MapWidth) DrawW=MapWidth-StartX; - if (StartY+DrawH>MapHeight) DrawH=MapHeight-StartY; - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glScalef(Scale.x,Scale.y,Scale.z); - glTranslatef(-ShiftX,ShiftY,0); // Set scroll offset - glTranslatef(-ScrOfsX,ScrOfsY,0); // Bring to top left corner - - - if (Ofs) - { - glTranslatef(-Ofs->x,Ofs->y,0); // Set scroll offset - } - - glColor4f(1,1,1,Alpha); - for (int YLoop=0; YLoopIsTileValid(ThisElem.Set,ThisElem.Tile)) - { // Render Non Zero Tiles - CTile &ThisTile=Core->GetTile(ThisElem.Set,ThisElem.Tile); - - ThisTile.Render(ThisElem.Flags,Render3d); - } - glTranslatef(1.0f,0,0); // Next X - } - glTranslatef(-DrawW,-1,0); // Next y, rewind to start X - } - glPopMatrix(); -} - -/*****************************************************************************/ -void CLayerTile::RenderSelection(CCore *Core,Vector3 &CamPos) -{ -CRect Rect=Selection.GetRect(); -Vector3 ThisCam=Core->OffsetCam(CamPos,GetScaleFactor()); -float ZoomW=Core->GetZoomW(); -float ZoomH=Core->GetZoomH(); -float ScrOfsX=(ZoomW/2); -float ScrOfsY=(ZoomH/2); -Vector3 &Scale=Core->GetScaleVector(); - - if (!Selection.IsValid()) return; - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glScalef(Scale.x,Scale.y,Scale.z); - glTranslatef(-ThisCam.x,ThisCam.y,0); - glTranslatef(-ScrOfsX,ScrOfsY,0); // Bring to top left corner - - glColor4f(1,0,1,0.5f); - glBegin (GL_QUADS); -float X0=Rect.left; -float X1=Rect.right; -float Y0=Rect.top-1; -float Y1=Rect.bottom-1; - glVertex3f( X0, -Y0, 0); - glVertex3f( X1, -Y0, 0); - glVertex3f( X1, -Y1, 0); - glVertex3f( X0, -Y1, 0); - glEnd(); - - glPopMatrix(); -} - -/*****************************************************************************/ -void CLayerTile::RenderGrid(CCore *Core,Vector3 &CamPos,BOOL Active) -{ -Vector3 ThisCam=Core->OffsetCam(CamPos,GetScaleFactor()); -int MapWidth=Map.GetWidth(); -int MapHeight=Map.GetHeight(); -float ZoomW=Core->GetZoomW(); -float ZoomH=Core->GetZoomH(); -float ScrOfsX=(ZoomW/2); -float ScrOfsY=(ZoomH/2); -Vector3 &Scale=Core->GetScaleVector(); -float Col; -const float OverVal=0.1f; - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glScalef(Scale.x,Scale.y,Scale.z); - glTranslatef(-ThisCam.x,ThisCam.y,0); - glTranslatef(-ScrOfsX,ScrOfsY,0); // Bring to top left corner - - if (Active) Col=1; else Col=0.5f; - - glBegin(GL_LINES); - - glColor3f(Col,Col,Col); - - for (int YLoop=0; YLoopOffsetCam(CamPos,GetScaleFactor()); -int MapWidth=Map.GetWidth(); -int MapHeight=Map.GetHeight(); -float ZoomW=Core->GetZoomW(); -float ZoomH=Core->GetZoomH(); -float ScrOfsX=(ZoomW/2); -float ScrOfsY=(ZoomH/2); -Vector3 &Scale=Core->GetScaleVector(); - -GLint Viewport[4]; -GLuint SelectBuffer[SELECT_BUFFER_SIZE]; -int TileID=0; -CPoint &CursorPos=Core->GetCursorPos(); - -int StartX=(int)ThisCam.x; -int StartY=(int)ThisCam.y; -float ShiftX=ThisCam.x - (int)ThisCam.x; -float ShiftY=ThisCam.y - (int)ThisCam.y; - - if (StartX<0) StartX=0; - if (StartY<0) StartY=0; - -int DrawW=ZoomW+8; -int DrawH=ZoomH+8; - - if (StartX+DrawW>MapWidth) DrawW=MapWidth-StartX; - if (StartY+DrawH>MapHeight) DrawH=MapHeight-StartY; - - glGetIntegerv(GL_VIEWPORT, Viewport); - glSelectBuffer (SELECT_BUFFER_SIZE, SelectBuffer ); - glRenderMode (GL_SELECT); - - glInitNames(); - glPushName(-1); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluPickMatrix( MousePos.x ,(Viewport[3]-MousePos.y),5.0,5.0,Viewport); - View->SetupPersMatrix(); - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glScalef(Scale.x,Scale.y,Scale.z); -// glTranslatef(-ThisCam.x,ThisCam.y,0); - glTranslatef(-ShiftX,ShiftY,0); - glTranslatef(-ScrOfsX,ScrOfsY,0); // Bring to top left corner - - for (int YLoop=0; YLoopGetMainWnd(); CMultiBar *ParamBar=Frm->GetParamBar(); - ParamBar->Add(Frm->GetLayerTileGUI(),IDD_LAYERTILE_GUI,TRUE); + ParamBar->Add(Frm->GetLayerTileToolbar(),IDD_LAYERTILE_TOOLBAR,TRUE); } /*****************************************************************************/ -void CLayerTile::UpdateGUI(CCore *Core) +void CLayerCollision::UpdateGUI(CCore *Core) { -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CLayerTileGUI *Dlg=(CLayerTileGUI *)Frm->GetDialog(IDD_LAYERTILE_GUI); - - if (Dlg) - { - Dlg->ResetButtons(); - switch(Mode) - { - case MouseModePaint: - Dlg->SetButtonState(CLayerTileGUI::PAINT,TRUE); - break; - case MouseModeSelect: - Dlg->SetButtonState(CLayerTileGUI::SELECT,TRUE); - break; - default: - break; - } - } - Core->UpdateTileViewGUI(); + CLayerTile::UpdateGUI(Core); } /*****************************************************************************/ -/*** Functions ***************************************************************/ /*****************************************************************************/ -BOOL CLayerTile::SetMode(int NewMode) +/*****************************************************************************/ +void CLayerCollision::Export(CCore *Core,CExport &Exp) { -BOOL Ret=FALSE; - -// Clean up last mode - Ret|=ExitMode(); - Mode=(MouseMode)NewMode; - Ret|=InitMode(); - return(Ret); +// Exp.ExportLayerTile(Core,GetName(),SubType,Map); } /*****************************************************************************/ -BOOL CLayerTile::InitMode() -{ - switch(Mode) - { - case MouseModePaint: - break; - case MouseModeSelect: - break; - default: - break; - } - return(FALSE); -} - -/*****************************************************************************/ -BOOL CLayerTile::ExitMode() -{ - switch(Mode) - { - case MouseModePaint: - break; - case MouseModeSelect: - break; - default: - break; - } - return(FALSE); -} - -/*****************************************************************************/ -BOOL CLayerTile::LButtonControl(CCore *Core,CMapEditView *View,UINT nFlags, CPoint &CursorPos,BOOL DownFlag) -{ -BOOL Ret=FALSE; -CTileBank &TileBank=Core->GetTileBank(); - - switch(Mode) - { - case MouseModePaint: - if (DownFlag) - Ret=Paint(TileBank.GetLBrush(),CursorPos); - break; - case MouseModeSelect: - Ret=Selection.Handle(CursorPos,nFlags); - if (Selection.HasSelection()) - { - TRACE0("LMB Selection\n"); - } - break; - default: - break; - } - return(Ret); -} - -/*****************************************************************************/ -BOOL CLayerTile::RButtonControl(CCore *Core,CMapEditView *View,UINT nFlags, CPoint &CursorPos,BOOL DownFlag) -{ -BOOL Ret=FALSE; -CTileBank &TileBank=Core->GetTileBank(); - - switch(Mode) - { - case MouseModePaint: - if (DownFlag) - Ret=Paint(TileBank.GetRBrush(),CursorPos); - break; - case MouseModeSelect: - Ret=Selection.Handle(CursorPos,nFlags); - if (Selection.HasSelection()) - { - TRACE0("RMB Selection\n"); - } - break; - default: - break; - } - return(Ret); -} - -/*****************************************************************************/ -BOOL CLayerTile::MouseMove(CCore *Core,CMapEditView *View,UINT nFlags, CPoint &CursorPos) -{ -BOOL Ret=FALSE; -CTileBank &TileBank=Core->GetTileBank(); - - switch(Mode) - { - case MouseModePaint: - if (nFlags & MK_LBUTTON) - Ret=Paint(TileBank.GetLBrush(),CursorPos); - else - if (nFlags & MK_RBUTTON) - Ret=Paint(TileBank.GetRBrush(),CursorPos); - break; - case MouseModeSelect: - Ret=Selection.Handle(CursorPos,nFlags); - break; - default: - break; - } - return(Ret); -} - -/*****************************************************************************/ -void CLayerTile::RenderCursor(CCore *Core,Vector3 &CamPos,BOOL Is3d) -{ - switch(Mode) - { - case MouseModePaint: - RenderCursorPaint(Core,CamPos,Is3d); - break; - case MouseModeSelect: - RenderSelection(Core,CamPos); - break; - default: - break; - } -} - -/*****************************************************************************/ -BOOL CLayerTile::MirrorX(CCore *Core) -{ - switch(Mode) - { - case MouseModePaint: - { - CTileBank &TileBank=Core->GetTileBank(); - - TileBank.GetLBrush().MirrorX(TILE_FLAG_MIRROR_X); - TileBank.GetRBrush().MirrorX(TILE_FLAG_MIRROR_X); - } - break; - case MouseModeSelect: - { - if (!Selection.IsValid()) return(false); // No Selection - CRect R=Selection.GetRect(); - Map.MirrorX(TILE_FLAG_MIRROR_X,&R); - } - break; - default: - break; - } - - return(TRUE); -} - -/*****************************************************************************/ -BOOL CLayerTile::MirrorY(CCore *Core) -{ - switch(Mode) - { - case MouseModePaint: - { - CTileBank &TileBank=Core->GetTileBank(); - - TileBank.GetLBrush().MirrorY(TILE_FLAG_MIRROR_Y); - TileBank.GetRBrush().MirrorY(TILE_FLAG_MIRROR_Y); - } - break; - case MouseModeSelect: - { - if (!Selection.IsValid()) return(false); // No Selection - CRect R=Selection.GetRect(); - Map.MirrorY(TILE_FLAG_MIRROR_Y,&R); - } - break; - default: - break; - } - - - return(TRUE); -} - -/*****************************************************************************/ -BOOL CLayerTile::CopySelection(CCore *Core) -{ - if (Mode!=MouseModeSelect) return(false); // Not in select mode - if (!Selection.IsValid()) return(false); // No Selection - -CTileBank &TileBank=Core->GetTileBank(); -CRect Rect=Selection.GetRect(); - - TileBank.GetActiveBrush().Set(Map,Rect.left,Rect.top,Rect.Width(),Rect.Height()); - - return(true); - -} - -/*****************************************************************************/ -BOOL CLayerTile::PasteSelection(CCore *Core) -{ - if (Mode!=MouseModeSelect) return(false); // Not in select mode - if (!Selection.IsValid()) return(false); // No Selection - -CTileBank &TileBank=Core->GetTileBank(); -CRect Rect=Selection.GetRect(); - - Map.Paste(TileBank.GetActiveBrush(),&Rect); - return(true); -} - -/*****************************************************************************/ -/*****************************************************************************/ -/*****************************************************************************/ - -BOOL CLayerTile::Paint(CMap &Blk,CPoint &CursorPos) -{ - if (CursorPos.y==-1 || CursorPos.y==-1) return(FALSE); // Off Map? - if (!Blk.IsValid()) return(FALSE); // Invalid tile? - - Map.Set(CursorPos.x,CursorPos.y,Blk); - - return(TRUE); -} - -/*****************************************************************************/ -void CLayerTile::Export(CCore *Core,CExport &Exp) -{ - Exp.ExportLayerTile(Core,GetName(),SubType,Map); -} - -/*****************************************************************************/ -void CLayerTile::DeleteSet(int Set) +void CLayerCollision::DeleteSet(int Set) { Map.DeleteSet(Set); } /*****************************************************************************/ -void CLayerTile::RemapSet(int OrigSet,int NewSet) +void CLayerCollision::RemapSet(int OrigSet,int NewSet) { Map.RemapSet(OrigSet,NewSet); diff --git a/Utils/MapEdit/LayerCollision.h b/Utils/MapEdit/LayerCollision.h index cf81a06c2..b85dee427 100644 --- a/Utils/MapEdit/LayerCollision.h +++ b/Utils/MapEdit/LayerCollision.h @@ -1,89 +1,37 @@ -/******************/ -/*** Layer Tile ***/ -/******************/ +/***********************/ +/*** Layer Collision ***/ +/***********************/ -#ifndef __LAYER_TILE_HEADER__ -#define __LAYER_TILE_HEADER__ +#ifndef __LAYER_COLLISION_HEADER__ +#define __LAYER_COLLISION_HEADER__ #include "Layer.h" -/*****************************************************************************/ -enum TileLayerEnum -{ - TileLayerMinWidth=32, - TileLayerMinHeight=22, -}; - /*****************************************************************************/ class CCore; -class CMapEditView; -class CLayerTile : public CLayer +//class CMapEditView; +class CLayerCollision : public CLayerTile { public: - enum MouseMode - { - MouseModePaint=0, - MouseModeSelect, - }; + CLayerCollision(int SubType,int Width,int Height); // New Layer + CLayerCollision(CFile *File,int Version); // Load Layer + ~CLayerCollision(); - CLayerTile(int SubType,int Width,int Height); // New Layer - CLayerTile(CFile *File,int Version); // Load Layer - ~CLayerTile(); - - int GetType() {return(LAYER_TYPE_TILE);} - int GetSubType() {return(SubType);} - - void Render(CCore *Core,Vector3 &CamPos,BOOL Is3d); - void RenderGrid(CCore *Core,Vector3 &CamPos,BOOL Active); - void RenderSelection(CCore *Core,Vector3 &ThisCam); - - void FindCursorPos(CCore *Core,CMapEditView *View,Vector3 &CamPos,CPoint &MousePos); - void RenderCursor(CCore *Core,Vector3 &CamPos,BOOL Is3d); + int GetType() {return(LAYER_TYPE_COLLISION);} void InitGUI(CCore *Core); void UpdateGUI(CCore *Core); - int GetWidth() {return(Map.GetWidth());} - int GetHeight() {return(Map.GetHeight());} - BOOL Resize(int Width,int Height); - - void Load(CFile *File,float Version); + void Load(CFile *File,int Version); void Save(CFile *File); - void CheckLayerSize(int Width,int Height); void Export(CCore *Core,CExport &Exp); // Functions - BOOL SetMode(int NewMode); - BOOL InitMode(); - BOOL ExitMode(); - - BOOL LButtonControl(CCore *Core,CMapEditView *View,UINT nFlags, CPoint &point,BOOL DownFlag); - BOOL RButtonControl(CCore *Core,CMapEditView *View,UINT nFlags, CPoint &point,BOOL DownFlag); - BOOL MouseMove(CCore *Core,CMapEditView *View,UINT nFlags, CPoint &point); - - BOOL MirrorX(CCore *Core); - BOOL MirrorY(CCore *Core); - - BOOL CopySelection(CCore *Core); - BOOL PasteSelection(CCore *Core); - void DeleteSet(int Set); void RemapSet(int OrigSet,int NewSet); - - protected: - void Render(CCore *Core,Vector3 &CamPos,CMap &ThisMap,BOOL Render3d,float Alpha=1.0f,Vector3 *Ofs=0); - void RenderCursorPaint(CCore *Core,Vector3 &CamPos,BOOL Is3d); - - BOOL Paint(CMap &Blk,CPoint &CursorPos); - - CMap Map; - int SubType; - MouseMode Mode; - -//static char *LayerName[]; }; diff --git a/Utils/MapEdit/LayerDef.h b/Utils/MapEdit/LayerDef.h index 2d2e81a76..6d4fc35d8 100644 --- a/Utils/MapEdit/LayerDef.h +++ b/Utils/MapEdit/LayerDef.h @@ -8,15 +8,19 @@ enum LAYER_TYPE { LAYER_TYPE_TILE=0, + LAYER_TYPE_COLLISION, LAYER_TYPE_MAX }; enum LAYER_SUBTYPE { + LAYER_SUBTYPE_NONE=-1, + LAYERTILE_BACK=0, LAYERTILE_MID, LAYERTILE_ACTION, LAYERTILE_FORE, + }; enum TILE_FLAG diff --git a/Utils/MapEdit/LayerTile.cpp b/Utils/MapEdit/LayerTile.cpp index 52167e4d7..98b18fe58 100644 --- a/Utils/MapEdit/LayerTile.cpp +++ b/Utils/MapEdit/LayerTile.cpp @@ -21,26 +21,21 @@ #include "Select.h" #include "Export.h" -/*****************************************************************************/ -char *CLayerTile::LayerName[]= -{ - "Back", - "Mid", - "Action", - "Fore", -}; - /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ // New Layer -CLayerTile::CLayerTile(int _SubType,int Width,int Height,float Scale,BOOL Is3d,BOOL Resizable) +CLayerTile::CLayerTile(int _SubType,int Width,int Height) { SubType=_SubType; - ScaleFactor=Scale; - ResizeFlag=Resizable; - Render3dFlag=Is3d; - VisibleFlag=TRUE; + if (SubType==LAYERTILE_BACK) // Back is fixed size + { + Width=32; + Height=32; + } + + SetDefaultParams(); + Mode=MouseModePaint; if (ResizeFlag) @@ -68,19 +63,15 @@ CLayerTile::~CLayerTile() } /*****************************************************************************/ -void CLayerTile::Load(CFile *File,float Version) +void CLayerTile::Load(CFile *File,int Version) { -// Version 1 - if (Version>=1.0) - { - File->Read(&Render3dFlag,sizeof(BOOL)); - File->Read(&ScaleFactor,sizeof(float)); - File->Read(&ResizeFlag,sizeof(BOOL)); - File->Read(&VisibleFlag,sizeof(BOOL)); - File->Read(&Mode,sizeof(MouseMode)); - File->Read(&SubType,sizeof(int)); - Map.Load(File,Version); - } + File->Read(&Render3dFlag,sizeof(BOOL)); + File->Read(&ScaleFactor,sizeof(float)); + File->Read(&ResizeFlag,sizeof(BOOL)); + File->Read(&VisibleFlag,sizeof(BOOL)); + File->Read(&Mode,sizeof(MouseMode)); + File->Read(&SubType,sizeof(int)); + Map.Load(File,Version); TRACE1("%s\t",GetName()); TRACE1("Scl:%g\t",ScaleFactor); @@ -407,30 +398,32 @@ void CLayerTile::InitGUI(CCore *Core) CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); CMultiBar *ParamBar=Frm->GetParamBar(); + ParamBar->Add(Frm->GetLayerTileToolbar(),IDD_LAYERTILE_TOOLBAR,TRUE); ParamBar->Add(Frm->GetLayerTileGUI(),IDD_LAYERTILE_GUI,TRUE); } /*****************************************************************************/ void CLayerTile::UpdateGUI(CCore *Core) { -CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); -CLayerTileGUI *Dlg=(CLayerTileGUI *)Frm->GetDialog(IDD_LAYERTILE_GUI); +CMainFrame *Frm=(CMainFrame*)AfxGetApp()->GetMainWnd(); +CLayerTileToolbar *Bar=(CLayerTileToolbar *)Frm->GetDialog(IDD_LAYERTILE_TOOLBAR); - if (Dlg) + if (Bar) { - Dlg->ResetButtons(); + Bar->ResetButtons(); switch(Mode) { case MouseModePaint: - Dlg->SetButtonState(CLayerTileGUI::PAINT,TRUE); + Bar->SetButtonState(CLayerTileToolbar::PAINT,TRUE); break; case MouseModeSelect: - Dlg->SetButtonState(CLayerTileGUI::SELECT,TRUE); + Bar->SetButtonState(CLayerTileToolbar::SELECT,TRUE); break; default: break; } } + Core->UpdateTileViewGUI(); } diff --git a/Utils/MapEdit/LayerTile.h b/Utils/MapEdit/LayerTile.h index 9cb0dd123..7394cd9bd 100644 --- a/Utils/MapEdit/LayerTile.h +++ b/Utils/MapEdit/LayerTile.h @@ -27,13 +27,13 @@ public: MouseModeSelect, }; - CLayerTile(int SubType,int Width,int Height,float Scale,BOOL Is3d,BOOL Resizable); // New Layer - CLayerTile(CFile *File,int Version); // Load Layer + CLayerTile(){}; + CLayerTile(int SubType,int Width,int Height); // New Layer + CLayerTile(CFile *File,int Version); // Load Layer ~CLayerTile(); int GetType() {return(LAYER_TYPE_TILE);} int GetSubType() {return(SubType);} - char *GetName() {return(LayerName[SubType]);} void Render(CCore *Core,Vector3 &CamPos,BOOL Is3d); void RenderGrid(CCore *Core,Vector3 &CamPos,BOOL Active); @@ -49,12 +49,11 @@ public: int GetHeight() {return(Map.GetHeight());} BOOL Resize(int Width,int Height); - void Load(CFile *File,float Version); + void Load(CFile *File,int Version); void Save(CFile *File); void CheckLayerSize(int Width,int Height); void Export(CCore *Core,CExport &Exp); - bool CanDelete() {if (SubType==LAYERTILE_FORE) return(true); else return(false);} // Functions BOOL SetMode(int NewMode); @@ -85,7 +84,7 @@ protected: int SubType; MouseMode Mode; -static char *LayerName[]; +//static char *LayerName[]; }; diff --git a/Utils/MapEdit/MainFrm.h b/Utils/MapEdit/MainFrm.h index abfcbe1a8..32e74a97d 100644 --- a/Utils/MapEdit/MainFrm.h +++ b/Utils/MapEdit/MainFrm.h @@ -8,6 +8,7 @@ #include "MultiBar.h" #include "LayerList.h" #include "LayerTileGUI.h" +#include "LayerTileToolbar.h" #if _MSC_VER > 1000 #pragma once @@ -39,6 +40,7 @@ public: CMultiBar *GetParamBar() {return(&ParamBar);} CDialog &GetLayerList() {return(LayerList);} CDialog &GetLayerTileGUI() {return(LayerTileGUI);} + CDialog &GetLayerTileToolbar() {return(LayerTileToolBar);} // Operations public: @@ -58,13 +60,14 @@ public: #endif protected: // control bar embedded members - CStatusBar StatusBar; - CMainToolBar ToolBar; + CStatusBar StatusBar; + CMainToolBar ToolBar; - CMultiBar ParamBar; + CMultiBar ParamBar; // Sub Dialogs - CLayerList LayerList; - CLayerTileGUI LayerTileGUI; + CLayerList LayerList; + CLayerTileGUI LayerTileGUI; + CLayerTileToolbar LayerTileToolBar; // Generated message map functions protected: diff --git a/Utils/MapEdit/Map.cpp b/Utils/MapEdit/Map.cpp index c7955fd17..ddfb2d38b 100644 --- a/Utils/MapEdit/Map.cpp +++ b/Utils/MapEdit/Map.cpp @@ -12,11 +12,14 @@ /*****************************************************************************/ -void CMap::Load(CFile *File,float Version) +void CMap::Load(CFile *File,int Version) { // Version 1 int Width; int Height; +int VFix=0; // Fix for colliison tileset + + if (Version<2) VFix=1; File->Read(&Width,sizeof(int)); File->Read(&Height,sizeof(int)); @@ -29,10 +32,10 @@ int Height; { sMapElem ThisElem; File->Read(&ThisElem,sizeof(sMapElem)); + ThisElem.Set+=VFix; Set(X,Y,ThisElem,TRUE); } } - } /*****************************************************************************/ diff --git a/Utils/MapEdit/Map.h b/Utils/MapEdit/Map.h index 308dc3e4c..88b7c1e19 100644 --- a/Utils/MapEdit/Map.h +++ b/Utils/MapEdit/Map.h @@ -57,7 +57,7 @@ public: BOOL DoesContainTile(sMapElem &Tile); - void Load(CFile *File,float Version); + void Load(CFile *File,int Version); void Save(CFile *File); void DeleteSet(int Set); diff --git a/Utils/MapEdit/MapEdit.clw b/Utils/MapEdit/MapEdit.clw index f09fe25d0..f678a96d4 100644 --- a/Utils/MapEdit/MapEdit.clw +++ b/Utils/MapEdit/MapEdit.clw @@ -2,13 +2,13 @@ [General Info] Version=1 -LastClass=CLayerList +LastClass=CMapEditView LastTemplate=CDialog NewFileInclude1=#include "stdafx.h" NewFileInclude2=#include "mapedit.h" LastPage=0 -ClassCount=14 +ClassCount=16 Class1=CChildFrame Class2=CGLEnabledView Class3=CMainFrame @@ -17,31 +17,36 @@ Class5=CAboutDlg Class6=CMapEditDoc Class7=CMapEditView -ResourceCount=11 +ResourceCount=13 Resource1=IDD_NEW_LAYER Resource2=IDR_MAPEDITYPE (English (U.S.)) Resource3=IDD_ABOUTBOX (English (U.S.)) Resource4=IDD_DIALOGBAR (English (U.S.)) -Resource5=IDD_LAYER_LIST_DIALOG +Resource5=IDD_MAPSIZE Class8=CMultiBar -Resource6=IDD_LAYERTILE_GUI -Resource7=IDD_MULTIBAR (English (U.S.)) +Resource6=IDR_TOOLBAR (English (U.S.)) +Resource7=IDD_LAYERTILE_GUI Class9=CLayerList Class10=CMapSizeDlg Resource8=IDR_MAINFRAME (English (U.S.)) Class11=CGfxToolBar Class12=CLayerTileGUI -Resource9=IDR_TOOLBAR (English (U.S.)) -Resource10=IDD_MAPSIZE +Resource9=IDD_LAYER_LIST_DIALOG +Resource10=IDD_NEWMAP Class13=CNewMapGUI Class14=CProgressDlg -Resource11=IDD_NEWMAP +Resource11=IDD_MULTIBAR (English (U.S.)) +Class15=CAddLayerDlg +Resource12=IDD_ADDLAYER +Class16=CLayerTileToolbar +Resource13=IDD_LAYERTILE_TOOLBAR [CLS:CChildFrame] Type=0 BaseClass=CMDIChildWnd HeaderFile=ChildFrm.h ImplementationFile=ChildFrm.cpp +LastObject=CChildFrame [CLS:CGLEnabledView] Type=0 @@ -77,7 +82,7 @@ Type=0 BaseClass=CDocument HeaderFile=MapEditDoc.h ImplementationFile=MapEditDoc.cpp -LastObject=ID_EXPORT_AGB +LastObject=CMapEditDoc Filter=N VirtualFilter=DC @@ -228,7 +233,7 @@ ImplementationFile=LayerList.cpp BaseClass=CDialog Filter=D VirtualFilter=dWC -LastObject=IDC_LAYERLIST_ADD +LastObject=IDC_LAYER_LIST [CLS:CGfxToolBar] Type=0 @@ -262,13 +267,11 @@ VirtualFilter=dWC [DLG:IDD_LAYERTILE_GUI] Type=1 Class=CLayerTileGUI -ControlCount=6 +ControlCount=4 Control1=IDD_LAYERTILE_LIST,combobox,1342242819 Control2=IDD_LAYERTILE_BTN_UPDATE,button,1342242816 Control3=IDD_LAYERTILE_BTN_LOAD,button,1342242816 -Control4=IDD_LAYERTILE_BTN_PAINT,button,1342177344 -Control5=IDD_LAYERTILE_BTN_SELECT,button,1342177344 -Control6=IDD_LAYERTILE_BTN_DELETE,button,1342242816 +Control4=IDD_LAYERTILE_BTN_DELETE,button,1342242816 [CLS:CLayerTileGUI] Type=0 @@ -277,7 +280,7 @@ ImplementationFile=LayerTileGUI.cpp BaseClass=CDialog Filter=D VirtualFilter=dWC -LastObject=IDD_LAYERTILE_BTN_DELETE +LastObject=IDD_LAYERTILE_BTN_UPDATE [DLG:IDD_NEW_LAYER] Type=1 @@ -299,16 +302,13 @@ Control12=IDC_NEW_LAYER_WIDTH_EDIT2,edit,1350631552 [DLG:IDD_NEWMAP] Type=1 Class=CNewMapGUI -ControlCount=9 +ControlCount=6 Control1=IDOK,button,1342177281 Control2=IDCANCEL,button,1342177280 Control3=IDC_MAPSIZE_WIDTH_TEXT,static,1342308866 Control4=IDC_MAPSIZE_WIDTH,edit,1350639744 Control5=IDC_MAPSIZE_HEIGHT_TEXT,static,1342308866 Control6=IDC_MAPSIZE_HEIGHT,edit,1350639744 -Control7=IDC_NEWMAP_BACK_CHECK,button,1476460547 -Control8=IDC_NEWMAP_MID_CHECK,button,1476460547 -Control9=IDC_NEWMAP_FORE_CHECK,button,1342242819 [CLS:CNewMapGUI] Type=0 @@ -328,3 +328,36 @@ Filter=D LastObject=IDC_EDIT1 VirtualFilter=dWC +[CLS:CAddLayerDlg] +Type=0 +HeaderFile=AddLayerDlg.h +ImplementationFile=AddLayerDlg.cpp +BaseClass=CDialog +Filter=D +LastObject=IDC_ADDLAYER_LIST +VirtualFilter=dWC + +[DLG:IDD_ADDLAYER] +Type=1 +Class=CAddLayerDlg +ControlCount=3 +Control1=IDOK,button,1342242817 +Control2=IDCANCEL,button,1342242816 +Control3=IDC_ADDLAYER_LIST,listbox,1352728833 + +[DLG:IDD_LAYERTILE_TOOLBAR] +Type=1 +Class=CLayerTileToolbar +ControlCount=2 +Control1=IDD_LAYERTILE_BTN_PAINT,button,1342177344 +Control2=IDD_LAYERTILE_BTN_SELECT,button,1342177344 + +[CLS:CLayerTileToolbar] +Type=0 +HeaderFile=LayerTileToolbar.h +ImplementationFile=LayerTileToolbar.cpp +BaseClass=CDialog +Filter=D +LastObject=CLayerTileToolbar +VirtualFilter=dWC + diff --git a/Utils/MapEdit/MapEdit.cpp b/Utils/MapEdit/MapEdit.cpp index 81aff45fa..33aa6eaa0 100644 --- a/Utils/MapEdit/MapEdit.cpp +++ b/Utils/MapEdit/MapEdit.cpp @@ -104,6 +104,7 @@ BOOL CMapEditApp::InitInstance() // The main window has been initialized, so show and update it. pMainFrame->ShowWindow(m_nCmdShow); pMainFrame->UpdateWindow(); + return TRUE; } diff --git a/Utils/MapEdit/MapEdit.dsp b/Utils/MapEdit/MapEdit.dsp index 8a9ca0464..214cb996f 100644 --- a/Utils/MapEdit/MapEdit.dsp +++ b/Utils/MapEdit/MapEdit.dsp @@ -53,7 +53,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 /nologo /subsystem:windows /machine:I386 -# ADD LINK32 opengl32.lib glu32.lib glib.lib ginlib.lib glaux.lib maths.lib /nologo /subsystem:windows /machine:I386 /out:"..\..\tools\MapEdit.exe" /libpath:"..\libs\ginlib\release\\" /libpath:"..\libs\glib\release\\" /libpath:"..\libs\maths\release\\" +# ADD LINK32 opengl32.lib glu32.lib glib.lib ginlib.lib glaux.lib maths.lib /nologo /subsystem:windows /machine:I386 /out:"..\..\tools\MapEdit\MapEdit.exe" /libpath:"..\libs\ginlib\release\\" /libpath:"..\libs\glib\release\\" /libpath:"..\libs\maths\release\\" !ELSEIF "$(CFG)" == "MapEdit - Win32 Debug" @@ -103,6 +103,14 @@ SOURCE=.\Layer.h # End Source File # Begin Source File +SOURCE=.\LayerCollision.cpp +# End Source File +# Begin Source File + +SOURCE=.\LayerCollision.h +# End Source File +# Begin Source File + SOURCE=.\LayerDef.h # End Source File # Begin Source File @@ -348,6 +356,14 @@ SOURCE=.\res\Toolbar.bmp # PROP Default_Filter "" # Begin Source File +SOURCE=.\AddLayerDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\AddLayerDlg.h +# End Source File +# Begin Source File + SOURCE=.\LayerList.cpp # End Source File # Begin Source File @@ -364,6 +380,14 @@ SOURCE=.\LayerTileGUI.h # End Source File # Begin Source File +SOURCE=.\LayerTileToolbar.cpp +# End Source File +# Begin Source File + +SOURCE=.\LayerTileToolbar.h +# End Source File +# Begin Source File + SOURCE=.\MapSizeDlg.cpp # End Source File # Begin Source File diff --git a/Utils/MapEdit/MapEdit.rc b/Utils/MapEdit/MapEdit.rc index 13fd2c130..6cc47b391 100644 --- a/Utils/MapEdit/MapEdit.rc +++ b/Utils/MapEdit/MapEdit.rc @@ -469,21 +469,6 @@ BEGIN PUSHBUTTON "Delete",IDC_LAYERLIST_DELETE,80,95,70,15 END -IDD_LAYERTILE_GUI DIALOG DISCARDABLE 0, 0, 151, 81 -STYLE WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - COMBOBOX IDD_LAYERTILE_LIST,7,7,138,322,CBS_DROPDOWNLIST | - WS_TABSTOP - PUSHBUTTON "Update",IDD_LAYERTILE_BTN_UPDATE,95,25,50,15 - PUSHBUTTON "Load",IDD_LAYERTILE_BTN_LOAD,5,25,45,15 - PUSHBUTTON "P",IDD_LAYERTILE_BTN_PAINT,5,45,15,15,BS_ICON | NOT - WS_TABSTOP - PUSHBUTTON "S",IDD_LAYERTILE_BTN_SELECT,20,45,15,15,BS_ICON | NOT - WS_TABSTOP - PUSHBUTTON "Delete",IDD_LAYERTILE_BTN_DELETE,50,25,45,15 -END - IDD_MAPSIZE DIALOG DISCARDABLE 0, 0, 127, 61 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION CAPTION "Enter New Size" @@ -501,45 +486,51 @@ BEGIN IDC_MAPSIZE_WARNING,5,40,110,20 END -IDD_NEW_LAYER DIALOG DISCARDABLE 0, 0, 302, 236 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Dialog" -FONT 8, "MS Sans Serif" -BEGIN - DEFPUSHBUTTON "OK",IDOK,245,215,50,14 - PUSHBUTTON "Cancel",IDCANCEL,190,215,50,14 - COMBOBOX IDC_NEW_LAYER_TYPE_LIST,45,20,105,110,CBS_DROPDOWN | - CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "Layer Type",IDC_NEW_LAYER_TYPE_NAME,5,20,36,10 - LTEXT "Width",IDC_NEW_LAYER_WIDTH_NAME,5,36,36,10 - LTEXT "Height",IDC_NEW_LAYER_HEIGHT_NAME,5,50,36,10 - EDITTEXT IDC_NEW_LAYER_WIDTH_EDIT,45,36,30,15,ES_AUTOHSCROLL - EDITTEXT IDC_NEW_LAYER_HEIGHT_EDIT,45,50,30,15,ES_AUTOHSCROLL - LTEXT "Name",IDC_NEW_LAYER_NAME_NAME,5,5,36,10 - EDITTEXT IDC_NEW_LAYER_NAME_EDIT,45,5,105,15,ES_AUTOHSCROLL - LTEXT "Width",IDC_NEW_LAYER_WIDTH_NAME2,80,35,36,10 - EDITTEXT IDC_NEW_LAYER_WIDTH_EDIT2,120,35,30,15,ES_AUTOHSCROLL -END - IDD_NEWMAP DIALOG DISCARDABLE 0, 0, 145, 66 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION CAPTION "Enter New Size" FONT 8, "MS Sans Serif" BEGIN - DEFPUSHBUTTON "OK",IDOK,90,45,50,14,NOT WS_TABSTOP - PUSHBUTTON "Cancel",IDCANCEL,35,45,50,14,NOT WS_TABSTOP + DEFPUSHBUTTON "OK",IDOK,60,35,50,14,NOT WS_TABSTOP + PUSHBUTTON "Cancel",IDCANCEL,5,35,50,14,NOT WS_TABSTOP RTEXT "Width",IDC_MAPSIZE_WIDTH_TEXT,5,5,20,10,SS_CENTERIMAGE EDITTEXT IDC_MAPSIZE_WIDTH,30,5,35,12,ES_AUTOHSCROLL | ES_NUMBER RTEXT "Height",IDC_MAPSIZE_HEIGHT_TEXT,5,20,20,10, SS_CENTERIMAGE EDITTEXT IDC_MAPSIZE_HEIGHT,30,20,35,12,ES_AUTOHSCROLL | ES_NUMBER - CONTROL "Create Back Layer",IDC_NEWMAP_BACK_CHECK,"Button", - BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,70,5,75,10 - CONTROL "Create Mid Layer",IDC_NEWMAP_MID_CHECK,"Button", - BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,70,15,69,10 - CONTROL "Create Fore Layer",IDC_NEWMAP_FORE_CHECK,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,70,25,72,10 +END + +IDD_ADDLAYER DIALOGEX 0, 0, 118, 90 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "Select Layer To Add." +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,60,75,50,14 + PUSHBUTTON "Cancel",IDCANCEL,5,75,50,14 + LISTBOX IDC_ADDLAYER_LIST,5,5,105,65,LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP,WS_EX_DLGMODALFRAME +END + +IDD_LAYERTILE_GUI DIALOG DISCARDABLE 0, 0, 151, 47 +STYLE WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + COMBOBOX IDD_LAYERTILE_LIST,7,7,138,322,CBS_DROPDOWNLIST | + WS_TABSTOP + PUSHBUTTON "Update",IDD_LAYERTILE_BTN_UPDATE,95,25,50,15 + PUSHBUTTON "Load",IDD_LAYERTILE_BTN_LOAD,5,25,45,15 + PUSHBUTTON "Delete",IDD_LAYERTILE_BTN_DELETE,50,25,45,15 +END + +IDD_LAYERTILE_TOOLBAR DIALOG DISCARDABLE 0, 0, 151, 16 +STYLE WS_CHILD +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "P",IDD_LAYERTILE_BTN_PAINT,5,0,15,15,BS_ICON | NOT + WS_TABSTOP + PUSHBUTTON "S",IDD_LAYERTILE_BTN_SELECT,20,0,15,15,BS_ICON | NOT + WS_TABSTOP END @@ -559,14 +550,6 @@ BEGIN BOTTOMMARGIN, 108 END - IDD_LAYERTILE_GUI, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 144 - TOPMARGIN, 7 - BOTTOMMARGIN, 74 - END - IDD_MAPSIZE, DIALOG BEGIN LEFTMARGIN, 7 @@ -575,14 +558,6 @@ BEGIN BOTTOMMARGIN, 54 END - IDD_NEW_LAYER, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 295 - TOPMARGIN, 7 - BOTTOMMARGIN, 229 - END - IDD_NEWMAP, DIALOG BEGIN LEFTMARGIN, 7 @@ -590,6 +565,30 @@ BEGIN TOPMARGIN, 7 BOTTOMMARGIN, 59 END + + IDD_ADDLAYER, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 111 + TOPMARGIN, 7 + BOTTOMMARGIN, 83 + END + + IDD_LAYERTILE_GUI, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 144 + TOPMARGIN, 7 + BOTTOMMARGIN, 40 + END + + IDD_LAYERTILE_TOOLBAR, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 144 + TOPMARGIN, 4 + BOTTOMMARGIN, 9 + END END #endif // APSTUDIO_INVOKED diff --git a/Utils/MapEdit/TileSet.cpp b/Utils/MapEdit/TileSet.cpp index c349fb30d..f7394e128 100644 --- a/Utils/MapEdit/TileSet.cpp +++ b/Utils/MapEdit/TileSet.cpp @@ -8,6 +8,7 @@ #include #include "GLEnabledView.h" #include +//#include #include #include "Core.h" @@ -21,8 +22,9 @@ #include "MainFrm.h" #include "LayerTileGui.h" +// Reserve slot 0 for collision :o) +char *ColFName="Collision.bmp"; -/*****************************************************************************/ /*****************************************************************************/ /*** TileBank ****************************************************************/ /*****************************************************************************/ @@ -36,14 +38,31 @@ const float TileBrowserY1=1+TileBrowserGap/2; /*****************************************************************************/ CTileBank::CTileBank() { +GFName ExePath; +GString Filename; + +// Get application path +#ifdef _DEBUG + ExePath="C:/Spongebob/tools/mapedit/mapedit/"; +#else +char ExeFilename[2048]; + GetModuleFileName(GetModuleHandle(NULL),ExeFilename,2048); + ExePath=ExeFilename; + ExePath.File(0); + ExePath.Ext(0); +#endif + Filename=ExePath.FullName(); + Filename+=ColFName; + LoadFlag=FALSE; - CurrentSet=0; + CurrentSet=0; LastSet=0; for (int i=0; iGetFilePath(); @@ -68,32 +101,22 @@ GString FilePath; File->Read(&ActiveBrush,sizeof(int)); Brush[0].Load(File,Version); Brush[1].Load(File,Version); - - if (Version<=1.00) + if (Version<2) { - for (int i=0;iRead(Filename,256+64); - AddTileSet(Filename); -// TRACE1("%s\n",Filename); - } + CurrentSet++; } - else - { // New Style rel storage - for (int i=0;iRead(&c,1); - RelName[Len++]=c; - } - RootPath.makeabsolute(FilePath,RelName,FullName); - AddTileSet(FullName); + File->Read(&c,1); + RelName[Len++]=c; } + RootPath.makeabsolute(FilePath,RelName,FullName); + AddTileSet(FullName); } } @@ -101,6 +124,7 @@ GString FilePath; void CTileBank::Save(CFile *File) { int ListSize=TileSet.size(); +int NewListSize=ListSize-1; GString FilePath; GFName RootPath=File->GetFilePath(); @@ -108,13 +132,13 @@ GFName RootPath=File->GetFilePath(); FilePath+=RootPath.Dir(); FilePath.Append('\\'); - File->Write(&ListSize,sizeof(int)); + File->Write(&NewListSize,sizeof(int)); File->Write(&CurrentSet,sizeof(int)); File->Write(&ActiveBrush,sizeof(int)); Brush[0].Save(File); Brush[1].Save(File); - for (int i=0; iGetFilePath(); } /*****************************************************************************/ -void CTileBank::AddTileSet(char *Filename) +void CTileBank::AddTileSet(const char *Filename) { int ListSize=TileSet.size(); @@ -139,7 +163,7 @@ int ListSize=TileSet.size(); } /*****************************************************************************/ -int CTileBank::FindTileSet(char *Filename) +int CTileBank::FindTileSet(const char *Filename) { int ListSize=TileSet.size(); CTileSet FindSet(Filename,ListSize); @@ -180,12 +204,11 @@ int ListSize=TileSet.size(); { for (int i=0; im_List.ResetContent(); - if (ListSize) + if (ListSize-1) { - for (int i=0; im_List.AddString(TileSet[i].GetName()); } - Dlg->m_List.SetCurSel(CurrentSet); + Dlg->m_List.SetCurSel(CurrentSet-1); } else { @@ -265,6 +286,7 @@ int ListSize=TileSet.size(); } Dlg->m_List.EnableWindow(IsTileView); } + } /*****************************************************************************/ @@ -365,7 +387,7 @@ BOOL CTileBank::IsTileValidGB(int Set,int Tile) /*** TileSet *****************************************************************/ /*****************************************************************************/ /*****************************************************************************/ -CTileSet::CTileSet(char *_Filename,int Idx) +CTileSet::CTileSet(const char *_Filename,int Idx) { Filename=_Filename; diff --git a/Utils/MapEdit/TileSet.h b/Utils/MapEdit/TileSet.h index 73f732211..db9288dc7 100644 --- a/Utils/MapEdit/TileSet.h +++ b/Utils/MapEdit/TileSet.h @@ -40,15 +40,15 @@ public: MaxBrush }; - int FindTileSet(char *Filename); - void AddTileSet(char *Filename); + int FindTileSet(const char *Filename); + void AddTileSet(const char *Filename); int NeedLoad() {return(LoadFlag);} void Delete(); void Reload(); void LoadTileSets(CCore *Core); CTile &GetTile(int Bank,int Tile); - void SetCurrent(int Set) {CurrentSet=Set;} + void SetCurrent(int Set) {CurrentSet=Set+1;} int GetCurrent() {return(CurrentSet);} int GetSetCount() {return(TileSet.size());} @@ -66,6 +66,8 @@ public: BOOL IsTileValid(int Set,int Tile); BOOL IsTileValidGB(int Set,int Tile); + void SetCollision(bool f); + // Functions BOOL SelectL(BOOL DownFlag) {return(Select(LBrush,DownFlag));} BOOL SelectR(BOOL DownFlag) {return(Select(RBrush,DownFlag));} @@ -74,7 +76,7 @@ public: void SetActiveBrushL() {ActiveBrush=LBrush;} void SetActiveBrushR() {ActiveBrush=RBrush;} - void Load(CFile *File,float Version); + void Load(CFile *File,int Version); void Save(CFile *File); @@ -83,7 +85,7 @@ private: void SetBrush(CMap &ThisBrush); std::vector TileSet; - int CurrentSet; + int CurrentSet,LastSet; CMap Brush[2]; int ActiveBrush; int SelStart,SelEnd; @@ -96,7 +98,7 @@ private: class CTileSet { public: - CTileSet(char *_Filename,int Idx); + CTileSet(const char *_Filename,int Idx); ~CTileSet(); int IsLoaded() {return(Loaded);} diff --git a/Utils/MapEdit/resource.h b/Utils/MapEdit/resource.h index 453357445..b96b4592a 100644 --- a/Utils/MapEdit/resource.h +++ b/Utils/MapEdit/resource.h @@ -9,12 +9,13 @@ #define IDR_TOOLBAR 128 #define IDR_MAPEDITYPE 129 #define IDD_LAYER_LIST_DIALOG 147 -#define IDD_LAYERTILE_GUI 148 #define IDI_PAINT 152 #define IDI_SELECT 153 #define IDD_MAPSIZE 167 -#define IDD_NEW_LAYER 168 #define IDD_NEWMAP 169 +#define IDD_ADDLAYER 172 +#define IDD_LAYERTILE_GUI 173 +#define IDD_LAYERTILE_TOOLBAR 174 #define IDC_TOOLBAR_COMBO 1018 #define IDC_LAYER_LIST 1019 #define IDD_LAYERTILE_BTN_UPDATE 1029 @@ -28,21 +29,9 @@ #define IDC_MAPSIZE_HEIGHT_TEXT 1039 #define IDC_MAPSIZE_HEIGHT 1040 #define IDC_MAPSIZE_WARNING 1041 -#define IDC_NEW_LAYER_TYPE_LIST 1042 -#define IDC_NEW_LAYER_TYPE_NAME 1043 -#define IDC_NEW_LAYER_WIDTH_NAME 1044 -#define IDC_NEW_LAYER_HEIGHT_NAME 1045 -#define IDC_NEW_LAYER_WIDTH_EDIT 1046 -#define IDC_NEW_LAYER_HEIGHT_EDIT 1047 -#define IDC_NEWMAP_BACK_CHECK 1047 -#define IDC_NEW_LAYER_NAME_NAME 1048 -#define IDC_NEW_LAYER_NAME_EDIT 1049 -#define IDC_NEWMAP_MID_CHECK 1050 -#define IDC_NEWMAP_FORE_CHECK 1051 -#define IDC_NEW_LAYER_WIDTH_NAME2 1052 -#define IDC_NEW_LAYER_WIDTH_EDIT2 1053 #define IDC_LAYERLIST_ADD 1056 #define IDC_LAYERLIST_DELETE 1057 +#define IDC_ADDLAYER_LIST 1058 #define ID_TOOLBAR_LAYERBAR 32773 #define ID_TOOLBAR_TILEPALETTE 32774 #define ID_TOOLBAR_COMBO 32777 @@ -68,9 +57,9 @@ #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 -#define _APS_NEXT_RESOURCE_VALUE 172 +#define _APS_NEXT_RESOURCE_VALUE 173 #define _APS_NEXT_COMMAND_VALUE 32799 -#define _APS_NEXT_CONTROL_VALUE 1057 +#define _APS_NEXT_CONTROL_VALUE 1059 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/tools/MapEdit/MapEdit.exe b/tools/MapEdit/MapEdit.exe index 0c659d68cfa746b8b42879a04ec06f1685ead15a..5d493aa7933dfacda6e478593ea0c142150cc31f 100644 GIT binary patch delta 79941 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 diff --git a/tools/MapEdit/collision.bmp b/tools/MapEdit/collision.bmp index b600fdf78016bc3a3356c5b85ff2c2ea87f7e61a..93d376501021c0d31639ee62a9ffcef3de41add2 100644 GIT binary patch literal 17462 zcmeI3Jr2S!3`P@)funE&W`tO|6E`n$S|^T6t2R}cUQp^^KAShN_4&TPLO%CP2)E>Y zrW?aG=fh((`5DtQ-9bKs+~jv$qlgOu2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SFu< z5Zy^H1@Afs$IqsT-r54bc*gv-4SemK`F=_z;_;j{e`y1mSGS4s7WtuLwZyk#zEqjzjU-Fw$!I& zi8~#u-RL)ZwX3GbT#fs@s=ThJeP&8dnYhbUUA4<1V~4Fv#>PFq&Q-gnF`M`2`SQ=# X?&ssSx+T)zt#-?IOpn{gR5rR_G=nA% literal 17462 zcmeI3OHRZv5JVk`#TYQ`K$!G@2cs-_I}SpXZx% z???6%-_1RI-+hGOKev$YZjaBI+<%WPJ1-3Q4*c8iK=>ix69N!`00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOL|sLtrzHbEa{toKM?}+x4ezd#knIJvQ6ptFwY(yrivabz2Qxc~Z1)DYieW zHFw0mH8Ux-X7xvF?93Mbmt3>89y-$VXuTuNdR6B$K9^9&%62wN%j!+?sn*(DSKji? z&aZWCQ*3Xou4ONFjcJeKC0vP=R=iAAV%?P?HdcJrqq?`#_hkyPYb|X(OxAVQ-IY=Z<%@uh3>!I?Os(v6!!l(^WMGjk#av MDh`&tB2E9?UyE2KlmGw#