diff options
| author | Steven Fuller <relnev@icculus.org> | 2001-07-01 00:55:22 +0000 |
|---|---|---|
| committer | Patryk Obara <dreamer.tan@gmail.com> | 2019-08-20 02:09:04 +0200 |
| commit | 2186d5f3f95cd74a070a490d899291648d58667a (patch) | |
| tree | 55241a1afa3e1a22e0b6593a8dead0b703800f44 /src/win95/obchunk.hpp | |
| parent | 218ca90543758a20ac326e444ca0643174ca7384 (diff) | |
Initial revision
Diffstat (limited to 'src/win95/obchunk.hpp')
| -rw-r--r-- | src/win95/obchunk.hpp | 503 |
1 files changed, 503 insertions, 0 deletions
diff --git a/src/win95/obchunk.hpp b/src/win95/obchunk.hpp new file mode 100644 index 0000000..b4780b3 --- /dev/null +++ b/src/win95/obchunk.hpp @@ -0,0 +1,503 @@ +#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
\ No newline at end of file |
