From e59981cf945c6dfaebefa36a0a7e8f5d094e3769 Mon Sep 17 00:00:00 2001 From: Daveo Date: Wed, 4 Jul 2001 18:19:13 +0000 Subject: [PATCH] --- Utils/MkActor/MkActor.cpp | 58 +++++++++++++++++++++++++++++++++---- makefile.gaz | 2 +- source/fileio/fileio.cpp | 11 +++++++ source/fileio/fileio.h | 2 ++ source/fx/fx.h | 18 ++++++------ source/fx/fxbaseanim.h | 8 ++--- source/fx/fxbasetrail.h | 8 ++--- source/fx/fxfallingtile.h | 6 ++-- source/fx/fxgeyser.h | 6 ++-- source/fx/fxjfish.h | 6 ++-- source/fx/fxlaser.h | 6 ++-- source/fx/fxnrgbar.h | 6 ++-- source/fx/fxsmoke.h | 10 +++---- source/fx/fxthwack.h | 4 +-- source/gfx/animtex.cpp | 7 +++-- source/thing/thing.cpp | 18 ++---------- source/thing/thing.h | 50 ++++++++++++++++---------------- tools/Data/bin/MkActor.exe | Bin 73728 -> 73728 bytes 18 files changed, 139 insertions(+), 87 deletions(-) diff --git a/Utils/MkActor/MkActor.cpp b/Utils/MkActor/MkActor.cpp index cfb483982..24a8309da 100644 --- a/Utils/MkActor/MkActor.cpp +++ b/Utils/MkActor/MkActor.cpp @@ -142,6 +142,53 @@ int i,ListSize; //*************************************************************************** //*************************************************************************** //*************************************************************************** +#if 1 +void PakImage(sBmp &Image) +{ +#ifdef _DEBUG + const char *ExeName="tools\\lznp"; +#else + const char *ExeName="lznp.exe"; +#endif +const char *TmpName="Actor.Tmp"; +const char *PakName="Actor.Pak"; +char CmdStr[256]; +FILE *File; + +// Write normal file to temp + File=fopen(TmpName,"wb"); + if (!File) GObject::Error(ERR_FATAL,"Could not create temp file %s.",TmpName); + fwrite(Image.Psx,1,Image.PsxSize,File); + fclose(File); + +// Pak File by calling LZNP.exe + sprintf(CmdStr, "%s %s %s >nul",ExeName,TmpName, PakName); + system(CmdStr); + +// Read Pak File Back + remove(TmpName); // Delete Tmp File + File=fopen(PakName,"rb"); + if (!File) GObject::Error(ERR_FATAL,"Could not open temp Pak file %s.",PakName); + fseek(File,0,SEEK_END); + Image.PakSize=ftell(File); + fseek(File,0,SEEK_SET); + Image.Pak=(u8*)malloc(Image.PakSize*2); + ASSERT(Image.Pak); + fread(Image.Pak,1,Image.PakSize,File); + fclose(File); + remove(PakName); // Delete Pak File + +} +#else +void PakImage(sBmp &Image) +{ + Image.PakSize=PAK_findPakSize(Image.Psx,Image.PsxSize); + Image.Pak=(u8*)malloc(Image.PakSize); + ASSERT(Image.Pak); + PAK_doPak(Image.Pak,Image.Psx,Image.PsxSize); +} +#endif +//*************************************************************************** CMkActor::CMkActor(GString &ActorName,GString &ActorPath,GString &SpritePath) { Name=ActorName; @@ -543,13 +590,14 @@ int i,ListSize=BmpList.size(); { sBmp &ThisBmp=BmpList[i]; - printf("%s - Processing Frame %2d\\%2d\r",Name,i+1,ListSize); + printf("%s - Processing Frame %2d\\%2d\t\t\t\r",Name,i+1,ListSize); if (ThisBmp.Psx) { - ThisBmp.PakSize=PAK_findPakSize(ThisBmp.Psx,ThisBmp.PsxSize); - ThisBmp.Pak=(u8*)malloc(ThisBmp.PakSize); - ASSERT(ThisBmp.Pak); - PAK_doPak(ThisBmp.Pak,ThisBmp.Psx,ThisBmp.PsxSize); + PakImage(ThisBmp); +// ThisBmp.PakSize=PAK_findPakSize(ThisBmp.Psx,ThisBmp.PsxSize); +// ThisBmp.Pak=(u8*)malloc(ThisBmp.PakSize); +// ASSERT(ThisBmp.Pak); +// PAK_doPak(ThisBmp.Pak,ThisBmp.Psx,ThisBmp.PsxSize); } else { // Blank Frame diff --git a/makefile.gaz b/makefile.gaz index a11ec207a..b92d75174 100644 --- a/makefile.gaz +++ b/makefile.gaz @@ -358,7 +358,7 @@ triggers_src := trigger \ utils_src := utils \ sincos \ - pak + lznp utils_src_mip := mathmip \ replace diff --git a/source/fileio/fileio.cpp b/source/fileio/fileio.cpp index 5134c7e34..d1803055d 100644 --- a/source/fileio/fileio.cpp +++ b/source/fileio/fileio.cpp @@ -34,6 +34,7 @@ int CFileIO::FilePosList[FILEPOS_MAX]; sFAT *CFileIO::MainFAT=0; sASyncQueue CFileIO::ASyncQueue; bool CFileIO::ASyncFlag; +bool CFileIO::LogFlag; /*****************************************************************************/ sDataBank CFileIO::DataBank[DATABANK_MAX]= @@ -90,8 +91,13 @@ int FATSize=FileEquate_MAX*sizeof(sFAT); // CurrentDataBank=DATABANK_MAX; ASyncQueue.Status=BLStatusOffline; ASyncFlag=false; + LogFlag=false; +#if defined(__USER_daveo__) + LogFlag=true; +#endif } + /*****************************************************************************/ /*** Open ********************************************************************/ /*****************************************************************************/ @@ -192,6 +198,11 @@ u8 * CFileIO::loadFile( FileEquate file, char *allocName ) Length = getFileSize( file ); + if (LogFlag) + { + SYSTEM_DBGMSG("File: %i = %i",(int)file,Length); + } + buffer = (u8 *)MemAlloc( Length ,allocName); ASSERT( buffer ); #if defined(__CLIMAX_DEVKIT__) diff --git a/source/fileio/fileio.h b/source/fileio/fileio.h index b1d8d60ae..416c8deac 100644 --- a/source/fileio/fileio.h +++ b/source/fileio/fileio.h @@ -124,6 +124,7 @@ static void EnableASync(bool f) {ASyncFlag=f;} static void AddASyncFile(FileEquate file,u8 *Dst); static void LoadASyncFiles(); +static void setLogging(bool f) {LogFlag=f;} private: static void CheckChunk(); @@ -137,6 +138,7 @@ static DataBankEquate CurrentDataBank; static sFAT *MainFAT; static sASyncQueue ASyncQueue; static bool ASyncFlag; +static bool LogFlag; }; /*****************************************************************************/ diff --git a/source/fx/fx.h b/source/fx/fx.h index 0c008379b..c7b68825b 100644 --- a/source/fx/fx.h +++ b/source/fx/fx.h @@ -99,24 +99,24 @@ static CFX *Create(const FX_TYPE Type); static CFX *Create(const FX_TYPE Type,CThing *Parent); static CFX *Create(const FX_TYPE Type,DVECTOR const &Pos); -virtual bool alwaysThink() {return(Flags & FX_FLAG_SCREEN_FX);} -virtual void leftThinkZone(int _frames) {if (Flags & FX_FLAG_NO_THINK_KILL) killFX();} + bool alwaysThink() {return(Flags & FX_FLAG_SCREEN_FX);} + void leftThinkZone(int _frames) {if (Flags & FX_FLAG_NO_THINK_KILL) killFX();} -virtual void init(); + void init(); virtual void init(DVECTOR const &Pos); virtual void shutdown(); virtual void think(int _frames); virtual void render(); -virtual int canCollide() {return(Flags & FX_FLAG_INJURE_PLAYER);} -virtual void SetOtPos(int Ot) {OtPos=Ot;} -virtual void setLife(int L) {Life=L;} + int canCollide() {return(Flags & FX_FLAG_INJURE_PLAYER);} + void SetOtPos(int Ot) {OtPos=Ot;} + void setLife(int L) {Life=L;} -virtual void getFXRenderPos(DVECTOR &Pos); -virtual bool getFXParentPos(DVECTOR &Pos); + void getFXRenderPos(DVECTOR &Pos); + bool getFXParentPos(DVECTOR &Pos); virtual void killFX(); -virtual void toggleVisible() {Flags ^=FX_FLAG_HIDDEN;} + void toggleVisible() {Flags ^=FX_FLAG_HIDDEN;} protected: void collidedWith(CThing *_thisThing); diff --git a/source/fx/fxbaseanim.h b/source/fx/fxbaseanim.h index 6ce5f2e59..e0d6ecd87 100644 --- a/source/fx/fxbaseanim.h +++ b/source/fx/fxbaseanim.h @@ -23,10 +23,10 @@ virtual void render(); void setBaseData(void *Data); -virtual void SetScale(int S) {CurrentScaleX=CurrentScaleY=S;} -virtual void SetScaleX(int S) {CurrentScaleX=S;} -virtual void SetScaleY(int S) {CurrentScaleY=S;} -virtual void SetHeading(int H) {CurrentHeading=H;} +/*virtual */void SetScale(int S) {CurrentScaleX=CurrentScaleY=S;} +/*virtual */void SetScaleX(int S) {CurrentScaleX=S;} +/*virtual */void SetScaleY(int S) {CurrentScaleY=S;} +/*virtual */void SetHeading(int H) {CurrentHeading=H;} protected: bool HasInit; diff --git a/source/fx/fxbasetrail.h b/source/fx/fxbasetrail.h index 885f4cf3f..74b77eaa4 100644 --- a/source/fx/fxbasetrail.h +++ b/source/fx/fxbasetrail.h @@ -31,11 +31,11 @@ public: LIST_SIZE = 16 }; -virtual void init(DVECTOR const &Pos); -virtual void think(int _frames); -virtual void render(); +/*virtual */void init(DVECTOR const &Pos); +/*virtual */void think(int _frames); +/*virtual */void render(); -virtual sList &moveHead(); +/*virtual */sList &moveHead(); protected: sList List[LIST_SIZE]; diff --git a/source/fx/fxfallingtile.h b/source/fx/fxfallingtile.h index b6a383c51..2ec52fab5 100644 --- a/source/fx/fxfallingtile.h +++ b/source/fx/fxfallingtile.h @@ -12,9 +12,9 @@ class CFXFallingTile : public CFX { public: -virtual void init(DVECTOR const &Pos); -virtual void think(int _frames); -virtual void render(); +/*virtual */void init(DVECTOR const &Pos); +/*virtual */void think(int _frames); +/*virtual */void render(); void SetTile(int T) {Tile=T;} protected: diff --git a/source/fx/fxgeyser.h b/source/fx/fxgeyser.h index 0bf97dfda..f6d11c03c 100644 --- a/source/fx/fxgeyser.h +++ b/source/fx/fxgeyser.h @@ -12,9 +12,9 @@ class CFXGeyser : public CFX { public: -virtual void init(DVECTOR const &Pos); -virtual void think(int Frames); -virtual void render(); +/*virtual */void init(DVECTOR const &Pos); +/*virtual */void think(int Frames); +/*virtual */void render(); void setHeight(int H) {TargetHeight=H;} diff --git a/source/fx/fxjfish.h b/source/fx/fxjfish.h index 6430f55ff..baf615676 100644 --- a/source/fx/fxjfish.h +++ b/source/fx/fxjfish.h @@ -12,9 +12,9 @@ class CFXJellyFishLegs : public CFX { public: -virtual void init(DVECTOR const &Pos); -virtual void think(int _frames); -virtual void render(); +/*virtual */void init(DVECTOR const &Pos); +/*virtual */void think(int _frames); +/*virtual */void render(); void Setup(int XOfs,int YOfs,bool XFlip); void setScale( s16 newScale ) {Scale = newScale;} diff --git a/source/fx/fxlaser.h b/source/fx/fxlaser.h index a6f656a20..4a241f223 100644 --- a/source/fx/fxlaser.h +++ b/source/fx/fxlaser.h @@ -14,8 +14,8 @@ public: void init(DVECTOR const &Pos); void think(int _frames); void render(); -virtual int canCollide() {return true;} -virtual int checkCollisionAgainst(CThing *_thisThing, int _frames); +/*virtual */int canCollide() {return true;} +/*virtual */int checkCollisionAgainst(CThing *_thisThing, int _frames); void setOffset(DVECTOR &Pos); void setTarget(DVECTOR &Pos); @@ -23,7 +23,7 @@ virtual int checkCollisionAgainst(CThing *_thisThing, int _frames); void setRGB(u8 r,u8 g,u8 b) {R=r; G=g; B=g;} protected: -virtual void collidedWith(CThing *_thisThing); +/*virtual */void collidedWith(CThing *_thisThing); DVECTOR Offset,Target; u8 R,G,B; }; diff --git a/source/fx/fxnrgbar.h b/source/fx/fxnrgbar.h index 97dcc0a2c..07ef4ce76 100644 --- a/source/fx/fxnrgbar.h +++ b/source/fx/fxnrgbar.h @@ -12,9 +12,9 @@ class CFXNRGBar : public CFX { public: -virtual void init(DVECTOR const &Pos); -virtual void think(int _frames); -virtual void render(); +/*virtual*/ void init(DVECTOR const &Pos); +/*virtual*/ void think(int _frames); +/*virtual*/ void render(); void SetMax(int Max) {MaxHealth=Max-1;} bool alwaysThink() {return(true);} diff --git a/source/fx/fxsmoke.h b/source/fx/fxsmoke.h index 56246ba72..231978d73 100644 --- a/source/fx/fxsmoke.h +++ b/source/fx/fxsmoke.h @@ -12,8 +12,8 @@ class CFXSmoke : public CFX { public: -virtual void init(DVECTOR const &Pos); -virtual void think(int _frames); +/*virtual*/ void init(DVECTOR const &Pos); +/*virtual*/ void think(int _frames); void setRate(int R) {Rate=R;} @@ -26,9 +26,9 @@ class CFXSmokePuff : public CFX { public: -virtual void init(DVECTOR const &Pos); -virtual void think(int _frames); -virtual void render(); +/*virtual*/ void init(DVECTOR const &Pos); +/*virtual*/ void think(int _frames); +/*virtual*/ void render(); protected: POLY_FT4 *Frame; diff --git a/source/fx/fxthwack.h b/source/fx/fxthwack.h index ff3370545..02add84da 100644 --- a/source/fx/fxthwack.h +++ b/source/fx/fxthwack.h @@ -11,8 +11,8 @@ class CFXThwack : public CFX { public: -virtual void init(DVECTOR const &Pos); -virtual void render(); +/*virtual*/ void init(DVECTOR const &Pos); +/*virtual*/ void render(); protected: u16 Angle,Scale; diff --git a/source/gfx/animtex.cpp b/source/gfx/animtex.cpp index 580ba55c2..a05f6473c 100644 --- a/source/gfx/animtex.cpp +++ b/source/gfx/animtex.cpp @@ -9,7 +9,8 @@ #include "gfx\animtex.h" #include "gfx\tpage.h" #include "utils\utils.h" -#include "utils\pak.h" +//#include "utils\pak.h" +#include "utils\lznp.h" #ifndef __SYSTEM_GSTATE_H__ #include "system\gstate.h" @@ -212,7 +213,9 @@ void CPakTex::DMAPakTex() for (int i=0; ienterThinkZone(_frames); +// thing->enterThinkZone(_frames); break; case 2: // 1 0 thing->leftThinkZone(_frames); @@ -896,7 +893,6 @@ void CThingManager::initFreeList() s_FreeList[ThisType.Type]=List; } - DuffList=0; #endif } @@ -916,7 +912,7 @@ void CThingManager::resetFreeList() while (ThisThing) { CThing *Next=ThisThing->NextFreeThing; - ThisThing->destroy(); +// ThisThing->destroy(); delete ThisThing; FreeListCount--; ThisThing=Next; @@ -924,14 +920,6 @@ void CThingManager::resetFreeList() List[t]=0; } } - CThing *Duff=DuffList; - while (Duff) - { - CThing *next=Duff->NextFreeThing; - delete Duff; - DuffListCount--; - Duff=next; - } #endif } @@ -981,7 +969,7 @@ CThing **List=s_FreeList[Type]; // Check its been aquired/set correctly - ASSERT(SubType!=1234); + ASSERT(SubType!=255); Thing->NextFreeThing=List[SubType]; List[SubType]=Thing; diff --git a/source/thing/thing.h b/source/thing/thing.h index 7c35988e6..ec1fc6a05 100644 --- a/source/thing/thing.h +++ b/source/thing/thing.h @@ -122,11 +122,11 @@ public: CThing() { initDef(); - m_SubType=1234; + m_SubType=255; } virtual ~CThing() {;} -virtual void initDef() +/*virtual*/ void initDef() { Pos.vx=0; Pos.vy=0; PosDelta=Pos; @@ -135,22 +135,22 @@ virtual void initDef() NextFreeThing=0; } -virtual TYPE getThingType()=0; +virtual TYPE getThingType()=0; -virtual void setThingSubType(int T) {m_SubType=T;} -virtual int getThingSubType() {return(m_SubType);} +/*virtual */void setThingSubType(int T) {m_SubType=T;} +/*virtual */int getThingSubType() {return(m_SubType);} -virtual void create() {;} // Once only init (for mem alloc) -virtual void init(); // re-usable init -virtual void shutdown(); // re-usable shutdown -virtual void destroy() {;} // memory clean up when totally killing the poor things +//virtual void create() {;} // Once only init (for mem alloc) +virtual void init(); // re-usable init +virtual void shutdown(); // re-usable shutdown +//virtual void destroy() {;} // memory clean up when totally killing the poor things -virtual void think(int _frames); -virtual void render(); - void setToShutdown(bool f=true) {m_isShuttingDown = f;} - u8 isSetToShutdown() {return( m_isShuttingDown);} -virtual int dontKillDuringLevelRespawn() {return false;} - void calcRenderPos(DVECTOR const &Pos,DVECTOR &renderPos); +virtual void think(int _frames); +virtual void render(); + void setToShutdown(bool f=true) {m_isShuttingDown = f;} + u8 isSetToShutdown() {return( m_isShuttingDown);} +virtual int dontKillDuringLevelRespawn() {return false;} + void calcRenderPos(DVECTOR const &Pos,DVECTOR &renderPos); // Linkage void addChild(CThing *Child); @@ -173,7 +173,7 @@ protected: // Parent Child Linkage CThing *ParentThing,*NextThing; - int m_numChildren; + u8 m_numChildren; public: // Collision/List Link List @@ -189,13 +189,13 @@ virtual CRECT const *getRenderBBox() {return &m_collisionArea;} virtual CRECT const *getThinkBBox() {return &m_collisionArea;} virtual bool alwaysThink() {return(false);} virtual void leftThinkZone(int _frames) {} -virtual void enterThinkZone(int _frames) {} +//virtual void enterThinkZone(int _frames) {} void ShowBBox(); DVECTOR const &getCollisionCentre() {return m_collisionCentre;} DVECTOR const &getCollisionCentreOffset() {return m_collisionCentreOffset;} int getCollisionRadius() {return m_collisionRadius;} -virtual CRECT const &getCollisionArea() {return m_collisionArea;} +/*virtual */CRECT const &getCollisionArea() {return m_collisionArea;} DVECTOR const &getCollisionSize() {return m_collisionSize;} virtual int canCollide() {return true;} @@ -215,20 +215,20 @@ public: bool canThink() {return (m_thinkFlag);} protected: - bool m_renderFlag,m_thinkFlag; DVECTOR m_RenderPos; - bool m_isShuttingDown; - int m_SubType; + u8 m_renderFlag,m_thinkFlag; + u8 m_isShuttingDown; + u8 m_SubType; protected: -virtual void setCollisionSize(int _w,int _h); -virtual void setCollisionCentreOffset(int _x,int _y) {m_collisionCentreOffset.vx=_x;m_collisionCentreOffset.vy=_y;} -virtual void setCollisionCentreOffset(DVECTOR xy) {m_collisionCentreOffset=xy;} +/*virtual */void setCollisionSize(int _w,int _h); +/*virtual */void setCollisionCentreOffset(int _x,int _y) {m_collisionCentreOffset.vx=_x;m_collisionCentreOffset.vy=_y;} +/*virtual */void setCollisionCentreOffset(DVECTOR xy) {m_collisionCentreOffset=xy;} private: DVECTOR m_collisionSize; DVECTOR m_collisionCentreOffset; - int m_collisionRadius; + s16 m_collisionRadius; CRECT m_collisionArea; DVECTOR m_collisionCentre; diff --git a/tools/Data/bin/MkActor.exe b/tools/Data/bin/MkActor.exe index b307594e69110c311c5916bf68c2386b5efb7102..aeea6e1db7856290526c24647e9da460cb79d319 100644 GIT binary patch delta 18227 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 aG?WySXp}G%