From 194af8128e2f98b1202eb6e421a0559c664b2c0e Mon Sep 17 00:00:00 2001 From: Daveo Date: Thu, 7 Dec 2000 15:56:20 +0000 Subject: [PATCH] --- Utils/MapEdit/Map.cpp | 4 +- build/ccopt.mak | 2 +- build/globals.mak | 13 ++--- makefile.gaz | 5 ++ makefile.gfx | 41 ++++++++++++- source/game/game.cpp | 37 +++++------- source/game/game.h | 11 ++-- source/level/layertile.cpp | 114 +++++++++++++++++++++++++++++++++++++ source/level/layertile.h | 8 +++ source/level/level.cpp | 82 +++++++++++++++++++++++++- source/level/level.h | 22 ++++--- source/system/global.h | 15 ----- source/utils/utils.h | 5 +- 13 files changed, 290 insertions(+), 69 deletions(-) diff --git a/Utils/MapEdit/Map.cpp b/Utils/MapEdit/Map.cpp index 269a36cae..0dd1d0e94 100644 --- a/Utils/MapEdit/Map.cpp +++ b/Utils/MapEdit/Map.cpp @@ -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); } } diff --git a/build/ccopt.mak b/build/ccopt.mak index 90e8d0d3e..c33fa8c8f 100644 --- a/build/ccopt.mak +++ b/build/ccopt.mak @@ -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) diff --git a/build/globals.mak b/build/globals.mak index 0f06e4447..563b90c6d 100644 --- a/build/globals.mak +++ b/build/globals.mak @@ -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 # ------ diff --git a/makefile.gaz b/makefile.gaz index 7801f296c..7334c39a3 100644 --- a/makefile.gaz +++ b/makefile.gaz @@ -84,6 +84,11 @@ gui_src := gbutton \ gtextbox \ gui +level_src := level \ + layer \ + layertile + + locale_src := textdbase mem_src := memory diff --git a/makefile.gfx b/makefile.gfx index 90dffa0ca..035a875e1 100644 --- a/makefile.gfx +++ b/makefile.gfx @@ -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 diff --git a/source/game/game.cpp b/source/game/game.cpp index bfe0a9e33..185b78bcf 100644 --- a/source/game/game.cpp +++ b/source/game/game.cpp @@ -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); } /*****************************************************************************/ diff --git a/source/game/game.h b/source/game/game.h index 97c235861..bdce70746 100644 --- a/source/game/game.h +++ b/source/game/game.h @@ -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 }; diff --git a/source/level/layertile.cpp b/source/level/layertile.cpp index 1c494051f..6f576705c 100644 --- a/source/level/layertile.cpp +++ b/source/level/layertile.cpp @@ -4,12 +4,38 @@ #include "system\global.h" #include +#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; iTile) + { + 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; iTriCount) + { + } + ThisTile++; + X+=16; + if (X>(512-64)) + { + X=XOfs; + Y+=12; + } + } } +*/ /*****************************************************************************/ void CLayerTile::think(int _frames) { diff --git a/source/level/layertile.h b/source/level/layertile.h index 4f7e12b6d..260921512 100644 --- a/source/level/layertile.h +++ b/source/level/layertile.h @@ -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; }; diff --git a/source/level/level.cpp b/source/level/level.cpp index 58bee5ca6..9d244588e 100644 --- a/source/level/level.cpp +++ b/source/level/level.cpp @@ -4,31 +4,107 @@ #include "system\global.h" #include "fileio\fileio.h" +#include "utils\utils.h" +#include "gfx\tpage.h" #include #include "level\level.h" +#include "level\layer.h" +#include "level\layertile.h" + +/*****************************************************************************/ +CLevel::CLevel() +{ + for (int i=0; iTriList=(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; iinit(); + } + +} + +/*****************************************************************************/ +void CLevel::LoadLayers() +{ +int LayerCount=GetLayerCount(); +int *HdrOfs=(int*)MakePtr(LevelHdr,sizeof(sLvlHdr)); + + for (int i=0; iType,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; irender(); + } } /*****************************************************************************/ void CLevel::think(int _frames) { + for (int i=0; ithink(_frames); + } } diff --git a/source/level/level.h b/source/level/level.h index 08e1e679e..54244b79f 100644 --- a/source/level/level.h +++ b/source/level/level.h @@ -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]; }; /*****************************************************************************/ diff --git a/source/system/global.h b/source/system/global.h index 933c0f542..63c5bc0f4 100644 --- a/source/system/global.h +++ b/source/system/global.h @@ -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" diff --git a/source/utils/utils.h b/source/utils/utils.h index 7047fa170..139e182fa 100644 --- a/source/utils/utils.h +++ b/source/utils/utils.h @@ -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