summaryrefslogtreecommitdiff
path: root/3dc/win95/CHNKTYPE.HPP
diff options
context:
space:
mode:
authorRebellion Developments <rebellion@nomail>2000-03-16 11:25:00 +0100
committerPatryk Obara <dreamer.tan@gmail.com>2019-08-19 05:45:17 +0200
commit218ca90543758a20ac326e444ca0643174ca7384 (patch)
tree16bfe3e5307f9f515489000f28728224291a0e3b /3dc/win95/CHNKTYPE.HPP
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.
Diffstat (limited to '3dc/win95/CHNKTYPE.HPP')
-rw-r--r--3dc/win95/CHNKTYPE.HPP396
1 files changed, 396 insertions, 0 deletions
diff --git a/3dc/win95/CHNKTYPE.HPP b/3dc/win95/CHNKTYPE.HPP
new file mode 100644
index 0000000..9a3a57d
--- /dev/null
+++ b/3dc/win95/CHNKTYPE.HPP
@@ -0,0 +1,396 @@
+#ifndef _chnktype_hpp
+#define _chnktype_hpp 1
+
+#if engine
+#include "3dc.h"
+#endif
+#include "list_tem.hpp"
+
+struct ChunkVectorInt;
+struct ChunkVectorFloat;
+
+struct ChunkVector
+{
+
+ double x;
+ double y;
+ double z;
+
+
+ ChunkVector friend operator+(const ChunkVector&, const ChunkVector&);
+ ChunkVector friend operator-(const ChunkVector&, const ChunkVector&);
+ ChunkVector& operator+=(const ChunkVector&);
+ ChunkVector& operator-=(const ChunkVector&);
+
+ ChunkVector friend operator*(const ChunkVector&, const double);
+ ChunkVector friend operator/(const ChunkVector&, const double);
+
+ ChunkVector friend operator*(const ChunkVector&, const ChunkVector&); //cross prod
+
+
+
+ #if engine
+ operator VECTORCH () const;
+ #endif
+ operator ChunkVectorInt () const;
+ operator ChunkVectorFloat () const;
+
+ friend double dot(const ChunkVector&, const ChunkVector&);//dot product
+ friend double mod(const ChunkVector&);//magnitude of vector
+ int norm(); //normalize
+};
+
+struct ChunkVectorInt
+{
+
+ int x;
+ int y;
+ int z;
+
+
+ ChunkVectorInt friend operator+(const ChunkVectorInt&, const ChunkVectorInt&);
+ ChunkVectorInt friend operator-(const ChunkVectorInt&, const ChunkVectorInt&);
+ ChunkVectorInt& operator+=(const ChunkVectorInt&);
+ ChunkVectorInt& operator-=(const ChunkVectorInt&);
+
+ ChunkVectorInt friend operator*(const ChunkVectorInt&, const double);
+ ChunkVectorInt friend operator/(const ChunkVectorInt&, const double);
+
+ //ChunkVectorInt friend operator*(const ChunkVectorInt&, const ChunkVectorInt&); //cross prod
+
+
+
+ #if engine
+ operator VECTORCH () const;
+ #endif
+
+ //friend double dot(const ChunkVector&, const ChunkVector&);//dot product
+ friend double mod(const ChunkVectorInt&);//magnitude of vector
+ int norm(); //normalize to 65536
+};
+struct ChunkVectorFloat
+{
+
+ float x;
+ float y;
+ float z;
+
+ ChunkVectorFloat friend operator+(const ChunkVectorFloat&, const ChunkVectorFloat&);
+ ChunkVectorFloat friend operator-(const ChunkVectorFloat&, const ChunkVectorFloat&);
+ ChunkVectorFloat& operator+=(const ChunkVectorFloat&);
+ ChunkVectorFloat& operator-=(const ChunkVectorFloat&);
+
+ ChunkVectorFloat friend operator*(const ChunkVectorFloat&, const double);
+ ChunkVectorFloat friend operator/(const ChunkVectorFloat&, const double);
+
+ //ChunkVectorInt friend operator*(const ChunkVectorInt&, const ChunkVectorInt&); //cross prod
+ #if engine
+ operator VECTORCH () const;
+ #endif
+
+ //friend double dot(const ChunkVector&, const ChunkVector&);//dot product
+ friend double mod(const ChunkVectorFloat&);//magnitude of vector
+ int norm(); //normalize to 1
+};
+
+struct ChunkUV
+{
+
+ float u;
+ float v;
+
+};
+
+// in integers I suppose
+
+struct ChunkMatrix
+{
+
+ int mat11;
+ int mat12;
+ int mat13;
+
+ int mat21;
+ int mat22;
+ int mat23;
+
+ int mat31;
+ int mat32;
+ int mat33;
+
+};
+
+
+struct ChunkUV_List
+{
+ int num_verts;
+ ChunkUV vert[4];
+
+ // for list iterator
+ friend BOOL operator== (const ChunkUV_List &, const ChunkUV_List &);
+ friend BOOL operator!= (const ChunkUV_List &, const ChunkUV_List &);
+
+};
+
+class ChunkPoly
+{
+public:
+
+ int engine_type;
+ int normal_index;
+ int flags;
+ unsigned int colour;
+
+ int num_verts;
+
+ int vert_ind[4];
+
+
+ //functions for gettings and setting texture and uv indeces in the colour
+ unsigned int GetUVIndex();
+ unsigned int GetTextureIndex();
+
+ void SetUVIndex(unsigned int uv_index);
+ void SetTextureIndex(unsigned int texture_index);
+
+
+};
+
+
+struct ChunkShape
+{
+ ChunkShape();
+ ~ChunkShape();
+
+ ChunkShape (const ChunkShape &);
+ ChunkShape& operator=(const ChunkShape &);
+
+
+ float radius; //radius of points about 0,0,0
+
+ ChunkVectorInt max;
+ ChunkVectorInt min;
+
+ ChunkVectorInt centre; //average of min and max
+ float radius_about_centre;
+
+ int num_verts;
+ ChunkVectorInt * v_list;
+
+ #if UseOldChunkLoader
+ ChunkVector * float_v_list;
+ #endif
+
+ //int num_vert_normals; //I don't think num_vert_normals is ever used
+ ChunkVectorFloat * v_normal_list;
+
+ int num_polys;
+ ChunkPoly * poly_list;
+ ChunkVectorFloat * p_normal_list;
+
+ int num_uvs;
+ ChunkUV_List * uv_list;
+
+ int num_texfiles;
+ char ** texture_fns;
+
+ void rescale (double);
+
+};
+
+struct ChunkQuat
+{
+ float x,y,z,w;
+};
+
+
+struct ObjectID
+{
+ int id1;
+ int id2;
+
+ friend BOOL operator== (const ObjectID &, const ObjectID &);
+ friend BOOL operator!= (const ObjectID &, const ObjectID &);
+ friend ObjectID Minimum(const ObjectID &,const ObjectID &);
+
+};
+
+struct ChunkObject
+{
+
+ ChunkVectorInt location;
+
+ #if UseOldChunkLoader
+ ChunkVector float_location;
+ #endif
+
+ ChunkQuat orientation;
+
+ BOOL is_base_object;
+
+ char o_name[50];
+
+ int index_num; //this won't get changed by update_my_chunkobject
+
+ ObjectID ID;
+
+};
+
+
+struct VMod_Arr_Item
+{
+ VMod_Arr_Item();
+ ~VMod_Arr_Item();
+
+ VMod_Arr_Item(const VMod_Arr_Item & vma);
+ VMod_Arr_Item & operator=(const VMod_Arr_Item & vma);
+
+ int branch_no;
+ int flags;
+ int spare;
+ int object_index;
+
+ #if UseOldChunkLoader
+ char * o_name; //replaced by object_index
+ #endif
+
+ friend BOOL operator==(const VMod_Arr_Item &, const VMod_Arr_Item &);
+ friend BOOL operator!=(const VMod_Arr_Item &, const VMod_Arr_Item &);
+
+};
+
+struct Adjacent_Module
+{
+ Adjacent_Module();
+ ~Adjacent_Module();
+
+ Adjacent_Module(const Adjacent_Module & vma);
+ Adjacent_Module & operator=(const Adjacent_Module & vma);
+
+ int flags;
+ ChunkVectorInt entry_point;
+ int object_index;
+
+ #if UseOldChunkLoader
+ char * o_name;
+ #endif
+
+ friend BOOL operator==(const Adjacent_Module & am1, const Adjacent_Module & am2);
+ friend BOOL operator!=(const Adjacent_Module & am1, const Adjacent_Module & am2);
+
+};
+
+class Shape_Chunk;
+class Shape_Sub_Shape_Chunk;
+
+struct a_frame
+{
+ a_frame()
+ : shape1a (0), shape1b(0), shape2a(0), shape2b(0)
+ {}
+
+ Shape_Sub_Shape_Chunk * shape1a;
+ Shape_Chunk * shape1b;
+ Shape_Sub_Shape_Chunk * shape2a;
+ Shape_Chunk * shape2b;
+ int spare;
+};
+
+
+// Data structures for bits and pieces
+
+struct obinfile
+{
+ int filepos;
+ char name[50];
+ size_t length;
+
+ friend BOOL operator==(const obinfile &o1, const obinfile &o2);
+ friend BOOL operator!=(const obinfile &o1, const obinfile &o2);
+};
+
+struct shpinfile
+{
+ int filepos;
+ int id;
+ size_t length;
+
+ friend BOOL operator==(const shpinfile &s1, const shpinfile &s2);
+ friend BOOL operator!=(const shpinfile &s1, const shpinfile &s2);
+};
+
+
+struct poly_change_info
+{
+ int poly_num;
+ int vert_num_before;
+ int vert_num_after;
+
+ friend BOOL operator==(poly_change_info const &f1, poly_change_info const &f2);
+ friend BOOL operator!=(poly_change_info const &f1, poly_change_info const &f2);
+};
+
+
+
+#define animframeflag_not_in_psx 0x00000001
+#define animframeflag_not_in_saturn 0x00000002
+#define animframeflag_interpolated_frame 0x00000004
+struct ChunkAnimFrame
+{
+ ChunkAnimFrame();
+ ~ChunkAnimFrame();
+
+ ChunkAnimFrame(const ChunkAnimFrame &);
+ //constructor for interpolated frame
+ //ChunkAnimFrame(ChunkAnimFrame* startframe,ChunkAnimFrame* endframe,int startwt,int endwt,ChunkShape const *cs);
+ ChunkAnimFrame& operator=(const ChunkAnimFrame &);
+
+
+ char* name;
+
+ int num_polys;
+ int num_verts;
+
+ ChunkVectorInt * v_list;
+ ChunkVectorFloat * p_normal_list;
+
+ int flags;
+ int num_interp_frames;
+ int pad3,pad4;
+};
+
+
+#define animseqflag_not_in_psx 0x00000001
+#define animseqflag_not_in_saturn 0x00000002
+
+
+struct ChunkAnimSequence
+{
+ ChunkAnimSequence();
+ ~ChunkAnimSequence();
+
+ ChunkAnimSequence (const ChunkAnimSequence &);
+ ChunkAnimSequence& operator=(const ChunkAnimSequence &);
+
+ void DeleteInterpolatedFrames();
+ void GenerateInterpolatedFrames(ChunkShape const *cs);
+
+ void UpdateNormalsAndExtents(ChunkShape const *cs,List<int>* poly_not_in_bb=0);
+
+ int SequenceNum;
+ char* name;
+
+ int NumFrames;
+ ChunkAnimFrame** Frames;
+
+ int flags;
+ int pad2,pad3,pad4;
+
+ ChunkVectorInt min;
+ ChunkVectorInt max;
+ float radius;
+
+ int num_verts;
+ ChunkVectorFloat* v_normal_list;
+};
+#endif \ No newline at end of file