
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.
484 lines
8.8 KiB
C
484 lines
8.8 KiB
C
#ifndef MODULE_INCLUDED
|
|
|
|
|
|
/*
|
|
|
|
Modules
|
|
|
|
*/
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
#if SupportModules
|
|
|
|
|
|
#include "bh_waypt.h"
|
|
|
|
typedef struct moduletableheader {
|
|
|
|
int mth_xsize; /* Extents in world space */
|
|
int mth_ysize;
|
|
int mth_zsize;
|
|
|
|
int mth_numx; /* Number of modules along each axis */
|
|
int mth_numy;
|
|
int mth_numz;
|
|
|
|
/* Pointer to an array of pointers to modules */
|
|
|
|
struct module **mth_moduletable;
|
|
|
|
} MODULETABLEHEADER;
|
|
|
|
|
|
/*
|
|
|
|
NOTES
|
|
|
|
There are no pointers to strategy and/or animation data structures yet.
|
|
These will be added as and when they are needed.
|
|
|
|
*/
|
|
|
|
typedef enum {
|
|
|
|
mtype_module,
|
|
mtype_term
|
|
|
|
} MODULETYPE;
|
|
|
|
|
|
typedef union mref {
|
|
|
|
char mref_name[4]; /* Module name */
|
|
struct module *mref_ptr; /* Module pointer */
|
|
|
|
} MREF;
|
|
|
|
|
|
typedef enum {
|
|
|
|
vmtype_vmodule,
|
|
vmtype_term
|
|
|
|
} VMODULETYPE;
|
|
|
|
|
|
typedef enum {
|
|
|
|
vmodi_null, /* Null instruction */
|
|
vmodi_bra_vc /* Branch if viewport closed */
|
|
|
|
} VMODI;
|
|
|
|
typedef union _vmodidata {
|
|
|
|
char vmodidata_label[4];
|
|
struct vmodule *vmodidata_ptr;
|
|
int vmodidata;
|
|
|
|
} VMODIDATA;
|
|
|
|
|
|
typedef struct vmodule {
|
|
|
|
VMODULETYPE vmod_type;
|
|
char vmod_name[4]; /* Unique name for this VMODULE */
|
|
VMODI vmod_instr;
|
|
VMODIDATA vmod_data;
|
|
MREF vmod_mref;
|
|
VECTORCH vmod_dir;
|
|
int vmod_angle;
|
|
int vmod_flags;
|
|
|
|
} VMODULE;
|
|
|
|
|
|
#define vm_flag_gotptrs 0x00000001 /* VMODULE references have
|
|
been converted from
|
|
names to pointers */
|
|
|
|
|
|
#if 0
|
|
|
|
typedef enum {
|
|
|
|
vptype_viewport,
|
|
vptype_term
|
|
|
|
} VIEWPORTTYPE;
|
|
|
|
|
|
typedef struct viewport {
|
|
|
|
VIEWPORTTYPE vp_type;
|
|
|
|
int vp_flags;
|
|
|
|
VECTORCH vp0;
|
|
VECTORCH vp1;
|
|
VECTORCH vp2;
|
|
VECTORCH vp3;
|
|
|
|
} VIEWPORT;
|
|
|
|
#endif
|
|
|
|
|
|
/*
|
|
|
|
This is the map block for module objects. It was originally based on the
|
|
MAPBLOCK8 structure.
|
|
|
|
*/
|
|
|
|
typedef struct modulemapblock {
|
|
|
|
int MapType;
|
|
int MapShape;
|
|
|
|
#if LoadingMapsShapesAndTexturesEtc
|
|
|
|
int MapFNameIndex;
|
|
char **MapFNameArray;
|
|
SHAPEHEADER **MapShapeDataArray;
|
|
|
|
#endif
|
|
|
|
VECTORCH MapWorld;
|
|
|
|
EULER MapEuler;
|
|
|
|
int MapFlags;
|
|
int MapFlags2;
|
|
int MapFlags3;
|
|
|
|
|
|
|
|
MAPSETVDB *MapVDBData;
|
|
|
|
int MapInteriorType;
|
|
|
|
#if InterfaceEngine
|
|
|
|
/* This will point to the Object_Chunk, it will have to be */
|
|
/* cast within C++ though */
|
|
|
|
void * o_chunk;
|
|
|
|
#endif
|
|
|
|
int MapLightType; /* See LIGHTTYPES */
|
|
|
|
|
|
VECTORCH MapOrigin; /* Origin of Rotation */
|
|
|
|
SIMSHAPELIST *MapSimShapes;
|
|
|
|
int MapViewType; /* See "VDB_ViewType" */
|
|
|
|
|
|
struct displayblock **MapMPtr; /* Write our dptr here as mother */
|
|
struct displayblock **MapDPtr; /* Read our dptr here as daughter */
|
|
|
|
VECTORCH MapMOffset; /* Offset from mother */
|
|
|
|
#if SupportMorphing
|
|
MORPHHEADER *MapMorphHeader;
|
|
#endif
|
|
|
|
} MODULEMAPBLOCK;
|
|
|
|
|
|
/*
|
|
|
|
Module functions called either when the module is visible or when the view
|
|
is inside the module.
|
|
|
|
*/
|
|
|
|
typedef enum {
|
|
|
|
mfun_null,
|
|
|
|
} MFUNCTION;
|
|
|
|
|
|
/*
|
|
|
|
This is the MODULE structure
|
|
|
|
*/
|
|
|
|
struct aimodule;
|
|
|
|
typedef struct module {
|
|
|
|
MODULETYPE m_type;
|
|
|
|
char m_name[4]; /* Unique name for this MODULE */
|
|
|
|
int m_index; /* Unique module index */
|
|
|
|
int m_flags;
|
|
|
|
VECTORCH m_world; /* World location */
|
|
|
|
MREF m_ext; /* Get module extents from the shape
|
|
found through this other module */
|
|
|
|
int m_ext_scale; /* Scale extents by this value (fp) */
|
|
|
|
int m_maxx; /* Module extents */
|
|
int m_minx;
|
|
int m_maxy;
|
|
int m_miny;
|
|
int m_maxz;
|
|
int m_minz;
|
|
|
|
MODULEMAPBLOCK *m_mapptr; /* Map data for the module object */
|
|
struct displayblock *m_dptr; /* Display block (not constant) */
|
|
|
|
MREF m_vptr; /* Vertical pointer to module array */
|
|
|
|
VMODULE *m_vmptr; /* Pointer to an array of VMODULE, or
|
|
"visible module" structures */
|
|
|
|
MREF *m_link_ptrs; /* Pointer to an arbitrary sized array
|
|
of module references - the array is
|
|
zero terminated */
|
|
/*should be got rid of soon*/
|
|
|
|
|
|
|
|
MODULETABLEHEADER *m_table; /* A hash table whose creation is
|
|
triggered by a threshold value set by
|
|
"system.h". This is to speed up module
|
|
list traversal */
|
|
|
|
MFUNCTION m_ifvisible; /* Function called if module visible */
|
|
MFUNCTION m_ifvinside; /* Function called if view inside */
|
|
MREF m_funref; /* Function access to another module */
|
|
|
|
struct strategyblock *m_sbptr; /* Project supplies structure */
|
|
|
|
int m_numlights; /* # light blocks in array */
|
|
struct lightblock *m_lightarray; /* Ptr. to array of light blocks */
|
|
|
|
struct extraitemdata *m_extraitemdata;
|
|
|
|
MATRIXCH m_mat; /* Internal use only */
|
|
|
|
#if SupportWindows95
|
|
char * name;
|
|
#endif
|
|
|
|
WAYPOINT_HEADER *m_waypoints;
|
|
|
|
struct aimodule *m_aimodule; /* the aimodule that this module is a part of*/
|
|
|
|
float m_sound_reverb; /*settings for the way sound should */
|
|
int m_sound_env_index;/*be played in this module*/
|
|
|
|
} MODULE;
|
|
|
|
|
|
/* Flags */
|
|
|
|
#define m_flag_infinite 0x00000001 /* No extent test, the
|
|
view is always in this
|
|
module */
|
|
|
|
#define m_flag_gotptrs 0x00000002 /* Module references have
|
|
been converted from
|
|
names to pointers */
|
|
|
|
#define m_flag_open 0x00000004 /* The viewport/Door is
|
|
open. This state is
|
|
read from the "dptr"
|
|
morphing frame if it is
|
|
present and if it is
|
|
appropriate to do so */
|
|
|
|
#define m_flag_dormant 0x00000008 /* The module is not active */
|
|
|
|
|
|
#define m_flag_gotmat 0x00000010 /* Internal use only */
|
|
|
|
#define m_flag_visible_on_map 0x00000020 /* Flag for Kevin's map stuff */
|
|
|
|
#define m_flag_slipped_inside 0x00000040 /* Another flag 4 Kevin */
|
|
|
|
#define MODULEFLAG_AIRDUCT 0x80000000
|
|
#define MODULEFLAG_STAIRS 0x40000000
|
|
#define MODULEFLAG_SKY 0x20000000
|
|
#define MODULEFLAG_FOG 0x10000000
|
|
#define MODULEFLAG_HORIZONTALDOOR 0x08000000
|
|
|
|
|
|
typedef struct aimodule
|
|
{
|
|
int m_index; //the index in AIModuleArray
|
|
|
|
VECTORCH m_world; /* World location */
|
|
|
|
//adjacent aimodules - null terminated array
|
|
struct aimodule **m_link_ptrs;
|
|
|
|
//the render modules that make up this ai module - null terminated array
|
|
MODULE **m_module_ptrs;
|
|
|
|
WAYPOINT_HEADER *m_waypoints;
|
|
|
|
/* CDF 1/6/98 - Routefinder Globals */
|
|
int RouteFinder_FrameStamp;
|
|
int RouteFinder_IterationNumber;
|
|
|
|
}AIMODULE;
|
|
|
|
|
|
/*
|
|
Module Scene Structure
|
|
|
|
*/
|
|
|
|
typedef struct scenemodule {
|
|
|
|
MODULE *sm_module; /* Pointer to module structure for this scene */
|
|
MODULE **sm_marray; /* Pointer to array of pointers to all modules */
|
|
|
|
} SCENEMODULE;
|
|
|
|
|
|
/*
|
|
|
|
"The View"
|
|
|
|
The "View Finder" accesses the view location and orientation through this
|
|
global structure. This is so that views can be passed to other functions as
|
|
a single pointer if required.
|
|
|
|
*/
|
|
|
|
typedef struct aview {
|
|
|
|
VECTORCH vloc;
|
|
MATRIXCH vmat;
|
|
struct viewdescriptorblock *vvdb;
|
|
|
|
} AVIEW;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
Module Function Prototypes
|
|
|
|
*/
|
|
|
|
#if IncludeModuleFunctionPrototypes
|
|
|
|
void ModuleHandler(VIEWDESCRIPTORBLOCK *vdb);
|
|
void ProcessModules(VIEWDESCRIPTORBLOCK *vdb, MODULE *mptr);
|
|
void ViewFinder(MODULE *mptr);
|
|
void ReadVMODULEArrays(VMODULE *vptr);
|
|
|
|
|
|
void UpdateModules(void);
|
|
void ModuleFunctions(MODULE *mptr, MFUNCTION mf);
|
|
void AllocateModuleObject(MODULE *mptr);
|
|
void DeallocateModuleObject(MODULE *mptr);
|
|
|
|
|
|
/*
|
|
|
|
A project supplied function. The display block has been successfuly
|
|
allocated and has been fully initialised.
|
|
|
|
*/
|
|
|
|
void ModuleObjectJustAllocated(MODULE *mptr);
|
|
|
|
|
|
/*
|
|
|
|
A project supplied function. The display block is about to be deallocated.
|
|
|
|
*/
|
|
|
|
void ModuleObjectAboutToBeDeallocated(MODULE *mptr);
|
|
|
|
|
|
/*
|
|
|
|
A project supplied function. These are the new and old modules this ????
|
|
|
|
*/
|
|
|
|
void NewAndOldModules(int num_new, MODULE **m_new,
|
|
int num_old, MODULE **m_old, char *m_currvis);
|
|
|
|
|
|
|
|
#if SupportMultiCamModules
|
|
void InitGlobalVMA(void);
|
|
void DeallocateGlobalVMA(void);
|
|
#if SupportMultiCamModules
|
|
void UpdateDynamicModuleObjects(void);
|
|
#endif
|
|
#endif
|
|
|
|
void PreprocessAllModules(void);
|
|
void PreprocessModuleArray(MODULE **m_array_ptr);
|
|
void PreprocessVMODIDATA(VMODULE *v_ptr);
|
|
|
|
void DeallocateModuleVisArrays(void);
|
|
int GetModuleVisArrays(void);
|
|
int InsideModule(MODULE *mptr);
|
|
|
|
void ConvertModuleNameToPointer(MREF *mref_ptr, MODULE **m_array_ptr);
|
|
void ConvertVModuleNameToPointer(VMODIDATA *vmodidata_ptr, VMODULE *v_array_ptr);
|
|
|
|
int CompareName(char *name1, char *name2);
|
|
void PrintName(char *name);
|
|
|
|
int SaveModuleArray(MODULE *mptr, char *filename);
|
|
MODULE* LoadModuleArray(MODULE *mptr, int size, char *filename);
|
|
|
|
int IsModuleVisibleFromModule(MODULE *source, MODULE *target);
|
|
|
|
#endif /* IncludeModuleFunctionPrototypes */
|
|
|
|
extern SCENEMODULE **Global_ModulePtr;
|
|
extern SCENEMODULE *MainSceneArray[];
|
|
extern AVIEW ModuleView;
|
|
extern MODULE *Global_MotherModule;
|
|
extern char *ModuleCurrVisArray;
|
|
extern char *ModulePrevVisArray;
|
|
extern char *ModuleTempArray;
|
|
extern char *ModuleLocalVisArray;
|
|
extern int ModuleArraySize;
|
|
|
|
extern int AIModuleArraySize;
|
|
extern AIMODULE *AIModuleArray;
|
|
|
|
|
|
#endif /* SupportModules */
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
#define MODULE_INCLUDED
|
|
|
|
#endif
|