This commit is contained in:
Daveo 2001-06-13 18:32:53 +00:00
parent e26b5acfd3
commit 777155f9c9
5 changed files with 63 additions and 30 deletions

View file

@ -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; int TPageX,TPageY,X,Y,W,H;
CAnimTex *ThisTex=new ("CAnimTex::AddAnimTex") CAnimTex; CAnimTex *ThisTex=new ("CAnimTex::AddAnimTex") CAnimTex;
@ -79,6 +79,8 @@ CAnimTex *ThisTex=new ("CAnimTex::AddAnimTex") CAnimTex;
ThisTex->TPage=Frame->TPage; ThisTex->TPage=Frame->TPage;
ThisTex->TexName=Filename; ThisTex->TexName=Filename;
ThisTex->FrameNo=FrameNo;
int Size=W*H; int Size=W*H;
ThisTex->TexData=(u32*)MemAlloc(Size*sizeof(u16), "AnTx"); ThisTex->TexData=(u32*)MemAlloc(Size*sizeof(u16), "AnTx");
DrawSync(0); 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 ***********************************************************/ /*** Pak Tex Stuff ***********************************************************/

View file

@ -15,10 +15,11 @@ public:
CAnimTex(); CAnimTex();
~CAnimTex(); ~CAnimTex();
static void AddAnimTex(sFrameHdr *Frame,FileEquate Filename); static void AddAnimTex(sFrameHdr *Frame,int Frame,FileEquate Filename);
static void AnimateTex(); static void AnimateTex();
static void GetTexData(); static void GetTexData();
static void DumpThisTPage(FileEquate TexName); static void DumpThisTPage(FileEquate TexName);
static void SetSpeed(FileEquate Filename,int Frm,int Speed);
private: private:
CAnimTex *NextTex; CAnimTex *NextTex;
@ -27,6 +28,7 @@ private:
s16 PixPerWord; s16 PixPerWord;
u32 *TexData; u32 *TexData;
FileEquate TexName; FileEquate TexName;
int FrameNo;
u8 TPage; u8 TPage;
}; };

View file

@ -26,13 +26,19 @@ MAX_TPAGES = 32,
const int TPRawW=64; const int TPRawW=64;
const int TPRawH=256; const int TPRawH=256;
struct sAnimTexInfo
{
int Frame;
sFrameHdr FrameHdr;
};
struct sTPageInfo struct sTPageInfo
{ {
s16 RefCount; s16 RefCount;
FileEquate TPageName; FileEquate TPageName;
s16 XOfs,YOfs; s16 XOfs,YOfs;
u16 AnimTexCount; u16 AnimTexCount;
sFrameHdr AnimTexFrame[TPAGE_MAX_ANIM_TEX]; sAnimTexInfo AnimTexFrame[TPAGE_MAX_ANIM_TEX];
}; };
struct sTPageCache 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++; Cache->AnimTexCount++;
} }
/*****************************************************************************/ /*****************************************************************************/
TPAGE_DESC TPLoadTex(FileEquate Filename) TPAGE_DESC TPLoadTex(FileEquate Filename)
{ {
TPAGE_DESC Desc; TPAGE_DESC Desc;
sTPageHdr *TPHdr; sTPageHdr *TPHdr;
sFrameHdr *FramePtr; sFrameHdr *FramePtr;
u32 *VRAMData; u32 *VRAMData;
int TPage,Half; int TPage,Half;
sTPageInfo *Cache; sTPageInfo *Cache;
// Is it already loaded in TCache? // Is it already loaded in TCache?
IsTPageInCache(Filename,TPage,Half); IsTPageInCache(Filename,TPage,Half);
@ -193,7 +199,6 @@ sTPageInfo *Cache;
// DBG_MSG2("TPLoadTex Cached (%i,%i)",TPage,Half); // DBG_MSG2("TPLoadTex Cached (%i,%i)",TPage,Half);
s_TPCache[TPage].Info[Half].RefCount++; s_TPCache[TPage].Info[Half].RefCount++;
Cache=&s_TPCache[TPage].Info[Half]; Cache=&s_TPCache[TPage].Info[Half];
FramePtr=&Cache->AnimTexFrame[0];
} }
else else
{ // Better load it then { // Better load it then
@ -205,7 +210,8 @@ sTPageInfo *Cache;
Cache=FindSpareTPage(Filename,TPage,Half,TPHdr); Cache=FindSpareTPage(Filename,TPage,Half,TPHdr);
for (int Frm=0;Frm<TPHdr->NoOfFrames; Frm++) // Add Animated Texture references for (int Frm=0;Frm<TPHdr->NoOfFrames; 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); TPLoadVRam(TPHdr, TPage,Half,VRAMData);
MemFree(TPHdr); MemFree(TPHdr);
@ -213,8 +219,8 @@ sTPageInfo *Cache;
// If first instance, add animated textures // If first instance, add animated textures
if (Cache->RefCount==1) if (Cache->RefCount==1)
{ {
FramePtr=Cache->AnimTexFrame; sAnimTexInfo *ATexPtr=Cache->AnimTexFrame;
for (int Frm=0; Frm<Cache->AnimTexCount; Frm++) CAnimTex::AddAnimTex(FramePtr++,Filename); for (int Frm=0; Frm<Cache->AnimTexCount; Frm++) CAnimTex::AddAnimTex(&ATexPtr[Frm].FrameHdr,ATexPtr[Frm].Frame,Filename);
} }
Desc.Half= Half; Desc.Half= Half;
@ -281,7 +287,7 @@ int ReadLeft;
FramePtr=*hdrs; FramePtr=*hdrs;
for (int Frm=0;Frm<TPHdr.NoOfFrames; Frm++) // Add Animated Texture references for (int Frm=0;Frm<TPHdr.NoOfFrames; Frm++) // Add Animated Texture references
{ {
if (FramePtr->Cycle) AddAnimTexToList(Cache,FramePtr++,TPage,Half); if (FramePtr->Cycle) AddAnimTexToList(Cache,FramePtr++,Frm,TPage,Half);
} }
Cache->RefCount=1; Cache->RefCount=1;
@ -295,8 +301,8 @@ int ReadLeft;
// If first instance, add animated textures // If first instance, add animated textures
if (Cache->RefCount==1) if (Cache->RefCount==1)
{ {
FramePtr=Cache->AnimTexFrame; sAnimTexInfo *ATexPtr=Cache->AnimTexFrame;
for (int Frm=0; Frm<Cache->AnimTexCount; Frm++) CAnimTex::AddAnimTex(FramePtr++,Filename); for (int Frm=0; Frm<Cache->AnimTexCount; Frm++) CAnimTex::AddAnimTex(&ATexPtr[Frm].FrameHdr,ATexPtr[Frm].Frame,Filename);
} }
Desc.Half= Half; Desc.Half= Half;

View file

@ -13,16 +13,17 @@
/*****************************************************************************/ /*****************************************************************************/
extern VECTOR upVec; extern VECTOR upVec;
extern const s16 ACosTable[4097]; //extern const s16 ACosTable[4097];
extern const s16 SinTable[1024]; extern const s16 SinTable[1024];
extern const s32 OneSinTable[1024]; //extern const s32 OneSinTable[1024];
/*****************************************************************************/ /*****************************************************************************/
/*
inline s32 macos(const s32 &a) inline s32 macos(const s32 &a)
{ {
return(ACosTable[a>>1]); return(ACosTable[a>>1]);
} }
*/
/*****************************************************************************/ /*****************************************************************************/
inline s32 msin(const s32 &a) inline s32 msin(const s32 &a)
@ -66,7 +67,7 @@ inline s32 mcos(const s32 &a)
} }
/*****************************************************************************/ /*****************************************************************************/
/*
inline s32 monesin(const s32 &a) inline s32 monesin(const s32 &a)
{ {
if (a>3071) if (a>3071)
@ -85,7 +86,7 @@ inline s32 monesin(const s32 &a)
return(OneSinTable[a]); return(OneSinTable[a]);
} }
} }
*/
/*****************************************************************************/ /*****************************************************************************/
/* /*
#define msin(x) rsin((x)) #define msin(x) rsin((x))

View file

@ -7,6 +7,7 @@
VECTOR upVec = { 0, ONE, 0, 0 }; VECTOR upVec = { 0, ONE, 0, 0 };
/*****************************************************************************/ /*****************************************************************************/
/*
s16 ACosTable[4097] = { s16 ACosTable[4097] = {
2047 ,2027 ,2019 ,2012 ,2007 ,2002 ,1998 ,1994 ,1990 ,1986 ,1983 ,1980 ,1977 ,1974 ,1971 ,1969 , 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 , 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 , 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 , 81 ,78 ,76 ,73 ,70 ,67 ,64 ,61 ,57 ,53 ,49 ,45 ,40 ,35 ,28 ,20 ,
0 }; 0 };
*/
s16 SinTable[1024] = { s16 SinTable[1024] = {
0 ,6 ,12 ,18 ,25 ,31 ,37 ,43 ,50 ,56 ,62 ,69 ,75 ,81 ,87 ,94 , 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 , 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 }; 4094 ,4094 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 ,4095 };
/*
s32 OneSinTable[1024] = { s32 OneSinTable[1024] = {
0 ,2670177 ,1335090 ,890062 ,667548 ,534040 ,445035 ,381461 ,333780 ,296695 ,267028 ,242754 ,222527 ,205411 ,190741 ,178027 , 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 , 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 }; 4097 ,4097 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 ,4096 };
*/