diff --git a/Utils/MapEdit/CmdMsg.h b/Utils/MapEdit/CmdMsg.h index d5c8d78d9..e05c5da19 100644 --- a/Utils/MapEdit/CmdMsg.h +++ b/Utils/MapEdit/CmdMsg.h @@ -37,12 +37,13 @@ enum CmdMsg // Thing CmdMsg_ThingListDelete, // 23 - CmdMsg_ThingListSelect, // 24 - CmdMsg_ThingLevelSelect, // 25 - CmdMsg_ThingPosSelect, // 26 - CmdMsg_ThingPosUp, // 27 - CmdMsg_ThingPosDown, // 28 - CmdMsg_ThingPosDelete, // 29 + CmdMsg_ThingListGoto, // 24 + CmdMsg_ThingListSelect, // 25 + CmdMsg_ThingLevelSelect, // 26 + CmdMsg_ThingPosSelect, // 27 + CmdMsg_ThingPosUp, // 28 + CmdMsg_ThingPosDown, // 29 + CmdMsg_ThingPosDelete, // 30 }; #endif /*****************************************************************************/ diff --git a/Utils/MapEdit/Core.cpp b/Utils/MapEdit/Core.cpp index 29c88df08..72246812c 100644 --- a/Utils/MapEdit/Core.cpp +++ b/Utils/MapEdit/Core.cpp @@ -82,18 +82,21 @@ int Width,Height; // Create Tile Layers AddLayer(LAYER_TYPE_TILE,LAYER_SUBTYPE_ACTION, Width, Height); #ifdef _DEBUG + AddLayer(LAYER_TYPE_TRIGGER,LAYER_SUBTYPE_NONE, Width, Height); + AddLayer(LAYER_TYPE_PLATFORM,LAYER_SUBTYPE_NONE, Width, Height); + AddLayer(LAYER_TYPE_FX,LAYER_SUBTYPE_NONE, Width, Height); AddLayer(LAYER_TYPE_ACTOR,LAYER_SUBTYPE_NONE, Width, Height); - AddLayer(LAYER_TYPE_ITEM,LAYER_SUBTYPE_NONE, Width, Height); +// AddLayer(LAYER_TYPE_ITEM,LAYER_SUBTYPE_NONE, Width, Height); #endif for (int i=0; iInitSubView(this); } - ActiveLayer=FindLayer(LAYER_TYPE_TILE,LAYER_SUBTYPE_ACTION); #ifdef _DEBUG - ActiveLayer=FindLayer(LAYER_TYPE_ACTOR,LAYER_SUBTYPE_NONE); + ActiveLayer=FindLayer(LAYER_TYPE_PLATFORM,LAYER_SUBTYPE_NONE); + if (ActiveLayer<0) ActiveLayer=0; #endif CurrentLayer=Layer[ActiveLayer]; return(TRUE); @@ -157,6 +160,7 @@ int MapHeight=ActionLayer->GetHeight(); { Layer[i]->CheckLayerSize(MapWidth,MapHeight); } + } /*****************************************************************************/ @@ -401,7 +405,7 @@ bool RedrawFlag=false; Zoom(+0.1f); break; case CmdMsg_ResetView: - ResetView(); + SetCamPos(DefaultCamPos); break; case CmdMsg_SetLayer: SetLayer(Param0); @@ -524,31 +528,6 @@ sLayerDef ThisDef; Lyr=CLayer::NewLayer(ThisDef); Idx=AddLayer(Lyr); -/* switch (Type) - { - case LAYER_TYPE_TILE: - Idx=AddLayer(new CLayerTile(SubType, Width,Height)); - break; - case LAYER_TYPE_COLLISION: - Idx=AddLayer(new CLayerCollision(SubType, Width,Height)); - break; - case LAYER_TYPE_SHADE: - Idx=AddLayer(new CLayerShade(SubType, Width,Height)); - break; - case LAYER_TYPE_ACTOR: - Idx=AddLayer(new CLayerActor(SubType, Width,Height)); - break; - case LAYER_TYPE_ITEM: - Idx=AddLayer(new CLayerItem(SubType, Width,Height)); - break; - case LAYER_TYPE_PLATFORM: - Idx=AddLayer(new CLayerPlatform(SubType, Width,Height)); - break; - default: - ASSERT(!"AddLayer - Invalid Layer Type"); - break; - } -*/ if (ActionLayer) Layer[Idx]->InitSubView(this); return(Idx); } @@ -593,10 +572,20 @@ void CCore::DeleteLayer(int ThisLayer) if (Layer[ThisLayer]->CanDelete()) { -// Layer[CurrentLayer]->GUIKill(this); - SetLayer(ThisLayer-1,true); + Layer[ThisLayer]->GUIKill(this); delete Layer[ThisLayer]; Layer.erase(Layer.begin() + ThisLayer); + UpdateLayerGUI(); + + if (ActiveLayer==ThisLayer) + { + ActiveLayer--; + if (ActiveLayer<0) ActiveLayer=0; + CurrentLayer=Layer[ActiveLayer]; + CurrentLayer->GUIInit(this); + GUIUpdate(); + } + TRACE1("Deleted Layer %i\n",ThisLayer); } else @@ -675,11 +664,21 @@ Vector3 &ThisCam=GetCam(); } /*****************************************************************************/ -void CCore::ResetView() +void CCore::SetCamPos(Vector3 Pos) { Vector3 &ThisCam=GetCam(); - ThisCam=DefaultCamPos; + ThisCam=Pos; + UpdateView(); +} + +/*****************************************************************************/ +void CCore::SetCamPos(CPoint &Pos) +{ +Vector3 &ThisCam=GetCam(); + + ThisCam.x=Pos.x; + ThisCam.y=Pos.y; UpdateView(); } @@ -813,9 +812,8 @@ Vector3 ThisCam=Cam; } /*****************************************************************************/ -void CCore::Export(char *Filename) +void CCore::Export(const char *Filename) { - int LayerCount=Layer.size(); char ExportName[256]; diff --git a/Utils/MapEdit/Core.h b/Utils/MapEdit/Core.h index 13ae06275..fb212643b 100644 --- a/Utils/MapEdit/Core.h +++ b/Utils/MapEdit/Core.h @@ -19,7 +19,7 @@ #include "Layer.h" #include "LayerTile.h" -const s32 FileVersion=6; +const s32 FileVersion=8; #define SCREEN_MAP_WIDTH 30 #define SCREEN_MAP_HEIGHT 20 @@ -44,7 +44,7 @@ public: void Render(bool ForceRender=FALSE); void RenderLayers(bool OneShot=false); void RenderNumber(int No); - void Export(char *Filename); + void Export(const char *Filename); void RenderToTga(char *Filename); void RenderToTga(); @@ -116,7 +116,9 @@ public: void CopySelection(); void PasteSelection(); - void ResetView(); + void SetCamPos(Vector3 Pos); + void SetCamPos(CPoint &Pos); + CElemBank *GetIconBank() {return(IconBank);} private: diff --git a/Utils/MapEdit/Elem.cpp b/Utils/MapEdit/Elem.cpp index 3b876695a..ac6255659 100644 --- a/Utils/MapEdit/Elem.cpp +++ b/Utils/MapEdit/Elem.cpp @@ -66,12 +66,13 @@ CElem::CElem(int Width,int Height) ElemID=-1; int AW=AlignSize(ElemWidth); int AH=AlignSize(ElemHeight); + ElemRGB=0; ElemRGB=(u8*)MemAlloc(AW*AH*3); memset(ElemRGB,0,AW*AH*3); Type=ElemType2d; TexXOfs=0; TexYOfs=0; - for (int i=0; i &GetTriList() {return(TriList);} + void SetBlank(); + void SetInvalid(); protected: void Build3dElem(CTexCache &TexCache,CScene &ThisScene,int Node); void Build2dElem(CCore *Core,const char *Filename,int TexId); @@ -96,7 +99,7 @@ protected: GLint DrawList[ElemTypeMax]; ElemType Type; - bool ValidFlag; + bool ValidFlag,BlankFlag; int TexXOfs,TexYOfs; int ElemWidth,ElemHeight; diff --git a/Utils/MapEdit/ExportHdr.h b/Utils/MapEdit/ExportHdr.h index 17ae5da7b..a5bb10248 100644 --- a/Utils/MapEdit/ExportHdr.h +++ b/Utils/MapEdit/ExportHdr.h @@ -110,15 +110,26 @@ BOOL operator==(sExpMapElem const &v1) /*****************************************************************************/ /*** Things ******************************************************************/ /*****************************************************************************/ -struct sExpLayerThing +struct sLayerThingData { - int Health; - int AttackStrength; + int WaypointCount; + int Speed; int TurnRate; + int Health; + int AttackStrength; bool CollisionFlag; bool PlayerFlag; - int Spare[8]; + +// Platform + int MoveType; + int PlatformType; +// Boxes + int Width,Height; +// Spare + int Spare[4]; + }; + #endif diff --git a/Utils/MapEdit/GUILayerActor.cpp b/Utils/MapEdit/GUILayerActor.cpp index 9f37c575e..a1b0eda92 100644 --- a/Utils/MapEdit/GUILayerActor.cpp +++ b/Utils/MapEdit/GUILayerActor.cpp @@ -38,23 +38,13 @@ void CGUILayerActor::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_ACTOR_SPEED, m_Speed); DDX_Control(pDX, IDC_ACTOR_ATTACK, m_Attack); DDX_Control(pDX, IDC_ACTOR_HEALTH, m_Health); - DDX_Control(pDX, IDC_LEVEL_ACTOR_LIST, m_LevelList); - DDX_Control(pDX, IDC_ACTOR_POS_LIST, m_PosList); - DDX_Control(pDX, IDC_ACTOR_LIST, m_List); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CGUILayerActor, CDialog) //{{AFX_MSG_MAP(CGUILayerActor) - ON_BN_CLICKED(IDC_ACTOR_DELETE, OnActorDelete) - ON_BN_CLICKED(IDC_ACTOR_POS_UP, OnActorPosUp) - ON_BN_CLICKED(IDC_ACTOR_POS_DOWN, OnActorPosDown) - ON_BN_CLICKED(IDC_ACTOR_POS_DELETE, OnActorPosDelete) ON_EN_CHANGE(IDC_ACTOR_HEALTH, OnChangeParam) - ON_CBN_SELCHANGE(IDC_ACTOR_LIST, OnSelchangeActorList) - ON_CBN_SELCHANGE(IDC_LEVEL_ACTOR_LIST, OnSelchangeLevelActorList) - ON_LBN_SELCHANGE(IDC_ACTOR_POS_LIST, OnSelchangeActorPosList) ON_EN_CHANGE(IDC_ACTOR_ATTACK, OnChangeParam) ON_BN_CLICKED(IDC_ACTOR_COLLISION, OnChangeParam) ON_EN_CHANGE(IDC_ACTOR_SPEED, OnChangeParam) @@ -88,14 +78,4 @@ int Val=0; ///////////////////////////////////////////////////////////////////////////// // CGUILayerActor message handlers -void CGUILayerActor::OnSelchangeActorList() {theApp.GetCurrent()->Command(CmdMsg_ThingListSelect,m_List.GetCurSel());} -void CGUILayerActor::OnActorDelete() {theApp.GetCurrent()->Command(CmdMsg_ThingListDelete,m_List.GetCurSel());} - -void CGUILayerActor::OnSelchangeLevelActorList() {theApp.GetCurrent()->Command(CmdMsg_ThingLevelSelect,m_LevelList.GetCurSel());} - -void CGUILayerActor::OnSelchangeActorPosList() {theApp.GetCurrent()->Command(CmdMsg_ThingPosSelect,m_PosList.GetCurSel());} -void CGUILayerActor::OnActorPosUp() {theApp.GetCurrent()->Command(CmdMsg_ThingPosUp,m_PosList.GetCurSel());} -void CGUILayerActor::OnActorPosDown() {theApp.GetCurrent()->Command(CmdMsg_ThingPosDown,m_PosList.GetCurSel());} -void CGUILayerActor::OnActorPosDelete() {theApp.GetCurrent()->Command(CmdMsg_ThingPosDelete,m_PosList.GetCurSel());} - void CGUILayerActor::OnChangeParam() {if (!CallbackFlag) theApp.GetCurrent()->GUIChanged();} diff --git a/Utils/MapEdit/GUILayerActor.h b/Utils/MapEdit/GUILayerActor.h index bdaecdd93..9ed453d07 100644 --- a/Utils/MapEdit/GUILayerActor.h +++ b/Utils/MapEdit/GUILayerActor.h @@ -10,7 +10,7 @@ ///////////////////////////////////////////////////////////////////////////// // CGUILayerActor dialog -class CGUILayerActor : public CDialog +class CGUILayerActor : public CDialog { // Construction public: @@ -25,9 +25,6 @@ public: CEdit m_Speed; CEdit m_Attack; CEdit m_Health; - CComboBox m_LevelList; - CListBox m_PosList; - CComboBox m_List; //}}AFX_DATA @@ -49,14 +46,7 @@ protected: // Generated message map functions //{{AFX_MSG(CGUILayerActor) - afx_msg void OnActorDelete(); - afx_msg void OnActorPosUp(); - afx_msg void OnActorPosDown(); - afx_msg void OnActorPosDelete(); afx_msg void OnChangeParam(); - afx_msg void OnSelchangeActorList(); - afx_msg void OnSelchangeLevelActorList(); - afx_msg void OnSelchangeActorPosList(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; diff --git a/Utils/MapEdit/GUILayerFX.cpp b/Utils/MapEdit/GUILayerFX.cpp index 01bec183d..7d79be50f 100644 --- a/Utils/MapEdit/GUILayerFX.cpp +++ b/Utils/MapEdit/GUILayerFX.cpp @@ -5,6 +5,9 @@ #include "mapedit.h" #include "GUILayerFX.h" +#include "MapEditDoc.h" +#include "MainFrm.h" + #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE @@ -18,9 +21,10 @@ static char THIS_FILE[] = __FILE__; CGUILayerFX::CGUILayerFX(CWnd* pParent /*=NULL*/) : CDialog(CGUILayerFX::IDD, pParent) { + DisableCallback(true); //{{AFX_DATA_INIT(CGUILayerFX) - // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT + DisableCallback(false); } @@ -28,16 +32,45 @@ void CGUILayerFX::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CGUILayerFX) - // NOTE: the ClassWizard will add DDX and DDV calls here + DDX_Control(pDX, IDC_FX_WIDTH, m_Width); + DDX_Control(pDX, IDC_FX_HEIGHT, m_Height); + DDX_Control(pDX, IDC_FX_SPEED, m_Speed); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CGUILayerFX, CDialog) //{{AFX_MSG_MAP(CGUILayerFX) - // NOTE: the ClassWizard will add message map macros here + ON_EN_CHANGE(IDC_FX_SPEED, OnParamChange) + ON_EN_CHANGE(IDC_FX_HEIGHT, OnParamChange) + ON_EN_CHANGE(IDC_FX_WIDTH, OnParamChange) //}}AFX_MSG_MAP END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +void CGUILayerFX::SetVal(CEdit &Dlg,int Val) +{ +CString Str; + if (!Dlg) return; + DisableCallback(true); + Str.Format("%i",Val); + Dlg.SetWindowText(Str); + DisableCallback(false); +} + +///////////////////////////////////////////////////////////////////////////// +int CGUILayerFX::GetVal(CEdit &Dlg) +{ +CString Str; +int Val=0; + if (!Dlg) return(0); + Dlg.GetWindowText(Str); + if (Str.GetLength()) + Val=atoi(Str); + return(Val); +} ///////////////////////////////////////////////////////////////////////////// // CGUILayerFX message handlers + +void CGUILayerFX::OnParamChange() {if (!CallbackFlag) theApp.GetCurrent()->GUIChanged();} diff --git a/Utils/MapEdit/GUILayerFX.h b/Utils/MapEdit/GUILayerFX.h index 12cc58234..798c57a97 100644 --- a/Utils/MapEdit/GUILayerFX.h +++ b/Utils/MapEdit/GUILayerFX.h @@ -19,7 +19,9 @@ public: // Dialog Data //{{AFX_DATA(CGUILayerFX) enum { IDD = IDD_LAYER_FX }; - // NOTE: the ClassWizard will add data members here + CEdit m_Width; + CEdit m_Height; + CEdit m_Speed; //}}AFX_DATA @@ -31,11 +33,17 @@ public: //}}AFX_VIRTUAL // Implementation + +public: + void DisableCallback(bool f) {CallbackFlag=f;} + void SetVal(CEdit &Dlg,int Number); + int GetVal(CEdit &Dlg); protected: + bool CallbackFlag; // Generated message map functions //{{AFX_MSG(CGUILayerFX) - // NOTE: the ClassWizard will add member functions here + afx_msg void OnParamChange(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; diff --git a/Utils/MapEdit/GUILayerPlatform.cpp b/Utils/MapEdit/GUILayerPlatform.cpp index 13411ebc3..fd9ad854f 100644 --- a/Utils/MapEdit/GUILayerPlatform.cpp +++ b/Utils/MapEdit/GUILayerPlatform.cpp @@ -5,6 +5,9 @@ #include "mapedit.h" #include "GUILayerPlatform.h" +#include "MapEditDoc.h" +#include "MainFrm.h" + #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE @@ -18,9 +21,10 @@ static char THIS_FILE[] = __FILE__; CGUILayerPlatform::CGUILayerPlatform(CWnd* pParent /*=NULL*/) : CDialog(CGUILayerPlatform::IDD, pParent) { + DisableCallback(true); //{{AFX_DATA_INIT(CGUILayerPlatform) - // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT + DisableCallback(false); } @@ -28,16 +32,49 @@ void CGUILayerPlatform::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CGUILayerPlatform) - // NOTE: the ClassWizard will add DDX and DDV calls here + DDX_Control(pDX, IDC_PLATFORM_TYPE, m_Type); + DDX_Control(pDX, IDC_PLATFORM_MOVE_TYPE, m_MoveList); + DDX_Control(pDX, IDC_PLATFORM_COLLISION, m_Collision); + DDX_Control(pDX, IDC_PLATFORM_TURNRATE, m_TurnRate); + DDX_Control(pDX, IDC_PLATFORM_SPEED, m_Speed); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CGUILayerPlatform, CDialog) //{{AFX_MSG_MAP(CGUILayerPlatform) - // NOTE: the ClassWizard will add message map macros here + ON_EN_CHANGE(IDC_PLATFORM_SPEED, OnChangeParam) + ON_BN_CLICKED(IDC_PLATFORM_COLLISION, OnChangeParam) + ON_EN_CHANGE(IDC_PLATFORM_TURNRATE, OnChangeParam) + ON_CBN_SELCHANGE(IDC_PLATFORM_TYPE, OnChangeParam) + ON_CBN_SELCHANGE(IDC_PLATFORM_MOVE_TYPE, OnChangeParam) //}}AFX_MSG_MAP END_MESSAGE_MAP() +///////////////////////////////////////////////////////////////////////////// +void CGUILayerPlatform::SetVal(CEdit &Dlg,int Val) +{ +CString Str; + if (!Dlg) return; + DisableCallback(true); + Str.Format("%i",Val); + Dlg.SetWindowText(Str); + DisableCallback(false); +} + +///////////////////////////////////////////////////////////////////////////// +int CGUILayerPlatform::GetVal(CEdit &Dlg) +{ +CString Str; +int Val=0; + if (!Dlg) return(0); + Dlg.GetWindowText(Str); + if (Str.GetLength()) + Val=atoi(Str); + return(Val); +} + ///////////////////////////////////////////////////////////////////////////// // CGUILayerPlatform message handlers + +void CGUILayerPlatform::OnChangeParam() {if (!CallbackFlag) theApp.GetCurrent()->GUIChanged();} diff --git a/Utils/MapEdit/GUILayerPlatform.h b/Utils/MapEdit/GUILayerPlatform.h index 201b445bf..1371e985a 100644 --- a/Utils/MapEdit/GUILayerPlatform.h +++ b/Utils/MapEdit/GUILayerPlatform.h @@ -19,7 +19,11 @@ public: // Dialog Data //{{AFX_DATA(CGUILayerPlatform) enum { IDD = IDD_LAYER_PLATFORM }; - // NOTE: the ClassWizard will add data members here + CComboBox m_Type; + CComboBox m_MoveList; + CButton m_Collision; + CEdit m_TurnRate; + CEdit m_Speed; //}}AFX_DATA @@ -31,11 +35,16 @@ public: //}}AFX_VIRTUAL // Implementation +public: + void DisableCallback(bool f) {CallbackFlag=f;} + void SetVal(CEdit &Dlg,int Number); + int GetVal(CEdit &Dlg); protected: + bool CallbackFlag; // Generated message map functions //{{AFX_MSG(CGUILayerPlatform) - // NOTE: the ClassWizard will add member functions here + afx_msg void OnChangeParam(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; diff --git a/Utils/MapEdit/GUILayerShade.cpp b/Utils/MapEdit/GUILayerShade.cpp index 7a72d5b29..614e750eb 100644 --- a/Utils/MapEdit/GUILayerShade.cpp +++ b/Utils/MapEdit/GUILayerShade.cpp @@ -36,6 +36,18 @@ void CGUILayerShade::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CGUILayerShade) + DDX_Control(pDX, IDC_LAYERSHADE_SPIN1, m_Spin1); + DDX_Control(pDX, IDC_LAYERSHADE_SPIN0, m_Spin0); + DDX_Control(pDX, IDC_LAYERSHADE_SCALE1, m_Scale1); + DDX_Control(pDX, IDC_LAYERSHADE_SCALE0, m_Scale0); + DDX_Control(pDX, IDC_LAYERSHADE_MOVE1, m_Move1); + DDX_Control(pDX, IDC_LAYERSHADE_MOVE0, m_Move0); + DDX_Control(pDX, IDC_LAYERSHADE_COLOR1, m_Color1); + DDX_Control(pDX, IDC_LAYERSHADE_COLOR0, m_Color0); + DDX_Control(pDX, IDC_LAYERSHADE_TRANS1, m_Trans1); + DDX_Control(pDX, IDC_LAYERSHADE_TRANS0, m_Trans0); + DDX_Control(pDX, IDC_LAYERSHADE_BACKGFX1, m_Gfx1); + DDX_Control(pDX, IDC_LAYERSHADE_BACKGFX0, m_Gfx0); DDX_Control(pDX, IDC_LAYERSHADE_EDITR0, m_R0); DDX_Control(pDX, IDC_LAYERSHADE_EDITG0, m_G0); DDX_Control(pDX, IDC_LAYERSHADE_EDITB0, m_B0); @@ -56,6 +68,7 @@ void CGUILayerShade::DoDataExchange(CDataExchange* pDX) BEGIN_MESSAGE_MAP(CGUILayerShade, CDialog) //{{AFX_MSG_MAP(CGUILayerShade) ON_EN_CHANGE(IDC_LAYERSHADE_EDITB0, OnChangeLayershadeEdit) + ON_CBN_SELCHANGE(IDC_LAYERSHADE_BACKGFX0, OnChangeParam) ON_EN_CHANGE(IDC_LAYERSHADE_EDITB1, OnChangeLayershadeEdit) ON_EN_CHANGE(IDC_LAYERSHADE_EDITG0, OnChangeLayershadeEdit) ON_EN_CHANGE(IDC_LAYERSHADE_EDITG1, OnChangeLayershadeEdit) @@ -68,6 +81,17 @@ BEGIN_MESSAGE_MAP(CGUILayerShade, CDialog) ON_EN_CHANGE(IDC_LAYERSHADE_EDITR2, OnChangeLayershadeEdit) ON_EN_CHANGE(IDC_LAYERSHADE_EDITR3, OnChangeLayershadeEdit) ON_EN_CHANGE(IDC_LAYERSHADE_COUNTEDIT, OnChangeLayershadeEdit) + ON_CBN_SELCHANGE(IDC_LAYERSHADE_BACKGFX1, OnChangeParam) + ON_BN_CLICKED(IDC_LAYERSHADE_COLOR0, OnChangeParam) + ON_BN_CLICKED(IDC_LAYERSHADE_COLOR1, OnChangeParam) + ON_BN_CLICKED(IDC_LAYERSHADE_MOVE0, OnChangeParam) + ON_BN_CLICKED(IDC_LAYERSHADE_MOVE1, OnChangeParam) + ON_BN_CLICKED(IDC_LAYERSHADE_SCALE0, OnChangeParam) + ON_BN_CLICKED(IDC_LAYERSHADE_SCALE1, OnChangeParam) + ON_BN_CLICKED(IDC_LAYERSHADE_SPIN0, OnChangeParam) + ON_BN_CLICKED(IDC_LAYERSHADE_SPIN1, OnChangeParam) + ON_CBN_SELCHANGE(IDC_LAYERSHADE_TRANS0, OnChangeParam) + ON_CBN_SELCHANGE(IDC_LAYERSHADE_TRANS1, OnChangeParam) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -183,3 +207,6 @@ void CGUILayerShade::OnChangeLayershadeEdit() theApp.GetCurrent()->GUIChanged(); } } + +void CGUILayerShade::OnChangeParam() {if (!SetFlag) theApp.GetCurrent()->GUIChanged();} + diff --git a/Utils/MapEdit/GUILayerShade.h b/Utils/MapEdit/GUILayerShade.h index be5cb3a17..79e996095 100644 --- a/Utils/MapEdit/GUILayerShade.h +++ b/Utils/MapEdit/GUILayerShade.h @@ -34,6 +34,18 @@ public: // Dialog Data //{{AFX_DATA(CGUILayerShade) enum { IDD = IDD_LAYER_SHADE }; + CButton m_Spin1; + CButton m_Spin0; + CButton m_Scale1; + CButton m_Scale0; + CButton m_Move1; + CButton m_Move0; + CButton m_Color1; + CButton m_Color0; + CComboBox m_Trans1; + CComboBox m_Trans0; + CComboBox m_Gfx1; + CComboBox m_Gfx0; CEdit m_R0; CEdit m_G0; CEdit m_B0; @@ -64,6 +76,7 @@ protected: // Generated message map functions //{{AFX_MSG(CGUILayerShade) afx_msg void OnChangeLayershadeEdit(); + afx_msg void OnChangeParam(); //}}AFX_MSG DECLARE_MESSAGE_MAP() bool SetFlag; diff --git a/Utils/MapEdit/GUILayerThing.cpp b/Utils/MapEdit/GUILayerThing.cpp index 5f08b4d66..fbafc64cb 100644 --- a/Utils/MapEdit/GUILayerThing.cpp +++ b/Utils/MapEdit/GUILayerThing.cpp @@ -5,12 +5,16 @@ #include "mapedit.h" #include "GUILayerThing.h" +#include "MapEditDoc.h" +#include "MainFrm.h" + #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif +///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// // CGUILayerThing dialog @@ -28,16 +32,27 @@ void CGUILayerThing::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CGUILayerThing) - // NOTE: the ClassWizard will add DDX and DDV calls here + DDX_Control(pDX, IDC_THING_LIST, m_List); + DDX_Control(pDX, IDC_DEF_THING_LIST, m_DefList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CGUILayerThing, CDialog) //{{AFX_MSG_MAP(CGUILayerThing) - // NOTE: the ClassWizard will add message map macros here + ON_BN_CLICKED(IDC_THING_DELETE, OnThingDelete) + ON_BN_CLICKED(IDC_THING_GOTO, OnThingGoto) + ON_CBN_SELCHANGE(IDC_DEF_THING_LIST, OnSelchangeDefThingList) + ON_CBN_SELCHANGE(IDC_THING_LIST, OnSelchangeThingList) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CGUILayerThing message handlers + +void CGUILayerThing::OnThingDelete() {theApp.GetCurrent()->Command(CmdMsg_ThingListDelete,m_List.GetCurSel());} +void CGUILayerThing::OnThingGoto() {theApp.GetCurrent()->Command(CmdMsg_ThingListGoto,m_List.GetCurSel());} +void CGUILayerThing::OnSelchangeDefThingList() {theApp.GetCurrent()->Command(CmdMsg_ThingListSelect,m_DefList.GetCurSel());} +void CGUILayerThing::OnSelchangeThingList() {theApp.GetCurrent()->Command(CmdMsg_ThingLevelSelect,m_List.GetCurSel());} + + diff --git a/Utils/MapEdit/GUILayerThing.h b/Utils/MapEdit/GUILayerThing.h index e39cca296..f9b6498e3 100644 --- a/Utils/MapEdit/GUILayerThing.h +++ b/Utils/MapEdit/GUILayerThing.h @@ -1,5 +1,5 @@ -#if !defined(AFX_GUILAYERTHING_H__2ADF47A2_1F6C_4AA5_8E36_528C50968C89__INCLUDED_) -#define AFX_GUILAYERTHING_H__2ADF47A2_1F6C_4AA5_8E36_528C50968C89__INCLUDED_ +#if !defined(AFX_GUILAYERTHING_H__BD4306D6_8C84_4589_B8A6_FE1C95C27018__INCLUDED_) +#define AFX_GUILAYERTHING_H__BD4306D6_8C84_4589_B8A6_FE1C95C27018__INCLUDED_ #if _MSC_VER > 1000 #pragma once @@ -19,7 +19,8 @@ public: // Dialog Data //{{AFX_DATA(CGUILayerThing) enum { IDD = IDD_LAYER_THING }; - // NOTE: the ClassWizard will add data members here + CComboBox m_List; + CComboBox m_DefList; //}}AFX_DATA @@ -35,12 +36,18 @@ protected: // Generated message map functions //{{AFX_MSG(CGUILayerThing) - // NOTE: the ClassWizard will add member functions here + afx_msg void OnThingDelete(); + afx_msg void OnThingGoto(); + afx_msg void OnSelchangeDefThingList(); + afx_msg void OnSelchangeThingList(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; + //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. -#endif // !defined(AFX_GUILAYERTHING_H__2ADF47A2_1F6C_4AA5_8E36_528C50968C89__INCLUDED_) + + +#endif // !defined(AFX_GUILAYERTHING_H__BD4306D6_8C84_4589_B8A6_FE1C95C27018__INCLUDED_) diff --git a/Utils/MapEdit/GUILayerTrigger.cpp b/Utils/MapEdit/GUILayerTrigger.cpp index f1f92d7e5..6dd4121a6 100644 --- a/Utils/MapEdit/GUILayerTrigger.cpp +++ b/Utils/MapEdit/GUILayerTrigger.cpp @@ -5,6 +5,9 @@ #include "mapedit.h" #include "GUILayerTrigger.h" +#include "MapEditDoc.h" +#include "MainFrm.h" + #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE @@ -18,9 +21,10 @@ static char THIS_FILE[] = __FILE__; CGUILayerTrigger::CGUILayerTrigger(CWnd* pParent /*=NULL*/) : CDialog(CGUILayerTrigger::IDD, pParent) { + DisableCallback(true); //{{AFX_DATA_INIT(CGUILayerTrigger) - // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT + DisableCallback(false); } @@ -28,16 +32,42 @@ void CGUILayerTrigger::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CGUILayerTrigger) - // NOTE: the ClassWizard will add DDX and DDV calls here + DDX_Control(pDX, IDC_TRIGGER_WIDTH, m_Width); + DDX_Control(pDX, IDC_TRIGGER_HEIGHT, m_Height); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CGUILayerTrigger, CDialog) //{{AFX_MSG_MAP(CGUILayerTrigger) - // NOTE: the ClassWizard will add message map macros here + ON_EN_CHANGE(IDC_TRIGGER_HEIGHT, OnParamChange) + ON_EN_CHANGE(IDC_TRIGGER_WIDTH, OnParamChange) //}}AFX_MSG_MAP END_MESSAGE_MAP() +///////////////////////////////////////////////////////////////////////////// +void CGUILayerTrigger::SetVal(CEdit &Dlg,int Val) +{ +CString Str; + if (!Dlg) return; + DisableCallback(true); + Str.Format("%i",Val); + Dlg.SetWindowText(Str); + DisableCallback(false); +} + +///////////////////////////////////////////////////////////////////////////// +int CGUILayerTrigger::GetVal(CEdit &Dlg) +{ +CString Str; +int Val=0; + if (!Dlg) return(0); + Dlg.GetWindowText(Str); + if (Str.GetLength()) + Val=atoi(Str); + return(Val); +} ///////////////////////////////////////////////////////////////////////////// // CGUILayerTrigger message handlers + +void CGUILayerTrigger::OnParamChange() {if (!CallbackFlag) theApp.GetCurrent()->GUIChanged();} diff --git a/Utils/MapEdit/GUILayerTrigger.h b/Utils/MapEdit/GUILayerTrigger.h index a08fd9d0d..df496fff0 100644 --- a/Utils/MapEdit/GUILayerTrigger.h +++ b/Utils/MapEdit/GUILayerTrigger.h @@ -19,7 +19,8 @@ public: // Dialog Data //{{AFX_DATA(CGUILayerTrigger) enum { IDD = IDD_LAYER_TRIGGER }; - // NOTE: the ClassWizard will add data members here + CEdit m_Width; + CEdit m_Height; //}}AFX_DATA @@ -31,11 +32,18 @@ public: //}}AFX_VIRTUAL // Implementation + +public: + void DisableCallback(bool f) {CallbackFlag=f;} + void SetVal(CEdit &Dlg,int Number); + int GetVal(CEdit &Dlg); protected: + bool CallbackFlag; // Generated message map functions //{{AFX_MSG(CGUILayerTrigger) - // NOTE: the ClassWizard will add member functions here + afx_msg void OnSelchangeTriggerType(); + afx_msg void OnParamChange(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; diff --git a/Utils/MapEdit/GUIMultibar.h b/Utils/MapEdit/GUIMultibar.h index 82ae79a3e..878b9cf28 100644 --- a/Utils/MapEdit/GUIMultibar.h +++ b/Utils/MapEdit/GUIMultibar.h @@ -62,6 +62,7 @@ virtual CSize CalcDynamicLayout( int nLength, DWORD dwMode ); + // Dialog Data //{{AFX_DATA(CGUIMultiBar) enum { IDD = IDD_MULTIBAR }; diff --git a/Utils/MapEdit/GuiLayerThingPos.cpp b/Utils/MapEdit/GuiLayerThingPos.cpp index 21974a22e..637e3fda3 100644 --- a/Utils/MapEdit/GuiLayerThingPos.cpp +++ b/Utils/MapEdit/GuiLayerThingPos.cpp @@ -5,6 +5,9 @@ #include "mapedit.h" #include "GuiLayerThingPos.h" +#include "MapEditDoc.h" +#include "MainFrm.h" + #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE @@ -28,16 +31,24 @@ void CGuiLayerThingPos::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CGuiLayerThingPos) - // NOTE: the ClassWizard will add DDX and DDV calls here + DDX_Control(pDX, IDC_THING_POS_LIST, m_List); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CGuiLayerThingPos, CDialog) //{{AFX_MSG_MAP(CGuiLayerThingPos) - // NOTE: the ClassWizard will add message map macros here + ON_LBN_SELCHANGE(IDC_THING_POS_LIST, OnSelchangeThingPosList) + ON_BN_CLICKED(IDC_THING_POS_UP, OnThingPosUp) + ON_BN_CLICKED(IDC_THING_POS_DOWN, OnThingPosDown) + ON_BN_CLICKED(IDC_THING_POS_DELETE, OnThingPosDelete) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CGuiLayerThingPos message handlers + +void CGuiLayerThingPos::OnSelchangeThingPosList() {theApp.GetCurrent()->Command(CmdMsg_ThingPosSelect,m_List.GetCurSel());} +void CGuiLayerThingPos::OnThingPosUp() {theApp.GetCurrent()->Command(CmdMsg_ThingPosUp,m_List.GetCurSel());} +void CGuiLayerThingPos::OnThingPosDown() {theApp.GetCurrent()->Command(CmdMsg_ThingPosDown,m_List.GetCurSel());} +void CGuiLayerThingPos::OnThingPosDelete() {theApp.GetCurrent()->Command(CmdMsg_ThingPosDelete,m_List.GetCurSel());} diff --git a/Utils/MapEdit/GuiLayerThingPos.h b/Utils/MapEdit/GuiLayerThingPos.h index 96ebf8d0c..f8cfd6ebd 100644 --- a/Utils/MapEdit/GuiLayerThingPos.h +++ b/Utils/MapEdit/GuiLayerThingPos.h @@ -19,7 +19,7 @@ public: // Dialog Data //{{AFX_DATA(CGuiLayerThingPos) enum { IDD = IDD_LAYER_THING_POS }; - // NOTE: the ClassWizard will add data members here + CListBox m_List; //}}AFX_DATA @@ -35,7 +35,10 @@ protected: // Generated message map functions //{{AFX_MSG(CGuiLayerThingPos) - // NOTE: the ClassWizard will add member functions here + afx_msg void OnSelchangeThingPosList(); + afx_msg void OnThingPosUp(); + afx_msg void OnThingPosDown(); + afx_msg void OnThingPosDelete(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; diff --git a/Utils/MapEdit/Layer.cpp b/Utils/MapEdit/Layer.cpp index cb3332b9d..d237d44a5 100644 --- a/Utils/MapEdit/Layer.cpp +++ b/Utils/MapEdit/Layer.cpp @@ -24,6 +24,8 @@ #include "LayerActor.h" #include "LayerItem.h" #include "LayerPlatform.h" +#include "LayerTrigger.h" +#include "LayerFX.h" #include "LayerDef.h" #include "Utils.h" @@ -41,6 +43,8 @@ sLayerInfoTable CLayer::InfoTable[]= {LAYER_TYPE_ACTOR, LAYER_SUBTYPE_NONE, "Actor", true, 1.0f, false, true, true, LAYER_SUBVIEW_NONE,}, {LAYER_TYPE_ITEM, LAYER_SUBTYPE_NONE, "Item", true, 1.0f, false, true, true, LAYER_SUBVIEW_NONE,}, {LAYER_TYPE_PLATFORM, LAYER_SUBTYPE_NONE, "Platform", true, 1.0f, false, true, true, LAYER_SUBVIEW_NONE,}, + {LAYER_TYPE_TRIGGER, LAYER_SUBTYPE_NONE, "Trigger", true, 1.0f, false, true, true, LAYER_SUBVIEW_NONE,}, + {LAYER_TYPE_FX, LAYER_SUBTYPE_NONE, "FX", true, 1.0f, false, true, true, LAYER_SUBVIEW_NONE,}, }; int CLayer::InfoTableSize=sizeof(InfoTable)/sizeof(sLayerInfoTable); @@ -90,6 +94,12 @@ CLayer *New; case LAYER_TYPE_PLATFORM: New=new CLayerPlatform(Def); break; + case LAYER_TYPE_TRIGGER: + New=new CLayerTrigger(Def); + break; + case LAYER_TYPE_FX: + New=new CLayerFX(Def); + break; default: ASSERT(!"Unknown Layer"); } @@ -124,6 +134,12 @@ CLayer *New; case LAYER_TYPE_PLATFORM: New=new CLayerPlatform(File,Version); break; + case LAYER_TYPE_TRIGGER: + New=new CLayerTrigger(File,Version); + break; + case LAYER_TYPE_FX: + New=new CLayerFX(File,Version); + break; default: ASSERT(!"Unknown Layer"); } @@ -232,7 +248,7 @@ 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; diff --git a/Utils/MapEdit/LayerActor.cpp b/Utils/MapEdit/LayerActor.cpp index fa42b4c83..1b7b22696 100644 --- a/Utils/MapEdit/LayerActor.cpp +++ b/Utils/MapEdit/LayerActor.cpp @@ -45,22 +45,26 @@ void CLayerActor::InitSubView(CCore *Core) /*****************************************************************************/ void CLayerActor::GUIInit(CCore *Core) { - GUI.DisableCallback(true); - Core->GUIAdd(GUI,IDD_LAYER_ACTOR); - GUI.DisableCallback(false); + GUIActor.DisableCallback(true); + Core->GUIAdd(GUIThing,IDD_LAYER_THING); + Core->GUIAdd(GUIThingPos,IDD_LAYER_THING_POS); + Core->GUIAdd(GUIActor,IDD_LAYER_ACTOR); + GUIActor.DisableCallback(false); } /*****************************************************************************/ void CLayerActor::GUIKill(CCore *Core) { - Core->GUIRemove(GUI,IDD_LAYER_ACTOR); + Core->GUIRemove(GUIThing,IDD_LAYER_THING); + Core->GUIRemove(GUIThingPos,IDD_LAYER_THING_POS); + Core->GUIRemove(GUIActor,IDD_LAYER_ACTOR); } /*****************************************************************************/ void CLayerActor::GUIUpdate(CCore *Core) { int i,ListSize; -CComboBox &List=GUI.m_List; +CComboBox &List=GUIThing.m_DefList; // Setup Def Actor List ListSize=DefList.size(); @@ -77,7 +81,7 @@ CComboBox &List=GUI.m_List; /*****************************************************************************/ void CLayerActor::GUIThingDefClear() { -CComboBox &List=GUI.m_List; +CComboBox &List=GUIThing.m_DefList; CurrentDefThing=-1; List.SetCurSel(CurrentDefThing); } @@ -85,35 +89,35 @@ CComboBox &List=GUI.m_List; /*****************************************************************************/ void CLayerActor::GUIThingUpdate(bool OnlySel) { - GUIThingUpdateList(GUI.m_LevelList,false); + GUIThingUpdateList(GUIThing.m_List,false); // Params - GUI.DisableCallback(true); + GUIActor.DisableCallback(true); if (CurrentThing!=-1) { sLayerThing &ThisThing=ThingList[CurrentThing]; - GUI.SetVal(GUI.m_Speed,ThisThing.Data.Speed); - GUI.SetVal(GUI.m_TurnRate,ThisThing.Data.TurnRate); - GUI.SetVal(GUI.m_Health,ThisThing.Data.Health); - GUI.SetVal(GUI.m_Attack,ThisThing.Data.AttackStrength); - GUI.m_Collision.SetCheck(ThisThing.Data.CollisionFlag); - GUI.m_Player.SetCheck(ThisThing.Data.PlayerFlag); + GUIActor.SetVal(GUIActor.m_Speed,ThisThing.Data.Speed); + GUIActor.SetVal(GUIActor.m_TurnRate,ThisThing.Data.TurnRate); + GUIActor.SetVal(GUIActor.m_Health,ThisThing.Data.Health); + GUIActor.SetVal(GUIActor.m_Attack,ThisThing.Data.AttackStrength); + GUIActor.m_Collision.SetCheck(ThisThing.Data.CollisionFlag); + GUIActor.m_Player.SetCheck(ThisThing.Data.PlayerFlag); } else { - GUI.m_Speed.SetWindowText(""); - GUI.m_TurnRate.SetWindowText(""); - GUI.m_Health.SetWindowText(""); - GUI.m_Attack.SetWindowText(""); - GUI.m_Collision.SetCheck(false); - GUI.m_Player.SetCheck(false); + GUIActor.m_Speed.SetWindowText(""); + GUIActor.m_TurnRate.SetWindowText(""); + GUIActor.m_Health.SetWindowText(""); + GUIActor.m_Attack.SetWindowText(""); + GUIActor.m_Collision.SetCheck(false); + GUIActor.m_Player.SetCheck(false); } - GUI.DisableCallback(false); + GUIActor.DisableCallback(false); } /*****************************************************************************/ void CLayerActor::GUIThingPointUpdate(bool OnlySel) { - GUIThingPointUpdateList(GUI.m_PosList,OnlySel); + GUIThingPointUpdateList(GUIThingPos.m_List,OnlySel); } /*****************************************************************************/ @@ -122,12 +126,12 @@ void CLayerActor::GUIChanged(CCore *Core) if (CurrentThing!=-1) { sLayerThing &ThisThing=ThingList[CurrentThing]; - ThisThing.Data.Speed=GUI.GetVal(GUI.m_Speed); - ThisThing.Data.TurnRate=GUI.GetVal(GUI.m_TurnRate); - ThisThing.Data.Health=GUI.GetVal(GUI.m_Health); - ThisThing.Data.AttackStrength=GUI.GetVal(GUI.m_Attack); - ThisThing.Data.CollisionFlag=GUI.m_Collision.GetCheck()!=0; - ThisThing.Data.PlayerFlag=GUI.m_Player.GetCheck()!=0; + ThisThing.Data.Speed=GUIActor.GetVal(GUIActor.m_Speed); + ThisThing.Data.TurnRate=GUIActor.GetVal(GUIActor.m_TurnRate); + ThisThing.Data.Health=GUIActor.GetVal(GUIActor.m_Health); + ThisThing.Data.AttackStrength=GUIActor.GetVal(GUIActor.m_Attack); + ThisThing.Data.CollisionFlag=GUIActor.m_Collision.GetCheck()!=0; + ThisThing.Data.PlayerFlag=GUIActor.m_Player.GetCheck()!=0; } } diff --git a/Utils/MapEdit/LayerActor.h b/Utils/MapEdit/LayerActor.h index 4d74c76a0..112174a85 100644 --- a/Utils/MapEdit/LayerActor.h +++ b/Utils/MapEdit/LayerActor.h @@ -32,7 +32,7 @@ public: void GUIThingPointUpdate(bool OnlySel=false); protected: - CGUILayerActor GUI; + CGUILayerActor GUIActor; }; diff --git a/Utils/MapEdit/LayerDef.h b/Utils/MapEdit/LayerDef.h index 4fcadcdc8..aa33b7315 100644 --- a/Utils/MapEdit/LayerDef.h +++ b/Utils/MapEdit/LayerDef.h @@ -17,6 +17,8 @@ enum LAYER_TYPE LAYER_TYPE_ACTOR, LAYER_TYPE_ITEM, LAYER_TYPE_PLATFORM, + LAYER_TYPE_TRIGGER, + LAYER_TYPE_FX, LAYER_TYPE_MAX }; diff --git a/Utils/MapEdit/LayerFX.cpp b/Utils/MapEdit/LayerFX.cpp index dc392a416..17659b9ce 100644 --- a/Utils/MapEdit/LayerFX.cpp +++ b/Utils/MapEdit/LayerFX.cpp @@ -1,6 +1,6 @@ -/**********************/ -/*** Layer Platform ***/ -/**********************/ +/****************/ +/*** Layer FX ***/ +/****************/ #include "stdafx.h" #include @@ -15,74 +15,120 @@ #include "Core.h" #include "LayerThing.h" -#include "LayerPlatform.h" +#include "LayerFX.h" #include "Utils.h" #include "Export.h" /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ -CLayerPlatform::CLayerPlatform(sLayerDef &Def) +CLayerFX::CLayerFX(sLayerDef &Def) { InitLayer(Def); } /*****************************************************************************/ -void CLayerPlatform::InitLayer(sLayerDef &Def) +void CLayerFX::InitLayer(sLayerDef &Def) { ThingBank=new CElemBank(-1,-1,false,CElem::CentreModeLR | CElem::CentreModeB); CLayerThing::InitLayer(Def); - LoadThingScript(theApp.GetConfigStr("LayerScript","PlatformScript")); + LoadThingScript(theApp.GetConfigStr("LayerScript","FXScript")); } /*****************************************************************************/ -void CLayerPlatform::InitSubView(CCore *Core) +void CLayerFX::InitSubView(CCore *Core) { } +/*****************************************************************************/ +void CLayerFX::RenderThing(CCore *Core,Vector3 &ThisCam,sLayerThing &ThisThing,bool Render3d,bool Selected) +{ +float ZoomW=Core->GetZoomW(); +float ZoomH=Core->GetZoomH(); +Vector3 &Scale=Core->GetScaleVector(); +Vector3 ScrOfs(ZoomW/2,ZoomH/2,0); +float Col=0.8f,A=0.8f; + + glColor4f(1,1,1,0.8f); + if (Selected) + { + Col=1.0f; + A=0.8f; + glColor4f(1,1,1,1.0f); // For number + } + + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + + glLoadIdentity(); + + glScalef(Scale.x,Scale.y,Scale.z); + glTranslatef(-ThisCam.x,ThisCam.y,0); // Set scroll offset + glTranslatef(-ScrOfs.x,ScrOfs.y,0); // Bring to top left corner + + glTranslatef(ThisThing.XY[0].x,-ThisThing.XY[0].y,0); // Set Pos + + Core->RenderNumber(0); + glEnable(GL_DEPTH_TEST); + +float W=(ThisThing.Data.Width); +float H=-(ThisThing.Data.Height); +// Draw Box + glBegin (GL_QUADS); + glColor4f(0,0,Col-0.25f,A); + glVertex3f(0,0+1,0); + glVertex3f(W,0+1,0); + glVertex3f(W,H+1,0); + glVertex3f(0,H+1,0); + glEnd(); +// Draw OutLine + glBegin(GL_LINES); + glColor4f(Col,Col,Col,A); + + glVertex3f( 0,0+1,0); + glVertex3f( W,0+1,0); + + glVertex3f( W,0+1,0); + glVertex3f( W,H+1,0); + + glVertex3f( W,H+1,0); + glVertex3f( 0,H+1,0); + + glVertex3f( 0,H+1,0); + glVertex3f( 0,0+1,0); + + glEnd(); + + glDisable(GL_DEPTH_TEST); + + glPopMatrix(); +} + /*****************************************************************************/ /*** Gui *********************************************************************/ /*****************************************************************************/ -void CLayerPlatform::GUIInit(CCore *Core) +void CLayerFX::GUIInit(CCore *Core) { - GUIPlatform.DisableCallback(true); + GUIFX.DisableCallback(true); Core->GUIAdd(GUIThing,IDD_LAYER_THING); - Core->GUIAdd(GUIThingPos,IDD_LAYER_THING_POS); - Core->GUIAdd(GUIPlatform,IDD_LAYER_PLATFORM); - GUIPlatform.DisableCallback(false); - -// Init type lists - { -CComboBox &List=GUIPlatform.m_MoveList; - List.AddString("Linear"); - List.AddString("Circular"); - } - - { -CComboBox &List=GUIPlatform.m_Type; - List.AddString("Normal"); - List.AddString("Weighted"); - List.AddString("Rotating"); - } - - + Core->GUIAdd(GUIFX,IDD_LAYER_FX); + GUIFX.DisableCallback(false); } /*****************************************************************************/ -void CLayerPlatform::GUIKill(CCore *Core) +void CLayerFX::GUIKill(CCore *Core) { Core->GUIRemove(GUIThing,IDD_LAYER_THING); - Core->GUIRemove(GUIThingPos,IDD_LAYER_THING_POS); - Core->GUIRemove(GUIPlatform,IDD_LAYER_PLATFORM); + Core->GUIRemove(GUIFX,IDD_LAYER_FX); } /*****************************************************************************/ -void CLayerPlatform::GUIUpdate(CCore *Core) +void CLayerFX::GUIUpdate(CCore *Core) { int i,ListSize; CComboBox &List=GUIThing.m_DefList; -// Setup Def Platform List +// Setup Def FX List ListSize=DefList.size(); List.ResetContent(); for (i=0; iGUIAdd(GUI,IDD_LAYER_ITEM); -// GUI.DisableCallback(false); + Core->GUIAdd(GUIThing,IDD_LAYER_THING); } /*****************************************************************************/ void CLayerItem::GUIKill(CCore *Core) { - Core->GUIRemove(GUI,IDD_LAYER_ITEM); + Core->GUIRemove(GUIThing,IDD_LAYER_THING); } /*****************************************************************************/ void CLayerItem::GUIUpdate(CCore *Core) { int i,ListSize; -CComboBox &List=GUI.m_List; +CComboBox &List=GUIThing.m_DefList; // Setup Def Item List ListSize=DefList.size(); @@ -74,21 +72,24 @@ CComboBox &List=GUI.m_List; List.SetCurSel(CurrentDefThing); // GUIThingUpdate(); + } /*****************************************************************************/ void CLayerItem::GUIThingDefClear() { -CComboBox &List=GUI.m_List; + +CComboBox &List=GUIThing.m_DefList; CurrentDefThing=-1; List.SetCurSel(CurrentDefThing); + } /*****************************************************************************/ void CLayerItem::GUIThingUpdate(bool OnlySel) { int i,ListSize; -CComboBox &List=GUI.m_LevelList; +CComboBox &List=GUIThing.m_List; if (OnlySel) { diff --git a/Utils/MapEdit/LayerItem.h b/Utils/MapEdit/LayerItem.h index d5a07a9a9..3c4113f3a 100644 --- a/Utils/MapEdit/LayerItem.h +++ b/Utils/MapEdit/LayerItem.h @@ -8,7 +8,6 @@ #include "LayerThing.h" #include "Layer.h" #include "MapEdit.h" -#include "GUILayerItem.h" #include "Elem.h" /*****************************************************************************/ @@ -31,7 +30,6 @@ public: void GUIThingUpdate(bool OnlySel=false); protected: - CGUILayerItem GUI; }; diff --git a/Utils/MapEdit/LayerPlatform.cpp b/Utils/MapEdit/LayerPlatform.cpp index fa78fea01..502442d3b 100644 --- a/Utils/MapEdit/LayerPlatform.cpp +++ b/Utils/MapEdit/LayerPlatform.cpp @@ -30,7 +30,7 @@ CLayerPlatform::CLayerPlatform(sLayerDef &Def) /*****************************************************************************/ void CLayerPlatform::InitLayer(sLayerDef &Def) { - ThingBank=new CElemBank(-1,-1,false,0); + ThingBank=new CElemBank(-1,-1,false,CElem::CentreModeLR /*| CElem::CentreModeB*/); CLayerThing::InitLayer(Def); LoadThingScript(theApp.GetConfigStr("LayerScript","PlatformScript")); } @@ -45,23 +45,42 @@ void CLayerPlatform::InitSubView(CCore *Core) /*****************************************************************************/ void CLayerPlatform::GUIInit(CCore *Core) { -// GUI.DisableCallback(true); -// Core->GUIAdd(GUI,IDD_LAYER_Platform); -// GUI.DisableCallback(false); + GUIPlatform.DisableCallback(true); + Core->GUIAdd(GUIThing,IDD_LAYER_THING); + Core->GUIAdd(GUIThingPos,IDD_LAYER_THING_POS); + Core->GUIAdd(GUIPlatform,IDD_LAYER_PLATFORM); + GUIPlatform.DisableCallback(false); + +// Init type lists + { +CComboBox &List=GUIPlatform.m_MoveList; + List.AddString("Linear"); + List.AddString("Circular"); + } + + { +CComboBox &List=GUIPlatform.m_Type; + List.AddString("Normal"); + List.AddString("Weighted"); + List.AddString("Rotating"); + } + + } /*****************************************************************************/ void CLayerPlatform::GUIKill(CCore *Core) { -// Core->GUIRemove(GUI,IDD_LAYER_Platform); + Core->GUIRemove(GUIThing,IDD_LAYER_THING); + Core->GUIRemove(GUIThingPos,IDD_LAYER_THING_POS); + Core->GUIRemove(GUIPlatform,IDD_LAYER_PLATFORM); } /*****************************************************************************/ void CLayerPlatform::GUIUpdate(CCore *Core) { -/* int i,ListSize; -CComboBox &List=GUI.m_List; +CComboBox &List=GUIThing.m_DefList; // Setup Def Platform List ListSize=DefList.size(); @@ -73,66 +92,79 @@ CComboBox &List=GUI.m_List; List.SetCurSel(CurrentDefThing); GUIThingUpdate(); -*/ } /*****************************************************************************/ void CLayerPlatform::GUIThingDefClear() { -/* -CComboBox &List=GUI.m_List; +CComboBox &List=GUIThing.m_DefList; CurrentDefThing=-1; List.SetCurSel(CurrentDefThing); -*/ } /*****************************************************************************/ void CLayerPlatform::GUIThingUpdate(bool OnlySel) { -// CLayerThing::GUIThingUpdateList(GUI. + GUIThingUpdateList(GUIThing.m_List,false); +// Params + GUIPlatform.DisableCallback(true); + if (CurrentThing!=-1) + { + sLayerThing &ThisThing=ThingList[CurrentThing]; + GUIPlatform.SetVal(GUIPlatform.m_Speed,ThisThing.Data.Speed); + GUIPlatform.SetVal(GUIPlatform.m_TurnRate,ThisThing.Data.TurnRate); + GUIPlatform.m_Collision.SetCheck(ThisThing.Data.CollisionFlag); + GUIPlatform.m_MoveList.SetCurSel(ThisThing.Data.MoveType); + GUIPlatform.m_Type.SetCurSel(ThisThing.Data.PlatformType); + } + else + { + GUIPlatform.m_Speed.SetWindowText(""); + GUIPlatform.m_TurnRate.SetWindowText(""); + GUIPlatform.m_Collision.SetCheck(false); + GUIPlatform.m_MoveList.SetCurSel(-1); + GUIPlatform.m_Type.SetCurSel(-1); + } + GUIPlatform.DisableCallback(false); } /*****************************************************************************/ void CLayerPlatform::GUIThingPointUpdate(bool OnlySel) { -/* -int i,ListSize; -sLayerThing &ThisThing=ThingList[CurrentThing]; -CListBox &List=GUI.m_PosList; - - List.ResetContent(); - if (CurrentThing==-1) - { - } - else - { -// Setup ThingPointList - ListSize=ThisThing.XY.size(); - for (i=0; i2) + { + Thing.XY.resize(2); + GUIThingPointUpdate(); + } + + break; + } +} diff --git a/Utils/MapEdit/LayerPlatform.h b/Utils/MapEdit/LayerPlatform.h index 6315842c7..e40248f04 100644 --- a/Utils/MapEdit/LayerPlatform.h +++ b/Utils/MapEdit/LayerPlatform.h @@ -8,13 +8,20 @@ #include "LayerThing.h" #include "Layer.h" #include "MapEdit.h" -//#include "GUILayerPlatform.h" +#include "GUILayerPlatform.h" #include "Elem.h" /*****************************************************************************/ class CLayerPlatform : public CLayerThing { public: + enum + { + MoveTypeLinear=0, + MoveTypeCirular + + }; + CLayerPlatform(sLayerDef &Def); CLayerPlatform(CFile *File,int Version) {Load(File,Version);} @@ -31,8 +38,11 @@ public: void GUIThingUpdate(bool OnlySel=false); void GUIThingPointUpdate(bool OnlySel=false); + protected: -// CGUILayerPlatform GUI; + void SetThingParams(sLayerThing &Thing); + + CGUILayerPlatform GUIPlatform; }; diff --git a/Utils/MapEdit/LayerShade.cpp b/Utils/MapEdit/LayerShade.cpp index 863ee6351..00e867379 100644 --- a/Utils/MapEdit/LayerShade.cpp +++ b/Utils/MapEdit/LayerShade.cpp @@ -30,6 +30,25 @@ CLayerShade::CLayerShade(sLayerDef &Def) { InitLayer(Def); +// Load script (messy) +GString ExecPath; +GString ScriptName; + + GetExecPath(ExecPath); + ScriptName=ExecPath+theApp.GetConfigStr("LayerScript","BackGfxScript"); + Script.LoadAndImport(ScriptName); + +int i,ListSize=Script.GetGroupCount(); + BackGfx.resize(ListSize); + + for (i=0; iRead(&Pos[i],sizeof(int)); File->Read(&RGB[i],sizeof(RGBQUAD)); } + if (Version>=7) + { + File->Read(&Back0,sizeof(int)); + File->Read(&Back1,sizeof(int)); + } + if (Version>=8) + { + File->Read(&TransMode0,sizeof(int)); + File->Read(&Flags0,sizeof(int)); + File->Read(&TransMode1,sizeof(int)); + File->Read(&Flags1,sizeof(int)); + } } @@ -88,7 +119,12 @@ void CLayerShade::Save(CFile *File) File->Write(&Pos[i],sizeof(int)); File->Write(&RGB[i],sizeof(RGBQUAD)); } - + File->Write(&Back0,sizeof(int)); + File->Write(&Back1,sizeof(int)); + File->Write(&TransMode0,sizeof(int)); + File->Write(&Flags0,sizeof(int)); + File->Write(&TransMode1,sizeof(int)); + File->Write(&Flags1,sizeof(int)); } /*****************************************************************************/ @@ -152,6 +188,50 @@ void CLayerShade::GUIInit(CCore *Core) GUI.SetRGB(RGB[i],i); } GUI.SetCount(Count); + InitGfxList(); + + if (Flags0 & SpinFlag) GUI.m_Spin0.SetCheck(true); + if (Flags0 & ScaleFlag) GUI.m_Scale0.SetCheck(true); + if (Flags0 & MoveFlag) GUI.m_Move0.SetCheck(true); + if (Flags0 & ColorFlag) GUI.m_Color0.SetCheck(true); + + if (Flags1 & SpinFlag) GUI.m_Spin1.SetCheck(true); + if (Flags1 & ScaleFlag) GUI.m_Scale1.SetCheck(true); + if (Flags1 & MoveFlag) GUI.m_Move1.SetCheck(true); + if (Flags1 & ColorFlag) GUI.m_Color1.SetCheck(true); + + GUI.m_Trans0.ResetContent(); + GUI.m_Trans0.AddString("Normal"); + GUI.m_Trans0.AddString("50%"); + GUI.m_Trans0.AddString("Subtractive"); + GUI.m_Trans0.AddString("Another one"); + GUI.m_Trans0.SetCurSel(TransMode0); + + GUI.m_Trans1.ResetContent(); + GUI.m_Trans1.AddString("Normal"); + GUI.m_Trans1.AddString("50%"); + GUI.m_Trans1.AddString("Subtractive"); + GUI.m_Trans1.AddString("Another one"); + GUI.m_Trans1.SetCurSel(TransMode1); + +} + +/*****************************************************************************/ +void CLayerShade::InitGfxList() +{ +int i,ListSize=BackGfx.size(); +CComboBox &List0=GUI.m_Gfx0; +CComboBox &List1=GUI.m_Gfx1; + + List0.ResetContent(); + List1.ResetContent(); + for (i=0; i BackGfx; + int Back0,Back1; + int TransMode0,TransMode1; + int Flags0,Flags1; int Count; int Pos[LAYER_SHADE_RGB_MAX]; RGBQUAD RGB[LAYER_SHADE_RGB_MAX]; + }; /*****************************************************************************/ diff --git a/Utils/MapEdit/LayerThing.cpp b/Utils/MapEdit/LayerThing.cpp index 5be8711aa..e299a57c5 100644 --- a/Utils/MapEdit/LayerThing.cpp +++ b/Utils/MapEdit/LayerThing.cpp @@ -70,10 +70,6 @@ int i,ListSize; } LoadThingNames(File,Version); -// CurrentDefThing=-1; -// CurrentThing=-1; -// CurrentThingPoint=-1; - } /*****************************************************************************/ @@ -180,8 +176,9 @@ int i,ListSize=ThingScript.GetGroupCount(); char *Name=ThingScript.GetGroupName(i); char *Gfx=ThingScript.GetStr(Name,"gfx"); + memset(&ThisDef.Data,0,sizeof(sLayerThingData)); ThisDef.Name=Name; - ThisDef.Data.WaypointFlag=ThingScript.GetInt(Name,"WayPoints")==1; + ThisDef.Data.WaypointCount=ThingScript.GetInt(Name,"WayPoints"); ThisDef.Data.Speed=ThingScript.GetInt(Name,"Speed"); ThisDef.Data.TurnRate=ThingScript.GetInt(Name,"TurnRate"); ThisDef.Data.Health=ThingScript.GetInt(Name,"Health"); @@ -197,10 +194,6 @@ int i,ListSize=ThingScript.GetGroupCount(); GFName::makeabsolute(ExecPath,Gfx,Filename); ThisDef.ElemID=ThingBank->AddSet(Filename); } - else - { - TRACE1("BAD %s\n",Name); - } } @@ -429,6 +422,9 @@ bool Ret=false; case CmdMsg_ThingListDelete: DeleteThing(); break; + case CmdMsg_ThingListGoto: + GotoThing(Core); + break; case CmdMsg_ThingListSelect: CurrentDefThing=Param0; SetCursor(DefList[CurrentDefThing].Name); @@ -535,6 +531,7 @@ void CLayerThing::AddThing(CPoint &Pos) sLayerThing &ThisThing=ThingList[CurrentThing]; ThisThing=Cursor; + SetThingParams(ThisThing); SelectThing(CurrentThing); GUIThingDefClear(); } @@ -554,17 +551,9 @@ int CLayerThing::SelectThing(int Idx) CurrentThingPoint=0; if (CurrentThing!=-1) { - sLayerThing &ThisThing=ThingList[CurrentThing]; - if (ThisThing.Data.WaypointFlag) - { - Mode=MouseModePoints; - } - else - { - Mode=MouseModeNormal; - } - GUIThingUpdate(); - GUIThingPointUpdate(); + Mode=MouseModePoints; + GUIThingUpdate(); + GUIThingPointUpdate(); } return(CurrentThing); } @@ -579,6 +568,14 @@ void CLayerThing::DeleteThing() GUIThingUpdate(); } +/*****************************************************************************/ +void CLayerThing::GotoThing(CCore *Core) +{ + if (CurrentThing==-1) return; +sLayerThing &ThisThing=ThingList[CurrentThing]; + + Core->SetCamPos(ThisThing.XY[0]); +} /*****************************************************************************/ /*****************************************************************************/ @@ -612,8 +609,9 @@ int StartIdx=0; /*****************************************************************************/ void CLayerThing::AddThingPoint(CPoint &Pos) { - TRACE1("ADDTHINGPOINT %i\n",CurrentThingPoint); + TRACE1("ADDTHINGPOINT %i\n",CurrentThingPoint); if (Pos.x==-1 || Pos.y==-1) return; // Off Map? + CurrentThingPoint=SelectThingPoint(Pos); if (CurrentThingPoint!=-1) @@ -623,11 +621,16 @@ void CLayerThing::AddThingPoint(CPoint &Pos) } sLayerThing &ThisThing=ThingList[CurrentThing]; - CurrentThingPoint=ThisThing.XY.size(); - ThisThing.XY.resize(CurrentThingPoint+1); - ThisThing.XY[CurrentThingPoint]=Pos; - TRACE0("Add Point\n"); - GUIThingPointUpdate(); + int PntCount=ThisThing.XY.size(); + if (PntCount @@ -15,74 +15,120 @@ #include "Core.h" #include "LayerThing.h" -#include "LayerPlatform.h" +#include "LayerTrigger.h" #include "Utils.h" #include "Export.h" /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ -CLayerPlatform::CLayerPlatform(sLayerDef &Def) +CLayerTrigger::CLayerTrigger(sLayerDef &Def) { InitLayer(Def); } /*****************************************************************************/ -void CLayerPlatform::InitLayer(sLayerDef &Def) +void CLayerTrigger::InitLayer(sLayerDef &Def) { ThingBank=new CElemBank(-1,-1,false,CElem::CentreModeLR | CElem::CentreModeB); CLayerThing::InitLayer(Def); - LoadThingScript(theApp.GetConfigStr("LayerScript","PlatformScript")); + LoadThingScript(theApp.GetConfigStr("LayerScript","TriggerScript")); } /*****************************************************************************/ -void CLayerPlatform::InitSubView(CCore *Core) +void CLayerTrigger::InitSubView(CCore *Core) { } +/*****************************************************************************/ +void CLayerTrigger::RenderThing(CCore *Core,Vector3 &ThisCam,sLayerThing &ThisThing,bool Render3d,bool Selected) +{ +float ZoomW=Core->GetZoomW(); +float ZoomH=Core->GetZoomH(); +Vector3 &Scale=Core->GetScaleVector(); +Vector3 ScrOfs(ZoomW/2,ZoomH/2,0); +float Col=0.8f,A=0.8f; + + glColor4f(1,1,1,0.8f); + if (Selected) + { + Col=1.0f; + A=0.8f; + glColor4f(1,1,1,1.0f); // For number + } + + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + + glLoadIdentity(); + + glScalef(Scale.x,Scale.y,Scale.z); + glTranslatef(-ThisCam.x,ThisCam.y,0); // Set scroll offset + glTranslatef(-ScrOfs.x,ScrOfs.y,0); // Bring to top left corner + + glTranslatef(ThisThing.XY[0].x,-ThisThing.XY[0].y,0); // Set Pos + + Core->RenderNumber(0); + glEnable(GL_DEPTH_TEST); + +float W=(ThisThing.Data.Width); +float H=-(ThisThing.Data.Height); +// Draw Box + glBegin (GL_QUADS); + glColor4f(0,Col-0.25f,0,A); + glVertex3f(0,0+1,0); + glVertex3f(W,0+1,0); + glVertex3f(W,H+1,0); + glVertex3f(0,H+1,0); + glEnd(); +// Draw OutLine + glBegin(GL_LINES); + glColor4f(Col,Col,Col,A); + + glVertex3f( 0,0+1,0); + glVertex3f( W,0+1,0); + + glVertex3f( W,0+1,0); + glVertex3f( W,H+1,0); + + glVertex3f( W,H+1,0); + glVertex3f( 0,H+1,0); + + glVertex3f( 0,H+1,0); + glVertex3f( 0,0+1,0); + + glEnd(); + + glDisable(GL_DEPTH_TEST); + + glPopMatrix(); +} + /*****************************************************************************/ /*** Gui *********************************************************************/ /*****************************************************************************/ -void CLayerPlatform::GUIInit(CCore *Core) +void CLayerTrigger::GUIInit(CCore *Core) { - GUIPlatform.DisableCallback(true); + GUITrigger.DisableCallback(true); Core->GUIAdd(GUIThing,IDD_LAYER_THING); - Core->GUIAdd(GUIThingPos,IDD_LAYER_THING_POS); - Core->GUIAdd(GUIPlatform,IDD_LAYER_PLATFORM); - GUIPlatform.DisableCallback(false); - -// Init type lists - { -CComboBox &List=GUIPlatform.m_MoveList; - List.AddString("Linear"); - List.AddString("Circular"); - } - - { -CComboBox &List=GUIPlatform.m_Type; - List.AddString("Normal"); - List.AddString("Weighted"); - List.AddString("Rotating"); - } - - + Core->GUIAdd(GUITrigger,IDD_LAYER_TRIGGER); + GUITrigger.DisableCallback(false); } /*****************************************************************************/ -void CLayerPlatform::GUIKill(CCore *Core) +void CLayerTrigger::GUIKill(CCore *Core) { Core->GUIRemove(GUIThing,IDD_LAYER_THING); - Core->GUIRemove(GUIThingPos,IDD_LAYER_THING_POS); - Core->GUIRemove(GUIPlatform,IDD_LAYER_PLATFORM); + Core->GUIRemove(GUITrigger,IDD_LAYER_TRIGGER); } /*****************************************************************************/ -void CLayerPlatform::GUIUpdate(CCore *Core) +void CLayerTrigger::GUIUpdate(CCore *Core) { int i,ListSize; CComboBox &List=GUIThing.m_DefList; -// Setup Def Platform List +// Setup Def Trigger List ListSize=DefList.size(); List.ResetContent(); for (i=0; iGetFilePath()); +//#endif } else { diff --git a/Utils/MapEdit/TexCache.cpp b/Utils/MapEdit/TexCache.cpp index 7b58a3b24..fdebdef54 100644 --- a/Utils/MapEdit/TexCache.cpp +++ b/Utils/MapEdit/TexCache.cpp @@ -191,23 +191,15 @@ u8 *Src,*Dst; ThisTex.TexH=RGBData->TexH; ThisTex.ScaleU=RGBData->ScaleU; ThisTex.ScaleV=RGBData->ScaleV; -int Err; + glGenTextures(1, &ThisTex.TexID); - Err=glGetError();ASSERT(Err==0); glBindTexture(GL_TEXTURE_2D, ThisTex.TexID); - Err=glGetError();ASSERT(Err==0); glTexImage2D(GL_TEXTURE_2D, 0, 4, RGBData->TexW, RGBData->TexH, 0, GL_RGBA, GL_UNSIGNED_BYTE, Buffer); - Err=glGetError();ASSERT(Err==0); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); - Err=glGetError();ASSERT(Err==0); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); - Err=glGetError();ASSERT(Err==0); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP); - Err=glGetError();ASSERT(Err==0); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP); - Err=glGetError();ASSERT(Err==0); glBindTexture(GL_TEXTURE_2D, 0); - Err=glGetError();ASSERT(Err==0); MemFree(Buffer); } diff --git a/Utils/MapEdit/TileSet.cpp b/Utils/MapEdit/TileSet.cpp index 3cea53b9b..4fe2cd9a6 100644 --- a/Utils/MapEdit/TileSet.cpp +++ b/Utils/MapEdit/TileSet.cpp @@ -417,6 +417,8 @@ bool CTileBank::SelectCancel() /*****************************************************************************/ void CTileBank::DeleteSet(CCore *Core) { + if (GUIElemList.m_List.GetCurSel()==-1) return; + if (Core->Question("Delete Current Tile Bank\n\nAll used tiles in current set will be set to blank\nAre you sure?")) { int SetCount=GetSetCount(); @@ -446,6 +448,7 @@ void CTileBank::DeleteSet(CCore *Core) } } CurrentSet--; + GUIUpdate(Core); } diff --git a/Utils/MapEdit/resource.h b/Utils/MapEdit/resource.h index f75ad3308..791cd2960 100644 --- a/Utils/MapEdit/resource.h +++ b/Utils/MapEdit/resource.h @@ -19,7 +19,11 @@ #define IDD_LAYER_COLLISION 177 #define IDD_ELEMLIST 178 #define IDD_LAYER_ACTOR 179 -#define IDD_LAYER_ITEM 180 +#define IDD_LAYER_THING 181 +#define IDD_LAYER_THING_POS 182 +#define IDD_LAYER_PLATFORM 183 +#define IDD_LAYER_TRIGGER 184 +#define IDD_LAYER_FX 185 #define IDC_TOOLBAR_COMBO 1018 #define IDC_LAYERLIST_LIST 1019 #define IDD_TILEBANK_UPDATE 1029 @@ -47,17 +51,12 @@ #define IDC_LAYERCOLLISION_NORMAL 1078 #define IDD_ELEM_LIST 1080 #define IDC_LAYERSHADE_EDITR2 1081 -#define IDC_LEVEL_ACTOR_LIST 1081 #define IDC_LAYERSHADE_EDITG2 1082 #define IDC_LAYERCOLLISION_DAMAGE 1082 -#define IDC_ACTOR_POS_LIST 1082 #define IDC_LAYERSHADE_EDITB2 1083 #define IDC_LAYERCOLLISION_SLIPPERY 1083 -#define IDC_ACTOR_POS_UP 1083 #define IDC_LAYERCOLLISION_ELECTRIC 1084 -#define IDC_ACTOR_POS_DOWN 1084 #define IDC_LAYERCOLLISION_STICKY 1085 -#define IDC_ACTOR_POS_DELETE 1085 #define IDC_LAYERSHADE_TEXT7 1086 #define IDC_LAYERCOLLISION_WATER 1086 #define IDC_ACTOR_SPEED_TEXT 1086 @@ -67,17 +66,11 @@ #define IDC_LAYERSHADE_EDITG3 1088 #define IDC_LAYERCOLLISION_DEATH 1088 #define IDC_LAYERSHADE_EDITB3 1089 -#define IDC_ACTOR_LIST 1089 -#define IDC_ACTOR_DELETE 1091 #define IDC_ACTOR_SPEED_SPIN 1092 #define IDC_ACTOR_PLAYER 1094 -#define IDC_LAYER_ACTOR_GROUP 1095 #define IDC_ACTOR_TURNRATE_TEXT 1097 #define IDC_ACTOR_TURNRATE 1098 #define IDC_ACTOR_TURNRATE_SPIN 1099 -#define IDC_ITEM_DELETE 1100 -#define IDC_ITEM_LIST 1101 -#define IDC_LEVEL_ITEM_LIST 1102 #define IDC_ACTOR_HEALTH_TEXT 1112 #define IDC_ACTOR_HEALTH 1113 #define IDC_ACTOR_HEALTH_SPIN 1114 @@ -85,6 +78,47 @@ #define IDC_ACTOR_ATTACK 1116 #define IDC_ACTOR_ATTACK_SPIN 1117 #define IDC_ACTOR_COLLISION 1118 +#define IDC_DEF_THING_LIST 1124 +#define IDC_THING_LIST 1125 +#define IDC_THING_GOTO 1126 +#define IDC_THING_DELETE 1127 +#define IDC_THING_POS_LIST 1127 +#define IDC_THING_POS_UP 1128 +#define IDC_THING_POS_DOWN 1129 +#define IDC_THING_POS_DELETE 1130 +#define IDC_PLATFORM_SPEED 1131 +#define IDC_PLATFORM_SPEED_TEXT 1132 +#define IDC_PLATFORM_TURNRATE_TEXT 1133 +#define IDC_PLATFORM_SPEED_SPIN 1134 +#define IDC_PLATFORM_TURNRATE_SPIN 1135 +#define IDC_PLATFORM_TURNRATE 1136 +#define IDC_PLATFORM_COLLISION 1137 +#define IDC_PLATFORM_MOVE_TYPE 1138 +#define IDC_PLATFORM_TYPE 1139 +#define IDC_TRIGGER_SIZE 1140 +#define IDC_TRIGGER_WIDTH 1141 +#define IDC_TRIGGER_HEIGHT 1142 +#define IDC_TRIGGER_WIDTH_SPIN 1143 +#define IDC_FX_SPEED_TEXT 1144 +#define IDC_FX_SIZE_TEXT 1146 +#define IDC_FX_WIDTH 1147 +#define IDC_FX_HEIGHT 1148 +#define IDC_FX_WIDTH_SPIN 1149 +#define IDC_FX_TURNRATE_SPIN 1150 +#define IDC_FX_SPEED 1151 +#define IDC_FX_SPEED_SPIN 1152 +#define IDC_LAYERSHADE_BACKGFX0 1153 +#define IDC_LAYERSHADE_SPIN0 1154 +#define IDC_LAYERSHADE_BACKGFX1 1155 +#define IDC_LAYERSHADE_MOVE0 1156 +#define IDC_LAYERSHADE_SCALE0 1157 +#define IDC_LAYERSHADE_COLOR0 1158 +#define IDC_LAYERSHADE_SPIN1 1159 +#define IDC_LAYERSHADE_MOVE1 1160 +#define IDC_LAYERSHADE_SCALE1 1161 +#define IDC_LAYERSHADE_TRANS0 1162 +#define IDC_LAYERSHADE_COLOR1 1163 +#define IDC_LAYERSHADE_TRANS1 1164 #define ID_TOOLBAR_TILEPALETTE 32774 #define ID_TOOLBAR_PARAMBAR 32783 #define ID_TOGGLE_SUBVIEW 32785 @@ -110,7 +144,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 180 #define _APS_NEXT_COMMAND_VALUE 32801 -#define _APS_NEXT_CONTROL_VALUE 1103 +#define _APS_NEXT_CONTROL_VALUE 1163 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/Utils/MapEdit/utils.cpp b/Utils/MapEdit/utils.cpp index 6e032cb4b..00f644c3d 100644 --- a/Utils/MapEdit/utils.cpp +++ b/Utils/MapEdit/utils.cpp @@ -269,7 +269,7 @@ int PaletteSize,ImageSize; } /**************************************************************************************/ -void SetFileExt(char *InName,char *OutName,char *Ext) +void SetFileExt(const char *InName,char *OutName,char *Ext) { char Drive[_MAX_DRIVE]; char Path[_MAX_DIR]; @@ -414,3 +414,4 @@ GFName Exe; Path="\\SpongeBob\\tools\\MapEdit\\"; #endif } + diff --git a/Utils/MapEdit/utils.h b/Utils/MapEdit/utils.h index 49aa35579..31312fde0 100644 --- a/Utils/MapEdit/utils.h +++ b/Utils/MapEdit/utils.h @@ -51,7 +51,7 @@ void SaveBmp(char *Filename,int Width,int Height,RGBQUAD *Pal,u8 *Image); void BGR2RGB(int W,int H,u8 *Data); -void SetFileExt(char *InName,char *OutName,char *Ext); +void SetFileExt(const char *InName,char *OutName,char *Ext); void MakeFullFilename(const char *RelName,GString &Out); void MakePathRel2App(const char* In,char *Out); @@ -63,13 +63,13 @@ void *_MemAlloc(size_t Size); void _MemFree(void *Ptr); void CheckMem(); -#ifdef _DEBUG -#define MemAlloc(v) _MemAlloc(v) -#define MemFree(v) _MemFree(v) -#else +//#ifdef _DEBUG +//#define MemAlloc(v) _MemAlloc(v) +//#define MemFree(v) _MemFree(v) +//#else #define MemAlloc(v) malloc(v) #define MemFree(v) free(v) -#endif +//#endif void GetExecPath(GString &Path); diff --git a/data/DataCache.scr b/data/DataCache.scr index 236a1195a..789cb69df 100644 --- a/data/DataCache.scr +++ b/data/DataCache.scr @@ -42,8 +42,6 @@ loadingscreens/pizza.gfx loadingscreens/teenage.gfx memcard/memhead.bin -levels/levelBackGfx.spr - levels/CHAPTER01_LEVEL01.Inf levels/CHAPTER01_LEVEL01.TBK levels/chapter01_level01.tex diff --git a/makefile.gfx b/makefile.gfx index 27d2317f7..111e65af8 100644 --- a/makefile.gfx +++ b/makefile.gfx @@ -42,8 +42,6 @@ LEVELS_OPTS := -t:8,4,1 -s:16 LEVELS_IN_DIR := $(GRAF_DIR)/levels LEVELS_OUT_DIR := $(DATA_OUT)/levels LEVELS_MAKEFILE_DIR := $(TEMP_BUILD_DIR)/levels -LEVELS_BACK_DIR := $(LEVELS_IN_DIR)/backgfx -LEVELS_BACK_OPTS := -t:12,1,1 LEVELS_DIRS_TO_MAKE := $(LEVELS_MAKEFILE_DIR) $(LEVELS_OUT_DIR) LEVELS_CHAPTERS := CHAPTER01 CHAPTER02 CHAPTER03 CHAPTER04 CHAPTER05 CHAPTER06 @@ -93,15 +91,8 @@ $(LEVELS_MAKEFILES): $(LEVELS_DIRS_TO_MAKE) makefile.gfx $(BUILD_DIR)/mklevel.pl include $(LEVELS_MAKEFILES) -# Levels Back Sprites -LEVELS_BACK_IN := $(LEVELS_BACK_DIR)/*.bmp -LEVELS_BACK_OUT := $(LEVELS_OUT_DIR)/LevelBackGfx.spr -$(LEVELS_BACK_OUT) : $(LEVELS_BACK_IN) - @parkgrab -c+ -z+ $(LEVELS_BACK_IN) -b+ $(LEVELS_BACK_OPTS) -l:$(LEVELS_OUT_DIR)/LevelBackGfx.lbm -o:$(LEVELS_BACK_OUT) - @$(MV) -f $(LEVELS_OUT_DIR)/LevelBackGfx.h $(INC_DIR) - -LEVELS_ALL_OUT := $(foreach CHAPTER,$(LEVELS_CHAPTERS),$(foreach LEVEL,$(LEVELS_$(CHAPTER)),$($(CHAPTER)_$(LEVEL)_OUT))) $(LEVELS_BACK_OUT) +LEVELS_ALL_OUT := $(foreach CHAPTER,$(LEVELS_CHAPTERS),$(foreach LEVEL,$(LEVELS_$(CHAPTER)),$($(CHAPTER)_$(LEVEL)_OUT))) GFX_DATA_OUT += $(LEVELS_ALL_OUT) diff --git a/tools/Data/bin/MkLevel.exe b/tools/Data/bin/MkLevel.exe index 5e50439d1..d43451813 100644 Binary files a/tools/Data/bin/MkLevel.exe and b/tools/Data/bin/MkLevel.exe differ diff --git a/tools/Data/include/dstructs.h b/tools/Data/include/dstructs.h index dce867e55..3a7302fab 100644 --- a/tools/Data/include/dstructs.h +++ b/tools/Data/include/dstructs.h @@ -104,10 +104,66 @@ struct sQuad u8 uv3[2]; // 2 }; // 20 + //*************************************************************************** //*** Game Types and Headers ************************************************ +//*************************************************************************** +// Tiles +typedef u16 sTileMapElem; // Tile or Tri Start + +struct sTile +{ +// 2d Tile + u8 u0,v0; // 2 + u16 Clut; // 2 + u16 TPage; // 2 + u16 Pad; // :o( need this? // 2 + +}; // 8 + +//--------------------------------------------------------------------------- +struct sTileTri +{ + u16 P0; // 2 + u16 P1; // 2 + u16 P2; // 2 + u16 Mat; // 2 +}; // 8 + +//--------------------------------------------------------------------------- +struct sTileTriMat +{ + u8 uv0[2]; // 2 + u16 Clut; // 2 + u8 uv1[2]; // 2 + u16 TPage; // 2 + u8 uv2[2]; // 2 +}; // 10 + +//--------------------------------------------------------------------------- +struct sTileQuad +{ + u16 P0; // 2 + u16 P1; // 2 + u16 P2; // 2 + u16 P3; // 2 + u16 Mat; // 2 +}; // 10 + +//--------------------------------------------------------------------------- +struct sTileQuadMat +{ + u8 uv0[2]; // 2 + u16 Clut; // 2 + u8 uv1[2]; // 2 + u16 TPage; // 2 + u8 uv2[2]; // 2 + u8 uv3[2]; // 2 +}; // 12 + //*************************************************************************** // Level Info + struct sLevelInfo { u32 MaxPakSize; @@ -117,20 +173,6 @@ struct sLevelInfo // u16 ActorTypeList..... }; -//--------------------------------------------------------------------------- -// Maps -typedef u16 sTileMapElem; // Tile or Tri Start - -struct sTile -{ -// 2d Tile - u8 u0,v0; // 2 - u16 Clut; // 2 - u16 TPage; // 2 - u16 Pad; // :o( need this? // 2 - -}; // 8 - //--------------------------------------------------------------------------- // Layers struct sLayerHdr @@ -163,10 +205,21 @@ struct sLayerShade u32 Ofs; u8 RGB[4]; }; + +struct sLayerShadeGfx +{ + u16 TPage; + u16 Clut; + u8 U,V; + u8 W,H; + u16 Flags; +}; + struct sLayerShadeHdr { u16 Count; - sLayerShade Data[4]; + sLayerShade Data[LAYER_SHADE_RGB_MAX]; + sLayerShadeGfx BackGfx[2]; }; //--------------------------------------------------------------------------- @@ -181,11 +234,11 @@ struct sLvlHdr u32 ActorList; u32 ItemList; u32 PlatformList; - u32 Pad4; - u32 Pad5; + u32 TriggerList; + u32 FXList; u32 Pad6; u32 Pad7; - + u16 PlayerStartX,PlayerStartY; }; //*************************************************************************** @@ -263,5 +316,19 @@ struct sThingPlatform // Point List... }; // 10 +struct sThingFX +{ + u16 Type; + u16 Speed; + sThingPoint Pos,Size; +}; // 8 + +struct sThingTrigger +{ + u16 Type; + sThingPoint Pos; + u8 Width,Height; +}; // 8 + //*************************************************************************** #endif \ No newline at end of file diff --git a/tools/MapEdit/MapEdit.exe b/tools/MapEdit/MapEdit.exe index d74afa997..d078adbaa 100644 Binary files a/tools/MapEdit/MapEdit.exe and b/tools/MapEdit/MapEdit.exe differ