diff options
Diffstat (limited to '3dc/win95/Sprchunk.cpp')
| -rw-r--r-- | 3dc/win95/Sprchunk.cpp | 964 |
1 files changed, 0 insertions, 964 deletions
diff --git a/3dc/win95/Sprchunk.cpp b/3dc/win95/Sprchunk.cpp deleted file mode 100644 index c8f74f3..0000000 --- a/3dc/win95/Sprchunk.cpp +++ /dev/null @@ -1,964 +0,0 @@ -#include "sprchunk.hpp" -#include "mishchnk.hpp" - -#if cencon -#include "fnamefnc.hpp" -#include "bmpnames.hpp" -#include "shpchunk.hpp" -#endif - -#ifdef cencon -#define new my_new -#endif -//macro for helping to force inclusion of chunks when using libraries -FORCE_CHUNK_INCLUDE_IMPLEMENT(sprchunk) - -extern Chunk* Parent_File; - -RIF_IMPLEMENT_DYNCREATE("SPRACTIO",Sprite_Action_Chunk) - -Sprite_Action_Chunk::Sprite_Action_Chunk(Chunk_With_Children* parent,const char* data,size_t /*datasize*/) -: Chunk(parent, "SPRACTIO") -{ - Action=*((int*)data); - data+=4; - NumYaw=*((int*)data); - data+=4; - NumPitch=*((int*)data); - data+=4; - NumFrames=*((int*)data); - data+=4; - Flags=*((int*)data); - data+=4; - FrameTime=*((int*)data); - data+=4; - FrameList=new Frame**[NumYaw]; - for(int i=0;i<NumYaw;i++) - { - FrameList[i]=new Frame*[NumPitch]; - for(int j=0;j<NumPitch;j++) - { - FrameList[i][j]=new Frame[NumFrames]; - for(int k=0;k<NumFrames;k++) - { - Frame* f=&FrameList[i][j][k]; - f->Texture=*((int*)data); - data+=4; - f->CentreX=*((int*)data); - data+=4; - f->CentreY=*((int*)data); - data+=4; - for(int l=0;l<4;l++) - { - f->UVCoords[l][0]=*((int*)data); - data+=4; - f->UVCoords[l][1]=*((int*)data); - data+=4; - } - } - } - } -} -Sprite_Action_Chunk::Sprite_Action_Chunk(Chunk_With_Children* parent) -: Chunk(parent, "SPRACTIO") -{ - Action=-1; - NumPitch=0; - NumYaw=0; - NumFrames=0; - FrameList=0; - Flags=0; - FrameTime=200; -} -size_t Sprite_Action_Chunk::size_chunk() -{ - chunk_size=36+NumFrames*NumPitch*NumYaw*44; - return chunk_size; -} - -Sprite_Action_Chunk::~Sprite_Action_Chunk() -{ - for(int i=0;i<NumYaw;i++) - { - for(int j=0;j<NumPitch;j++) - { - delete [] FrameList[i][j]; - } - delete[] FrameList[i]; - } - delete [] FrameList; -} - - -BOOL Sprite_Action_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 Sprite_Action_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=Action; - data_start += 4; - *(int*)data_start=NumYaw; - data_start += 4; - *(int*)data_start=NumPitch; - data_start += 4; - *(int*)data_start=NumFrames; - data_start += 4; - *(int*)data_start=Flags; - data_start += 4; - *(int*)data_start=FrameTime; - data_start += 4; - - for(int i=0;i<NumYaw;i++) - { - for(int j=0;j<NumPitch;j++) - { - for(int k=0;k<NumFrames;k++) - { - Frame* f=&FrameList[i][j][k]; - *(int*)data_start=f->Texture; - data_start += 4; - *(int*)data_start=f->CentreX; - data_start +=4; - *(int*)data_start=f->CentreY; - data_start +=4; - for(int l=0;l<4;l++) - { - *(int*)data_start=f->UVCoords[l][0]; - data_start+=4; - *(int*)data_start=f->UVCoords[l][1]; - data_start+=4; - } - } - } - } -} - -////////////////////////////////////////////////// -//Class Sprite_Header_Chunk -RIF_IMPLEMENT_DYNCREATE("SPRIHEAD",Sprite_Header_Chunk) -CHUNK_WITH_CHILDREN_LOADER("SPRIHEAD",Sprite_Header_Chunk) - -/* -Children for Sprite_Header_Chunk : - -"SPRITVER" Sprite_Version_Number_Chunk -"SPRITEPC" PC_Sprite_Chunk -"SPRITEPS" Playstation_Sprite_Chunk -"SPRITESA" Saturn_Sprite_Chunk -"BMPLSTST" Bitmap_List_Store_Chunk -"BMNAMVER" BMP_Names_Version_Chunk -"BMNAMEXT" BMP_Names_ExtraData_Chunk -"RIFFNAME" RIF_Name_Chunk -"SHPEXTFN" Shape_External_Filename_Chunk -"SPRISIZE" Sprite_Size_Chunk -"BMPMD5ID" Bitmap_MD5_Chunk -"SPRBMPSC" Sprite_Bitmap_Scale_Chunk -"SPRBMPCE" Sprite_Bitmap_Centre_Chunk -"SPREXTEN" Sprite_Extent_Chunk -*/ - - -Sprite_Header_Chunk::Sprite_Header_Chunk(const char * file_name, Chunk_With_Children * parent) -: Chunk_With_Children(parent,"SPRIHEAD") -{ -// Load in whole chunk and traverse - HANDLE rif_file; - DWORD file_size; - DWORD file_size_from_file; - unsigned long bytes_read; - char * buffer; - char * buffer_ptr; - char id_buffer[9]; - - Parent_File = this; - - error_code = 0; - - - rif_file = CreateFileA (file_name, GENERIC_READ, 0, 0, OPEN_EXISTING, - FILE_FLAG_RANDOM_ACCESS, 0); - - if (rif_file == INVALID_HANDLE_VALUE) { - return; - } - - file_size = GetFileSize (rif_file, NULL); - - - if (!ReadFile(rif_file, id_buffer, 8, &bytes_read, 0)) { - error_code = CHUNK_FAILED_ON_LOAD; - CloseHandle (rif_file); - return; - } - - if (strncmp (id_buffer, "SPRIHEAD", 8)) { - error_code = CHUNK_FAILED_ON_LOAD_NOT_RECOGNISED; - CloseHandle (rif_file); - return; - } - - if (!ReadFile(rif_file, &file_size_from_file, 4, &bytes_read, 0)) { - error_code = CHUNK_FAILED_ON_LOAD; - CloseHandle (rif_file); - return; - } - - if (file_size != file_size_from_file) { - error_code = CHUNK_FAILED_ON_LOAD_NOT_RECOGNISED; - CloseHandle (rif_file); - return; - } - - - buffer = new char [file_size]; - - if (!ReadFile(rif_file, buffer, (file_size-12), &bytes_read, 0)) { - error_code = CHUNK_FAILED_ON_LOAD; - CloseHandle (rif_file); - return; - } - - // Process the file - - buffer_ptr = buffer; - - - // The start of the first chunk - - while ((buffer_ptr-buffer)< ((signed) file_size-12) && !error_code) { - - if ((*(int *)(buffer_ptr + 8)) + (buffer_ptr-buffer) > ((signed) file_size-12)) { - error_code = CHUNK_FAILED_ON_LOAD_NOT_RECOGNISED; - break; - } - - DynCreate(buffer_ptr); - buffer_ptr += *(int *)(buffer_ptr + 8); - - } - - delete [] buffer; - - CloseHandle (rif_file); - -} - - -Sprite_Header_Chunk::write_file(const char* fname) -{ - HANDLE rif_file; - - rif_file = CreateFileA (fname, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, - FILE_FLAG_RANDOM_ACCESS, 0); - - if (rif_file == INVALID_HANDLE_VALUE) { - return CHUNK_FAILED_ON_WRITE; - } - - size_chunk(); - - if (!(this->output_chunk(rif_file))) - return CHUNK_FAILED_ON_WRITE; - - CloseHandle (rif_file); - - return 0; -} - -Sprite_Header_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; -} - -#if cencon -void Sprite_Header_Chunk::post_input_processing() -{ - if (parent) - { - List<Chunk *> chlst; - GetRootChunk()->lookup_child("REBENVDT",chlst); - Lockable_Chunk_With_Children * envd = 0; - if (chlst.size()) envd = (Lockable_Chunk_With_Children *) chlst.first_entry(); - - BOOL fixpal = IsFixedPalette(envd); - - lookup_child("SHPEXTFN",chlst); - - if (chlst.size()) - { - Shape_External_Filename_Chunk * sefc = (Shape_External_Filename_Chunk *)chlst.first_entry(); - - #if cencon - twprintf("Locating %s\n",sefc->file_name); - char * locatedfile = FindExistingFileInPath_PreferWriteable(CWnd::GetActiveWindow(),sefc->file_name,"RifSearchPath"); - twprintf("Loading %s\n",locatedfile ? locatedfile : sefc->file_name); - Sprite_Header_Chunk rfc(locatedfile ? locatedfile : sefc->file_name); - if (locatedfile) - { - delete[] locatedfile; - } - #else - Sprite_Header_Chunk rfc(sefc->file_name); - #endif - - if (rfc.error_code != 0) - { - return; - } - - lookup_child("SPRITVER",chlst); - int myver = -2; - if (chlst.size()) - { - Sprite_Version_Number_Chunk * svnc = (Sprite_Version_Number_Chunk *)chlst.first_entry(); - myver = svnc->version_num; - } - rfc.lookup_child("SPRITVER",chlst); - int yourver = -1; - if (chlst.size()) - { - Sprite_Version_Number_Chunk * svnc = (Sprite_Version_Number_Chunk *)chlst.first_entry(); - yourver = svnc->version_num; - } - - if (yourver != myver) - { - #define NOT_A_BITMAP_RELATED_CHUNK \ - strncmp ("BMPLSTST", child_ptr->identifier, 8) && \ - strncmp ("BMNAMVER", child_ptr->identifier, 8) && \ - strncmp ("BMNAMEXT", child_ptr->identifier, 8) && \ - strncmp ("RIFFNAME", child_ptr->identifier, 8) && \ - strncmp ("SHPEXTFN", child_ptr->identifier, 8) && \ - strncmp ("BMPMD5ID", child_ptr->identifier, 8) - - Chunk * child_ptr = children; - List <Chunk *> chunks_to_delete; - while (child_ptr != NULL) - { - if (NOT_A_BITMAP_RELATED_CHUNK) - { - chunks_to_delete.add_entry(child_ptr); - } - child_ptr = child_ptr->next; - } - for (LIF<Chunk *> delchunks(&chunks_to_delete); !delchunks.done(); delchunks.next()) - { - delete delchunks(); - } - - child_ptr = rfc.children; - while (child_ptr != NULL) - { - if (NOT_A_BITMAP_RELATED_CHUNK) - { - #define CREATE_CHUNK_END(_datablock) \ - new Miscellaneous_Chunk(this,_datablock,_datablock+12,*(int *)(_datablock+8)-12); - - #define CREATE_CHUNK_FOR(_datablock,_id,_chunkclass) \ - if (!strncmp(_datablock,_id,8)) { \ - new _chunkclass(this,_datablock+12,*(int *)(_datablock+8)-12); \ - } else - - child_ptr->prepare_for_output(); - char * datablock = child_ptr->make_data_block_from_chunk(); - - CREATE_CHUNK_FOR(datablock,"SPRITVER",Sprite_Version_Number_Chunk) - CREATE_CHUNK_FOR(datablock,"SPRITEPC",PC_Sprite_Chunk) - CREATE_CHUNK_FOR(datablock,"SPRITEPS",Playstation_Sprite_Chunk) - CREATE_CHUNK_FOR(datablock,"SPRITESA",Saturn_Sprite_Chunk) - CREATE_CHUNK_FOR(datablock,"SPRISIZE",Sprite_Size_Chunk) - CREATE_CHUNK_FOR(datablock,"SPRBMPSC",Sprite_Bitmap_Scale_Chunk) - CREATE_CHUNK_FOR(datablock,"SPRBMPCE",Sprite_Bitmap_Centre_Chunk) - CREATE_CHUNK_FOR(datablock,"SPREXTEN",Sprite_Extent_Chunk) - CREATE_CHUNK_END(datablock) - - delete[] datablock; - } - child_ptr = child_ptr->next; - } - - } - - Chunk_With_BMPs * blsc = 0; - Chunk_With_BMPs * gbnc = 0; - - rfc.lookup_child("BMPLSTST",chlst); - if (chlst.size()) - { - gbnc = (Chunk_With_BMPs *) chlst.first_entry(); - if (!gbnc->bmps.size()) gbnc = 0; - } - - List<Chunk *> oldlst; - lookup_child("BMPLSTST",oldlst); - assert (oldlst.size()<2); - - if (oldlst.size()) - { - blsc = (Bitmap_List_Store_Chunk *)oldlst.first_entry(); - } - else - { - if (gbnc) blsc = new Bitmap_List_Store_Chunk(this); - } - - BMP_Names_ExtraData * extended = 0; - if (blsc) - { - extended = blsc->GetExtendedData(); - if (fixpal) - extended->flags = (GlobalBMPFlags)(extended->flags | GBF_FIXEDPALETTE); - else - extended->flags = (GlobalBMPFlags)(extended->flags & ~GBF_FIXEDPALETTE); - } - if (gbnc) - { - if ((gbnc->get_version_num()!=blsc->get_version_num()) || (gbnc->bmps.size() != blsc->bmps.size())) - { // other checks could be done as well - if (blsc->bmps.size()) - { - BOOL neednewpalette = FALSE; - - List<BMP_Name> newlist = gbnc->bmps; - for (LIF<BMP_Name> newLIF(&newlist); !newLIF.done(); newLIF.next()) - { - BMP_Name newcur = newLIF(); - newcur.flags = (BMPN_Flags) (newcur.flags & ~(COMPLETED_BMPN_FLAGS | ChunkBMPFlag_FixedPalette)); - if (fixpal) newcur.flags = (BMPN_Flags) (newcur.flags | ChunkBMPFlag_FixedPalette); - for (LIF<BMP_Name> oldLIF(&blsc->bmps); !oldLIF.done(); oldLIF.next()) - { - BMP_Name oldcur = oldLIF(); - if (newcur == oldcur) - { - // do we need to requantize? - if ((oldcur.flags ^ newcur.flags) & CHECKMODIFY_BMPN_FLAGS - || newcur.flags & ChunkBMPFlag_UsesTransparency - && !(newcur.flags & ChunkBMPFlag_IFF) - && !(oldcur.flags & ChunkBMPFlag_IFF) - && oldcur.DifferentTransparencyColour(newcur)) - oldcur.flags = (BMPN_Flags)(oldcur.flags & ~COMPLETED_BMPN_FLAGS); - // keep some of the old flags - the ones that can differ - newcur.flags = (BMPN_Flags)(newcur.flags & COPY_BMPN_FLAGS); - newcur.flags = (BMPN_Flags)(newcur.flags | oldcur.flags & ~COPY_BMPN_FLAGS); - if (oldcur.version_num != newcur.version_num) - { - neednewpalette = TRUE; - newcur.flags = (BMPN_Flags)(newcur.flags & ~ChunkBMPFlag_HistogramExists); - extended->flags = (GlobalBMPFlags)(extended->flags & ~GBF_HISTOGRAMEXISTS); - } - break; - } - } - if (oldLIF.done()) - { - // reset palette up to date flag - neednewpalette = TRUE; - newcur.flags = (BMPN_Flags)(newcur.flags & ~(ChunkBMPFlag_HistogramExists | COMPLETED_BMPN_FLAGS)); - extended->flags = (GlobalBMPFlags)(extended->flags & ~GBF_HISTOGRAMEXISTS); - } - newLIF.change_current(newcur); - } - - // check if any bitmaps have been removed - for (LIF<BMP_Name> bli(&blsc->bmps); !bli.done(); bli.next()) - { - if (!newlist.contains(bli())) - { - // delete assoc files - neednewpalette = TRUE; - extended->flags = (GlobalBMPFlags)(extended->flags & ~GBF_HISTOGRAMEXISTS); - } - } - - if (neednewpalette) - { - Palette_Outdated(envd); - if (fixpal) FixedPalette_Outdated(envd); - envd->updated = TRUE; - } - blsc->bmps = newlist; - } - else - { - blsc->bmps = gbnc->bmps; - for (LIF<BMP_Name> flagresetLIF(&blsc->bmps); !flagresetLIF.done(); flagresetLIF.next()) - { - BMP_Name current = flagresetLIF(); - current.flags = (BMPN_Flags)(current.flags & (COPY_BMPN_FLAGS & ~ChunkBMPFlag_FixedPalette)); - if (fixpal) current.flags = (BMPN_Flags) (current.flags | ChunkBMPFlag_FixedPalette); - flagresetLIF.change_current(current); - } - // reset palette up to date flag - extended->flags = (GlobalBMPFlags)(extended->flags & ~GBF_HISTOGRAMEXISTS); - Palette_Outdated(envd); - if (fixpal) FixedPalette_Outdated(envd); - envd->updated = TRUE; - } - blsc->max_index = gbnc->max_index; - blsc->set_version_num(gbnc->get_version_num()); - assert (!strcmp("RSPRITES",parent->identifier)); - ((Lockable_Chunk_With_Children *)parent)->updated = TRUE; - } - } - else - { - if (blsc) - { - if (blsc->bmps.size()) - { - // reset palette up to date flag - extended->flags = (GlobalBMPFlags)(extended->flags & ~GBF_HISTOGRAMEXISTS); - Palette_Outdated(envd); - if (fixpal) FixedPalette_Outdated(envd); - envd->updated = TRUE; - assert (!strcmp("RSPRITES",parent->identifier)); - ((Lockable_Chunk_With_Children *)parent)->updated = TRUE; - } - delete blsc; - } - } - - } - - } - Chunk_With_Children::post_input_processing(); -} -#endif -RIF_IMPLEMENT_DYNCREATE_DECLARE_PARENT("SPRITEPC",PC_Sprite_Chunk,"SPRIHEAD",Sprite_Header_Chunk) - -PC_Sprite_Chunk::PC_Sprite_Chunk(Sprite_Header_Chunk* parent,const char* data,size_t datasize) -:Chunk_With_Children(parent,"SPRITEPC") -{ - const char * buffer_ptr = data; - - - while ((data-buffer_ptr)< (signed) datasize) { - - if ((*(int *)(data + 8)) + (data-buffer_ptr) > (signed) datasize) { - Parent_File->error_code = CHUNK_FAILED_ON_LOAD_NOT_RECOGNISED; - break; - } - - if (!strncmp(data, "SPRACTIO",8)) { - new Sprite_Action_Chunk (this, (data + 12), (*(int *) (data + 8))-12); - data += *(int *)(data + 8); - } - else { - new Miscellaneous_Chunk (this, data, (data + 12), (*(int *) (data + 8)) -12 ); - data += *(int *)(data + 8); - } - - } -} -///////////////////////////////////////// -RIF_IMPLEMENT_DYNCREATE_DECLARE_PARENT("SPRITESA",Saturn_Sprite_Chunk,"SPRIHEAD",Sprite_Header_Chunk) - - -Saturn_Sprite_Chunk::Saturn_Sprite_Chunk(Sprite_Header_Chunk* parent,const char* data,size_t datasize) -:Chunk_With_Children(parent,"SPRITESA") -{ - const char * buffer_ptr = data; - - - while ((data-buffer_ptr)< (signed) datasize) { - - if ((*(int *)(data + 8)) + (data-buffer_ptr) > (signed) datasize) { - Parent_File->error_code = CHUNK_FAILED_ON_LOAD_NOT_RECOGNISED; - break; - } - - if (!strncmp(data, "SPRACTIO",8)) { - new Sprite_Action_Chunk (this, (data + 12), (*(int *) (data + 8))-12); - data += *(int *)(data + 8); - } - else { - new Miscellaneous_Chunk (this, data, (data + 12), (*(int *) (data + 8)) -12 ); - data += *(int *)(data + 8); - } - - } -} -///////////////////////////////////////////// -RIF_IMPLEMENT_DYNCREATE_DECLARE_PARENT("SPRITEPS",Playstation_Sprite_Chunk,"SPRIHEAD",Sprite_Header_Chunk) - -Playstation_Sprite_Chunk::Playstation_Sprite_Chunk(Sprite_Header_Chunk* parent,const char* data,size_t datasize) -:Chunk_With_Children(parent,"SPRITEPS") -{ - const char * buffer_ptr = data; - - - while ((data-buffer_ptr)< (signed) datasize) { - - if ((*(int *)(data + 8)) + (data-buffer_ptr) > (signed) datasize) { - Parent_File->error_code = CHUNK_FAILED_ON_LOAD_NOT_RECOGNISED; - break; - } - - if (!strncmp(data, "SPRACTIO",8)) { - new Sprite_Action_Chunk (this, (data + 12), (*(int *) (data + 8))-12); - data += *(int *)(data + 8); - } - else { - new Miscellaneous_Chunk (this, data, (data + 12), (*(int *) (data + 8)) -12 ); - data += *(int *)(data + 8); - } - - } -} - - - -//////////////////////////////////////////////////////////// -RIF_IMPLEMENT_DYNCREATE("SPRISIZE",Sprite_Size_Chunk) - - -Sprite_Size_Chunk::Sprite_Size_Chunk(Chunk_With_Children* parent,const char* data,size_t /*datasize*/) -: Chunk(parent, "SPRISIZE") -{ - scale=*(double*)data; - data+=8; - maxy=*(double*)data; - data+=8; - maxx=*(double*)data; - data+=8; - radius=*(int*)data; - data+=4; - Flags=*(int*)data; - data+=4; -} - -Sprite_Size_Chunk::Sprite_Size_Chunk(Chunk_With_Children* parent) -: Chunk(parent, "SPRISIZE") -{ - scale=15.625; - maxy=1000; - maxx=500; - radius=0; - Flags=0; -} - -BOOL Sprite_Size_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; -} - -size_t Sprite_Size_Chunk::size_chunk() -{ - chunk_size=44; - return chunk_size; -} - -void Sprite_Size_Chunk::fill_data_block(char* data_start) -{ - strncpy (data_start, identifier, 8); - - data_start += 8; - - *((int *) data_start) = chunk_size; - - data_start += 4; - - *(double*)data_start=scale; - data_start+=8; - *(double*)data_start=maxy; - data_start+=8; - *(double*)data_start=maxx; - data_start+=8; - *(int*)data_start=radius; - data_start+=4; - *(int*)data_start=Flags; - data_start+=4; -} -/////////////////////////////////////////////// -RIF_IMPLEMENT_DYNCREATE("SPRITVER",Sprite_Version_Number_Chunk) - -Sprite_Version_Number_Chunk::Sprite_Version_Number_Chunk(Chunk_With_Children* parent,const char* data,size_t /*datasize*/) -: Chunk(parent, "SPRITVER") -{ - version_num=*(int*)data; - data+=4; -} - -Sprite_Version_Number_Chunk::Sprite_Version_Number_Chunk(Chunk_With_Children* parent) -: Chunk(parent, "SPRITVER") -{ - version_num=0; -} - -BOOL Sprite_Version_Number_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; -} - -size_t Sprite_Version_Number_Chunk::size_chunk() -{ - chunk_size=16; - return chunk_size; -} - -void Sprite_Version_Number_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=version_num; -} - - -////////////////////////////////////////////////////////// -RIF_IMPLEMENT_DYNCREATE("SPRBMPSC",Sprite_Bitmap_Scale_Chunk) - - -Sprite_Bitmap_Scale_Chunk::Sprite_Bitmap_Scale_Chunk(Chunk_With_Children* parent,const char* data,size_t /*datasize*/) -: Chunk(parent, "SPRBMPSC") -{ - NumBitmaps=*(int*)data; - data+=4; - if(NumBitmaps) - { - Scale=new float[NumBitmaps]; - for(int i=0;i<NumBitmaps;i++) - { - Scale[i]=*(float*)data; - data+=sizeof(float); - } - } - else - Scale=0; -} -Sprite_Bitmap_Scale_Chunk::Sprite_Bitmap_Scale_Chunk(Chunk_With_Children* parent) -: Chunk(parent, "SPRBMPSC") -{ - NumBitmaps=0; - Scale=0; -} -Sprite_Bitmap_Scale_Chunk::~Sprite_Bitmap_Scale_Chunk() -{ - delete [] Scale; -} -size_t Sprite_Bitmap_Scale_Chunk::size_chunk() -{ - chunk_size=16+sizeof(float)*NumBitmaps; - return chunk_size; -} - -void Sprite_Bitmap_Scale_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=NumBitmaps; - data_start+=4; - for(int i=0;i<NumBitmaps;i++) - { - *(float*)data_start=Scale[i]; - data_start+=sizeof(float); - } -} -///////////////////////////////////////////////////// -RIF_IMPLEMENT_DYNCREATE("SPRBMPCE",Sprite_Bitmap_Centre_Chunk) - -Sprite_Bitmap_Centre_Chunk::Sprite_Bitmap_Centre_Chunk(Chunk_With_Children* parent,const char* data,size_t /*datasize*/) -: Chunk(parent, "SPRBMPCE") -{ - NumBitmaps=*(int*)data; - data+=4; - if(NumBitmaps) - { - CentreX=new int[NumBitmaps]; - CentreY=new int[NumBitmaps]; - OffsetX=new int[NumBitmaps]; - OffsetY=new int[NumBitmaps]; - - for(int i=0;i<NumBitmaps;i++) - { - CentreX[i]=*(int*)data; - data+=4; - CentreY[i]=*(int*)data; - data+=4; - OffsetX[i]=*(int*)data; - data+=4; - OffsetY[i]=*(int*)data; - data+=4; - } - } - else - { - CentreX=0; - CentreY=0; - OffsetX=0; - OffsetY=0; - } - spare=*(int*)data; -} -Sprite_Bitmap_Centre_Chunk::Sprite_Bitmap_Centre_Chunk(Chunk_With_Children* parent) -: Chunk(parent, "SPRBMPCE") -{ - NumBitmaps=0; - CentreX=CentreY=0; - OffsetX=OffsetY=0; - spare=0; -} -Sprite_Bitmap_Centre_Chunk::~Sprite_Bitmap_Centre_Chunk() -{ - delete [] CentreX; - delete [] CentreY; - delete [] OffsetX; - delete [] OffsetY; -} -size_t Sprite_Bitmap_Centre_Chunk::size_chunk() -{ - chunk_size=20+16*NumBitmaps; - return chunk_size; -} - -void Sprite_Bitmap_Centre_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=NumBitmaps; - data_start+=4; - for(int i=0;i<NumBitmaps;i++) - { - *(int*)data_start=CentreX[i]; - data_start+=4; - *(int*)data_start=CentreY[i]; - data_start+=4; - *(int*)data_start=OffsetX[i]; - data_start+=4; - *(int*)data_start=OffsetY[i]; - data_start+=4; - } - *(int*)data_start=spare; -} -///////////////////////////////////////////////////// -RIF_IMPLEMENT_DYNCREATE("SPREXTEN",Sprite_Extent_Chunk) - -Sprite_Extent_Chunk::Sprite_Extent_Chunk(Chunk_With_Children* parent,const char* data,size_t /*datasize*/) -: Chunk(parent, "SPREXTEN") -{ - minx=*(double*)data; - data+=8; - maxx=*(double*)data; - data+=8; - miny=*(double*)data; - data+=8; - maxy=*(double*)data; - data+=8; - spare1=*(int*)data; - data+=4; - spare2=*(int*)data; - data+=4; -} -Sprite_Extent_Chunk::Sprite_Extent_Chunk(Chunk_With_Children* parent) -: Chunk(parent, "SPREXTEN") -{ - minx=miny=-1000; - maxx=maxy=1000; - spare1=spare2=0; -} -size_t Sprite_Extent_Chunk::size_chunk() -{ - chunk_size=12+40; - return chunk_size; -} - -void Sprite_Extent_Chunk::fill_data_block(char* data_start) -{ - strncpy (data_start, identifier, 8); - - data_start += 8; - - *((int *) data_start) = chunk_size; - - data_start += 4; - - *(double*)data_start=minx; - data_start+=8; - *(double*)data_start=maxx; - data_start+=8; - *(double*)data_start=miny; - data_start+=8; - *(double*)data_start=maxy; - data_start+=8; - - *(int*)data_start=spare1; - data_start+=4; - *(int*)data_start=spare2; - data_start+=4; - -} |
