This commit is contained in:
Daveo 2001-05-16 19:06:47 +00:00
parent e24c93004d
commit b9fa255cd3
5 changed files with 145 additions and 96 deletions

View File

@ -139,6 +139,7 @@ hazard_src := hazard \
hbbarrel
fx_src := fx \
fxfallingtile \
fxjfish
projectl_src := projectl \

View File

@ -26,6 +26,8 @@ virtual void shutdown();
int getHeightFromGround(int _x,int _y,int _maxHeight=32);
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__
void render(DVECTOR &MapPos);
#endif

View File

@ -44,6 +44,8 @@ virtual void render();
int GetMapOfs() {return(MapXY.vx+(MapXY.vy*MapWidth));}
virtual sTileMapElem *GetMapPos() {return(Map+GetMapOfs());}
virtual sTileMapElem *getMapPtr(int _x,int _y) {return(&Map[(_x>>4)+((_y>>4)*MapWidth)]);}
protected:
sLayerHdr *LayerHdr;

View File

@ -85,12 +85,12 @@
#include "game\gameslot.h"
#endif
#include "fx\fx.h"
#include "fx\fxfallingtile.h"
/*****************************************************************************/
extern int s_globalLevelSelectThing;
/*****************************************************************************/
sLvlTab LvlTable[]=
sLvlTab LvlTable[]=
{
// C1
{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},
};
const static int LvlTableSize=sizeof(LvlTable)/sizeof(sLvlTab);
const int LvlTableSize=sizeof(LvlTable)/sizeof(sLvlTab);
const FileEquate loadingScreens[6]=
{
@ -141,38 +141,18 @@ const FileEquate loadingScreens[6]=
};
/*****************************************************************************/
DVECTOR CLevel::MapPos;
DVECTOR CLevel::s_playerSpawnPos;
DVECTOR CLevel::MapPos;
DVECTOR CLevel::s_playerSpawnPos;
sLevelHdr *CLevel::LevelHdr;
u8 CLevel::m_isBossRespawn;
s32 CLevel::m_bossHealth;
/*****************************************************************************/
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)
{
@ -205,6 +185,26 @@ sLvlTab *lvlTab=&LvlTable[LevelNo];
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)
{
@ -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;
}
}
}
}
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
int CLevel::getCurrentChapterLevel()
void CLevel::destroyMapTile(DVECTOR const &Pos)
{
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);
}
/*****************************************************************************/

View File

@ -10,8 +10,6 @@
#include "level/layercollision.h"
/*****************************************************************************/
// Woo.. this is getting big now isn't it?
// Nope.. it's shrunk again! :)
struct sLvlTab
{
u16 Chapter,Level;
@ -20,6 +18,10 @@ struct sLvlTab
int songId;
};
/*****************************************************************************/
extern int s_globalLevelSelectThing;
extern sLvlTab LvlTable[];
/*****************************************************************************/
class CLayer;
class CLevel
@ -27,74 +29,78 @@ class CLevel
public:
CLevel();
// Scene Handlers
void init(int LevelNo);
void shutdown();
void render();
void think(int _frames);
void init(int LevelNo);
void shutdown();
void render();
void think(int _frames);
void setCameraCentre(DVECTOR _pos) {MapPos=_pos;}
static DVECTOR const &getCameraPos() {return MapPos;}
static DVECTOR const &getPlayerSpawnPos() {return s_playerSpawnPos;}
void setCameraCentre(DVECTOR _pos) {MapPos=_pos;}
static DVECTOR const &getCameraPos() {return MapPos;}
static DVECTOR const &getPlayerSpawnPos() {return s_playerSpawnPos;}
static int getCurrentChapter();
static int getCurrentChapterLevel();
static int getTotalSpatCount();
static int getCurrentChapter() {return( LvlTable[s_globalLevelSelectThing].Chapter );}
static int getCurrentChapterLevel() {return( LvlTable[s_globalLevelSelectThing].Level);}
static int getTotalSpatCount() {return( LvlTable[s_globalLevelSelectThing].totalSpatCount);}
int getActorCount() {return ActorCount;}
sThingActor **getActorList() {return ActorList;}
int getPlatformCount() {return PlatformCount;}
sThingPlatform **getPlatformList() {return PlatformList;}
int getHazardCount() {return HazardCount;}
sThingHazard **getHazardList() {return HazardList;}
void destroyMapArea(DVECTOR const &Pos);
void destroyMapTile(DVECTOR const &Pos);
CLayerCollision *getCollisionLayer() {return CollisionLayer;}
DVECTOR getMapSize();
int getActorCount() {return ActorCount;}
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);
void respawnLevel();
static sLevelHdr *getLevelHdr() {return(LevelHdr);}
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;}
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:
void initLayers();
void initThings(int _respawningLevel);
void initLayers();
void initThings(int _respawningLevel);
void DisplayLoadingScreen(sLvlTab *lvlTab);
void DisplayLoadingScreen(sLvlTab *lvlTab);
sLevelHdr *LevelHdr;
static sLevelHdr *LevelHdr;
static DVECTOR MapPos;
static DVECTOR s_playerSpawnPos;
TPAGE_DESC m_levelTPage;
static DVECTOR MapPos;
static DVECTOR s_playerSpawnPos;
TPAGE_DESC m_levelTPage;
// Tile Layers
CLayerTile *TileLayers[CLayerTile::LAYER_TILE_TYPE_MAX];
CLayerTile *TileLayers[CLayerTile::LAYER_TILE_TYPE_MAX];
// Collision
CLayerCollision *CollisionLayer;
CLayerCollision *CollisionLayer;
// Things
int ActorCount;
sThingActor **ActorList;
int ItemCount;
sThingItem *ItemList;
int PlatformCount;
sThingPlatform **PlatformList;
int TriggerCount;
sThingTrigger *TriggerList;
int FXCount;
sThingFX *FXList;
int HazardCount;
sThingHazard **HazardList;
int ActorCount;
sThingActor **ActorList;
int ItemCount;
sThingItem *ItemList;
int PlatformCount;
sThingPlatform **PlatformList;
int TriggerCount;
sThingTrigger *TriggerList;
int FXCount;
sThingFX *FXList;
int HazardCount;
sThingHazard **HazardList;
static u8 m_isBossRespawn;
static s32 m_bossHealth;
static u8 m_isBossRespawn;
static s32 m_bossHealth;
};