diff --git a/source/gfx/animtex.cpp b/source/gfx/animtex.cpp index 4fa0640bb..580ba55c2 100644 --- a/source/gfx/animtex.cpp +++ b/source/gfx/animtex.cpp @@ -33,7 +33,7 @@ CAnimTex::~CAnimTex() } /*****************************************************************************/ -void CAnimTex::AddAnimTex(sFrameHdr *Frame,FileEquate Filename) +void CAnimTex::AddAnimTex(sFrameHdr *Frame,int FrameNo,FileEquate Filename) { int TPageX,TPageY,X,Y,W,H; CAnimTex *ThisTex=new ("CAnimTex::AddAnimTex") CAnimTex; @@ -79,6 +79,8 @@ CAnimTex *ThisTex=new ("CAnimTex::AddAnimTex") CAnimTex; ThisTex->TPage=Frame->TPage; ThisTex->TexName=Filename; + ThisTex->FrameNo=FrameNo; + int Size=W*H; ThisTex->TexData=(u32*)MemAlloc(Size*sizeof(u16), "AnTx"); DrawSync(0); @@ -148,6 +150,26 @@ int Time = GameState::getFramesSinceLast(); } } +/*****************************************************************************/ +void CAnimTex::SetSpeed(FileEquate TexName,int Frm,int Speed) +{ +CAnimTex *ThisTex; + + ThisTex=AnimTexList; + + while(ThisTex) + { + if (ThisTex->TexName==TexName && ThisTex->FrameNo==Frm) + { + ThisTex->Speed=Speed; + return; + } + ThisTex=ThisTex->NextTex; + } + ASSERT(!"CAnimTex::SetSpeed - Frame not Found"); + +} + /*****************************************************************************/ /*****************************************************************************/ /*** Pak Tex Stuff ***********************************************************/ diff --git a/source/gfx/animtex.h b/source/gfx/animtex.h index 651444950..7797f0cc8 100644 --- a/source/gfx/animtex.h +++ b/source/gfx/animtex.h @@ -15,10 +15,11 @@ public: CAnimTex(); ~CAnimTex(); -static void AddAnimTex(sFrameHdr *Frame,FileEquate Filename); +static void AddAnimTex(sFrameHdr *Frame,int Frame,FileEquate Filename); static void AnimateTex(); static void GetTexData(); static void DumpThisTPage(FileEquate TexName); +static void SetSpeed(FileEquate Filename,int Frm,int Speed); private: CAnimTex *NextTex; @@ -27,6 +28,7 @@ private: s16 PixPerWord; u32 *TexData; FileEquate TexName; + int FrameNo; u8 TPage; }; diff --git a/source/gfx/tpage.cpp b/source/gfx/tpage.cpp index 39821ad6d..448e97cd1 100644 --- a/source/gfx/tpage.cpp +++ b/source/gfx/tpage.cpp @@ -26,13 +26,19 @@ MAX_TPAGES = 32, const int TPRawW=64; const int TPRawH=256; +struct sAnimTexInfo +{ + int Frame; + sFrameHdr FrameHdr; +}; + struct sTPageInfo { - s16 RefCount; - FileEquate TPageName; - s16 XOfs,YOfs; - u16 AnimTexCount; - sFrameHdr AnimTexFrame[TPAGE_MAX_ANIM_TEX]; + s16 RefCount; + FileEquate TPageName; + s16 XOfs,YOfs; + u16 AnimTexCount; + sAnimTexInfo AnimTexFrame[TPAGE_MAX_ANIM_TEX]; }; struct sTPageCache @@ -167,23 +173,23 @@ RECT Rect; } /*****************************************************************************/ -void AddAnimTexToList(sTPageInfo *Cache,sFrameHdr *FramePtr,int TPage,int Half) +void AddAnimTexToList(sTPageInfo *Cache,sFrameHdr *FramePtr,int Frm,int TPage,int Half) { -sFrameHdr *AT=&Cache->AnimTexFrame[Cache->AnimTexCount]; - MCmemcpy(AT,FramePtr,sizeof(sFrameHdr)); + MCmemcpy(&Cache->AnimTexFrame[Cache->AnimTexCount].FrameHdr,FramePtr,sizeof(sFrameHdr)); + Cache->AnimTexFrame[Cache->AnimTexCount].Frame=Frm; Cache->AnimTexCount++; } /*****************************************************************************/ TPAGE_DESC TPLoadTex(FileEquate Filename) { -TPAGE_DESC Desc; -sTPageHdr *TPHdr; -sFrameHdr *FramePtr; -u32 *VRAMData; -int TPage,Half; -sTPageInfo *Cache; +TPAGE_DESC Desc; +sTPageHdr *TPHdr; +sFrameHdr *FramePtr; +u32 *VRAMData; +int TPage,Half; +sTPageInfo *Cache; // Is it already loaded in TCache? IsTPageInCache(Filename,TPage,Half); @@ -193,7 +199,6 @@ sTPageInfo *Cache; // DBG_MSG2("TPLoadTex Cached (%i,%i)",TPage,Half); s_TPCache[TPage].Info[Half].RefCount++; Cache=&s_TPCache[TPage].Info[Half]; - FramePtr=&Cache->AnimTexFrame[0]; } else { // Better load it then @@ -205,7 +210,8 @@ sTPageInfo *Cache; Cache=FindSpareTPage(Filename,TPage,Half,TPHdr); for (int Frm=0;FrmNoOfFrames; Frm++) // Add Animated Texture references { - if (FramePtr->Cycle) AddAnimTexToList(Cache,FramePtr++,TPage,Half); + if (FramePtr->Cycle) AddAnimTexToList(Cache,FramePtr,Frm,TPage,Half); + FramePtr++; } TPLoadVRam(TPHdr, TPage,Half,VRAMData); MemFree(TPHdr); @@ -213,8 +219,8 @@ sTPageInfo *Cache; // If first instance, add animated textures if (Cache->RefCount==1) { - FramePtr=Cache->AnimTexFrame; - for (int Frm=0; FrmAnimTexCount; Frm++) CAnimTex::AddAnimTex(FramePtr++,Filename); + sAnimTexInfo *ATexPtr=Cache->AnimTexFrame; + for (int Frm=0; FrmAnimTexCount; Frm++) CAnimTex::AddAnimTex(&ATexPtr[Frm].FrameHdr,ATexPtr[Frm].Frame,Filename); } Desc.Half= Half; @@ -281,7 +287,7 @@ int ReadLeft; FramePtr=*hdrs; for (int Frm=0;FrmCycle) AddAnimTexToList(Cache,FramePtr++,TPage,Half); + if (FramePtr->Cycle) AddAnimTexToList(Cache,FramePtr++,Frm,TPage,Half); } Cache->RefCount=1; @@ -295,8 +301,8 @@ int ReadLeft; // If first instance, add animated textures if (Cache->RefCount==1) { - FramePtr=Cache->AnimTexFrame; - for (int Frm=0; FrmAnimTexCount; Frm++) CAnimTex::AddAnimTex(FramePtr++,Filename); + sAnimTexInfo *ATexPtr=Cache->AnimTexFrame; + for (int Frm=0; FrmAnimTexCount; Frm++) CAnimTex::AddAnimTex(&ATexPtr[Frm].FrameHdr,ATexPtr[Frm].Frame,Filename); } Desc.Half= Half; diff --git a/source/utils/mathtab.H b/source/utils/mathtab.H index 01747e5ab..27862c689 100644 --- a/source/utils/mathtab.H +++ b/source/utils/mathtab.H @@ -13,16 +13,17 @@ /*****************************************************************************/ extern VECTOR upVec; -extern const s16 ACosTable[4097]; +//extern const s16 ACosTable[4097]; extern const s16 SinTable[1024]; -extern const s32 OneSinTable[1024]; +//extern const s32 OneSinTable[1024]; /*****************************************************************************/ +/* inline s32 macos(const s32 &a) { return(ACosTable[a>>1]); } - +*/ /*****************************************************************************/ inline s32 msin(const s32 &a) @@ -66,7 +67,7 @@ inline s32 mcos(const s32 &a) } /*****************************************************************************/ - +/* inline s32 monesin(const s32 &a) { if (a>3071) @@ -85,7 +86,7 @@ inline s32 monesin(const s32 &a) return(OneSinTable[a]); } } - +*/ /*****************************************************************************/ /* #define msin(x) rsin((x)) diff --git a/source/utils/sincos.cpp b/source/utils/sincos.cpp index ecf123864..514c0a5d4 100644 --- a/source/utils/sincos.cpp +++ b/source/utils/sincos.cpp @@ -7,6 +7,7 @@ VECTOR upVec = { 0, ONE, 0, 0 }; /*****************************************************************************/ +/* s16 ACosTable[4097] = { 2047 ,2027 ,2019 ,2012 ,2007 ,2002 ,1998 ,1994 ,1990 ,1986 ,1983 ,1980 ,1977 ,1974 ,1971 ,1969 , 1966 ,1963 ,1961 ,1959 ,1956 ,1954 ,1952 ,1950 ,1948 ,1946 ,1944 ,1942 ,1940 ,1938 ,1936 ,1934 , @@ -265,7 +266,7 @@ s16 ACosTable[4097] = { 115 ,113 ,111 ,109 ,107 ,105 ,103 ,101 ,99 ,97 ,95 ,93 ,91 ,88 ,86 ,84 , 81 ,78 ,76 ,73 ,70 ,67 ,64 ,61 ,57 ,53 ,49 ,45 ,40 ,35 ,28 ,20 , 0 }; - +*/ s16 SinTable[1024] = { 0 ,6 ,12 ,18 ,25 ,31 ,37 ,43 ,50 ,56 ,62 ,69 ,75 ,81 ,87 ,94 , @@ -333,7 +334,7 @@ s16 SinTable[1024] = { 4091 ,4091 ,4091 ,4091 ,4092 ,4092 ,4092 ,4092 ,4093 ,4093 ,4093 ,4093 ,4094 ,4094 ,4094 ,4094 , 4094 ,4094 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 }; - +/* s32 OneSinTable[1024] = { 0 ,2670177 ,1335090 ,890062 ,667548 ,534040 ,445035 ,381461 ,333780 ,296695 ,267028 ,242754 ,222527 ,205411 ,190741 ,178027 , 166902 ,157087 ,148362 ,140555 ,133529 ,127173 ,121394 ,116118 ,111282 ,106833 ,102726 ,98923 ,95392 ,92105 ,89037 ,86167 , @@ -401,3 +402,4 @@ s32 OneSinTable[1024] = { 4097 ,4097 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 }; +*/ \ No newline at end of file