503 lines
No EOL
10 KiB
C++
503 lines
No EOL
10 KiB
C++
#ifndef _obchunk_hpp
|
|
#define _obchunk_hpp 1
|
|
|
|
#include "chunk.hpp"
|
|
|
|
#include "chnktype.hpp"
|
|
#include "mishchnk.hpp"
|
|
|
|
|
|
// object flags
|
|
|
|
#define OBJECT_FLAG_BASE_OBJECT 0x0000100
|
|
#define OBJECT_FLAG_MODULE_OBJECT 0x0000200
|
|
#define OBJECT_FLAG_PLACED_OBJECT 0x0000400
|
|
|
|
// Note these flags have to correspond with the ones used by ed_ob_type
|
|
// and AVP generator flags
|
|
|
|
#define OBJECT_FLAG_AVPGAMEMODEMARINE 0x00000800
|
|
#define OBJECT_FLAG_AVPGAMEMODEALIEN 0x00001000
|
|
#define OBJECT_FLAG_AVPGAMEMODEPREDATOR 0x00002000
|
|
|
|
#define OBJECT_FLAG_PLATFORMLOADSET 0x00004000
|
|
#define OBJECT_FLAG_PCLOAD 0x00008000
|
|
#define OBJECT_FLAG_PSXLOAD 0x00010000
|
|
#define OBJECT_FLAG_SATURNLOAD 0x00020000
|
|
|
|
#define OBJECT_FLAG_NOTDIFFICULTY1 0x00100000
|
|
#define OBJECT_FLAG_NOTDIFFICULTY2 0x00200000
|
|
#define OBJECT_FLAG_NOTDIFFICULTY3 0x00400000
|
|
|
|
|
|
class Shape_Chunk;
|
|
class Shape_Header_Chunk;
|
|
class Object_Header_Chunk;
|
|
|
|
// flags structure
|
|
|
|
struct object_flags
|
|
{
|
|
unsigned int locked : 1;
|
|
// add more flags here as they are needed
|
|
};
|
|
|
|
|
|
class VModule_Array_Chunk;
|
|
|
|
class Object_Chunk : public Lockable_Chunk_With_Children
|
|
{
|
|
public:
|
|
|
|
// constructor from buffer
|
|
Object_Chunk (Chunk_With_Children * parent,const char *, size_t);
|
|
|
|
// constructor from data
|
|
|
|
Object_Chunk (Chunk_With_Children * parent, ChunkObject &obj);
|
|
|
|
// destructor
|
|
virtual ~Object_Chunk();
|
|
|
|
const ChunkObject object_data;
|
|
|
|
Shape_Chunk * get_assoc_shape();
|
|
|
|
BOOL assoc_with_shape (Shape_Chunk *);
|
|
|
|
BOOL deassoc_with_shape (Shape_Chunk *);
|
|
|
|
Object_Header_Chunk * get_header();
|
|
|
|
BOOL inc_v_no();
|
|
|
|
BOOL same_and_updated(Object_Chunk &);
|
|
|
|
BOOL assoc_with_shape_no(File_Chunk *);
|
|
|
|
void update_my_chunkobject (ChunkObject &);
|
|
|
|
// functions for the locking functionality
|
|
|
|
BOOL file_equals (HANDLE &);
|
|
const char * get_head_id();
|
|
void set_lock_user(char *);
|
|
|
|
virtual void post_input_processing();
|
|
|
|
VModule_Array_Chunk * get_vmod_chunk();
|
|
|
|
// destroy object needs to go through all the other
|
|
// objects and delete itself from the VMAC
|
|
|
|
void destroy(File_Chunk *);
|
|
|
|
ObjectID CalculateID();
|
|
|
|
//program_object_index can be set by the program using the chunks , so you can find where
|
|
//the object has been put.
|
|
//I need it so that I can find out which module each object has been put into.
|
|
int program_object_index;
|
|
|
|
private:
|
|
|
|
friend class File_Chunk;
|
|
friend class Object_Header_Chunk;
|
|
|
|
ChunkObject * object_data_store;
|
|
|
|
};
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
class Object_Header_Chunk : public Chunk
|
|
{
|
|
public:
|
|
// constructor from buffer
|
|
Object_Header_Chunk (Chunk_With_Children * parent, const char * pdata, size_t psize);
|
|
virtual size_t size_chunk ();
|
|
|
|
virtual BOOL output_chunk (HANDLE &);
|
|
|
|
virtual void fill_data_block (char * data_start);
|
|
|
|
const ChunkObject * const object_data;
|
|
|
|
virtual void prepare_for_output();
|
|
|
|
const char * get_lockuser()
|
|
{
|
|
return lock_user;
|
|
}
|
|
|
|
int flags;
|
|
|
|
private:
|
|
|
|
friend class Object_Chunk;
|
|
friend class Shape_Header_Chunk;
|
|
friend class RIF_File_Chunk;
|
|
friend class File_Chunk;
|
|
|
|
friend class Environment;
|
|
|
|
char lock_user[17];
|
|
int version_no;
|
|
|
|
int shape_id_no;
|
|
|
|
Shape_Chunk * associated_shape;
|
|
|
|
|
|
|
|
// constructor from data
|
|
Object_Header_Chunk (Object_Chunk * parent);
|
|
|
|
};
|
|
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
|
|
// automatically constructed when Object_Chunks are constructed from
|
|
// data
|
|
|
|
class Object_Interface_Data_Chunk : public Chunk_With_Children
|
|
{
|
|
public:
|
|
// constructor from buffer
|
|
Object_Interface_Data_Chunk (Chunk_With_Children * parent,const char *, size_t);
|
|
private:
|
|
|
|
friend class Object_Chunk;
|
|
|
|
|
|
|
|
// constructor from Object_Chunks
|
|
Object_Interface_Data_Chunk (Object_Chunk * parent);
|
|
|
|
};
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
class Object_Notes_Chunk : public Chunk
|
|
{
|
|
public:
|
|
|
|
Object_Notes_Chunk (Chunk_With_Children * parent,
|
|
const char * _data, size_t _data_size);
|
|
|
|
|
|
virtual ~Object_Notes_Chunk ();
|
|
|
|
virtual size_t size_chunk ()
|
|
{
|
|
chunk_size = (data_size + 12);
|
|
chunk_size += (4-chunk_size%4)%4;
|
|
return chunk_size;
|
|
}
|
|
|
|
virtual BOOL output_chunk (HANDLE &);
|
|
|
|
virtual void fill_data_block (char * data_start);
|
|
|
|
const size_t data_size;
|
|
const char * const data;
|
|
|
|
private:
|
|
|
|
char * data_store;
|
|
|
|
};
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
class Object_Module_Data_Chunk : public Chunk_With_Children
|
|
{
|
|
public:
|
|
|
|
// constructor from Object_Chunks
|
|
Object_Module_Data_Chunk (Object_Chunk * parent)
|
|
: Chunk_With_Children (parent, "MODULEDT")
|
|
{}
|
|
// constructor from buffer
|
|
Object_Module_Data_Chunk (Chunk_With_Children * parent,const char *, size_t);
|
|
|
|
private:
|
|
|
|
friend class Object_Chunk;
|
|
friend class AI_Module_Master_Chunk;
|
|
friend class AI_Module_Slave_Chunk;
|
|
// constructor from buffer
|
|
Object_Module_Data_Chunk (Object_Chunk * parent,const char *, size_t);
|
|
|
|
};
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
class VModule_Array_Chunk : public Chunk
|
|
{
|
|
public:
|
|
|
|
VModule_Array_Chunk (Object_Module_Data_Chunk * parent, VMod_Arr_Item * vma, int num_in_vma);
|
|
VModule_Array_Chunk (Chunk_With_Children* parent, const char * vmdata, size_t vmsize);
|
|
~VModule_Array_Chunk ();
|
|
|
|
int num_array_items;
|
|
|
|
VMod_Arr_Item * vmod_array;
|
|
|
|
virtual void fill_data_block (char *);
|
|
virtual size_t size_chunk ();
|
|
|
|
private:
|
|
|
|
friend class Object_Module_Data_Chunk;
|
|
|
|
|
|
};
|
|
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
#if 0
|
|
class Adjacent_Modules_Chunk : public Chunk
|
|
{
|
|
public:
|
|
|
|
Adjacent_Modules_Chunk(Object_Module_Data_Chunk * parent, List<Adjacent_Module> aml)
|
|
: Chunk (parent, "ADJMDLST"), adjacent_modules_list (aml)
|
|
{}
|
|
|
|
List<Adjacent_Module> adjacent_modules_list;
|
|
|
|
virtual void fill_data_block (char *);
|
|
virtual size_t size_chunk ();
|
|
|
|
|
|
private:
|
|
|
|
friend class Object_Module_Data_Chunk;
|
|
|
|
Adjacent_Modules_Chunk(Object_Module_Data_Chunk * parent, const char * data, size_t size);
|
|
|
|
};
|
|
#endif
|
|
|
|
//a replacement for adjacent_modules_chunk
|
|
#define AdjacentModuleFlag_EntryPointSetByHand 0x00000001
|
|
#define AdjacentModuleFlag_InsideAdjacentModule 0x00000002
|
|
#define AdjacentModuleFlag_AdjacentModuleInsideMe 0x00000004
|
|
#define AdjacentModuleFlag_Vertical 0x00000008
|
|
|
|
class Adjacent_Module_Entry_Points_Chunk : public Chunk
|
|
{
|
|
public:
|
|
|
|
Adjacent_Module_Entry_Points_Chunk(Object_Module_Data_Chunk * parent, List<Adjacent_Module> aml)
|
|
: Chunk (parent, "ADJMDLEP"), adjacent_modules_list (aml)
|
|
{}
|
|
Adjacent_Module_Entry_Points_Chunk(Chunk_With_Children * parent, const char * data, size_t size);
|
|
List<Adjacent_Module> adjacent_modules_list;
|
|
|
|
virtual void fill_data_block (char *);
|
|
virtual size_t size_chunk ();
|
|
|
|
|
|
private:
|
|
|
|
friend class Object_Module_Data_Chunk;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
class Module_Flag_Chunk : public Chunk
|
|
{
|
|
public:
|
|
Module_Flag_Chunk(Object_Module_Data_Chunk * parent);
|
|
Module_Flag_Chunk(Chunk_With_Children* parent, const char * data, size_t );
|
|
|
|
virtual void fill_data_block(char*);
|
|
virtual size_t size_chunk()
|
|
{return chunk_size=20;}
|
|
|
|
int Flags;
|
|
int spare;
|
|
private:
|
|
friend class Object_Module_Data_Chunk;
|
|
|
|
|
|
|
|
};
|
|
///////////////////////////////////////////////
|
|
|
|
class Module_Zone_Chunk : public Chunk
|
|
{
|
|
public:
|
|
Module_Zone_Chunk(Object_Module_Data_Chunk * parent);
|
|
Module_Zone_Chunk(Chunk_With_Children* parent, const char * data, size_t );
|
|
|
|
virtual void fill_data_block(char*);
|
|
virtual size_t size_chunk()
|
|
{return chunk_size=20;}
|
|
|
|
int Zone;
|
|
int spare;
|
|
private:
|
|
friend class Object_Module_Data_Chunk;
|
|
};
|
|
|
|
|
|
///////////////////////////////////////////////
|
|
class Module_Acoustics_Chunk : public Chunk
|
|
{
|
|
public:
|
|
Module_Acoustics_Chunk(Object_Module_Data_Chunk * parent);
|
|
Module_Acoustics_Chunk(Chunk_With_Children* parent, const char * data, size_t );
|
|
|
|
virtual void fill_data_block(char*);
|
|
virtual size_t size_chunk()
|
|
{return chunk_size=24;}
|
|
|
|
int env_index;
|
|
float reverb;
|
|
int spare;
|
|
private:
|
|
friend class Object_Module_Data_Chunk;
|
|
|
|
|
|
|
|
};
|
|
///////////////////////////////////////////////
|
|
|
|
class Object_Project_Data_Chunk : public Chunk_With_Children
|
|
{
|
|
public:
|
|
|
|
// constructor from Object_Chunks
|
|
Object_Project_Data_Chunk (Object_Chunk * parent)
|
|
: Chunk_With_Children (parent, "OBJPRJDT")
|
|
{}
|
|
// constructor from buffer
|
|
Object_Project_Data_Chunk (Chunk_With_Children * const parent,const char *,const size_t);
|
|
private:
|
|
|
|
friend class Object_Chunk;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
|
|
|
|
struct ChunkTrackSection
|
|
{
|
|
|
|
ChunkQuat quat_start;
|
|
ChunkQuat quat_end;
|
|
|
|
ChunkVectorInt pivot_start;
|
|
ChunkVectorInt pivot_end;
|
|
|
|
ChunkVectorInt object_offset;
|
|
|
|
int time_for_section;
|
|
|
|
int spare;
|
|
|
|
|
|
};
|
|
|
|
#define TrackFlag_Loop 0x00000001
|
|
#define TrackFlag_PlayingAtStart 0x00000002
|
|
#define TrackFlag_LoopBackAndForth 0x00000004
|
|
#define TrackFlag_UseTrackSmoothing 0x00000008
|
|
#define TrackFlag_QuatProblemSorted 0x80000000
|
|
|
|
class Object_Track_Chunk2 : public Chunk
|
|
{
|
|
public:
|
|
|
|
Object_Track_Chunk2 (Object_Chunk * parent);
|
|
Object_Track_Chunk2 (Chunk_With_Children * parent,const char *, size_t);
|
|
|
|
~Object_Track_Chunk2();
|
|
|
|
int num_sections;
|
|
ChunkTrackSection * sections;
|
|
|
|
int flags;
|
|
int timer_start;
|
|
|
|
virtual void fill_data_block (char *);
|
|
virtual size_t size_chunk ();
|
|
|
|
private:
|
|
|
|
friend class Object_Chunk;
|
|
|
|
|
|
};
|
|
|
|
#define TrackSoundFlag_Loop 0x00000001
|
|
class Object_Track_Sound_Chunk : public Chunk
|
|
{
|
|
public :
|
|
|
|
Object_Track_Sound_Chunk(Chunk_With_Children* parent);
|
|
Object_Track_Sound_Chunk (Chunk_With_Children * const parent,const char *, size_t const);
|
|
~Object_Track_Sound_Chunk();
|
|
|
|
size_t size_chunk ();
|
|
void fill_data_block (char * data_start);
|
|
|
|
char* wav_name;
|
|
unsigned long inner_range;
|
|
unsigned long outer_range;
|
|
int max_volume;
|
|
int pitch;
|
|
int flags;
|
|
int index;
|
|
|
|
};
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
|
|
struct AltObjectLocation
|
|
{
|
|
ChunkVectorInt position;
|
|
ChunkQuat orientation;
|
|
int spare1,spare2;
|
|
};
|
|
|
|
|
|
//chunk for storing list of possible alternate locations for an object
|
|
//use for placed objects and generators and possibly sounds
|
|
class Object_Alternate_Locations_Chunk : public Chunk
|
|
{
|
|
public :
|
|
Object_Alternate_Locations_Chunk(Chunk_With_Children* parent,const char* data, size_t);
|
|
Object_Alternate_Locations_Chunk(Chunk_With_Children* parent);
|
|
~Object_Alternate_Locations_Chunk();
|
|
|
|
void fill_data_block(char* data);
|
|
size_t size_chunk();
|
|
|
|
int num_locations;
|
|
AltObjectLocation* locations;
|
|
|
|
int group; //objects with the same group (other than 0) share the same die roll
|
|
|
|
int spare2;
|
|
};
|
|
|
|
#endif |