diff --git a/build/mklevel.pl b/build/mklevel.pl index 249bb929d..7d0543873 100644 --- a/build/mklevel.pl +++ b/build/mklevel.pl @@ -21,7 +21,7 @@ make$Chapter\_$Level\:\t$Chapter\_$Level\_LVL\n clean$Chapter\_$Level\:\tclean$Chapter\_$Level\_LVL $Chapter\_$Level\_IN_DIR :=\t\$(LEVELS_IN_DIR)/$Chapter/$Level -$Chapter\_$Level\_IN :=\t\$(foreach LVL, \$(LEVELS_$Chapter\_$Level), \$($Chapter\_$Level\_IN_DIR)/$Level\$(LVL).pme) +$Chapter\_$Level\_IN :=\t\$(foreach LVL, \$(LEVELS_$Chapter\_$Level), \$($Chapter\_$Level\_IN_DIR)/$Level\$(LVL).mex) $Chapter\_$Level\_OUT :=\t\$(foreach LVL, \$(LEVELS_$Chapter\_$Level), \$(LEVELS_OUT_DIR)/$Chapter\_$Level\$(LVL).lvl) $Chapter\_$Level\_TEX :=\t\$(LEVELS_OUT_DIR)/$Chapter\_$Level.tex) diff --git a/makefile.gaz b/makefile.gaz index fb48c4bf7..ab47d58f0 100644 --- a/makefile.gaz +++ b/makefile.gaz @@ -122,7 +122,8 @@ level_src := level \ layertile \ layerback \ layertilesolid \ - layertile3d + layertile3d \ + layercollision locale_src := textdbase diff --git a/source/level/layercollision.cpp b/source/level/layercollision.cpp index cec8c5c37..ff02a7617 100644 --- a/source/level/layercollision.cpp +++ b/source/level/layercollision.cpp @@ -1,85 +1,33 @@ /******************************/ -/*** Solid Tile Layer Class ***/ +/*** Collision Layer Class ***/ /******************************/ #include "system\global.h" #include #include "utils\utils.h" -#include "gfx\prim.h" - -#include "LayerTile.h" -#include "LayerTileSolid.h" +#include "LayerCollision.h" /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ -CLayerTileSolid::CLayerTileSolid(sLayerHdr *Hdr,sTile *TileList,sTri *TriList,sQuad *QuadList,sVtx *VtxList) : CLayerTile(Hdr,TileList,TriList,QuadList,VtxList) +CLayerCollision::CLayerCollision(sLayerHdr *Hdr) +{ + LayerHdr=Hdr; + Map=(u8*)MakePtr(Hdr,sizeof(sLayerHdr)); + MapWidth=LayerHdr->Width; + MapHeight=LayerHdr->Height; + printf("COLLISION LAYER = %i %i\n",MapWidth,MapHeight); +} + +/*****************************************************************************/ +CLayerCollision::~CLayerCollision() { } /*****************************************************************************/ -CLayerTileSolid::~CLayerTileSolid() +void CLayerCollision::shutdown() { + } - - -/*****************************************************************************/ -/*****************************************************************************/ -/*****************************************************************************/ -void CLayerTileSolid::init(DVECTOR &MapPos,int Shift,int Width,int Height) -{ - CLayerTile::init(MapPos,Shift,MapWidth,MapHeight); -} - -/*****************************************************************************/ -void CLayerTileSolid::shutdown() -{ -} - -/*****************************************************************************/ -void CLayerTileSolid::think(DVECTOR &MapPos) -{ // Overide default strip scroll update -int XPos=MapPos.vx>>MapXYShift; -int YPos=MapPos.vy>>MapXYShift; - - ShiftX=XPos&15; - ShiftY=YPos&15; - - MapX=XPos>>4; - MapY=YPos>>4; -} - -/*****************************************************************************/ -void CLayerTileSolid::render() -{ -sPrimGridElem *Grid=GetGridPos(MapX,MapY); -s16 TileX,TileY; -sOT *ThisOT=OtPtr+LayerOT; - -// Setup shift bits of pos - TileY=-ShiftY; - -// Render it!! - for (int Y=0; YDown; - TileX=-ShiftX; - - for (int X=0; XPrim; -/**/ Prim->x0=TileX; -/**/ Prim->y0=TileY; - addPrimNoCheck(ThisOT,Prim); - Grid=Grid->Right; - TileX+=TILE_WIDTH; - } - Grid=GridDown; - TileY+=TILE_HEIGHT; - } -} - - - diff --git a/source/level/layercollision.h b/source/level/layercollision.h index da88c8892..5580abad9 100644 --- a/source/level/layercollision.h +++ b/source/level/layercollision.h @@ -1,25 +1,26 @@ /******************************/ -/*** Solid Tile Layer Class ***/ +/*** Collision Layer Class ***/ /******************************/ -#ifndef __LAYER_TILE_SOLID_H__ -#define __LAYER_TILE_SOLID_H__ +#ifndef __LAYER_COLLISION_H__ +#define __LAYER_COLLISION_H__ +#include /*****************************************************************************/ -class CLayerTileSolid : public CLayerTile +class CLayerCollision { public: - CLayerTileSolid(sLayerHdr *Hdr,sTile *TileList,sTri *TriList,sQuad *QuadList,sVtx *VtxList); - ~CLayerTileSolid(); + CLayerCollision(sLayerHdr *Hdr); +virtual ~CLayerCollision(); - void init(DVECTOR &MapPos,int Shift,int Width,int Height); - void shutdown(); - void think(DVECTOR &MapPos); - void render(); +virtual void shutdown(); protected: + sLayerHdr *LayerHdr; + int MapWidth,MapHeight; + u8 *Map; }; diff --git a/source/level/level.cpp b/source/level/level.cpp index 5d926fea9..8346e9b8a 100644 --- a/source/level/level.cpp +++ b/source/level/level.cpp @@ -15,10 +15,10 @@ #include "level\layerback.h" #include "level\layertilesolid.h" #include "level\layertile3d.h" +#include "level\layercollision.h" #include "pad\pads.h" - DVECTOR CLevel::MapPos; /*****************************************************************************/ @@ -97,6 +97,13 @@ sTile *TileList=(sTile*)MakePtr(LevelHdr,LevelHdr->TileList); TileLayers[CLayerTile::LAYER_TILE_TYPE_FORE]=NewLayer; } */ +// Collision + if (LevelHdr->CollisionLayer) + { + sLayerHdr *Layer=(sLayerHdr*)MakePtr(LevelHdr,LevelHdr->CollisionLayer); + CollisionLayer=new ("Collision Layer") CLayerCollision(Layer); + } + } /*****************************************************************************/ diff --git a/source/level/level.h b/source/level/level.h index 5e5611c2f..9100022fc 100644 --- a/source/level/level.h +++ b/source/level/level.h @@ -6,10 +6,11 @@ #define __LEVEL_LEVEL_H__ #include "system\global.h" -#include "level/layertile.h" +#include "level/layertile.h" +#include "level/layercollision.h" /*****************************************************************************/ -class CLayer; +class CLayer; class CLevel { public: @@ -33,7 +34,9 @@ private: // Tile Layers - CLayerTile *TileLayers[CLayerTile::LAYER_TILE_TYPE_MAX]; + CLayerTile *TileLayers[CLayerTile::LAYER_TILE_TYPE_MAX]; +// Collision + CLayerCollision *CollisionLayer; }; /*****************************************************************************/ diff --git a/tools/Data/bin/MkLevel.exe b/tools/Data/bin/MkLevel.exe index a3f862623..f8a2f8bbb 100644 Binary files a/tools/Data/bin/MkLevel.exe and b/tools/Data/bin/MkLevel.exe differ