Import Aliens vs Predator - Gold (Build 116)

Source code release, imported from:
https://www.gamefront.com/games/aliens-vs-predator-3/file/avp-gold-complete-source-code

All text files were converted to Unix format.
This commit is contained in:
Rebellion Developments 2000-03-16 11:25:00 +01:00 committed by Patryk Obara
commit 218ca90543
572 changed files with 434587 additions and 0 deletions

270
3dc/win95/ANIMCHNK.CPP Normal file
View file

@ -0,0 +1,270 @@
#include "animchnk.hpp"
//macro for helping to force inclusion of chunks when using libraries
FORCE_CHUNK_INCLUDE_IMPLEMENT(animchnk)
RIF_IMPLEMENT_DYNCREATE("TEXTANIM",Animation_Chunk)
Animation_Chunk::Animation_Chunk(Chunk_With_Children* parent)
: Chunk(parent, "TEXTANIM")
{
NumPolys=0;
AnimList=0;
}
Animation_Chunk::Animation_Chunk(Chunk_With_Children* parent,const char* data,size_t /*datasize*/)
: Chunk(parent, "TEXTANIM")
{
NumPolys=*((int*)data);
data+=4;
if(NumPolys)
{
AnimList=(TEXANIM**)malloc(NumPolys*sizeof(TEXANIM*));
for(int i=0;i<NumPolys;i++)
{
AnimList[i]=new TEXANIM;
TEXANIM* ta=AnimList[i];
ta->poly=*((int*)data);
data+=4;
ta->ID=*((int*)data);
data+=4;
ta->NumSeq=*((int*)data);
data+=4;
ta->NumVerts=*((int*)data);
data+=4;
ta->AnimFlags=*((int*)data);
data+=4;
ta->Identifier=*((int*)data);
data+=4;
ta->CurSeq=0;
ta->Seq=new FrameList*[ta->NumSeq];
for(int j=0;j<ta->NumSeq;j++)
{
ta->Seq[j]=new FrameList(ta);
FrameList* fl=ta->Seq[j];
fl->Speed=*((int*)data);
data+=4;
fl->Flags=*((int*)data);
data+=4;
fl->NumFrames=*((int*)data);
data+=4;
fl->spare1=*((int*)data);
data+=4;
fl->spare2=*((int*)data);
data+=4;
fl->CurFrame=0;
fl->Textures=new int[fl->NumFrames];
fl->UVCoords=new int[(2*ta->NumVerts)*fl->NumFrames];
for(int k=0;k<fl->NumFrames;k++)
{
fl->Textures[k]=*((int*)data);
data+=4;
}
for(k=0;k<(2*ta->NumVerts)*fl->NumFrames;k++)
{
fl->UVCoords[k]=*((int*)data);
data+=4;
}
}
}
}
else
AnimList=0;
}
Animation_Chunk::~Animation_Chunk()
{
for(int i=0;i<NumPolys;i++)
{
delete AnimList[i];
}
free(AnimList);
}
size_t Animation_Chunk::size_chunk()
{
chunk_size=12+4;
for(int i=0;i<NumPolys;i++)
{
chunk_size+=24;
TEXANIM* ta=AnimList[i];
for(int j=0;j<ta->NumSeq;j++)
{
chunk_size+=20;
chunk_size+=4*(1+2*ta->NumVerts)*ta->Seq[j]->NumFrames;
}
}
return chunk_size;
}
BOOL Animation_Chunk::output_chunk (HANDLE &hand)
{
unsigned long junk;
BOOL ok;
char * data_block;
data_block = this->make_data_block_from_chunk();
ok = WriteFile (hand, (long *) data_block, (unsigned long) chunk_size, &junk, 0);
delete [] data_block;
if (!ok) return FALSE;
return TRUE;
}
void Animation_Chunk::fill_data_block(char* data_start)
{
strncpy (data_start, identifier, 8);
data_start += 8;
*((int *) data_start) = chunk_size;
data_start += 4;
*(int*)data_start=NumPolys;
data_start+=4;
for(int i=0;i<NumPolys;i++)
{
TEXANIM* ta=AnimList[i];
*(int*)data_start=ta->poly;
data_start+=4;
*(int*)data_start=ta->ID;
data_start+=4;
*(int*)data_start=ta->NumSeq;
data_start+=4;
*(int*)data_start=ta->NumVerts;
data_start+=4;
*(int*)data_start=ta->AnimFlags;
data_start+=4;
*(int*)data_start=ta->Identifier;
data_start+=4;
for(int j=0;j<ta->NumSeq;j++)
{
FrameList* fl=ta->Seq[j];
*(int*)data_start=fl->Speed;
data_start+=4;
*(int*)data_start=fl->Flags;
data_start+=4;
*(int*)data_start=fl->NumFrames;
data_start+=4;
*(int*)data_start=fl->spare1;
data_start+=4;
*(int*)data_start=fl->spare2;
data_start+=4;
for(int k=0;k<fl->NumFrames;k++)
{
*(int*)data_start=fl->Textures[k];
data_start+=4;
}
for(k=0;k<(2*ta->NumVerts)*fl->NumFrames;k++)
{
*(int*)data_start=fl->UVCoords[k];
data_start+=4;
}
}
}
}
FrameList::FrameList(TEXANIM* p)
{
Speed=65536;
Flags=0;
NumFrames=0;
CurFrame=-1;
parent=p;
Textures=0;
UVCoords=0;
spare1=spare2=0;
}
FrameList::FrameList(TEXANIM* p,FrameList* fl,int* conv)
{
Speed=fl->Speed;
Flags=fl->Flags;
NumFrames=fl->NumFrames;
parent=p;
Textures=new int[NumFrames];
UVCoords=new int[NumFrames*2*p->NumVerts];
spare1=fl->spare1;
spare2=fl->spare2;
if(conv)
{
for(int i=0;i<NumFrames;i++)
{
Textures[i]=conv[fl->Textures[i]];
}
}
else
{
for(int i=0;i<NumFrames;i++)
{
Textures[i]=fl->Textures[i];
}
}
for(int i=0;i<NumFrames*2*p->NumVerts;i++)
{
UVCoords[i]=fl->UVCoords[i];
}
CurFrame=0;
}
FrameList::~FrameList()
{
delete [] Textures;
delete UVCoords;
}
TEXANIM::TEXANIM()
{
shape=0;
NumSeq=0;
CurSeq=-1;
Seq=0;
NumVerts=3;
AnimFlags=Identifier=0;
}
TEXANIM::TEXANIM(TEXANIM* ta)
{
shape=0;
NumSeq=0;
CurSeq=-1;
Seq=0;
NumVerts=3;
AnimFlags=Identifier=0;
CopyAnimData(ta,0);
}
TEXANIM::~TEXANIM()
{
for(int i=0;i<NumSeq;i++)
{
delete Seq[i];
}
delete [] Seq;
}
void TEXANIM::CopyAnimData(TEXANIM* ta,int*conv)
{
shape=ta->shape;
poly=ta->poly;
ID=ta->ID;
NumSeq=ta->NumSeq;
CurSeq=0;
Seq=new FrameList*[NumSeq];
NumVerts=ta->NumVerts;
AnimFlags=ta->AnimFlags;
Identifier=ta->Identifier;
for(int i=0;i<NumSeq;i++)
{
Seq[i]=new FrameList(this,ta->Seq[i],conv);
}
}