diff --git a/Utils/MapEdit/CmdMsg.h b/Utils/MapEdit/CmdMsg.h index eb2a03842..d8c850ed2 100644 --- a/Utils/MapEdit/CmdMsg.h +++ b/Utils/MapEdit/CmdMsg.h @@ -28,12 +28,13 @@ enum CmdMsg CmdMsg_SubViewUpdate, // 15 CmdMsg_SubViewSet, // 16 -// TileLayer/TileBank +// Elem CmdMsg_MirrorX, // 17 CmdMsg_MirrorY, // 18 - CmdMsg_SetColFlag, // 19 - CmdMsg_ActiveBrushLeft, // 20 - CmdMsg_ActiveBrushRight, // 21 + CmdMsg_Rotate, // 19 + CmdMsg_SetColFlag, // 20 + CmdMsg_ActiveBrushLeft, // 21 + CmdMsg_ActiveBrushRight, // 22 // Thing CmdMsg_ThingListDelete, // 23 diff --git a/Utils/MapEdit/Core.h b/Utils/MapEdit/Core.h index 67c8a3fd9..847248e94 100644 --- a/Utils/MapEdit/Core.h +++ b/Utils/MapEdit/Core.h @@ -19,7 +19,7 @@ #include "Layer.h" #include "LayerTile.h" -const s32 FileVersion=9; +const s32 FileVersion=10; #define SCREEN_MAP_WIDTH 30 #define SCREEN_MAP_HEIGHT 20 diff --git a/Utils/MapEdit/Elem.cpp b/Utils/MapEdit/Elem.cpp index 8d81bf280..48ecedcb6 100644 --- a/Utils/MapEdit/Elem.cpp +++ b/Utils/MapEdit/Elem.cpp @@ -449,10 +449,10 @@ int ColFlags=Flags >> PC_TILE_FLAG_COLLISION_SHIFT; case PC_TILE_COLLISION_STICKY: glColor4f(1.0f,1.0f,0.0f,0.5); break; case PC_TILE_COLLISION_WATER: glColor4f(0.0f,0.0f,1.0f,0.5); break; case PC_TILE_COLLISION_SOLID: glColor4f(0.0f,1.0f,1.0f,0.5); break; - case PC_TILE_COLLISION_DEATH: glColor4f(1.0f,0.5f,0.5f,0.5); break; + case PC_TILE_COLLISION_DEATH: glColor4f(0.0f,0.5f,0.5f,0.5); break; + case PC_TILE_COLLISION_DESTRUCTABLE:glColor4f(0.5f,0.7f,0.6f,0.5); break; } } - glEnable(GL_TEXTURE_2D); if (Render3d) { diff --git a/Utils/MapEdit/ExportHdr.h b/Utils/MapEdit/ExportHdr.h index d3efb7f1a..479bf36d6 100644 --- a/Utils/MapEdit/ExportHdr.h +++ b/Utils/MapEdit/ExportHdr.h @@ -175,6 +175,24 @@ struct sLayerThingHazard }; struct sLayerThingData +{ + int WaypointCount; + int Angle; + int Flip; + + union + { + sLayerThingDef RESERVE; + sLayerThingActor Actor; + sLayerThingItem Item; + sLayerThingPlatform Platform; + sLayerThingTrigger Trigger; + sLayerThingFX FX; + sLayerThingHazard Hazard; + }; +}; + +struct sLayerThingDataV9 { int WaypointCount; diff --git a/Utils/MapEdit/GUILayerCollision.cpp b/Utils/MapEdit/GUILayerCollision.cpp index 8031bd2ef..185c04624 100644 --- a/Utils/MapEdit/GUILayerCollision.cpp +++ b/Utils/MapEdit/GUILayerCollision.cpp @@ -46,6 +46,7 @@ BEGIN_MESSAGE_MAP(GUILayerCollision, CDialog) ON_BN_CLICKED(IDC_LAYERCOLLISION_WATER, OnLayercollisionWater) ON_BN_CLICKED(IDC_LAYERCOLLISION_SOLID, OnLayercollisionSolid) ON_BN_CLICKED(IDC_LAYERCOLLISION_DEATH, OnLayercollisionDeath) + ON_BN_CLICKED(IDC_LAYERCOLLISION_DESTRUCTABLE, OnLayercollisionDestructable) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -60,3 +61,5 @@ void GUILayerCollision::OnLayercollisionSticky() {theApp.GetCurrent()->Command( void GUILayerCollision::OnLayercollisionWater() {theApp.GetCurrent()->Command(CmdMsg_SetColFlag,PC_TILE_COLLISION_WATER);} void GUILayerCollision::OnLayercollisionSolid() {theApp.GetCurrent()->Command(CmdMsg_SetColFlag,PC_TILE_COLLISION_SOLID);} void GUILayerCollision::OnLayercollisionDeath() {theApp.GetCurrent()->Command(CmdMsg_SetColFlag,PC_TILE_COLLISION_DEATH);} +void GUILayerCollision::OnLayercollisionDestructable() {theApp.GetCurrent()->Command(CmdMsg_SetColFlag,PC_TILE_COLLISION_DESTRUCTABLE);} + diff --git a/Utils/MapEdit/GUILayerCollision.h b/Utils/MapEdit/GUILayerCollision.h index f4d35d466..6c6459a88 100644 --- a/Utils/MapEdit/GUILayerCollision.h +++ b/Utils/MapEdit/GUILayerCollision.h @@ -43,6 +43,7 @@ protected: afx_msg void OnLayercollisionWater(); afx_msg void OnLayercollisionSolid(); afx_msg void OnLayercollisionDeath(); + afx_msg void OnLayercollisionDestructable(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; diff --git a/Utils/MapEdit/LayerActor.h b/Utils/MapEdit/LayerActor.h index 372c482e4..547528c18 100644 --- a/Utils/MapEdit/LayerActor.h +++ b/Utils/MapEdit/LayerActor.h @@ -34,6 +34,9 @@ public: void GUIThingUpdate(bool OnlySel=false); void GUIThingPointUpdate(bool OnlySel=false); +virtual bool CanMirror(){return(true);} +virtual bool CanRotate(){return(true);} + protected: CGUILayerActor GUIActor; diff --git a/Utils/MapEdit/LayerCollision.cpp b/Utils/MapEdit/LayerCollision.cpp index 1e5c4bb1e..3d84ddd03 100644 --- a/Utils/MapEdit/LayerCollision.cpp +++ b/Utils/MapEdit/LayerCollision.cpp @@ -156,9 +156,14 @@ int Height=Map.GetHeight(); if (MapElem.Tile) { +// new OutElem.Tile=(MapElem.Tile-1)<<1; +// OutElem.Tile+=MapElem.Flags & PC_TILE_FLAG_MIRROR_X; +// OutElem.Flags=MapElem.Flags>>PC_TILE_FLAG_COLLISION_SHIFT; +// Old OutElem.Tile=((MapElem.Tile-1)*4)+1; OutElem.Tile+=MapElem.Flags & PC_TILE_FLAG_MIRROR_XY; OutElem.Flags=MapElem.Flags>>PC_TILE_FLAG_COLLISION_SHIFT; + } else { diff --git a/Utils/MapEdit/LayerDef.h b/Utils/MapEdit/LayerDef.h index c5c301255..3a33d4b27 100644 --- a/Utils/MapEdit/LayerDef.h +++ b/Utils/MapEdit/LayerDef.h @@ -54,6 +54,7 @@ enum TILE_FLAG PC_TILE_COLLISION_WATER =5, PC_TILE_COLLISION_SOLID =6, PC_TILE_COLLISION_DEATH =7, + PC_TILE_COLLISION_DESTRUCTABLE =8, PC_TILE_FLAG_COLLISION_SHIFT =2, PC_TILE_FLAG_COLLISION_NORMAL =PC_TILE_COLLISION_NORMAL<Read(&ThisThing.Data,sizeof(sLayerThingData)); + if (Version==9) + { + sLayerThingDataV9 V9Data; + File->Read(&V9Data,sizeof(sLayerThingDataV9)); + ThisThing.Data.WaypointCount=V9Data.WaypointCount; + ThisThing.Data.Flip=0; + ThisThing.Data.Angle=0; + ThisThing.Data.RESERVE=V9Data.RESERVE; + } + else + { + File->Read(&ThisThing.Data,sizeof(sLayerThingData)); + } + } } LoadThingNames(File,Version); @@ -186,6 +199,8 @@ int i,ListSize=ThingScript.GetGroupCount(); memset(&ThisDef.Data,0,sizeof(sLayerThingData)); ThisDef.Name=Name; ThisDef.Data.WaypointCount=ThingScript.GetInt(Name,"WayPoints"); + ThisDef.Data.Flip=0; + ThisDef.Data.Angle=0; LoadDefThing(Name,ThisDef); ThisDef.XY.resize(1); @@ -249,7 +264,10 @@ int ListSize=ThisThing.XY.size(); glColor4f(1,1,1,1); // Set default Color glEnable(GL_DEPTH_TEST); glTranslatef(0,0,ScrOfs.z); - ThingBank->RenderElem(ThisThing.ElemID,0,0,Render3d); + glPushMatrix(); + glRotatef(ThisThing.Data.Angle,0,0,1); + ThingBank->RenderElem(ThisThing.ElemID,0,ThisThing.Data.Flip,Render3d); + glPopMatrix(); glDisable(GL_DEPTH_TEST); glTranslatef(0,0,-ScrOfs.z); if (Selected) @@ -421,6 +439,31 @@ bool Ret=false; switch(CmdMsg) { + case CmdMsg_MirrorX: + if (CanMirror()) + if (CurrentThing!=-1) + { + ThingList[CurrentThing].Data.Flip^=PC_TILE_FLAG_MIRROR_X; + } + break; + case CmdMsg_MirrorY: + if (CanMirror()) + if (CurrentThing!=-1) + { + ThingList[CurrentThing].Data.Flip^=PC_TILE_FLAG_MIRROR_Y; + } + break; + case CmdMsg_Rotate: + if (CanRotate()) + if (CurrentThing!=-1) + { + ThingList[CurrentThing].Data.Angle+=90; + if (ThingList[CurrentThing].Data.Angle>359) + { + ThingList[CurrentThing].Data.Angle=0; + } + } + break; case CmdMsg_ThingListDelete: DeleteThing(); break; diff --git a/Utils/MapEdit/LayerThing.h b/Utils/MapEdit/LayerThing.h index 44f1288d2..e5f0cb6af 100644 --- a/Utils/MapEdit/LayerThing.h +++ b/Utils/MapEdit/LayerThing.h @@ -79,6 +79,8 @@ virtual void ExportThing(CCore *Core,CExport &Exp,sLayerThing &ThisThing); virtual void ExportThingData(CCore *Core,CExport &Exp,sLayerThing &ThisThing,sLayerThingData &OutThing){} virtual void ExportThingNames(CExport &Exp); +virtual bool CanMirror(){return(false);} +virtual bool CanRotate(){return(false);} // Functions virtual bool LButtonControl(CCore *Core,UINT nFlags, CPoint &point,bool DownFlag); virtual bool RButtonControl(CCore *Core,UINT nFlags, CPoint &point,bool DownFlag); diff --git a/Utils/MapEdit/MapEdit.clw b/Utils/MapEdit/MapEdit.clw index b3d1aec26..fd56bdf2b 100644 --- a/Utils/MapEdit/MapEdit.clw +++ b/Utils/MapEdit/MapEdit.clw @@ -2,7 +2,7 @@ [General Info] Version=1 -LastClass=CGUILayerShade +LastClass=CMapEditDoc LastTemplate=CDialog NewFileInclude1=#include "stdafx.h" NewFileInclude2=#include "mapedit.h" @@ -37,27 +37,27 @@ Class25=CMapEditDoc Class26=CMapEditView ResourceCount=21 -Resource1=IDD_LAYER_HAZARD -Resource2=IDR_MAPEDITYPE (English (U.S.)) -Resource3=IDD_LAYER_COLLISION -Resource4=IDD_MULTIBAR (English (U.S.)) -Resource5=IDD_LAYER_ACTOR -Resource6=IDD_LAYER_THING_POS -Resource7=IDD_LAYER_FX -Resource8=IDD_LAYER_PLATFORM -Resource9=IDD_ADDLAYER -Resource10=IDD_RESIZE -Resource11=IDD_LAYER_LIST -Resource12=IDD_LAYER_TRIGGER -Resource13=IDD_ELEMLIST -Resource14=IDR_TOOLBAR (English (U.S.)) -Resource15=IDD_ABOUTBOX (English (U.S.)) -Resource16=IDD_LAYER_THING -Resource17=IDD_NEWMAP -Resource18=IDR_MAINFRAME (English (U.S.)) -Resource19=IDD_TILEBANK -Resource20=IDD_TOOLBAR -Resource21=IDD_LAYER_SHADE +Resource1=IDD_LAYER_COLLISION +Resource2=IDD_LAYER_THING_POS +Resource3=IDD_MULTIBAR (English (U.S.)) +Resource4=IDD_LAYER_THING +Resource5=IDD_RESIZE +Resource6=IDD_ADDLAYER +Resource7=IDD_LAYER_SHADE +Resource8=IDD_TILEBANK +Resource9=IDD_LAYER_TRIGGER +Resource10=IDD_LAYER_PLATFORM +Resource11=IDR_MAPEDITYPE (English (U.S.)) +Resource12=IDD_TOOLBAR +Resource13=IDD_LAYER_LIST +Resource14=IDD_ABOUTBOX (English (U.S.)) +Resource15=IDD_LAYER_ACTOR +Resource16=IDD_NEWMAP +Resource17=IDD_LAYER_FX +Resource18=IDD_ELEMLIST +Resource19=IDR_TOOLBAR (English (U.S.)) +Resource20=IDR_MAINFRAME (English (U.S.)) +Resource21=IDD_LAYER_HAZARD [CLS:CChildFrame] Type=0 @@ -94,6 +94,9 @@ Type=0 BaseClass=CDialog HeaderFile=GUILayerCollision.h ImplementationFile=GUILayerCollision.cpp +LastObject=GUILayerCollision +Filter=D +VirtualFilter=dWC [CLS:CGUILayerFX] Type=0 @@ -221,6 +224,9 @@ Type=0 BaseClass=CDocument HeaderFile=MapEditDoc.h ImplementationFile=MapEditDoc.cpp +Filter=N +VirtualFilter=DC +LastObject=ID_ROTATE [CLS:CMapEditView] Type=0 @@ -264,7 +270,7 @@ Control14=IDC_ACTOR_COLLISION,button,1342243363 [DLG:IDD_LAYER_COLLISION] Type=1 Class=GUILayerCollision -ControlCount=8 +ControlCount=9 Control1=IDC_LAYERCOLLISION_NORMAL,button,1342242816 Control2=IDC_LAYERCOLLISION_DAMAGE,button,1342242816 Control3=IDC_LAYERCOLLISION_SLIPPERY,button,1342242816 @@ -273,6 +279,7 @@ Control5=IDC_LAYERCOLLISION_STICKY,button,1342242816 Control6=IDC_LAYERCOLLISION_WATER,button,1342242816 Control7=IDC_LAYERCOLLISION_SOLID,button,1342242816 Control8=IDC_LAYERCOLLISION_DEATH,button,1342242816 +Control9=IDC_LAYERCOLLISION_DESTRUCTABLE,button,1342242816 [DLG:IDD_LAYER_FX] Type=1 @@ -540,16 +547,17 @@ Command19=ID_ZOOM_IN Command20=ID_ZOOM_OUT Command21=ID_MIRRORX Command22=ID_MIRRORY -Command23=ID_ACTIVEBRUSH_LEFT -Command24=ID_ACTIVEBRUSH_RIGHT -Command25=ID_TOGGLE_SUBVIEW -Command26=ID_2D_3D_TOGGLE -Command27=ID_WINDOW_NEW -Command28=ID_WINDOW_CASCADE -Command29=ID_WINDOW_TILE_HORZ -Command30=ID_WINDOW_ARRANGE -Command31=ID_APP_ABOUT -CommandCount=31 +Command23=ID_ROTATE +Command24=ID_ACTIVEBRUSH_LEFT +Command25=ID_ACTIVEBRUSH_RIGHT +Command26=ID_TOGGLE_SUBVIEW +Command27=ID_2D_3D_TOGGLE +Command28=ID_WINDOW_NEW +Command29=ID_WINDOW_CASCADE +Command30=ID_WINDOW_TILE_HORZ +Command31=ID_WINDOW_ARRANGE +Command32=ID_APP_ABOUT +CommandCount=32 [ACL:IDR_MAINFRAME (English (U.S.))] Type=1 @@ -564,22 +572,23 @@ Command7=ID_EDIT_COPY Command8=ID_TOGGLE_GRID Command9=ID_FILE_NEW Command10=ID_FILE_OPEN -Command11=ID_FILE_SAVE -Command12=ID_EDIT_PASTE -Command13=ID_ZOOM_IN -Command14=ID_EDIT_UNDO -Command15=ID_EDIT_CUT -Command16=ID_EDIT_COPY -Command17=ID_EDIT_PASTE -Command18=ID_TOGGLE_SUBVIEW -Command19=ID_ZOOM_OUT -Command20=ID_NEXT_PANE -Command21=ID_PREV_PANE -Command22=ID_MIRRORX -Command23=ID_EDIT_CUT -Command24=ID_MIRRORY -Command25=ID_EDIT_UNDO -CommandCount=25 +Command11=ID_ROTATE +Command12=ID_FILE_SAVE +Command13=ID_EDIT_PASTE +Command14=ID_ZOOM_IN +Command15=ID_EDIT_UNDO +Command16=ID_EDIT_CUT +Command17=ID_EDIT_COPY +Command18=ID_EDIT_PASTE +Command19=ID_TOGGLE_SUBVIEW +Command20=ID_ZOOM_OUT +Command21=ID_NEXT_PANE +Command22=ID_PREV_PANE +Command23=ID_MIRRORX +Command24=ID_EDIT_CUT +Command25=ID_MIRRORY +Command26=ID_EDIT_UNDO +CommandCount=26 [DLG:IDD_ABOUTBOX (English (U.S.))] Type=1 diff --git a/Utils/MapEdit/MapEdit.rc b/Utils/MapEdit/MapEdit.rc index 6d976abd1..05b301309 100644 --- a/Utils/MapEdit/MapEdit.rc +++ b/Utils/MapEdit/MapEdit.rc @@ -131,6 +131,8 @@ BEGIN MENUITEM "Mirror &X", ID_MIRRORX MENUITEM "Mirror &Y", ID_MIRRORY MENUITEM SEPARATOR + MENUITEM "&Rotate", ID_ROTATE + MENUITEM SEPARATOR MENUITEM "View Left Brush", ID_ACTIVEBRUSH_LEFT MENUITEM "View Right Brush", ID_ACTIVEBRUSH_RIGHT MENUITEM SEPARATOR @@ -171,6 +173,7 @@ BEGIN "G", ID_TOGGLE_GRID, VIRTKEY, NOINVERT "N", ID_FILE_NEW, VIRTKEY, CONTROL, NOINVERT "O", ID_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT + "R", ID_ROTATE, VIRTKEY, NOINVERT "S", ID_FILE_SAVE, VIRTKEY, CONTROL, NOINVERT "V", ID_EDIT_PASTE, VIRTKEY, CONTROL, NOINVERT VK_ADD, ID_ZOOM_IN, VIRTKEY, NOINVERT @@ -669,6 +672,8 @@ BEGIN PUSHBUTTON "Water",IDC_LAYERCOLLISION_WATER,100,15,50,10 PUSHBUTTON "Solid",IDC_LAYERCOLLISION_SOLID,0,25,50,10 PUSHBUTTON "Death",IDC_LAYERCOLLISION_DEATH,50,25,50,10 + PUSHBUTTON "Destructable",IDC_LAYERCOLLISION_DESTRUCTABLE,100,25,50, + 10 END IDD_ELEMLIST DIALOG DISCARDABLE 0, 0, 156, 26 diff --git a/Utils/MapEdit/MapEditDoc.cpp b/Utils/MapEdit/MapEditDoc.cpp index 5cb026f1c..fb0d09418 100644 --- a/Utils/MapEdit/MapEditDoc.cpp +++ b/Utils/MapEdit/MapEditDoc.cpp @@ -35,9 +35,10 @@ BEGIN_MESSAGE_MAP(CMapEditDoc, CDocument) ON_COMMAND(ID_EDIT_PASTE, OnEditPaste) ON_COMMAND(ID_2D_3D_TOGGLE, On2d3dToggle) ON_COMMAND(ID_RESET_VIEW, OnResetView) + ON_COMMAND(ID_RENDER_TO_TGA, OnRenderToTga) ON_COMMAND(ID_TOOLBAR_TILEPALETTE, OnToggleSubView) ON_COMMAND(ID_TOGGLE_GRID, OnToggleGrid) - ON_COMMAND(ID_RENDER_TO_TGA, OnRenderToTga) + ON_COMMAND(ID_ROTATE, OnRotate) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -189,6 +190,8 @@ void CMapEditDoc::OnResetView() {Command(CmdMsg_ResetView);} void CMapEditDoc::OnMirrorx() {Command(CmdMsg_MirrorX);} void CMapEditDoc::OnMirrory() {Command(CmdMsg_MirrorY);} +void CMapEditDoc::OnRotate() {Command(CmdMsg_Rotate);} + void CMapEditDoc::OnEditCopy() {Command(CmdMsg_Copy);} void CMapEditDoc::OnEditPaste() {Command(CmdMsg_Paste);} void CMapEditDoc::OnActivebrushLeft() {Command(CmdMsg_ActiveBrushLeft);} @@ -297,3 +300,4 @@ void CMapEditDoc::FocusView() /*********************************************************************************/ + diff --git a/Utils/MapEdit/MapEditDoc.h b/Utils/MapEdit/MapEditDoc.h index e9fd58756..5fb899473 100644 --- a/Utils/MapEdit/MapEditDoc.h +++ b/Utils/MapEdit/MapEditDoc.h @@ -84,6 +84,7 @@ protected: afx_msg void On2d3dToggle(); afx_msg void OnResetView(); afx_msg void OnRenderToTga(); + afx_msg void OnRotate(); //}}AFX_MSG DECLARE_MESSAGE_MAP() diff --git a/Utils/MapEdit/resource.h b/Utils/MapEdit/resource.h index 7014cd2fb..028512726 100644 --- a/Utils/MapEdit/resource.h +++ b/Utils/MapEdit/resource.h @@ -87,6 +87,7 @@ #define IDC_LAYERSHADE_SHADEG3 1088 #define IDC_LAYERSHADE_EDITB3 1089 #define IDC_LAYERSHADE_SHADEB3 1089 +#define IDC_LAYERCOLLISION_DESTRUCTABLE 1089 #define IDC_LAYERSHADE_TRANSTEXT 1090 #define IDC_LAYERSHADE_GFXR0 1091 #define IDC_ACTOR_SPEED_SPIN 1092 @@ -154,7 +155,6 @@ #define IDC_FX_SPEED_SPIN 1152 #define IDC_TRIGGER_HEIGHT_SPIN 1163 #define IDC_TRIGGER_TARGETY_SPIN 1164 -#define IDC_TRIGGER_TARGETY_SPIN2 1165 #define IDC_TRIGGER_TARGETH_SPIN 1165 #define IDC_HAZARD_SPEED_TEXT 1169 #define IDC_HAZARD_TURNRATE_TEXT 1170 @@ -215,6 +215,7 @@ #define ID_ZOOM_OUT 32798 #define ID_RESET_VIEW 32799 #define ID_RENDER_TO_TGA 32800 +#define ID_ROTATE 32801 #define ID_INDICATOR_CURSORXY 59142 // Next default values for new objects @@ -223,7 +224,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 180 -#define _APS_NEXT_COMMAND_VALUE 32801 +#define _APS_NEXT_COMMAND_VALUE 32802 #define _APS_NEXT_CONTROL_VALUE 1215 #define _APS_NEXT_SYMED_VALUE 101 #endif diff --git a/Utils/MkLevel/Layers/MkLevelLayerActor.cpp b/Utils/MkLevel/Layers/MkLevelLayerActor.cpp index c50733e2c..5ce294ec5 100644 --- a/Utils/MkLevel/Layers/MkLevelLayerActor.cpp +++ b/Utils/MkLevel/Layers/MkLevelLayerActor.cpp @@ -76,7 +76,10 @@ int i,ListSize=ThingList.size(); OutThing.AttackStrength=ThisThing.Data.Actor.ActorAttackStrength; OutThing.Speed=ThisThing.Data.Actor.ActorSpeed; OutThing.TurnRate=ThisThing.Data.Actor.ActorTurnRate; - OutThing.Flags=ThisThing.Data.Actor.ActorCollisionFlag; + OutThing.Flags=0; + if (ThisThing.Data.Actor.ActorCollisionFlag) OutThing.Flags|=THING_FLAG_COLLISION; + if (ThisThing.Data.Flip & PC_TILE_FLAG_MIRROR_X) OutThing.Flags|=THING_FLAG_MIRRORX; + if (ThisThing.Data.Flip & PC_TILE_FLAG_MIRROR_Y) OutThing.Flags|=THING_FLAG_MIRRORY; OutThing.PointCount=PointCount; fwrite(&OutThing,sizeof(sThingActor),1,File); diff --git a/Utils/MkLevel/Layers/MkLevelLayerCollision.cpp b/Utils/MkLevel/Layers/MkLevelLayerCollision.cpp index a2d5f76af..15ad241f4 100644 --- a/Utils/MkLevel/Layers/MkLevelLayerCollision.cpp +++ b/Utils/MkLevel/Layers/MkLevelLayerCollision.cpp @@ -8,6 +8,16 @@ #include "MkLevelLayer.h" #include "MkLevelLayerCollision.h" +/* +0 - Blank +1 - Solid block (no flips) +2 - slope0 +3 - slope0 flip x +4 - slope1 +5 - slope1 flip x +6 - slope2 +7 - slope2 flip x +*/ /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ @@ -76,14 +86,26 @@ int Height=Map.GetHeight(); sExpColTile &ThisElem=Map.Get(X,Y); u8 OutElem; - OutElem=ThisElem.Flags<>1)+1; + OutElem=((T-1)*4)+1; + OutElem+=FF; + OutElem|=ThisElem.Flags<(u16)COLLISION_MASK) + } + +*/ +/* if (ThisElem.Tile>(u16)COLLISION_MASK) { printf("COLLISION OVERFLOW %s: %i,%i=(%i,%i)!!\n",MapName,X,Y,ThisElem.Tile,ThisElem.Flags); } - +*/ fwrite(&OutElem,sizeof(u8),1,File); } } diff --git a/Utils/MkLevel/Layers/MkLevelLayerHazard.cpp b/Utils/MkLevel/Layers/MkLevelLayerHazard.cpp index 3db581533..7e15df3d3 100644 --- a/Utils/MkLevel/Layers/MkLevelLayerHazard.cpp +++ b/Utils/MkLevel/Layers/MkLevelLayerHazard.cpp @@ -63,7 +63,11 @@ int i,ListSize=ThingList.size(); OutThing.Type=ThisThing.Type; OutThing.Speed=ThisThing.Data.Hazard.HazardSpeed; OutThing.TurnRate=ThisThing.Data.Hazard.HazardTurnRate; - OutThing.Flags=ThisThing.Data.Hazard.HazardCollisionFlag; + OutThing.Flags=0; + if (ThisThing.Data.Hazard.HazardCollisionFlag) OutThing.Flags|=THING_FLAG_COLLISION; + if (ThisThing.Data.Flip & PC_TILE_FLAG_MIRROR_X) OutThing.Flags|=THING_FLAG_MIRRORX; + if (ThisThing.Data.Flip & PC_TILE_FLAG_MIRROR_Y) OutThing.Flags|=THING_FLAG_MIRRORY; + OutThing.PointCount=PointCount; OutThing.Respawn=ThisThing.Data.Hazard.HazardRespawn; OutThing.Gfx=RemapTable[i]; diff --git a/Utils/MkLevel/Layers/MkLevelLayerPlatform.cpp b/Utils/MkLevel/Layers/MkLevelLayerPlatform.cpp index 3726d76b0..9739b1288 100644 --- a/Utils/MkLevel/Layers/MkLevelLayerPlatform.cpp +++ b/Utils/MkLevel/Layers/MkLevelLayerPlatform.cpp @@ -62,7 +62,11 @@ int i,ListSize=ThingList.size(); OutThing.Type=ThisThing.Type; OutThing.Speed=ThisThing.Data.Platform.PlatformSpeed; OutThing.TurnRate=ThisThing.Data.Platform.PlatformTurnRate; - OutThing.Flags=ThisThing.Data.Platform.PlatformCollisionFlag; + OutThing.Flags=0; + if (ThisThing.Data.Platform.PlatformCollisionFlag) OutThing.Flags|=THING_FLAG_COLLISION; + if (ThisThing.Data.Flip & PC_TILE_FLAG_MIRROR_X) OutThing.Flags|=THING_FLAG_MIRRORX; + if (ThisThing.Data.Flip & PC_TILE_FLAG_MIRROR_Y) OutThing.Flags|=THING_FLAG_MIRRORY; + OutThing.PointCount=PointCount; OutThing.Gfx=RemapTable[i]; OutThing.Param0=ThisThing.Data.Platform.PlatformParam0; diff --git a/Utils/MkLevel/MkLevel.cpp b/Utils/MkLevel/MkLevel.cpp index f9335e3c3..3b77a9c6d 100644 --- a/Utils/MkLevel/MkLevel.cpp +++ b/Utils/MkLevel/MkLevel.cpp @@ -269,9 +269,11 @@ GString FilePath; { GString InName=InPath; InName+=TexPtr; - GFName::makeabsolute(InPath,InName,FullName); - InName=FullName; - _fullpath( FullName, FullName, 1024); +// sprintf(FullName,"%s",InName); + _fullpath( FullName, InName, 1024); +// GFName::makeabsolute(InPath,InName,FullName); +// InName=FullName; +// _fullpath( FullName, FullName, 1024); List.push_back(GString(FullName)); TexPtr+=strlen(TexPtr)+1; } diff --git a/source/gfx/prim.h b/source/gfx/prim.h index 531a17f3a..08ddda2df 100644 --- a/source/gfx/prim.h +++ b/source/gfx/prim.h @@ -18,7 +18,7 @@ #define MAX_OT_GUI (0) #define MAX_OT (16) #define MAX_OT_ALL (MAX_OT+MAX_OT_GUI) -#define MAX_PRIMS ((1024*2)+256+1024) // PKG - TEMPORARY!!!!! +#define MAX_PRIMS ((1024*2)) // Put back after overrender bug found (BAD DAVE!) //#define USE_NTAGS 1 diff --git a/source/level/layertile.cpp b/source/level/layertile.cpp index dbda39ad4..69721baaa 100644 --- a/source/level/layertile.cpp +++ b/source/level/layertile.cpp @@ -69,13 +69,13 @@ int YPos=MapPos.vy>>MapXYShift; // ShiftY=YPos & 15; ShiftY=YPos%12; - if (MapXY.vx+SCREEN_TILE_WIDTH<=MapWidth) - RenderW=SCREEN_TILE_WIDTH; + if (MapXY.vx+SCREEN_TILE2D_WIDTH<=MapWidth) + RenderW=SCREEN_TILE2D_WIDTH; else RenderW=MapWidth-MapXY.vx; - if (MapXY.vy+SCREEN_TILE_HEIGHT<=MapHeight) - RenderH=SCREEN_TILE_HEIGHT; + if (MapXY.vy+SCREEN_TILE2D_HEIGHT<=MapHeight) + RenderH=SCREEN_TILE2D_HEIGHT; else RenderH=MapHeight-MapXY.vy; @@ -120,10 +120,10 @@ sOT *ThisOT=OtPtr+LayerOT; addPrim(ThisOT,Ft4); PrimPtr+=sizeof(POLY_FT4); } - TileX+=TILE_WIDTH; + TileX+=TILE2D_WIDTH; } MapPtr+=MapWidth; - TileY+=TILE_HEIGHT; + TileY+=TILE2D_HEIGHT; } SetPrimPtr(PrimPtr); @@ -163,10 +163,10 @@ sOT *ThisOT=OtPtr+LayerOT; PrimPtr+=sizeof(TSPRT_16); } // MapRow++; - TileX+=TILE_WIDTH; + TileX+=TILE2D_WIDTH; } MapPtr+=MapWidth; - TileY+=TILE_HEIGHT; + TileY+=TILE2D_HEIGHT; } SetPrimPtr(PrimPtr); diff --git a/source/level/layertile.h b/source/level/layertile.h index 5cea798c4..2bf4e6d69 100644 --- a/source/level/layertile.h +++ b/source/level/layertile.h @@ -27,11 +27,11 @@ public: enum { - TILE_WIDTH=16, - TILE_HEIGHT=12, - SCREEN_TILE_WIDTH=34, - SCREEN_TILE_HEIGHT=24, - SCREEN_TILE_SIZE=SCREEN_TILE_WIDTH*SCREEN_TILE_HEIGHT + TILE2D_WIDTH=16, + TILE2D_HEIGHT=12, + SCREEN_TILE2D_WIDTH=(32+2), + SCREEN_TILE2D_HEIGHT=(22+2), + SCREEN_TILE_SIZE=SCREEN_TILE2D_WIDTH*SCREEN_TILE2D_HEIGHT, }; CLayerTile(sLevelHdr *LevelHdr,sLayerHdr *Hdr); diff --git a/source/level/layertile3d.cpp b/source/level/layertile3d.cpp index 7edfa0d4c..acf9c4b32 100644 --- a/source/level/layertile3d.cpp +++ b/source/level/layertile3d.cpp @@ -42,7 +42,6 @@ CLayerTile3d::~CLayerTile3d() { } - /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ @@ -62,13 +61,14 @@ void CLayerTile3d::shutdown() } /*****************************************************************************/ + void CLayerTile3d::think(DVECTOR &MapPos) { MapXY.vx=MapPos.vx>>4; MapXY.vy=MapPos.vy>>4; -// MapXY.vx-=SCREEN_TILE_ADJ_LEFT; -// MapXY.vy-=SCREEN_TILE_ADJ_UP; + MapXY.vx-=SCREEN_TILE_ADJ_LEFT; + MapXY.vy-=SCREEN_TILE_ADJ_UP; ShiftX=(MapPos.vx & 15); ShiftY=(MapPos.vy & 15); @@ -85,13 +85,13 @@ void CLayerTile3d::think(DVECTOR &MapPos) MapXY.vy=0; } - if (MapXY.vx+SCREEN_TILE_WIDTH3D<=MapWidth) - RenderW=SCREEN_TILE_WIDTH3D; + if (MapXY.vx+SCREEN_TILE3D_WIDTH<=MapWidth) + RenderW=SCREEN_TILE3D_WIDTH; else RenderW=MapWidth-MapXY.vx; - if (MapXY.vy+SCREEN_TILE_HEIGHT3D<=MapHeight) - RenderH=SCREEN_TILE_HEIGHT3D; + if (MapXY.vy+SCREEN_TILE3D_HEIGHT<=MapHeight) + RenderH=SCREEN_TILE3D_HEIGHT; else RenderH=MapHeight-MapXY.vy; } @@ -99,12 +99,8 @@ void CLayerTile3d::think(DVECTOR &MapPos) /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ -#if 1 - void CLayerTile3d::render() { -const int XOfs=-(BLOCK_MULT*15)-(SCREEN_TILE_ADJ_LEFT*BLOCK_MULT)+24; -const int YOfs=-(BLOCK_MULT*7)-(SCREEN_TILE_ADJ_UP*BLOCK_MULT)+32; sTileMapElem *MapPtr=GetMapPos(); u8 *PrimPtr=GetPrimPtr(); @@ -116,8 +112,8 @@ sOT *ThisOT; VECTOR BlkPos; // Setup Trans Matrix - BlkPos.vx=XOfs-(ShiftX); - BlkPos.vy=YOfs-(ShiftY); + BlkPos.vx=RENDER_X_OFS-(ShiftX); + BlkPos.vy=RENDER_Y_OFS-(ShiftY); for (int Y=0; Y0) - { - P0=&VtxList[TList->P0]; P1=&VtxList[TList->P1]; P2=&VtxList[TList->P2]; - gte_ldv3(P0,P1,P2); - setPolyFT3(TPrimPtr); - setShadeTex(TPrimPtr,1); - setlen(TPrimPtr, GPU_PolyFT3Tag); - gte_rtpt_b(); - - T0=*(u32*)&TList->uv0; // Get UV0 & TPage - T1=*(u32*)&TList->uv1; // Get UV1 & Clut - T2=*(u16*)&TList->uv2; // Get UV2 - *(u32*)&TPrimPtr->u0=T0; // Set UV0 - *(u32*)&TPrimPtr->u1=T1; // Set UV1 - *(u16*)&TPrimPtr->u2=T2; // Set UV2 - - int ZP=P0->vz>>5; - if (ZP<-4) ZP=-4; - if (ZP>8) ZP=8; -sOT *ThisOT=OtPtr+(LayerOT+ZP); - - TList++; - gte_nclip_b(); - gte_stsxy3_ft3(TPrimPtr); - gte_stopz(&ClipZ); - if (ClipZ<=0) - { - addPrimNoCheck(ThisOT,TPrimPtr); -// addPrim(ThisOT,TPrimPtr); - TPrimPtr++; - } - - TriCount--; - } - MapPtr+=MapWidth; - } - -int PolyCount=((u8*)TPrimPtr-PrimPtr)/sizeof(POLY_FT3); - - SetPrimPtr((u8*)TPrimPtr); - -#if defined(_SHOW_POLYZ_) -char Txt[256]; -sprintf(Txt,"Poly Count=%i",PolyCount); - Font->print( 32, 32, Txt); -#endif -*/ -} - -#endif \ No newline at end of file diff --git a/source/level/layertile3d.h b/source/level/layertile3d.h index f3d0a2bdb..585281494 100644 --- a/source/level/layertile3d.h +++ b/source/level/layertile3d.h @@ -16,13 +16,19 @@ public: enum { - SCREEN_TILE_ADJ_UP =(2*1), - SCREEN_TILE_ADJ_DOWN =(2*1), - SCREEN_TILE_ADJ_LEFT =(2*1), - SCREEN_TILE_ADJ_RIGHT =(5*1), - SCREEN_TILE_WIDTH3D= SCREEN_TILE_WIDTH+SCREEN_TILE_ADJ_RIGHT, - SCREEN_TILE_HEIGHT3D= SCREEN_TILE_HEIGHT+SCREEN_TILE_ADJ_DOWN, - BLOCK_MULT = 16 + TILE3D_WIDTH =16, + TILE3D_HEIGHT =16, + BLOCK_MULT =16, + SCREEN_TILE_ADJ_UP =-1, + SCREEN_TILE_ADJ_LEFT =3, + SCREEN_TILE3D_WIDTH =40, + SCREEN_TILE3D_HEIGHT =16, + RENDER_X_PIX_OFS =-8, + RENDER_Y_PIX_OFS =0, + + RENDER_X_OFS =-(BLOCK_MULT*15)-(SCREEN_TILE_ADJ_LEFT*BLOCK_MULT)+RENDER_X_PIX_OFS, + RENDER_Y_OFS =-(BLOCK_MULT*7)-(SCREEN_TILE_ADJ_UP*BLOCK_MULT)+RENDER_Y_PIX_OFS, + }; void init(DVECTOR &MapPos,int Shift);