This commit is contained in:
parent
e24c93004d
commit
b9fa255cd3
5 changed files with 145 additions and 96 deletions
|
@ -139,6 +139,7 @@ hazard_src := hazard \
|
||||||
hbbarrel
|
hbbarrel
|
||||||
|
|
||||||
fx_src := fx \
|
fx_src := fx \
|
||||||
|
fxfallingtile \
|
||||||
fxjfish
|
fxjfish
|
||||||
|
|
||||||
projectl_src := projectl \
|
projectl_src := projectl \
|
||||||
|
|
|
@ -26,6 +26,8 @@ virtual void shutdown();
|
||||||
int getHeightFromGround(int _x,int _y,int _maxHeight=32);
|
int getHeightFromGround(int _x,int _y,int _maxHeight=32);
|
||||||
int getCollisionBlock(int _x,int _y) {return Map[(_x>>4)+((_y>>4)*MapWidth)];}
|
int getCollisionBlock(int _x,int _y) {return Map[(_x>>4)+((_y>>4)*MapWidth)];}
|
||||||
|
|
||||||
|
u8 *getMapPtr(int _x,int _y) {return(&Map[(_x>>4)+((_y>>4)*MapWidth)]);}
|
||||||
|
|
||||||
#ifdef __SHOW_COLLISION__
|
#ifdef __SHOW_COLLISION__
|
||||||
void render(DVECTOR &MapPos);
|
void render(DVECTOR &MapPos);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -44,6 +44,8 @@ virtual void render();
|
||||||
|
|
||||||
int GetMapOfs() {return(MapXY.vx+(MapXY.vy*MapWidth));}
|
int GetMapOfs() {return(MapXY.vx+(MapXY.vy*MapWidth));}
|
||||||
virtual sTileMapElem *GetMapPos() {return(Map+GetMapOfs());}
|
virtual sTileMapElem *GetMapPos() {return(Map+GetMapOfs());}
|
||||||
|
virtual sTileMapElem *getMapPtr(int _x,int _y) {return(&Map[(_x>>4)+((_y>>4)*MapWidth)]);}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
sLayerHdr *LayerHdr;
|
sLayerHdr *LayerHdr;
|
||||||
|
|
|
@ -85,12 +85,12 @@
|
||||||
#include "game\gameslot.h"
|
#include "game\gameslot.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "fx\fx.h"
|
||||||
|
#include "fx\fxfallingtile.h"
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
extern int s_globalLevelSelectThing;
|
sLvlTab LvlTable[]=
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
sLvlTab LvlTable[]=
|
|
||||||
{
|
{
|
||||||
// C1
|
// C1
|
||||||
{1,1, 21, LEVELS_CHAPTER01_LEVEL01_LVL,LEVELS_CHAPTER01_LEVEL01_TEX, CSoundMediator::SONG_CHAPTER1_LEVEL1},
|
{1,1, 21, LEVELS_CHAPTER01_LEVEL01_LVL,LEVELS_CHAPTER01_LEVEL01_TEX, CSoundMediator::SONG_CHAPTER1_LEVEL1},
|
||||||
|
@ -128,7 +128,7 @@ sLvlTab LvlTable[]=
|
||||||
{6,99, 0, LEVELS_FMA_SHADYSHOALS_LVL,LEVELS_FMA_SHADYSHOALS_TEX, CSoundMediator::SONG_TITLE},
|
{6,99, 0, LEVELS_FMA_SHADYSHOALS_LVL,LEVELS_FMA_SHADYSHOALS_TEX, CSoundMediator::SONG_TITLE},
|
||||||
|
|
||||||
};
|
};
|
||||||
const static int LvlTableSize=sizeof(LvlTable)/sizeof(sLvlTab);
|
const int LvlTableSize=sizeof(LvlTable)/sizeof(sLvlTab);
|
||||||
|
|
||||||
const FileEquate loadingScreens[6]=
|
const FileEquate loadingScreens[6]=
|
||||||
{
|
{
|
||||||
|
@ -141,38 +141,18 @@ const FileEquate loadingScreens[6]=
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
DVECTOR CLevel::MapPos;
|
DVECTOR CLevel::MapPos;
|
||||||
DVECTOR CLevel::s_playerSpawnPos;
|
DVECTOR CLevel::s_playerSpawnPos;
|
||||||
|
sLevelHdr *CLevel::LevelHdr;
|
||||||
|
|
||||||
u8 CLevel::m_isBossRespawn;
|
u8 CLevel::m_isBossRespawn;
|
||||||
s32 CLevel::m_bossHealth;
|
s32 CLevel::m_bossHealth;
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
CLevel::CLevel()
|
CLevel::CLevel()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
bool CLevel::GetNextLevel(int &Lvl)
|
|
||||||
{
|
|
||||||
bool Finished=false;
|
|
||||||
Lvl++;
|
|
||||||
// TMP
|
|
||||||
if (Lvl>=LvlTableSize) Lvl=0;
|
|
||||||
// Skip Blanks
|
|
||||||
while (CFileIO::getFileSize(LvlTable[Lvl ].LevelFilename)<=10000) // Dodgy blank level skip
|
|
||||||
{
|
|
||||||
Lvl++;
|
|
||||||
if (Lvl>=LvlTableSize) Lvl=0;
|
|
||||||
}
|
|
||||||
// End TMP
|
|
||||||
/*** E3 Bodge ***/
|
|
||||||
#if !defined(__USER_sbart__)
|
|
||||||
if (Lvl>2) Lvl=0;
|
|
||||||
#endif
|
|
||||||
/****************/
|
|
||||||
return(Finished);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
void CLevel::init(int LevelNo)
|
void CLevel::init(int LevelNo)
|
||||||
{
|
{
|
||||||
|
@ -205,6 +185,26 @@ sLvlTab *lvlTab=&LvlTable[LevelNo];
|
||||||
m_bossHealth = 0;
|
m_bossHealth = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
bool CLevel::GetNextLevel(int &Lvl)
|
||||||
|
{
|
||||||
|
bool Finished=false;
|
||||||
|
Lvl++;
|
||||||
|
|
||||||
|
if (Lvl>=LvlTableSize)
|
||||||
|
{
|
||||||
|
Lvl=0;
|
||||||
|
Finished=true;
|
||||||
|
}
|
||||||
|
// End TMP
|
||||||
|
/*** E3 Bodge ***/
|
||||||
|
#if !defined(__USER_sbart__)
|
||||||
|
if (Lvl>2) Lvl=0;
|
||||||
|
#endif
|
||||||
|
/****************/
|
||||||
|
return(Finished);
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
void CLevel::DisplayLoadingScreen(sLvlTab *lvlTab)
|
void CLevel::DisplayLoadingScreen(sLvlTab *lvlTab)
|
||||||
{
|
{
|
||||||
|
@ -654,26 +654,64 @@ sLayerHdr *layer;
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
int CLevel::getCurrentChapter()
|
void CLevel::destroyMapArea(DVECTOR const &Pos)
|
||||||
{
|
{
|
||||||
return( LvlTable[s_globalLevelSelectThing].Chapter );
|
DVECTOR TL,BR;
|
||||||
|
const int ColT=COLLISION_TYPE_STICKY;
|
||||||
|
|
||||||
|
|
||||||
|
TL.vx=Pos.vx&-16;;
|
||||||
|
TL.vy=Pos.vy&-16;;
|
||||||
|
BR=TL;
|
||||||
|
|
||||||
|
if (CollisionLayer->getCollisionBlock(TL.vx,TL.vy)>>COLLISION_TYPE_FLAG_SHIFT==ColT)printf ("!!");
|
||||||
|
|
||||||
|
// Left
|
||||||
|
while (CollisionLayer->getCollisionBlock(TL.vx-16,TL.vy)>>COLLISION_TYPE_FLAG_SHIFT==ColT) TL.vx-=16;
|
||||||
|
// Top
|
||||||
|
while (CollisionLayer->getCollisionBlock(TL.vx,TL.vy-16)>>COLLISION_TYPE_FLAG_SHIFT==ColT) TL.vy-=16;
|
||||||
|
// Right
|
||||||
|
while (CollisionLayer->getCollisionBlock(BR.vx+16,BR.vy)>>COLLISION_TYPE_FLAG_SHIFT==ColT) BR.vx+=16;
|
||||||
|
// Bottom
|
||||||
|
while (CollisionLayer->getCollisionBlock(BR.vx,BR.vy+16)>>COLLISION_TYPE_FLAG_SHIFT==ColT) BR.vy+=16;
|
||||||
|
|
||||||
|
DVECTOR DP;
|
||||||
|
|
||||||
|
for (DP.vy=TL.vy; DP.vy<=BR.vy; DP.vy+=16)
|
||||||
|
{
|
||||||
|
for (DP.vx=TL.vx; DP.vx<=BR.vx; DP.vx+=16)
|
||||||
|
{
|
||||||
|
u8 *ColElem=CollisionLayer->getMapPtr(DP.vx,DP.vy);
|
||||||
|
|
||||||
|
if (*ColElem>>COLLISION_TYPE_FLAG_SHIFT==COLLISION_TYPE_STICKY)
|
||||||
|
{
|
||||||
|
sTileMapElem *MapElem=TileLayers[CLayerTile::LAYER_TILE_TYPE_ACTION]->getMapPtr(DP.vx,DP.vy);
|
||||||
|
CFXFallingTile *FX=(CFXFallingTile*)CFX::Create(CFX::FX_TYPE_FALLINGTILE,DP);
|
||||||
|
FX->SetTile(MapElem->Tile);
|
||||||
|
MapElem->Tile=0;
|
||||||
|
*ColElem=0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*****************************************************************************/
|
void CLevel::destroyMapTile(DVECTOR const &Pos)
|
||||||
/*****************************************************************************/
|
|
||||||
int CLevel::getCurrentChapterLevel()
|
|
||||||
{
|
{
|
||||||
return( LvlTable[s_globalLevelSelectThing].Level );
|
u8 *ColElem=CollisionLayer->getMapPtr(Pos.vx,Pos.vy);
|
||||||
|
sTileMapElem *MapElem=TileLayers[CLayerTile::LAYER_TILE_TYPE_ACTION]->getMapPtr(Pos.vx,Pos.vy);
|
||||||
|
|
||||||
|
// *ColElem=0;
|
||||||
|
|
||||||
|
if (MapElem->Tile)
|
||||||
|
{
|
||||||
|
CFXFallingTile *FX=(CFXFallingTile*)CFX::Create(CFX::FX_TYPE_FALLINGTILE,Pos);
|
||||||
|
FX->SetTile(MapElem->Tile);
|
||||||
|
MapElem->Tile=0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
int CLevel::getTotalSpatCount()
|
|
||||||
{
|
|
||||||
return( LvlTable[s_globalLevelSelectThing].totalSpatCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
|
@ -10,8 +10,6 @@
|
||||||
#include "level/layercollision.h"
|
#include "level/layercollision.h"
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
// Woo.. this is getting big now isn't it?
|
|
||||||
// Nope.. it's shrunk again! :)
|
|
||||||
struct sLvlTab
|
struct sLvlTab
|
||||||
{
|
{
|
||||||
u16 Chapter,Level;
|
u16 Chapter,Level;
|
||||||
|
@ -20,6 +18,10 @@ struct sLvlTab
|
||||||
int songId;
|
int songId;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
extern int s_globalLevelSelectThing;
|
||||||
|
extern sLvlTab LvlTable[];
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
class CLayer;
|
class CLayer;
|
||||||
class CLevel
|
class CLevel
|
||||||
|
@ -27,74 +29,78 @@ class CLevel
|
||||||
public:
|
public:
|
||||||
CLevel();
|
CLevel();
|
||||||
// Scene Handlers
|
// Scene Handlers
|
||||||
void init(int LevelNo);
|
void init(int LevelNo);
|
||||||
void shutdown();
|
void shutdown();
|
||||||
void render();
|
void render();
|
||||||
void think(int _frames);
|
void think(int _frames);
|
||||||
|
|
||||||
void setCameraCentre(DVECTOR _pos) {MapPos=_pos;}
|
void setCameraCentre(DVECTOR _pos) {MapPos=_pos;}
|
||||||
static DVECTOR const &getCameraPos() {return MapPos;}
|
static DVECTOR const &getCameraPos() {return MapPos;}
|
||||||
static DVECTOR const &getPlayerSpawnPos() {return s_playerSpawnPos;}
|
static DVECTOR const &getPlayerSpawnPos() {return s_playerSpawnPos;}
|
||||||
|
|
||||||
static int getCurrentChapter();
|
static int getCurrentChapter() {return( LvlTable[s_globalLevelSelectThing].Chapter );}
|
||||||
static int getCurrentChapterLevel();
|
static int getCurrentChapterLevel() {return( LvlTable[s_globalLevelSelectThing].Level);}
|
||||||
static int getTotalSpatCount();
|
static int getTotalSpatCount() {return( LvlTable[s_globalLevelSelectThing].totalSpatCount);}
|
||||||
|
|
||||||
int getActorCount() {return ActorCount;}
|
void destroyMapArea(DVECTOR const &Pos);
|
||||||
sThingActor **getActorList() {return ActorList;}
|
void destroyMapTile(DVECTOR const &Pos);
|
||||||
int getPlatformCount() {return PlatformCount;}
|
|
||||||
sThingPlatform **getPlatformList() {return PlatformList;}
|
|
||||||
int getHazardCount() {return HazardCount;}
|
|
||||||
sThingHazard **getHazardList() {return HazardList;}
|
|
||||||
|
|
||||||
CLayerCollision *getCollisionLayer() {return CollisionLayer;}
|
int getActorCount() {return ActorCount;}
|
||||||
DVECTOR getMapSize();
|
sThingActor **getActorList() {return ActorList;}
|
||||||
|
int getPlatformCount() {return PlatformCount;}
|
||||||
|
sThingPlatform **getPlatformList() {return PlatformList;}
|
||||||
|
int getHazardCount() {return HazardCount;}
|
||||||
|
sThingHazard **getHazardList() {return HazardList;}
|
||||||
|
|
||||||
bool GetNextLevel(int &Lvl);
|
CLayerCollision *getCollisionLayer() {return CollisionLayer;}
|
||||||
|
DVECTOR getMapSize();
|
||||||
|
|
||||||
void respawnLevel();
|
bool GetNextLevel(int &Lvl);
|
||||||
|
|
||||||
static u8 getIsBossRespawn() {return m_isBossRespawn;}
|
void respawnLevel();
|
||||||
static s32 getBossHealth() {return m_bossHealth;}
|
static sLevelHdr *getLevelHdr() {return(LevelHdr);}
|
||||||
static void setIsBossRespawn( u8 newIsBossRespawn ) {m_isBossRespawn=newIsBossRespawn;}
|
|
||||||
static void setBossHealth( s32 newBossHealth ) {m_bossHealth=newBossHealth;}
|
static u8 getIsBossRespawn() {return m_isBossRespawn;}
|
||||||
|
static s32 getBossHealth() {return m_bossHealth;}
|
||||||
|
static void setIsBossRespawn( u8 newIsBossRespawn) {m_isBossRespawn=newIsBossRespawn;}
|
||||||
|
static void setBossHealth( s32 newBossHealth ) {m_bossHealth=newBossHealth;}
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void initLayers();
|
void initLayers();
|
||||||
void initThings(int _respawningLevel);
|
void initThings(int _respawningLevel);
|
||||||
|
|
||||||
void DisplayLoadingScreen(sLvlTab *lvlTab);
|
void DisplayLoadingScreen(sLvlTab *lvlTab);
|
||||||
|
|
||||||
sLevelHdr *LevelHdr;
|
static sLevelHdr *LevelHdr;
|
||||||
|
|
||||||
static DVECTOR MapPos;
|
static DVECTOR MapPos;
|
||||||
static DVECTOR s_playerSpawnPos;
|
static DVECTOR s_playerSpawnPos;
|
||||||
|
TPAGE_DESC m_levelTPage;
|
||||||
TPAGE_DESC m_levelTPage;
|
|
||||||
|
|
||||||
// Tile Layers
|
// Tile Layers
|
||||||
CLayerTile *TileLayers[CLayerTile::LAYER_TILE_TYPE_MAX];
|
CLayerTile *TileLayers[CLayerTile::LAYER_TILE_TYPE_MAX];
|
||||||
|
|
||||||
// Collision
|
// Collision
|
||||||
CLayerCollision *CollisionLayer;
|
CLayerCollision *CollisionLayer;
|
||||||
|
|
||||||
// Things
|
// Things
|
||||||
int ActorCount;
|
int ActorCount;
|
||||||
sThingActor **ActorList;
|
sThingActor **ActorList;
|
||||||
int ItemCount;
|
int ItemCount;
|
||||||
sThingItem *ItemList;
|
sThingItem *ItemList;
|
||||||
int PlatformCount;
|
int PlatformCount;
|
||||||
sThingPlatform **PlatformList;
|
sThingPlatform **PlatformList;
|
||||||
int TriggerCount;
|
int TriggerCount;
|
||||||
sThingTrigger *TriggerList;
|
sThingTrigger *TriggerList;
|
||||||
int FXCount;
|
int FXCount;
|
||||||
sThingFX *FXList;
|
sThingFX *FXList;
|
||||||
int HazardCount;
|
int HazardCount;
|
||||||
sThingHazard **HazardList;
|
sThingHazard **HazardList;
|
||||||
|
|
||||||
|
static u8 m_isBossRespawn;
|
||||||
|
static s32 m_bossHealth;
|
||||||
|
|
||||||
static u8 m_isBossRespawn;
|
|
||||||
static s32 m_bossHealth;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue