This commit is contained in:
Daveo 2000-12-07 15:56:20 +00:00
parent 7855e6d880
commit 194af8128e
13 changed files with 290 additions and 69 deletions

View File

@ -193,7 +193,7 @@ int Height=GetHeight();
{
sMapElem &ThisElem=Old.Get(X,Y);
ThisElem.Flags^=Flag;
Set((Width-1)-X,Y,ThisElem);
Set((Width-1)-X,Y,ThisElem,true);
}
}
@ -213,7 +213,7 @@ int Height=GetHeight();
{
sMapElem &ThisElem=Old.Get(X,Y);
ThisElem.Flags^=Flag;
Set(X,(Height-1)-Y,ThisElem);
Set(X,(Height-1)-Y,ThisElem,true);
}
}

View File

@ -50,7 +50,7 @@ COMMON_CCFLAGS := -Werror \
-I$(DDX_INC_DIR)\
-I$(MOD_INC_DIR)\
-I$(SOURCE_DIR)\
-I$(GIN_INC_DIR) \
-I$(DATA_INC_DIR) \
-I$(GAME_DATA_DIR) \
-I$(INC_DIR)

View File

@ -74,16 +74,13 @@ VLC_DIR := $(TOOL_DIR)/vlc
VLC_INC_DIR := $(VLC_DIR)/include
VLC_LIB_DIR := $(VLC_DIR)/lib
# GIN tools and includes
# Data tools and includes
# ---------------------
GIN_TOOL_DIR := $(TOOL_DIR)/gin
GIN_BIN_DIR := $(GIN_TOOL_DIR)/bin
GIN_INC_DIR := $(GIN_TOOL_DIR)/include
DATA_TOOL_DIR := $(TOOL_DIR)/data
DATA_BIN_DIR := $(DATA_TOOL_DIR)/bin
DATA_INC_DIR := $(DATA_TOOL_DIR)/include
GIN2MSH := $(GIN_BIN_DIR)/Gin2Msh -q
GIN2ACT := $(GIN_BIN_DIR)/Gin2Act -q
GIN2ANM := $(GIN_BIN_DIR)/Gin2Anm
GIN2LVL := $(GIN_BIN_DIR)/Gin2Kdt -q
MKLEVEL := $(DATA_BIN_DIR)/MkLevel -q
# Cygwin
# ------

View File

@ -84,6 +84,11 @@ gui_src := gbutton \
gtextbox \
gui
level_src := level \
layer \
layertile
locale_src := textdbase
mem_src := memory

View File

@ -113,6 +113,40 @@ $(UI_GFX_TEX_OUT) : $(UI_GFX_TEX_IN)
GFX_DATA_OUT += $(UI_GFX_TEX_OUT)
#----------------------------------------------------------------------------
#--- Levels -----------------------------------------------------------------
#----------------------------------------------------------------------------
LEVELS_OPTS := -t:8,1,1 -s:256
LEVELS_IN_DIR := $(GRAF_DIR)/levels
LEVELS_OUT_DIR := $(DATA_OUT)/levels
LEVELS_CHAPTERS := CHAPTER01 CHAPTER02 CHAPTER03 CHAPTER04 CHAPTER05
LEVELS_CHAPTER01 := LEVEL01
LEVELS_CHAPTER02 :=
LEVELS_CHAPTER03 :=
LEVELS_CHAPTER04 :=
LEVELS_CHAPTER05 :=
LEVELS_OUT_DIRS := $(foreach CHAPTER,$(LEVELS_CHAPTERS),$(LEVELS_OUT_DIR)/$(CHAPTER))
LEVELS_ALL_LIST := $(foreach CHAPTER,$(LEVELS_CHAPTERS),$(foreach LEVEL,$(LEVELS_$(CHAPTER)), $(CHAPTER)/$(LEVEL)/$(LEVEL) ))
LEVELS_LVL_IN := $(foreach LEVEL,$(LEVELS_ALL_LIST), $(LEVELS_IN_DIR)/$(LEVEL).pme )
LEVELS_LVL_OUT := $(foreach LEVEL,$(LEVELS_ALL_LIST), $(LEVELS_OUT_DIR)/$(LEVEL).lvl )
LEVELS_ALL_IN := $(LEVELS_LVL_IN)
LEVELS_ALL_OUT := $(LEVELS_LVL_OUT)
cleanlevels :
$(RM) -f $(LEVELS_ALL_OUT)
levels: $(LEVELS_ALL_IN)
$(LEVELS_ALL_OUT) : $(LEVELS_ALL_IN)
$(MKLEVEL) $(LEVELS_ALL_IN) -o:$(LEVELS_OUT_DIR)/chapter01 $(LEVELS_OPTS)
GFX_DATA_OUT += $(LEVELS_ALL_OUT)
#----------------------------------------------------------------------------
# Ingame graphic effects
@ -250,7 +284,8 @@ GFX_DATA_OUT += $(MUSIC_ALL_OUT)
#----------------------------------------------------------------------------
GRAF_DIRS_TO_MAKE += $(TRANS_OUT_DIR) \
$(UI_GFX_OUT_DIR)
$(UI_GFX_OUT_DIR) \
$(LEVELS_OUT_DIRS)
gdirs : $(GRAF_DIRS_TO_MAKE)
@ -275,7 +310,8 @@ cleanbiglump :
@$(GLECHO) Cleaned BigLump
$(BIGLUMP_OUT) : $(BIGLUMP_IN)
$(MAKEDATA) -b:$(OUT_DIR)/Data/ -s:$(GAME_DATA_DIR)/DataCache.Scr -o:$(BIGLUMP_OUT) -i:$(BIGLUMP_INC)
# @$(MAKEDATA) -b:$(OUT_DIR)/Data/ -s:$(GAME_DATA_DIR)/DataCache.Scr -o:$(BIGLUMP_OUT) -i:$(BIGLUMP_INC)
@$(MAKEDATA) -b:$(OUT_DIR)/Data/ -s:$(GAME_DATA_DIR)/DataCache.Scr -o:$(BIGLUMP_OUT) -i:$(BIGLUMP_INC)x
# @$(REDIR) $(TEMP_DIR)/BigLump.Scr $(BIGLUMP_IN)
# $(MAKEDATA) -b:$(OUT_DIR)/Data/ -s:$(GAME_DATA_DIR)/DataCache.Scr -s:$(TEMP_DIR)/BigLump.Scr -o:$(BIGLUMP_OUT) -i:$(BIGLUMP_INC)
@ -289,6 +325,7 @@ $(BIGLUMP_OUT) : $(BIGLUMP_IN)
# WARNING !!!! BigLump must be the last item that all is dependant on. GRL !!!!
all : dirs gdirs \
levels \
biglump
@$(ECHO) Graphics made

View File

@ -8,11 +8,14 @@
#include "system\vid.h"
#include "gfx\prim.h"
#include "utils\utils.h"
#include "level\level.h"
#include "game\game.h"
#include "system\gstate.h"
#include "gfx\font.h"
#include "gfx\fdata.h"
#include "level\level.h"
#ifndef __GFX_BUBICLES__
#include "gfx\bubicles.h"
#endif
@ -32,47 +35,35 @@ FontBank *CGameScene::s_genericFont;
CGameScene GameScene;
/*****************************************************************************/
// Note, do not load any data in this function
void CGameScene::init()
{
s_genericFont=new ("CGameScene::Init") FontBank();
s_genericFont->initialise( &standardFont );
s_genericFont->setColour( 255, 255 , 0 );
VidSetClearScreen(1);
s_genericFont=new ("CGameScene::Init") FontBank();
s_genericFont->initialise( &standardFont );
s_genericFont->setColour( 255, 255 , 0 );
VidSetClearScreen(1);
Level.init();
}
/*****************************************************************************/
void CGameScene::shutdown()
void CGameScene::shutdown()
{
s_genericFont->dump(); delete s_genericFont;
s_genericFont->dump(); delete s_genericFont;
Level.shutdown();
}
/*****************************************************************************/
int X=512/2;
int Y=256/2;
int Dx=+3;
int Dy=-2;
void CGameScene::render()
{
char *Str="Sponge\nBob\nSquare\nPants";
s_genericFont->print(X,Y,Str);
Level.render();
}
/*****************************************************************************/
void CGameScene::think(int _frames)
{
for(int i=0;i<_frames;i++)
{
X+=Dx; Y+=Dy;
if (X<0+4) {X=0+4; Dx=getRndRange(5)+1;}
if (X>512-64) {X=512-64; Dx=-(getRndRange(5)+1);}
if (Y<+4) {Y=0+4; Dy=getRndRange(5)+1;}
if (Y>256-64) {Y=256-64; Dy=-(getRndRange(5)+1);}
}
Level.think(_frames);
}
/*****************************************************************************/

View File

@ -5,11 +5,11 @@
#ifndef __GAME_GAME_H__
#define __GAME_GAME_H__
#include "system\gstate.h"
#include "system\gstate.h"
#include "level\level.h"
/*****************************************************************************/
class FontBank;
class FontBank;
class CGameScene : public CScene
{
@ -28,8 +28,9 @@ public:
private:
static FontBank *s_genericFont;
static class SpriteBank *s_sprites;
CLevel Level;
static FontBank *s_genericFont;
//static class SpriteBank *s_sprites; <-- Was causing compile error, sorry
};

View File

@ -4,12 +4,38 @@
#include "system\global.h"
#include <DStructs.h>
#include "utils\utils.h"
#include "gfx\prim.h"
#include "Layer.h"
#include "LayerTile.h"
enum
{
TILE_WIDTH=16,
TILE_HEIGHT=16,
};
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
CLayerTile::CLayerTile(sLayerHdr *Hdr,sTile *_TileList,sTri *_TriList,sQuad *_QuadList,sVtx *_VtxList) : CLayer(Hdr)
{
TileList=_TileList;
TriList=_TriList;
QuadList=_QuadList;
VtxList=_VtxList;
Map=(sTileMapElem*)MakePtr(Hdr,sizeof(sLayerHdr));
DAVE_DBGMSG("LayerTile\n");
}
/*****************************************************************************/
CLayerTile::~CLayerTile()
{
}
/*****************************************************************************/
int CLayerTile::GetLayerType(int SubType)
{
@ -28,6 +54,24 @@ int CLayerTile::GetLayerType(int SubType)
/*****************************************************************************/
void CLayerTile::init()
{
return;
int Width=GetWidth();
int Height=GetHeight();
int Size=Width*Height;
for (int i=0; i<Size; i++)
Map[i].Tile =0;
/*
for (int Y=0; Y<4; Y++)
{
for (int X=0; X<4; X++)
{
Map[X+(Y*Width)].Tile=X+(Y*4);
}
}
*/
for (int i=0; i<16; i++) Map[i].Tile=i;
}
/*****************************************************************************/
@ -36,10 +80,80 @@ void CLayerTile::shutdown()
}
/*****************************************************************************/
int XOfs=64;
int YOfs=64;
int Dx=0;
int Dy=0;
void CLayerTile::render()
{
int Width=GetWidth();
int Height=GetHeight();
POLY_FT4 *ft4;
sTileMapElem *ThisElem=Map;
XOfs+=Dx;
YOfs+=Dy;
for (int Y=0; Y<Height; Y++)
{
for (int X=0; X<Width; X++)
{
if (ThisElem->Tile)
{
sTile *ThisTile=&TileList[ThisElem->Tile];
if (ThisTile->TPage)
{
ft4=GetPrimFT4();
setShadeTex(ft4,1);
setSemiTrans(ft4,1);
ft4->tpage=ThisTile->TPage;
ft4->clut=ThisTile->Clut;
ft4->x0=(X*TILE_WIDTH)+XOfs; ft4->y0=(Y*TILE_HEIGHT)+YOfs;
ft4->x1=ft4->x0+TILE_WIDTH; ft4->y1=ft4->y0;
ft4->x2=ft4->x0; ft4->y2=ft4->y0+TILE_HEIGHT;
ft4->x3=ft4->x1; ft4->y3=ft4->y2;
*(u16*)&ft4->u0=*(u16*)ThisTile->uv0;
*(u16*)&ft4->u1=*(u16*)ThisTile->uv1;
*(u16*)&ft4->u2=*(u16*)ThisTile->uv2;
*(u16*)&ft4->u3=*(u16*)ThisTile->uv3;
setRGB0(ft4,255,255,255);
AddPrimToList(ft4,0);
}
else
{
}
}
ThisElem++;
}
}
}
/*
void CLayerTile::render()
{
int ListSize=186;
sTri *Tri=TriList;
POLY_FT3 *ft3;
POLY_FT4 *ft4;
sTile *ThisTile=TileList;
int X,Y;
X=XOfs;
Y=YOfs;
for (int i=0; i<ListSize; i++)
{
if (ThisTile->TriCount)
{
}
ThisTile++;
X+=16;
if (X>(512-64))
{
X=XOfs;
Y+=12;
}
}
}
*/
/*****************************************************************************/
void CLayerTile::think(int _frames)
{

View File

@ -19,6 +19,9 @@ public:
LAYER_TILE_SUBTYPE_MAX
};
CLayerTile(sLayerHdr *Hdr,sTile *_TileList,sTri *_TriList,sQuad *_QuadList,sVtx *_VtxList);
~CLayerTile();
static int GetLayerType(int SubType);
void init();
@ -27,6 +30,11 @@ static int GetLayerType(int SubType);
void think(int _frames);
private:
sTile *TileList;
sTri *TriList;
sQuad *QuadList;
sVtx *VtxList;
sTileMapElem *Map;
};

View File

@ -4,31 +4,107 @@
#include "system\global.h"
#include "fileio\fileio.h"
#include "utils\utils.h"
#include "gfx\tpage.h"
#include <DStructs.h>
#include "level\level.h"
#include "level\layer.h"
#include "level\layertile.h"
/*****************************************************************************/
CLevel::CLevel()
{
for (int i=0; i<CLayer::LAYER_TYPE_MAX; i++)
{
LayerList[i]=0;
}
}
/*****************************************************************************/
CLevel::~CLevel()
{
for (int i=0; i<CLayer::LAYER_TYPE_MAX; i++)
{
if (LayerList[i]) delete LayerList[i];
}
}
/*****************************************************************************/
void CLevel::init()
{
CFileIO::loadFile(CHAPTER01_LEVEL01_LVL,"Level Data");
LevelHdr=(sLvlHdr *)CFileIO::loadFile(CHAPTER01_LEVEL01_LVL,"Level Data");
TPLoadTex(CHAPTER01_LEVEL01_TEX);
LevelHdr->TriList=(sTri*)MakePtr(LevelHdr,(int)LevelHdr->TriList);
LevelHdr->QuadList=(sQuad*)MakePtr(LevelHdr,(int)LevelHdr->QuadList);
LevelHdr->VtxList=(sVtx*)MakePtr(LevelHdr,(int)LevelHdr->VtxList);
LevelHdr->TileList=(sTile*)MakePtr(LevelHdr,(int)LevelHdr->TileList);
DAVE_DBGMSG("LayerCount=%i\n",GetLayerCount());
LoadLayers();
for (int i=0; i<CLayer::LAYER_TYPE_MAX; i++)
{
if (LayerList[i]) LayerList[i]->init();
}
}
/*****************************************************************************/
void CLevel::LoadLayers()
{
int LayerCount=GetLayerCount();
int *HdrOfs=(int*)MakePtr(LevelHdr,sizeof(sLvlHdr));
for (int i=0; i<LayerCount; i++)
{
sLayerHdr *Hdr=(sLayerHdr*)MakePtr(LevelHdr,*HdrOfs++);
DAVE_DBGMSG("T:%i S:%i W:%i H:%i\n",Hdr->Type,Hdr->SubType,Hdr->Width,Hdr->Height);
int LayerType=CLayer::GetLayerType(Hdr->Type,Hdr->SubType);
switch (LayerType)
{
case CLayer::LAYER_TYPE_TILE_BACK:
LayerList[LayerType]=new ("Back Layer") CLayerTile(Hdr,LevelHdr->TileList, LevelHdr->TriList, LevelHdr->QuadList, LevelHdr->VtxList);
break;
case CLayer::LAYER_TYPE_TILE_MID:
LayerList[LayerType]=new ("Mid Layer") CLayerTile(Hdr,LevelHdr->TileList, LevelHdr->TriList, LevelHdr->QuadList, LevelHdr->VtxList);
break;
case CLayer::LAYER_TYPE_TILE_ACTION:
LayerList[LayerType]=new ("Action Layer") CLayerTile(Hdr,LevelHdr->TileList, LevelHdr->TriList, LevelHdr->QuadList, LevelHdr->VtxList);
break;
case CLayer::LAYER_TYPE_TILE_FORE:
LayerList[LayerType]=new ("Fore Layer") CLayerTile(Hdr,LevelHdr->TileList, LevelHdr->TriList, LevelHdr->QuadList, LevelHdr->VtxList);
break;
default:
DAVE_DBGMSG("%i\n",LayerType);
ASSERT(!"Unknown Layer");
break;
}
}
}
/*****************************************************************************/
void CLevel::shutdown()
{
MemFree(this->LvlData);
MemFree(LevelHdr);
}
/*****************************************************************************/
void CLevel::render()
{
for (int i=0; i<CLayer::LAYER_TYPE_MAX; i++)
{
if (LayerList[i]) LayerList[i]->render();
}
}
/*****************************************************************************/
void CLevel::think(int _frames)
{
for (int i=0; i<CLayer::LAYER_TYPE_MAX; i++)
{
if (LayerList[i]) LayerList[i]->think(_frames);
}
}

View File

@ -5,22 +5,30 @@
#ifndef __LEVEL_LEVEL_H__
#define __LEVEL_LEVEL_H__
#include "level/layer.h"
/*****************************************************************************/
class CLayer;
class CLevel
{
public:
CLevel(){}
virtual ~CLevel(){}
CLevel();
virtual ~CLevel();
// Scene Handlers
void init();
void shutdown();
void render();
void think(int _frames);
int GetLayerCount() {return(LevelHdr->LayerCount);}
void init();
void shutdown();
void render();
void think(int _frames);
private:
sLvlHdr *LvlData;
void LoadLayers();
sLvlHdr *LevelHdr;
CLayer *LayerList[CLayer::LAYER_TYPE_MAX];
};
/*****************************************************************************/

View File

@ -25,21 +25,6 @@
#define SCRATCH_RAM 0x1f800000
#define FAST_STACK (SCRATCH_RAM+0x3f0)
enum
{
FRACTION_SHIFT = 8,
};
enum DRAW_TYPE
{
DT_NORMAL,
DT_TRANSPARENT,
DT_SUBTRACT,
DT_ADDITION,
DT_MULTIPLY,
};
/*****************************************************************************/
#include "system\types.h"

View File

@ -7,9 +7,8 @@
#include "utils\mathmip.h"
#ifndef __GLOBAL_STRUCTS_HEADER__
#include "gstruct.h"
#endif
#include "Dstructs.h"
#ifndef __MATHTABLE_HEADER__
#include "utils\mathtab.h"
#endif