/* * Descent 3 * Copyright (C) 2024 Parallax Software * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef GAMEDLL_HEADER_H #define GAMEDLL_HEADER_H #include "hlsoundlib.h" //for MAX_GAME_VOLUME #include "spew.h" #include "gamefont.h" #include "hud.h" #include "module.h" //for DMFCDLLOUT, etc. #include "renderer.h" #include "findintersection.h" ////////////////////////////////////////// #include "pstypes.h" #include "vecmat_external.h" #include "object_external_struct.h" #include "object_external.h" #include "player_external.h" #include "room_external.h" #include "multi_external.h" #include "multi_world_state.h" #include "viseffect_external.h" #include "osiris_share.h" #include "3d.h" #include "terrain.h" #include "gametexture.h" #include "args.h" #include "bitmap.h" #include "Inventory.h" #ifdef __cplusplus #define CEXTERN(a) \ extern "C" { \ a \ } #else #define CEXTERN(a) extern a #endif #if defined(__LINUX__) #define DMFCDLLOUT(x) extern "C" x #else #if defined(DMFC_DLL) #define DMFCDLLOUT(x) DLLEXPORT x // for DMFC DLL library #else #define DMFCDLLOUT(x) CEXTERN(DLLFUNCIMPORT x) // for modules built for dmfc dll #endif #endif #define UIF_CENTER 0x01 #define UIF_FIT 0x02 #define UILB_NOSCROLL 0x04 // turns off automatic scroll buttons on UIListBox #define UILB_AUTOSELECT 0x08 // turns on automatic change of SelectedIndex if scrolled out of view #define UIRB_NOBUTTON 0x10 // disables the drawing of the button on the left of the text of a radio button #define UIF_BORDER 0x100 // for certain gadgets specifies that the border be drawn. #define UIED_PASSWORD 0x200 // special password masking for edit box text (*) #define UIF_PROCESS_LEFTKEY (1 << 8) #define UIF_PROCESS_RIGHTKEY (1 << 9) #define UIF_PROCESS_UPKEY (1 << 10) #define UIF_PROCESS_DOWNKEY (1 << 11) #define UIF_PROCESS_ALL (0xff00) typedef struct { bool is_banned; int team; } tPreJoinData; typedef struct { vector point, normal; float hitspeed, hit_dot; int hitseg, hitwall; } game_collide_info; typedef struct { int me_handle; int it_handle; ubyte *special_data; char *input_string; int input_key; union { int iRet; float fRet; }; float fParam; ptrdiff_t iParam; game_collide_info collide_info; int newseg, oldseg; } dllinfo; #define MAX_GAMENAME_LEN 32 #define MAX_REQUIREMENT_LEN 384 #define DOF_MAXTEAMS 0x0001 // max_teams member is valid #define DOF_MINTEAMS 0x0002 // this struct is used to return game specific information to Descent 3 typedef struct { // general flags, also specifies what members of the structure are valid int flags; // 0 or 1 for non-team games...maximum value is 4. If not specified, than it is assumed 0 int max_teams; // must be less then or equal to max_teams. If not specified, then it is assumed 0 for // non-team games, 2 for team games. (max_teams will always tell you if it's a team game) int min_teams; // gives the full name of the game (must be set) char game_name[MAX_GAMENAME_LEN]; // this is an array of semicolor seperated 'string identifiers' that serve as requirements // the mission needs to support in order for it to be playable with the game. // this parameter must be set (even it is just a '\0' for the first character..aka no requirements) char requirements[MAX_REQUIREMENT_LEN]; } tDLLOptions; typedef struct { int *objs; int *rooms; int *terrain; int *players; int *netgame; int *netplayers; int *ships; int *weapons; int *Current_mission; int *GameTextures; int *GameVClips; int *fp[450]; // function pointers int *vp[50]; // variable pointers tOSIRISModuleInit *osiris_functions; } game_api; // Descent3 function prototypes. NOTE: These must match the real D3 prototypes. typedef void (*GetGameAPI_fp)(game_api *); DMFCDLLOUT(GetGameAPI_fp DLLGetGameAPI;) typedef bool (*AddHUDMessage_fp)(const char *format, ...); DMFCDLLOUT(AddHUDMessage_fp DLLAddHUDMessage;) typedef void (*Debug_ConsolePrintf_fp)(int n, const char *format, ...); DMFCDLLOUT(Debug_ConsolePrintf_fp DLLDebug_ConsolePrintf;) // typedef void( *MultiSendClientExecuteDLL_fp ) (int eventnum,int me_objnum,int it_objnum,int to,dllinfo *info=NULL); typedef void (*MultiSendClientExecuteDLL_fp)(int eventnum, int me_objnum, int it_objnum, int to, dllinfo *info); DMFCDLLOUT(MultiSendClientExecuteDLL_fp DLLMultiSendClientExecuteDLL;) // typedef void( *MultiSendObject_fp ) (object *obj,ubyte announce,ubyte demo_record=true); typedef void (*MultiSendObject_fp)(object *obj, ubyte announce, ubyte demo_record); DMFCDLLOUT(MultiSendObject_fp DLLMultiSendObject;) // typedef void( *MultiPaintGoalRooms_fp ) (int *texcolors=NULL); typedef void (*MultiPaintGoalRooms_fp)(int *texcolors); DMFCDLLOUT(MultiPaintGoalRooms_fp DLLMultiPaintGoalRooms;) typedef void (*MultiSendSpecialPacket_fp)(int slot, ubyte *outdata, int size); DMFCDLLOUT(MultiSendSpecialPacket_fp DLLMultiSendSpecialPacket;) typedef void (*ComputeRoomCenter_fp)(vector *vp, room *rp); DMFCDLLOUT(ComputeRoomCenter_fp DLLComputeRoomCenter;) typedef int (*GetGoalRoomForTeam_fp)(int teamnum); DMFCDLLOUT(GetGoalRoomForTeam_fp DLLGetGoalRoomForTeam;) // ObjCreate without writing data to demo // typedef int( *ObjCreate_fp ) (ubyte type,ushort id,int roomnum,vector *pos,const matrix *orient,int parent_handle = // OBJECT_HANDLE_NONE); typedef int (*ObjCreate_fp)(ubyte type, ushort id, int roomnum, vector *pos, const matrix *orient, int parent_handle); DMFCDLLOUT(ObjCreate_fp DLLObjCreate;) typedef int (*FindObjectIDName_fp)(const char *name); DMFCDLLOUT(FindObjectIDName_fp DLLFindObjectIDName;) typedef void (*ObjSetPosNoMark_fp)(object *objp, vector *newpos, int roomnum, matrix *orient, bool f_update_attached_children); DMFCDLLOUT(ObjSetPosNoMark_fp DLLObjSetPosNoMark;) // ObjSetPos, that automatically sets the OF_MOVED_THIS_FRAME typedef void (*ObjSetPos_fp)(object *obj, vector *pos, int roomnum, matrix *orient, bool f_update_attached_children); DMFCDLLOUT(ObjSetPos_fp DLLObjSetPos;) typedef void (*SetMaxTeams_fp)(int num); DMFCDLLOUT(SetMaxTeams_fp DLLSetMaxTeams;) typedef int (*IncTeamScore_fp)(int team, int amount); DMFCDLLOUT(IncTeamScore_fp DLLIncTeamScore;) typedef bool (*InvCheckItem_fp)(int pnum, int type, int id); DMFCDLLOUT(InvCheckItem_fp DLLInvCheckItem;) // typedef bool( *InvAddTypeID_fp ) (int pnum, int type,int id,int aux_type=-1,int aux_id=-1,int flags=0,const char *description=NULL); typedef bool (*InvAddTypeID_fp)(int pnum, int type, int id, int aux_type, int aux_id, int flags, const char *description); DMFCDLLOUT(InvAddTypeID_fp DLLInvAddTypeID;) typedef bool (*InvRemove_fp)(int pnum, int type, int id); DMFCDLLOUT(InvRemove_fp DLLInvRemove;) typedef void (*PlayerSetLighting_fp)(int slot, float dist, float r, float g, float b); DMFCDLLOUT(PlayerSetLighting_fp DLLPlayerSetLighting;) typedef int (*FindShipName_fp)(const char *name); DMFCDLLOUT(FindShipName_fp DLLFindShipName;) // Sets a wacky rotating ball around the player ship typedef void (*PlayerSetRotatingBall_fp)(int slot, int num, float speed, float *r, float *g, float *b); DMFCDLLOUT(PlayerSetRotatingBall_fp DLLPlayerSetRotatingBall;) // Changes the ship a particular player is flying typedef void (*PlayerChangeShip_fp)(int slot, int ship_index); DMFCDLLOUT(PlayerChangeShip_fp DLLPlayerChangeShip;) typedef int (*InvGetTypeIDCount_fp)(int playernum, int type, int id); DMFCDLLOUT(InvGetTypeIDCount_fp DLLInvGetTypeIDCount;) // typedef int (*D3W_Play3dSound_fp ) (int sound_index, object *cur_obj, float volume = MAX_GAME_VOLUME, int flags = 0); typedef int (*D3W_Play3dSound_fp)(int sound_index, object *cur_obj, float volume, int flags); DMFCDLLOUT(D3W_Play3dSound_fp DLLPlay3dSound;) typedef int (*FindSoundName_fp)(const char *str); DMFCDLLOUT(FindSoundName_fp DLLFindSoundName;) typedef int (*SpewCreate_fp)(spewinfo *spew); DMFCDLLOUT(SpewCreate_fp DLLSpewCreate;) // typedef void (*SpewClearEvent_fp) (int handle,bool force=false); typedef void (*SpewClearEvent_fp)(int handle, bool force); DMFCDLLOUT(SpewClearEvent_fp DLLSpewClearEvent;) // Allocs and loads a bitmap // Returns the handle of the loaded bitmap // Returns -1 if something is wrong // If mipped is non-zero, allocs extra space for mips and computes them // typedef int (*bm_AllocLoadFileBitmap_fp) (const char *filename,int mipped,int format=BITMAP_FORMAT_1555); typedef int (*bm_AllocLoadFileBitmap_fp)(const char *filename, int mipped, int format); DMFCDLLOUT(bm_AllocLoadFileBitmap_fp DLLbm_AllocLoadFileBitmap;) // Given a handle, frees the bitmap memory and flags this bitmap as unused typedef void (*bm_FreeBitmap_fp)(int handle); DMFCDLLOUT(bm_FreeBitmap_fp DLLbm_FreeBitmap;) // Draws a scaled 2d bitmap to our buffer // typedef void (*rend_DrawScaledBitmap_fp) (int x1,int y1,int x2,int y2,int bm,float u0,float v0,float u1,float // v1,float zval,int color=-1,float *alphas=NULL); typedef void (*rend_DrawScaledBitmap_fp)(int x1, int y1, int x2, int y2, int bm, float u0, float v0, float u1, float v1, float zval, int color, float *alphas); DMFCDLLOUT(rend_DrawScaledBitmap_fp DLLrend_DrawScaledBitmap;) // puts a formatted string in the text buffer typedef void (*grtext_Printf_fp)(int x, int y, const char *fmt, ...); DMFCDLLOUT(grtext_Printf_fp DLLgrtext_Printf;) // renders all text in buffer and clears buffer. USUALLY CALL THIS TO RENDER TEXT typedef void (*grtext_Flush_fp)(void); DMFCDLLOUT(grtext_Flush_fp DLLgrtext_Flush;) // sets the color for text typedef void (*grtext_SetColor_fp)(ddgr_color col); DMFCDLLOUT(grtext_SetColor_fp DLLgrtext_SetColor;) // sets fancy color for text typedef void (*grtext_SetFancyColor_fp)(ddgr_color col1, ddgr_color col2, ddgr_color col3, ddgr_color col4); DMFCDLLOUT(grtext_SetFancyColor_fp DLLgrtext_SetFancyColor;) // sets the alpha value for text typedef void (*grtext_SetAlpha_fp)(ubyte alpha); DMFCDLLOUT(grtext_SetAlpha_fp DLLgrtext_SetAlpha;) // gets font alpha typedef ubyte (*grtext_GetAlpha_fp)(void); DMFCDLLOUT(grtext_GetAlpha_fp DLLgrtext_GetAlpha;) // sets the font for text typedef void (*grtext_SetFont_fp)(int font_handle); DMFCDLLOUT(grtext_SetFont_fp DLLgrtext_SetFont;) // gets the current font typedef int (*grtext_GetFont_fp)(void); DMFCDLLOUT(grtext_GetFont_fp DLLgrtext_GetFont;) // returns width of text in current font. typedef int (*grtext_GetTextLineWidth_fp)(const char *str); DMFCDLLOUT(grtext_GetTextLineWidth_fp DLLgrtext_GetTextLineWidth;) // returns a font's height typedef int (*grfont_GetHeight_fp)(int font); DMFCDLLOUT(grfont_GetHeight_fp DLLgrfont_GetHeight;) // puts a centered string in the text buffer. typedef void (*grtext_CenteredPrintf_fp)(int xoff, int y, const char *fmt, ...); DMFCDLLOUT(grtext_CenteredPrintf_fp DLLgrtext_CenteredPrintf;) // Adds a colored message to the hud typedef bool (*AddColoredHUDMessage_fp)(ddgr_color color, const char *format, ...); DMFCDLLOUT(AddColoredHUDMessage_fp DLLAddColoredHUDMessage;) // returns the height of a bitmap typedef int (*bm_h_fp)(int handle, int miplevel); DMFCDLLOUT(bm_h_fp DLLbm_h;) // returns the width of a bitmap typedef int (*bm_w_fp)(int handle, int miplevel); DMFCDLLOUT(bm_w_fp DLLbm_w;) // Draws a simple bitmap at the specified x,y location typedef void (*rend_DrawSimpleBitmap_fp)(int bm_handle, int x, int y); DMFCDLLOUT(rend_DrawSimpleBitmap_fp DLLrend_DrawSimpleBitmap;) // sends a special packet to the server typedef void (*MultiClientSendSpecialPacket_fp)(ubyte *outdate, int size); DMFCDLLOUT(MultiClientSendSpecialPacket_fp DLLMultiClientSendSpecialPacket;) // adds a blinking hud message typedef bool (*AddBlinkingHUDMessage_fp)(char *format, ...); DMFCDLLOUT(AddBlinkingHUDMessage_fp DLLAddBlinkingHUDMessage;) // resets a player's inventory // typedef void (*InvReset_fp)(int playernum,bool reset_all=true); typedef void (*InvReset_fp)(int playernum, bool reset_all); DMFCDLLOUT(InvReset_fp DLLInvReset;) // places an item on the hud typedef void (*AddHUDItem_fp)(tHUDItem *item); DMFCDLLOUT(AddHUDItem_fp DLLAddHUDItem;) // renders a bitmap onto the hud // typedef void (*RenderHUDQuad_fp) (int x, int y, int w, int h, float u0, float v0, float u1, float v1, int bm, ubyte // alpha, int sat_count=0); typedef void (*RenderHUDQuad_fp)(int x, int y, int w, int h, float u0, float v0, float u1, float v1, int bm, ubyte alpha, int sat_count); DMFCDLLOUT(RenderHUDQuad_fp DLLRenderHUDQuad;) // renders text, scaled, alphaed, saturated, typedef void (*RenderHUDText_fp)(ddgr_color col, ubyte alpha, int sat_count, int x, int y, const char *fmt, ...); DMFCDLLOUT(RenderHUDText_fp DLLRenderHUDText;) // Ends a multiplayer level and goes on to the next, Server only typedef void (*MultiEndLevel_fp)(void); DMFCDLLOUT(MultiEndLevel_fp DLLMultiEndLevel;) // returns a pointer to the data in a bitmap typedef ushort *(*bm_data_fp)(int handle, int miplevel); DMFCDLLOUT(bm_data_fp DLLbm_data;) // Allocs a bitmap of w x h size // If add_mem is nonzero, adds that to the amount alloced // (added due to the way the tmapper works) // Returns bitmap handle if successful, -1 if otherwise typedef int (*bm_AllocBitmap_fp)(int w, int h, int add_mem); DMFCDLLOUT(bm_AllocBitmap_fp DLLbm_AllocBitmap;) // Fills a rectangle on the display typedef void (*rend_FillRect_fp)(ddgr_color color, int x1, int y1, int x2, int y2); DMFCDLLOUT(rend_FillRect_fp DLLrend_FillRect;) // takes a large static bitmap and breaks it into smaller managable bitmaps typedef bool (*bm_CreateChunkedBitmap_fp)(int bm_handle, chunked_bitmap *chunk); DMFCDLLOUT(bm_CreateChunkedBitmap_fp DLLbm_CreateChunkedBitmap;) // destroys a chunked bitmap. typedef void (*bm_DestroyChunkedBitmap_fp)(chunked_bitmap *chunk); DMFCDLLOUT(bm_DestroyChunkedBitmap_fp DLLbm_DestroyChunkedBitmap;) // given a chunked bitmap, renders it. typedef void (*rend_DrawChunkedBitmap_fp)(chunked_bitmap *chunk, int x, int y, ubyte alpha); DMFCDLLOUT(rend_DrawChunkedBitmap_fp DLLrend_DrawChunkedBitmap;) // given a chunked bitmap, renders it.scaled typedef void (*rend_DrawScaledChunkedBitmap_fp)(chunked_bitmap *chunk, int x, int y, int neww, int newh, ubyte alpha); DMFCDLLOUT(rend_DrawScaledChunkedBitmap_fp DLLrend_DrawScaledChunkedBitmap;) // Opens a file for reading or writing // If a path is specified, will try to open the file only in that path. // If no path is specified, will look through search directories and library files. // Parameters: filename - the name if the file, with or without a path // mode - the standard C mode string // Returns: the CFile handle, or NULL if file not opened typedef void (*OpenCFILE_fp)(CFILE **handle, const char *filename, const char *mode); DMFCDLLOUT(OpenCFILE_fp DLLOpenCFILE;) // Closes an open CFILE. // Parameters: cfile - the file pointer returned by cfopen() typedef void (*cfclose_fp)(CFILE *cfp); DMFCDLLOUT(cfclose_fp DLLcfclose;) // Returns true if at EOF typedef int (*cfeof_fp)(CFILE *cfp); DMFCDLLOUT(cfeof_fp DLLcfeof;) // Tells if the file exists // Returns non-zero if file exists. Also tells if the file is on disk // or in a hog - See return values in cfile.h typedef int (*cfexist_fp)(const char *filename); DMFCDLLOUT(cfexist_fp DLLcfexist;) // Reads the specified number of bytes from a file into the buffer // DO NOT USE THIS TO READ STRUCTURES. This function is for byte // data, such as a string or a bitmap of 8-bit pixels. // Returns the number of bytes read. // Throws an exception of type (cfile_error *) if the OS returns an error on read typedef int (*cf_ReadBytes_fp)(ubyte *buf, int count, CFILE *cfp); DMFCDLLOUT(cf_ReadBytes_fp DLLcf_ReadBytes;) // The following functions read numeric vales from a CFILE. All values are // stored in the file in Intel (little-endian) format. These functions // will convert to big-endian if required. // These funtions will throw an exception of if the value cannot be read, // so do not call these if you don't require the data to be present. // Read and return an integer (32 bits) // Throws an exception of type (cfile_error *) if the OS returns an error on read typedef int (*cf_ReadInt_fp)(CFILE *cfp); DMFCDLLOUT(cf_ReadInt_fp DLLcf_ReadInt;) // Read and return a short (16 bits) // Throws an exception of type (cfile_error *) if the OS returns an error on read typedef short (*cf_ReadShort_fp)(CFILE *cfp); DMFCDLLOUT(cf_ReadShort_fp DLLcf_ReadShort;) // Read and return a byte (8 bits) // Throws an exception of type (cfile_error *) if the OS returns an error on read typedef sbyte (*cf_ReadByte_fp)(CFILE *cfp); DMFCDLLOUT(cf_ReadByte_fp DLLcf_ReadByte;) // Read and return a float (32 bits) // Throws an exception of type (cfile_error *) if the OS returns an error on read typedef float (*cf_ReadFloat_fp)(CFILE *cfp); DMFCDLLOUT(cf_ReadFloat_fp DLLcf_ReadFloat;) // Read and return a double (64 bits) // Throws an exception of type (cfile_error *) if the OS returns an error on read typedef double (*cf_ReadDouble_fp)(CFILE *cfp); DMFCDLLOUT(cf_ReadDouble_fp DLLcf_ReadDouble;) // Reads a string from a CFILE. If the file is type binary, this // function reads until a NULL or EOF is found. If the file is text, // the function reads until a newline or EOF is found. The string is always // written to the destination buffer null-terminated, without the newline. // Parameters: buf - where the string is written // n - the maximum string length, including the terminating 0 // cfp - the CFILE pointer // Returns the number of bytes in the string, before the terminator // Does not generate an exception on EOF typedef int (*cf_ReadString_fp)(char *buf, size_t n, CFILE *cfp); DMFCDLLOUT(cf_ReadString_fp DLLcf_ReadString;) // Writes the specified number of bytes from a file into the buffer // DO NOT USE THIS TO WRITE STRUCTURES. This function is for byte // data, such as a string or a bitmap of 8-bit pixels. // Returns the number of bytes written. // Throws an exception of type (cfile_error *) if the OS returns an error on write typedef int (*cf_WriteBytes_fp)(const ubyte *buf, int count, CFILE *cfp); DMFCDLLOUT(cf_WriteBytes_fp DLLcf_WriteBytes;) // Writes a null-terminated string to a file. If the file is type binary, // the string is terminated in the file with a null. If the file is type // text, the string is terminated with a newline. // Parameters: buf - pointer to the string // cfp = the CFILE pointer // Returns the number of bytes written // Throws an exception of type (cfile_error *) if the OS returns an error on write typedef int (*cf_WriteString_fp)(CFILE *cfp, const char *buf); DMFCDLLOUT(cf_WriteString_fp DLLcf_WriteString;) // Write an integer (32 bits) // Throws an exception of type (cfile_error *) if the OS returns an error on write typedef void (*cf_WriteInt_fp)(CFILE *cfp, int i); DMFCDLLOUT(cf_WriteInt_fp DLLcf_WriteInt;) // Write a short (16 bits) // Throws an exception of type (cfile_error *) if the OS returns an error on write typedef void (*cf_WriteShort_fp)(CFILE *cfp, short s); DMFCDLLOUT(cf_WriteShort_fp DLLcf_WriteShort;) // Write a byte (8 bits). If the byte is a newline & the file is a text file, writes a CR/LF pair. // Throws an exception of type (cfile_error *) if the OS returns an error on write typedef void (*cf_WriteByte_fp)(CFILE *cfp, sbyte b); DMFCDLLOUT(cf_WriteByte_fp DLLcf_WriteByte;) // Write a float (32 bits) // Throws an exception of type (cfile_error *) if the OS returns an error on write typedef void (*cf_WriteFloat_fp)(CFILE *cfp, float f); DMFCDLLOUT(cf_WriteFloat_fp DLLcf_WriteFloat;) // Write a double (64 bits) // Throws an exception of type (cfile_error *) if the OS returns an error on write typedef void (*cf_WriteDouble_fp)(CFILE *cfp, double d); DMFCDLLOUT(cf_WriteDouble_fp DLLcf_WriteDouble;) // Copies a file. Returns TRUE if copied ok. Returns FALSE if error opening either file. // Throws an exception of type (cfile_error *) if the OS returns an error on read or write typedef bool (*cf_CopyFile_fp)(char *dest, const char *src); DMFCDLLOUT(cf_CopyFile_fp DLLcf_CopyFile;) // Checks to see if two files are different. // Returns TRUE if the files are different, or FALSE if they are the same. typedef bool (*cf_Diff_fp)(const char *a, const char *b); DMFCDLLOUT(cf_Diff_fp DLLcf_Diff;) // Disconnects a player typedef void (*MultiDisconnectPlayer_fp)(int slot); DMFCDLLOUT(MultiDisconnectPlayer_fp DLLMultiDisconnectPlayer;) // Fills in the string with the string address from the internet address typedef void (*nw_GetNumbersFromHostAddress_fp)(network_address *address, char *str); DMFCDLLOUT(nw_GetNumbersFromHostAddress_fp DLLnw_GetNumbersFromHostAddress;) // Returns the address of this machine typedef int (*nw_GetThisIP_fp)(void); DMFCDLLOUT(nw_GetThisIP_fp DLLnw_GetThisIP;) // Given a filename, pointer to a char * array and a pointer to an int, // it will load the string table and fill in the information // returns true on success typedef bool (*CreateStringTable_fp)(const char *filename, char ***table, int *size); DMFCDLLOUT(CreateStringTable_fp DLLCreateStringTable;) // Given a string table and it's count of strings, it will free up it's memory typedef void (*DestroyStringTable_fp)(char **table, int size); DMFCDLLOUT(DestroyStringTable_fp DLLDestroyStringTable;) // renders text, scaled, alphaed, saturated, typedef void (*RenderHUDTextFlags_fp)(int flags, ddgr_color col, ubyte alpha, int sat_count, int x, int y, const char *fmt, ...); DMFCDLLOUT(RenderHUDTextFlags_fp DLLRenderHUDTextFlags;) // Sets the FOV range at which the hud names will come on typedef void (*PlayerSetHUDNameFOV_fp)(int fov); DMFCDLLOUT(PlayerSetHUDNameFOV_fp DLLPlayerSetHUDNameFOV;) // Fills in the original parent of the object, it will be the object passed in if it doesn't have a parent typedef void (*GetUltimateParentForObject_fp)(object **parent, object *child); DMFCDLLOUT(GetUltimateParentForObject_fp DLLGetUltimateParentForObject;) // Sets an object flag dead (does not write demo data) // typedef void (*SetObjectDeadFlagRaw_fp)(object *obj,bool tell_clients_to_remove=false,bool // tell_clients_to_play_sound=false); typedef void (*SetObjectDeadFlagRaw_fp)(object *obj, bool tell_clients_to_remove, bool tell_clients_to_play_sound); DMFCDLLOUT(SetObjectDeadFlagRaw_fp DLLSetObjectDeadFlagRaw;) // Sets an object flag dead (automatically writes demo data when needed) // typedef void (*SetObjectDeadFlag_fp)(object *obj,bool tell_clients_to_remove=false,bool // tell_clients_to_play_sound=false); typedef void (*SetObjectDeadFlag_fp)(object *obj, bool tell_clients_to_remove, bool tell_clients_to_play_sound); DMFCDLLOUT(SetObjectDeadFlag_fp DLLSetObjectDeadFlag;) // Call this function if there was an error while running the Multiplayer DLL, it will bail out // typedef void (*DLLFatalError_fp)(const char *reason=NULL); typedef void (*DLLFatalError_fp)(const char *reason); DMFCDLLOUT(DLLFatalError_fp FatalError;) // Assert for the DLLs typedef void (*assertdll_fp)(int x, const char *expression, const char *file, int line); DMFCDLLOUT(assertdll_fp DLLassert;) // Return index of generic that has matching table entry typedef int (*MultiMatchWeapon_fp)(uint unique_id); DMFCDLLOUT(MultiMatchWeapon_fp DLLMultiMatchWeapon;) // Returns the unique id of a given object type/id typedef uint (*MultiGetMatchChecksum_fp)(int type, int id); DMFCDLLOUT(MultiGetMatchChecksum_fp DLLMultiGetMatchChecksum;) // Searches thru all weapons for a specific name, returns -1 if not found // or index of weapon with name typedef int (*FindWeaponName_fp)(const char *name); DMFCDLLOUT(FindWeaponName_fp DLLFindWeaponName;) // Opens a HOG file. Future calls to cfopen(), etc. will look in this HOG. // Parameters: libname - the path & filename of the HOG file // Returns: 0 if error, else library handle that can be used to close the library typedef int (*cf_OpenLibrary_fp)(const char *libname); DMFCDLLOUT(cf_OpenLibrary_fp DLLcf_OpenLibrary;) // Closes a library file. // Parameters: handle: the handle returned by cf_OpenLibrary() typedef void (*cf_CloseLibrary_fp)(int handle); DMFCDLLOUT(cf_CloseLibrary_fp DLLcf_CloseLibrary;) // We're asking to enter observer mode typedef void (*MultiSendRequestToObserve_fp)(int mode, int on, int objnum); DMFCDLLOUT(MultiSendRequestToObserve_fp DLLMultiSendRequestToObserve;) // Searches thru all textures for a specific name, returns -1 if not found // or index of texture with name typedef int (*FindTextureName_fp)(const char *name); DMFCDLLOUT(FindTextureName_fp DLLFindTextureName;) // Applies damage to a player object, returns false if damage wasn't applied due to things like // invunerability // typedef bool (*ApplyDamageToPlayer_fp)(object *playerobj, object *killer, int damage_type, float damage_amount,int // server_says=0,int weapon_id=255,bool playsound=true); typedef bool (*ApplyDamageToPlayer_fp)(object *playerobj, object *killer, int damage_type, float damage_amount, int server_says, int weapon_id, bool playsound); DMFCDLLOUT(ApplyDamageToPlayer_fp DLLApplyDamageToPlayer;) // Return index of generic that has matching table entry typedef int (*MultiMatchGeneric_fp)(uint unique_id); DMFCDLLOUT(MultiMatchGeneric_fp DLLMultiMatchGeneric;) typedef void (*SetUITextItemText_fp)(void *uit, char *newtext, unsigned int color); DMFCDLLOUT(SetUITextItemText_fp DLLSetUITextItemText;) typedef void *(*NewUIWindowCreate_fp)(int x, int y, int w, int h, int flags); DMFCDLLOUT(NewUIWindowCreate_fp DLLNewUIWindowCreate;) typedef void (*NewUIWindowDestroy_fp)(void *deswin); DMFCDLLOUT(NewUIWindowDestroy_fp DLLNewUIWindowDestroy;) typedef void (*NewUIWindowOpen_fp)(void *deswin); DMFCDLLOUT(NewUIWindowOpen_fp DLLNewUIWindowOpen;) typedef void (*NewUIWindowClose_fp)(void *deswin); DMFCDLLOUT(NewUIWindowClose_fp DLLNewUIWindowClose;) typedef void *(*TextCreate_fp)(void *parentwin, void *textitem, int x, int y, int flags); DMFCDLLOUT(TextCreate_fp DLLTextCreate;) typedef void (*TextSetTitle_fp)(void *text, void *textitem); DMFCDLLOUT(TextSetTitle_fp DLLTextSetTitle;) typedef void *(*EditCreate_fp)(void *parentwin, int id, int x, int y, int w, int h, int flags); DMFCDLLOUT(EditCreate_fp DLLEditCreate;) typedef void *(*ButtonCreate_fp)(void *parentwin, int id, void *titleitem, int x, int y, int w, int h, int flags); DMFCDLLOUT(ButtonCreate_fp DLLButtonCreate;) typedef void *(*ListCreate_fp)(void *parentwin, int id, int x, int y, int w, int h, int flags); DMFCDLLOUT(ListCreate_fp DLLListCreate;) typedef void (*ListRemoveAll_fp)(void *item); DMFCDLLOUT(ListRemoveAll_fp DLLListRemoveAll;) typedef void (*ListAddItem_fp)(void *item, void *uitext); DMFCDLLOUT(ListAddItem_fp DLLListAddItem;) typedef void (*ListRemoveItem_fp)(void *item, void *txtitem); DMFCDLLOUT(ListRemoveItem_fp DLLListRemoveItem;) typedef void (*ListSelectItem_fp)(void *item, void *txtitem); DMFCDLLOUT(ListSelectItem_fp DLLListSelectItem;) typedef char *(*ListGetItem_fp)(void *item, int index); DMFCDLLOUT(ListGetItem_fp DLLListGetItem;) typedef int (*ListGetSelectedIndex_fp)(void *item); DMFCDLLOUT(ListGetSelectedIndex_fp DLLListGetSelectedIndex;) typedef void (*ListSetSelectedIndex_fp)(void *item, int index); DMFCDLLOUT(ListSetSelectedIndex_fp DLLListSetSelectedIndex;) typedef void (*EditSetText_fp)(void *item, const char *buff); DMFCDLLOUT(EditSetText_fp DLLEditSetText;) typedef void (*EditGetText_fp)(void *item, char *buff, int len); DMFCDLLOUT(EditGetText_fp DLLEditGetText;) typedef int (*GetUIItemWidth_fp)(void *item); DMFCDLLOUT(GetUIItemWidth_fp DLLGetUIItemWidth;) typedef int (*GetUIItemHeight_fp)(void *item); DMFCDLLOUT(GetUIItemHeight_fp DLLGetUIItemHeight;) // UI CheckBox functions typedef void *(*CheckBoxCreate_fp)(void *parent, int id, void *title, int x, int y, int w, int h, int flags); DMFCDLLOUT(CheckBoxCreate_fp DLLCheckBoxCreate;) typedef void (*CheckBoxSetCheck_fp)(void *cb, bool state); DMFCDLLOUT(CheckBoxSetCheck_fp DLLCheckBoxSetCheck;) typedef bool (*CheckBoxIsChecked_fp)(void *cb); DMFCDLLOUT(CheckBoxIsChecked_fp DLLCheckBoxIsChecked;) // does a UI loop: returns a result value for the current window in focus. typedef int (*DoUI_fp)(void); DMFCDLLOUT(DoUI_fp DLLDoUI;) // puts up a message box with a title and message. // typedef int (*DoMessageBox_fp)(const char *title, const char *msg, int type, ddgr_color title_color = GR_WHITE, // ddgr_color text_color = GR_WHITE); typedef int (*DoMessageBox_fp)(const char *title, const char *msg, int type, ddgr_color title_color, ddgr_color text_color); DMFCDLLOUT(DoMessageBox_fp DLLDoMessageBox;) typedef void (*DescentDefer_fp)(void); DMFCDLLOUT(DescentDefer_fp DLLDescentDefer;) // typedef void *(*NewUIGameWindowCreate_fp)(int x, int y, int w, int h, int flags=UIF_PROCESS_ALL); typedef void *(*NewUIGameWindowCreate_fp)(int x, int y, int w, int h, int flags); DMFCDLLOUT(NewUIGameWindowCreate_fp DLLNewUIGameWindowCreate;) typedef void (*NewUIGameWindowDestroy_fp)(void *item); DMFCDLLOUT(NewUIGameWindowDestroy_fp DLLNewUIGameWindowDestroy;) typedef void (*NewUIGameWindowOpen_fp)(void *item); DMFCDLLOUT(NewUIGameWindowOpen_fp DLLNewUIGameWindowOpen;) typedef void (*NewUIGameWindowClose_fp)(void *item); DMFCDLLOUT(NewUIGameWindowClose_fp DLLNewUIGameWindowClose;) typedef void *(*HotSpotCreate_fp)(void *parentwin, int id, int key, void *txtitemoff, void *txtitemon, int x, int y, int w, int h, int flags); DMFCDLLOUT(HotSpotCreate_fp DLLHotSpotCreate;) typedef int (*PollUI_fp)(void); DMFCDLLOUT(PollUI_fp DLLPollUI;) typedef void (*RemoveUITextItem_fp)(void *item); DMFCDLLOUT(RemoveUITextItem_fp DLLRemoveUITextItem;) // typedef void *(*CreateNewUITextItem_fp)(const char *newtext,unsigned int color,int font=-1); typedef void *(*CreateNewUITextItem_fp)(const char *newtext, unsigned int color, int font); DMFCDLLOUT(CreateNewUITextItem_fp DLLCreateNewUITextItem;) typedef void (*RemoveUIBmpItem_fp)(void *item); DMFCDLLOUT(RemoveUIBmpItem_fp DLLRemoveUIBmpItem;) typedef void *(*CreateNewUIBmpItem_fp)(int handle, ubyte alpha); DMFCDLLOUT(CreateNewUIBmpItem_fp DLLCreateNewUIBmpItem;) typedef void *(*UIConsoleGadgetCreate_fp)(void *parentid, int id, int x, int y, int font, int cols, int rows, int flags); DMFCDLLOUT(UIConsoleGadgetCreate_fp DLLUIConsoleGadgetCreate;) typedef void (*UIConsoleGadgetputs_fp)(void *item, const char *str); DMFCDLLOUT(UIConsoleGadgetputs_fp DLLUIConsoleGadgetputs;) typedef void (*NewUIWindowSetFocusOnEditGadget_fp)(void *item, void *parent); DMFCDLLOUT(NewUIWindowSetFocusOnEditGadget_fp DLLNewUIWindowSetFocusOnEditGadget;) typedef void *(*OldListCreate_fp)(void *parentitem, int id, int x, int y, int w, int h, int flags); DMFCDLLOUT(OldListCreate_fp DLLOldListCreate;) typedef void (*OldListRemoveAll_fp)(void *item); DMFCDLLOUT(OldListRemoveAll_fp DLLOldListRemoveAll;) typedef void (*OldListAddItem_fp)(void *item, void *uitext); DMFCDLLOUT(OldListAddItem_fp DLLOldListAddItem;) typedef void (*OldListRemoveItem_fp)(void *item, void *txtitem); DMFCDLLOUT(OldListRemoveItem_fp DLLOldListRemoveItem;) typedef void (*OldListSelectItem_fp)(void *item, void *txtitem); DMFCDLLOUT(OldListSelectItem_fp DLLOldListSelectItem;) typedef void *(*OldEditCreate_fp)(void *parentitem, int id, int x, int y, int w, int h, int flags); DMFCDLLOUT(OldEditCreate_fp DLLOldEditCreate;) typedef void (*OldEditGetText_fp)(void *item, char *buff, int len); DMFCDLLOUT(OldEditGetText_fp DLLOldEditGetText;) typedef void (*OldEditSetText_fp)(void *item, const char *newtext); DMFCDLLOUT(OldEditSetText_fp DLLOldEditSetText;) typedef char *(*OldListGetItem_fp)(void *item, int index); DMFCDLLOUT(OldListGetItem_fp DLLOldListGetItem;) typedef int (*OldListGetSelectedIndex_fp)(void *item); DMFCDLLOUT(OldListGetSelectedIndex_fp DLLOldListGetSelectedIndex;) typedef void (*ToggleUICallback_fp)(int state); DMFCDLLOUT(ToggleUICallback_fp DLLToggleUICallback;) typedef void (*SetOldEditBufferLen_fp)(void *item, int len); DMFCDLLOUT(SetOldEditBufferLen_fp DLLSetOldEditBufferLen;) typedef void (*NewUIWindowLoadBackgroundImage_fp)(void *item, const char *image_name); DMFCDLLOUT(NewUIWindowLoadBackgroundImage_fp DLLNewUIWindowLoadBackgroundImage;) typedef void (*DeleteUIItem_fp)(void *delitem); DMFCDLLOUT(DeleteUIItem_fp DLLDeleteUIItem;) typedef void (*HotSpotSetStates_fp)(void *hs, void *texton, void *textoff); DMFCDLLOUT(HotSpotSetStates_fp DLLHotSpotSetStates;) // sets the callback for background rendering of desktop for UI typedef void (*SetUICallback_fp)(void (*fn)()); DMFCDLLOUT(SetUICallback_fp DLLSetUICallback;) typedef void (*RetrieveUICallback_fp)(void **fn); DMFCDLLOUT(RetrieveUICallback_fp DLLGetUICallback;) typedef void (*SuspendControls_fp)(void); DMFCDLLOUT(SuspendControls_fp DLLSuspendControls;) typedef void (*ResumeControls_fp)(void); DMFCDLLOUT(ResumeControls_fp DLLResumeControls;) typedef void (*ui_ShowCursor_fp)(void); DMFCDLLOUT(ui_ShowCursor_fp DLLShowCursor;) typedef void (*ui_HideCursor_fp)(void); DMFCDLLOUT(ui_HideCursor_fp DLLHideCursor;) typedef void (*GameFrame_fp)(void); DMFCDLLOUT(GameFrame_fp DLLGameFrame;) // typedef void *(*SliderCreate_fp)(void *parent, int id, int x, int y, int flags=0); typedef void *(*SliderCreate_fp)(void *parent, int id, int x, int y, int flags); DMFCDLLOUT(SliderCreate_fp DLLSliderCreate;) typedef void (*SliderSetRange_fp)(void *slider, int range); DMFCDLLOUT(SliderSetRange_fp DLLSliderSetRange;) typedef int (*SliderGetRange_fp)(void *slider); DMFCDLLOUT(SliderGetRange_fp DLLSliderGetRange;) typedef void (*SliderSetPos_fp)(void *slider, int pos); DMFCDLLOUT(SliderSetPos_fp DLLSliderSetPos;) typedef int (*SliderGetPos_fp)(void *slider); DMFCDLLOUT(SliderGetPos_fp DLLSliderGetPos;) typedef void (*SliderSetSelectChangeCallback_fp)(void *slider, void (*fn)(int)); DMFCDLLOUT(SliderSetSelectChangeCallback_fp DLLSliderSetSelectChangeCallback;) typedef void (*SliderSetSelectChangeCallbackWData_fp)(void *slider, void (*fn)(int, void *), void *ptr); DMFCDLLOUT(SliderSetSelectChangeCallbackWData_fp DLLSliderSetSelectChangeCallbackWData;) // Prints a message to the console if the dedicated server is active typedef void (*DPrintf_fp)(const char *fmt, ...); DMFCDLLOUT(DPrintf_fp DPrintf;) // Split a pathname into its component parts // The path in splitpath is in the *LOCAL* file system's syntax typedef void (*ddio_SplitPath_fp)(const char *srcPath, char *path, char *filename, char *ext); DMFCDLLOUT(ddio_SplitPath_fp DLLddio_SplitPath;) // Constructs a path in the local file system's syntax // builtPath: stores the constructed path // absolutePathHeader: absolute path on which the sub directories will be appended // (specified in local file system syntax) // subdir: the first subdirectory // takes a variable number of additional subdirectories which will be concatenated on to the path // the last argument in the list of sub dirs *MUST* be NULL to terminate the list typedef void (*ddio_MakePath_fp)(char *newPath, const char *absolutePathHeader, const char *subDir, ...); DMFCDLLOUT(ddio_MakePath_fp DLLddio_MakePath;) // Plays a 2d sound // typedef int (*Play2dSound_fp)(int sound_index, float volume =MAX_GAME_VOLUME/2); typedef int (*Play2dSound_fp)(int sound_index, float volume); DMFCDLLOUT(Play2dSound_fp DLLPlay2dSound;) typedef void (*TouchSound_fp)(int sound_index); DMFCDLLOUT(TouchSound_fp DLLTouchSound;) // Database functions to read/write typedef bool (*dDatabaseRead_fp1)(const char *label, char *entry, int *entrylen); DMFCDLLOUT(dDatabaseRead_fp1 DatabaseRead1;) typedef bool (*dDatabaseRead_fp2)(const char *label, void *entry, int wordsize); DMFCDLLOUT(dDatabaseRead_fp2 DatabaseRead2;) typedef bool (*dDatabaseRead_fp3)(const char *label, bool *entry); DMFCDLLOUT(dDatabaseRead_fp3 DatabaseRead3;) typedef bool (*dDatabaseWrite_fp1)(const char *label, const char *entry, int entrylen); DMFCDLLOUT(dDatabaseWrite_fp1 DatabaseWrite1;) typedef bool (*dDatabaseWrite_fp2)(const char *label, int entry); DMFCDLLOUT(dDatabaseWrite_fp2 DatabaseWrite2;) // Attaches 2 objects via attach points on each. The f_used_aligned allows for an aligned connection. // NOTE: The child always moves to the parent // typedef bool (*AttachObject_fp)(object *parent, char parent_ap, object *child, char child_ap, bool f_use_aligned = // false); typedef bool (*AttachObject_fp)(object *parent, char parent_ap, object *child, char child_ap, bool f_use_aligned); DMFCDLLOUT(AttachObject_fp DLLAttachObject;) // Retruns a pointer to an object given its handle. Returns NULL if object no longer exists. typedef bool (*ObjGet_fp)(int handle, object **obj); DMFCDLLOUT(ObjGet_fp DLLObjGet;) // Given a pilot id, it will return the pilot name of // the pilot name. Returns false if it's an invalid pilot id. typedef bool (*PPic_GetPilot_fp)(ushort pilot_id, char *pilot_name, int buffersize); DMFCDLLOUT(PPic_GetPilot_fp DLLPPic_GetPilot;) // Given a pilot id, it will return a handle to the bitmap for the pilot. // MAKE SURE YOU FREE THE BITMAP WITH DLLbm_FreeBitmap(). Returns -1 if it was an illegal pilot id. // Returns BAD_BITMAP_HANDLE if it couldn't open the bitmap. typedef int (*PPic_GetBitmapHandle_fp)(ushort pilot_id); DMFCDLLOUT(PPic_GetBitmapHandle_fp DLLPPic_GetBitmapHandle;) // Draws a line typedef void (*rend_DrawLine_fp)(int x1, int y1, int x2, int y2); DMFCDLLOUT(rend_DrawLine_fp DLLrend_DrawLine;) // Sets the color for fill based primitives; typedef void (*rend_SetFlatColor_fp)(ddgr_color color); DMFCDLLOUT(rend_SetFlatColor_fp DLLrend_SetFlatColor;) // Sets whether or not we want the logos to be displayed on ships typedef void (*MultiSetLogoState_fp)(bool state); DMFCDLLOUT(MultiSetLogoState_fp DLLMultiSetLogoState;) // Spews the inventory of the passed in player object // typedef void (*PlayerSpewInventory_fp)(object *obj,bool spew_energy_and_shield=true,bool spew_nonspewables=false); typedef void (*PlayerSpewInventory_fp)(object *obj, bool spew_energy_and_shield, bool spew_nonspewables); DMFCDLLOUT(PlayerSpewInventory_fp DLLPlayerSpewInventory;) // Returns a random player starting position typedef int (*PlayerGetRandomStartPosition_fp)(int slot); DMFCDLLOUT(PlayerGetRandomStartPosition_fp DLLPlayerGetRandomStartPosition;) // Resets all the properties a player ship to the default values // Pass in what kind of reset the inventory should do INVRESET_ typedef void (*InitPlayerNewShip_fp)(int slot, int inven_reset); DMFCDLLOUT(InitPlayerNewShip_fp DLLInitPlayerNewShip;) // Returns internet address format from string address format...ie "204.243.217.14" // turns into 1414829242 typedef unsigned int (*nw_GetHostAddressFromNumbers_fp)(char *str); DMFCDLLOUT(nw_GetHostAddressFromNumbers_fp DLLnw_GetHostAddressFromNumbers;) // Removes all addon table files from D3 (really shouldn't be called, automatically done) typedef void (*TableFilesClear_fp)(void); DMFCDLLOUT(TableFilesClear_fp TableFilesClear;) // Adds a table file into the manage system for add-on data typedef bool (*TableFileAdd_fp)(char *filename); DMFCDLLOUT(TableFileAdd_fp TableFileAdd;) // Debugger interaction typedef void (*DebugBreak_callback_stop_fp)(void); DMFCDLLOUT(DebugBreak_callback_stop_fp DLLDebugBreak_callback_stop;) typedef void (*DebugBreak_callback_resume_fp)(void); DMFCDLLOUT(DebugBreak_callback_resume_fp DLLDebugBreak_callback_resume;) typedef void (*Int3MessageBox_fp)(const char *file, const char *line); DMFCDLLOUT(Int3MessageBox_fp DLLInt3MessageBox;) // Fills in the non-NULL parameters with the position and size information about // a UI Item typedef void (*GetUIItemPosition_fp)(void *item, int *x, int *y, int *w, int *h); DMFCDLLOUT(GetUIItemPosition_fp DLLGetUIItemPosition;) // Attaches a child object to a parent object by a percent of the radius of the child. // NOTE: The child always moves to the parent and not the reverse typedef bool (*AttachObjectRadius_fp)(object *parent, char parent_ap, object *child, float percent_rad); DMFCDLLOUT(AttachObjectRadius_fp DLLAttachObjectRadius;) // Unattaches all children from a parent object typedef bool (*UnattachChildren_fp)(object *parent); DMFCDLLOUT(UnattachChildren_fp DLLUnattachChildren;) // Unattaches a child from an attach point typedef bool (*UnattachChild_fp)(object *parent, char parent_ap); DMFCDLLOUT(UnattachChild_fp DLLUnattachChild;) // Unattaches an object from its parent typedef bool (*UnattachFromParent_fp)(object *child); DMFCDLLOUT(UnattachFromParent_fp DLLUnattachFromParent;) typedef float (*vm_GetMagnitude_fp)(vector *vec); DMFCDLLOUT(vm_GetMagnitude_fp DLLvm_GetMagnitude;) // Rotates a vector thru a matrix typedef void (*vm_MatrixMulVector_fp)(vector *, vector *, matrix *); DMFCDLLOUT(vm_MatrixMulVector_fp DLLvm_MatrixMulVector;) // Applies an instantaneous force on an object, resulting in an instantaneous // change in velocity. // typedef void (*phys_apply_force_fp)(object *obj,vector *force_vec,short weapon_index=-1); typedef void (*phys_apply_force_fp)(object *obj, vector *force_vec, short weapon_index); DMFCDLLOUT(phys_apply_force_fp DLLphys_apply_force;) typedef void (*phys_apply_rot_fp)(object *obj, vector *force_vec); DMFCDLLOUT(phys_apply_rot_fp DLLphys_apply_rot;) // Transposes a matrix in place typedef void (*vm_TransposeMatrix_fp)(matrix *); DMFCDLLOUT(vm_TransposeMatrix_fp DLLvm_TransposeMatrix;) // Returns a perpendicular vector to the two given vectors typedef void (*vm_CrossProduct_fp)(vector *, vector *, vector *); DMFCDLLOUT(vm_CrossProduct_fp DLLvm_CrossProduct;) // Normalizes a vector // Returns the magnitude before normalization typedef float (*vm_NormalizeVector_fp)(vector *); DMFCDLLOUT(vm_NormalizeVector_fp DLLvm_NormalizeVector;) typedef void (*ConvertEulerToAxisAmount_fp)(vector *e, vector *n, float *w); DMFCDLLOUT(ConvertEulerToAxisAmount_fp DLLConvertEulerToAxisAmount;) typedef void (*ConvertAxisAmountToEuler_fp)(vector *n, float *w, vector *e); DMFCDLLOUT(ConvertAxisAmountToEuler_fp DLLConvertAxisAmountToEuler;) // Given a vector, returns an approximation of the magnitude typedef float (*vm_GetMagnitudeFast_fp)(vector *); DMFCDLLOUT(vm_GetMagnitudeFast_fp DLLvm_GetMagnitudeFast;) // Given a matrix, makes it an identity matrix typedef void (*vm_MakeIdentity_fp)(matrix *); DMFCDLLOUT(vm_MakeIdentity_fp DLLvm_MakeIdentity;) // Set a vector to {0,0,0} typedef void (*vm_MakeVectorZero_fp)(vector *v); DMFCDLLOUT(vm_MakeVectorZero_fp DLLvm_MakeVectorZero;) // Set an angvec to {0,0,0} typedef void (*vm_MakeAngleZero_fp)(angvec *a); DMFCDLLOUT(vm_MakeAngleZero_fp DLLvm_MakeAngleZero;) // Multiply a vector times the transpose of a matrix typedef void (*vm_VectorMulTMatrix_fp)(vector *result, vector *v, matrix *m); DMFCDLLOUT(vm_VectorMulTMatrix_fp DLLvm_VectorMulTMatrix;) // Multiplies 2 3x3 matrixes, returning the result in first argument typedef void (*vm_MatrixMul_fp)(matrix *, matrix *, matrix *); DMFCDLLOUT(vm_MatrixMul_fp DLLvm_MatrixMul;) // Multiply a matrix times the transpose of a matrix typedef void (*vm_MatrixMulTMatrix_fp)(matrix *dest, matrix *src0, matrix *src1); DMFCDLLOUT(vm_MatrixMulTMatrix_fp DLLvm_MatrixMulTMatrix;) // Returns the dot product of the two given vectors typedef float (*vm_DotProduct_fp)(vector *, vector *); DMFCDLLOUT(vm_DotProduct_fp DLLvm_DotProduct;) // Returns the difference between two vectors typedef void (*vm_SubVectors_fp)(vector *, const vector *, const vector *); DMFCDLLOUT(vm_SubVectors_fp DLLvm_SubVectors;) // Returns adds two vectors, returns result in first arg typedef void (*vm_AddVectors_fp)(vector *, vector *, vector *); DMFCDLLOUT(vm_AddVectors_fp DLLvm_AddVectors;) // Given a vector, divides second arg by vector components typedef void (*vm_AverageVector_fp)(vector *, int); DMFCDLLOUT(vm_AverageVector_fp DLLvm_AverageVector;) // Scales second arg vector by 3rd arg, placing result in first arg typedef void (*vm_ScaleVector_fp)(vector *, vector *, float); DMFCDLLOUT(vm_ScaleVector_fp DLLvm_ScaleVector;) // Scales all components of vector v by value s adds the result to p and stores result in vector d typedef void (*vm_ScaleAddVector_fp)(vector *d, vector *p, vector *v, float s); DMFCDLLOUT(vm_ScaleAddVector_fp DLLvm_ScaleAddVector;) // Divides second vector components by 3rd arg, placing result in first arg. Useful for parametric lines typedef void (*vm_DivVector_fp)(vector *, vector *, float); DMFCDLLOUT(vm_DivVector_fp DLLvm_DivVector;) // Same as NormalizeVector, but uses approximation typedef float (*vm_NormalizeVectorFast_fp)(vector *); DMFCDLLOUT(vm_NormalizeVectorFast_fp DLLvm_NormalizeVectorFast;) // Clears a matrix to zero typedef void (*vm_ClearMatrix_fp)(matrix *); DMFCDLLOUT(vm_ClearMatrix_fp DLLvm_ClearMatrix;) // Given 3 angles (p,h,b), makes a rotation matrix out of them typedef void (*vm_AnglesToMatrix_fp)(matrix *, angle p, angle h, angle b); DMFCDLLOUT(vm_AnglesToMatrix_fp DLLvm_AnglesToMatrix;) // Ensure that a matrix is orthogonal typedef void (*vm_Orthogonalize_fp)(matrix *m); DMFCDLLOUT(vm_Orthogonalize_fp DLLvm_Orthogonalize;) // Compute a matrix from one or two vectors. At least one and at most two vectors must/can be specified. // Parameters: m - filled in with the orienation matrix // fvec,uvec,rvec - pointers to vectors that determine the matrix. // One or two of these must be specified, with the other(s) set to NULL. typedef void (*vm_VectorToMatrix_fp)(matrix *m, vector *fvec, vector *uvec, vector *rvec); DMFCDLLOUT(vm_VectorToMatrix_fp DLLvm_VectorToMatrix;) // Computes a matrix from a vector and and angle of rotation around that vector // Parameters: m - filled in with the computed matrix // v - the forward vector of the new matrix // a - the angle of rotation around the forward vector typedef void (*vm_VectorAngleToMatrix_fp)(matrix *m, vector *v, angle a); DMFCDLLOUT(vm_VectorAngleToMatrix_fp DLLvm_VectorAngleToMatrix;) // Given an angle, places sin in 2nd arg, cos in 3rd. Either can be null typedef void (*vm_SinCos_fp)(angle, float *, float *); DMFCDLLOUT(vm_SinCos_fp DLLvm_SinCos;) // Given x1,y1,x2,y2, returns the slope typedef float (*vm_GetSlope_fp)(float, float, float, float); DMFCDLLOUT(vm_GetSlope_fp DLLvm_GetSlope;) // Calculates the perpendicular vector given three points // Parms: n - the computed perp vector (filled in) // v0,v1,v2 - three clockwise vertices typedef void (*vm_GetPerp_fp)(vector *n, vector *a, vector *b, vector *c); DMFCDLLOUT(vm_GetPerp_fp DLLvm_GetPerp;) // Calculates the (normalized) surface normal give three points // Parms: n - the computed surface normal (filled in) // v0,v1,v2 - three clockwise vertices // Returns the magnitude of the normal before it was normalized. // The bigger this value, the better the normal. typedef float (*vm_GetNormal_fp)(vector *n, vector *v0, vector *v1, vector *v2); DMFCDLLOUT(vm_GetNormal_fp DLLvm_GetNormal;) // Gets the distances (magnitude) between two vectors. Slow. typedef float (*vm_VectorDistance_fp)(const vector *a, const vector *b); DMFCDLLOUT(vm_VectorDistance_fp DLLvm_VectorDistance;) // Gets the approx distances (magnitude) between two vectors. Faster. typedef float (*vm_VectorDistanceQuick_fp)(vector *a, vector *b); DMFCDLLOUT(vm_VectorDistanceQuick_fp DLLvm_VectorDistanceQuick;) // Computes a normalized direction vector between two points // Parameters: dest - filled in with the normalized direction vector // start,end - the start and end points used to calculate the vector // Returns: the distance between the two input points typedef float (*vm_GetNormalizedDir_fp)(vector *dest, vector *end, vector *start); DMFCDLLOUT(vm_GetNormalizedDir_fp DLLvm_GetNormalizedDir;) // Returns a normalized direction vector between two points // Uses sloppier magnitude, less precise typedef float (*vm_GetNormalizedDirFast_fp)(vector *dest, vector *end, vector *start); DMFCDLLOUT(vm_GetNormalizedDirFast_fp DLLvm_GetNormalizedDirFast;) // extract angles from a matrix typedef angvec *(*vm_ExtractAnglesFromMatrix_fp)(angvec *a, matrix *m); DMFCDLLOUT(vm_ExtractAnglesFromMatrix_fp DLLvm_ExtractAnglesFromMatrix;) // returns the angle between two vectors and a forward vector typedef angle (*vm_DeltaAngVec_fp)(vector *v0, vector *v1, vector *fvec); DMFCDLLOUT(vm_DeltaAngVec_fp DLLvm_DeltaAngVec;) // returns the angle between two normalized vectors and a forward vector typedef angle (*vm_DeltaAngVecNorm_fp)(vector *v0, vector *v1, vector *fvec); DMFCDLLOUT(vm_DeltaAngVecNorm_fp DLLvm_DeltaAngVecNorm;) // Computes the distance from a point to a plane. // Parms: checkp - the point to check // Parms: norm - the (normalized) surface normal of the plane // planep - a point on the plane // Returns: The signed distance from the plane; negative dist is on the back of the plane typedef float (*vm_DistToPlane_fp)(vector *checkp, vector *norm, vector *planep); DMFCDLLOUT(vm_DistToPlane_fp DLLvm_DistToPlane;) // returns the value of a determinant typedef float (*vm_CalcDetValue_fp)(matrix *det); DMFCDLLOUT(vm_CalcDetValue_fp DLLvm_CalcDetValue;) typedef void (*vm_MakeInverseMatrix_fp)(matrix *dest); DMFCDLLOUT(vm_MakeInverseMatrix_fp DLLvm_MakeInverseMatrix;) typedef void (*vm_SinCosToMatrix_fp)(matrix *m, float sinp, float cosp, float sinb, float cosb, float sinh, float cosh); DMFCDLLOUT(vm_SinCosToMatrix_fp DLLvm_SinCosToMatrix;) // Gets the real center of a polygon typedef float (*vm_GetCentroid_fp)(vector *centroid, vector *src, int nv); DMFCDLLOUT(vm_GetCentroid_fp DLLvm_GetCentroid;) // retrieves a random vector in values -RAND_MAX/2 to RAND_MAX/2 typedef void (*vm_MakeRandomVector_fp)(vector *vec); DMFCDLLOUT(vm_MakeRandomVector_fp DLLvm_MakeRandomVector;) // Given a set of points, computes the minimum bounding sphere of those points typedef float (*vm_ComputeBoundingSphere_fp)(vector *center, vector *vecs, int num_verts); DMFCDLLOUT(vm_ComputeBoundingSphere_fp DLLvm_ComputeBoundingSphere;) // Gets the real center of a polygon, but uses fast magnitude calculation // Returns the size of the passed in stuff typedef float (*vm_GetCentroidFast_fp)(vector *centroid, vector *src, int nv); DMFCDLLOUT(vm_GetCentroidFast_fp DLLvm_GetCentroidFast;) // returns scaled line width typedef int (*RenderHUDGetTextLineWidth_fp)(const char *string); DMFCDLLOUT(RenderHUDGetTextLineWidth_fp DLLRenderHUDGetTextLineWidth;) // returns scaled text height typedef int (*RenderHUDGetTextHeight_fp)(const char *string); DMFCDLLOUT(RenderHUDGetTextHeight_fp DLLRenderHUDGetTextHeight;) // typedef void (*StartFrame_fp)(int x, int y, int x2, int y2, bool clear=true); typedef void (*StartFrame_fp)(int x, int y, int x2, int y2, bool clear); DMFCDLLOUT(StartFrame_fp DLLStartFrame;) typedef void (*EndFrame_fp)(void); DMFCDLLOUT(EndFrame_fp DLLEndFrame;) typedef void (*ResetFacings_fp)(void); DMFCDLLOUT(ResetFacings_fp DLLResetFacings;) // Render the world into a game window // Parameters: viewer - if not null, this object disabled from rendering. Not used otherwise. // viewer_eye - where we're rendering from // viewer_roomnum - the roomnum viewer_eye is in // viewer_orient - the oriention for this view // zoom - the zoom for this view // rear_view - if true, we're looking out the rear of this object typedef void (*GameRenderWorld_fp)(object *viewer, vector *viewer_eye, int viewer_roomnum, matrix *viewer_orient, float zoom, bool rear_view); DMFCDLLOUT(GameRenderWorld_fp DLLGameRenderWorld;) // retrives the settings of the last call to StartFrame // returns false if it's not currently in between a StartFrame/EndFrame block typedef bool (*GetFrameParameters_fp)(int *x1, int *y1, int *x2, int *y2); DMFCDLLOUT(GetFrameParameters_fp DLLGetFrameParameters;) // Sets the state of zbuffering to on or off typedef void (*rend_SetZBufferState_fp)(sbyte state); DMFCDLLOUT(rend_SetZBufferState_fp DLLrend_SetZBufferState;) typedef void (*rend_SetLighting_fp)(light_state); DMFCDLLOUT(rend_SetLighting_fp DLLrend_SetLighting;) typedef void (*rend_SetColorModel_fp)(color_model); DMFCDLLOUT(rend_SetColorModel_fp DLLrend_SetColorModel;) typedef void (*rend_SetTextureType_fp)(texture_type); DMFCDLLOUT(rend_SetTextureType_fp DLLrend_SetTextureType;) // Given a handle to a bitmap and nv point vertices, draws a polygon // typedef void (*rend_DrawPolygon_fp)(int handle,g3Point **p,int nv,int map_type=MAP_TYPE_BITMAP); typedef void (*rend_DrawPolygon_fp)(int handle, g3Point **p, int nv, int map_type); DMFCDLLOUT(rend_DrawPolygon_fp DLLrend_DrawPolygon;) // Tells the software renderer whether or not to use mipping typedef void (*rend_SetMipState_fp)(sbyte); DMFCDLLOUT(rend_SetMipState_fp DLLrend_SetMipState;) // Sets the fog state to TRUE or FALSE typedef void (*rend_SetFogState_fp)(sbyte on); DMFCDLLOUT(rend_SetFogState_fp DLLrend_SetFogState;) // Sets the state of bilinear filtering for our textures typedef void (*rend_SetFiltering_fp)(sbyte state); DMFCDLLOUT(rend_SetFiltering_fp DLLrend_SetFiltering;) // Sets a bitmap as an overlay to rendered on top of the next texture map typedef void (*rend_SetOverlayMap_fp)(int handle); DMFCDLLOUT(rend_SetOverlayMap_fp DLLrend_SetOverlayMap;) // Sets the type of overlay operation typedef void (*rend_SetOverlayType_fp)(ubyte type); DMFCDLLOUT(rend_SetOverlayType_fp DLLrend_SetOverlayType;) // Clears the display to a specified color typedef void (*rend_ClearScreen_fp)(ddgr_color color); DMFCDLLOUT(rend_ClearScreen_fp DLLrend_ClearScreen;) // Sets a pixel on the display typedef void (*rend_SetPixel_fp)(ddgr_color color, int x, int y); DMFCDLLOUT(rend_SetPixel_fp DLLrend_SetPixel;) // Gets a pixel on the display typedef ddgr_color (*rend_GetPixel_fp)(int x, int y); DMFCDLLOUT(rend_GetPixel_fp DLLrend_GetPixel;) // Draws spheres typedef void (*rend_FillCircle_fp)(ddgr_color col, int x, int y, int rad); DMFCDLLOUT(rend_FillCircle_fp DLLrend_FillCircle;) // draws circles typedef void (*rend_DrawCircle_fp)(int x, int y, int rad); DMFCDLLOUT(rend_DrawCircle_fp DLLrend_DrawCircle;) // sets the alpha type typedef void (*rend_SetAlphaType_fp)(sbyte); DMFCDLLOUT(rend_SetAlphaType_fp DLLrend_SetAlphaType;) // Sets the constant alpha value typedef void (*rend_SetAlphaValue_fp)(ubyte val); DMFCDLLOUT(rend_SetAlphaValue_fp DLLrend_SetAlphaValue;) // Sets the wrap parameter typedef void (*rend_SetWrapType_fp)(wrap_type val); DMFCDLLOUT(rend_SetWrapType_fp DLLrend_SetWrapType;) // Adds a bias to each coordinates z value. This is useful for making 2d bitmaps // get drawn without being clipped by the zbuffer typedef void (*rend_SetZBias_fp)(float z_bias); DMFCDLLOUT(rend_SetZBias_fp DLLrend_SetZBias;) // Enables/disables writes the depth buffer typedef void (*rend_SetZBufferWriteMask_fp)(int state); DMFCDLLOUT(rend_SetZBufferWriteMask_fp DLLrend_SetZBufferWriteMask;) // Gets a pointer to a linear frame buffer typedef void (*rend_GetLFBLock_fp)(renderer_lfb *lfb); DMFCDLLOUT(rend_GetLFBLock_fp DLLrend_GetLFBLock;) // Releases an lfb lock typedef void (*rend_ReleaseLFBLock_fp)(renderer_lfb *lfb); DMFCDLLOUT(rend_ReleaseLFBLock_fp DLLrend_ReleaseLFBLock;) // Given a source x,y and width,height, draws any sized bitmap into the renderer lfb typedef void (*rend_DrawLFBBitmap_fp)(int sx, int sy, int w, int h, int dx, int dy, ushort *data, int rowsize); DMFCDLLOUT(rend_DrawLFBBitmap_fp DLLrend_DrawLFBBitmap;) // Draws a line using the states of the renderer typedef void (*rend_DrawSpecialLine_fp)(g3Point *p0, g3Point *p1); DMFCDLLOUT(rend_DrawSpecialLine_fp DLLrend_DrawSpecialLine;) // Find out if a vector intersects with anything. // Fills in hit_data, an fvi_info structure // Parms: // p0 & startseg describe the start of the vector // p1 the end of the vector // rad the radius of the cylinder // thisobjnum used to prevent an object with colliding with itself // ingore_obj_list NULL, or ptr to a list of objnums to ignore, terminated with -1 // check_obj_flag determines whether collisions with objects are checked // Returns the hit_data->hit_type // typedef int (*fvi_FindIntersection_fp)(fvi_query *fq,fvi_info *hit_data, bool no_subdivision = false); typedef int (*fvi_FindIntersection_fp)(fvi_query *fq, fvi_info *hit_data, bool no_subdivision); DMFCDLLOUT(fvi_FindIntersection_fp DLLfvi_FindIntersection;) // Generates a list of faces(with corresponding room numbers) within a given distance to a position. // Return value is the number of faces in the list typedef int (*fvi_QuickDistFaceList_fp)(int init_room_index, vector *pos, float rad, fvi_face_room_list *quick_fr_list, int max_elements); DMFCDLLOUT(fvi_QuickDistFaceList_fp DLLfvi_QuickDistFaceList;) // Returns the number of cells that are approximately within the specified radius typedef int (*fvi_QuickDistCellList_fp)(int init_cell_index, vector *pos, float rad, int *quick_cell_list, int max_elements); DMFCDLLOUT(fvi_QuickDistCellList_fp DLLfvi_QuickDistCellList;) // Returns the number of objects that are approximately within the specified radius // typedef int (*fvi_QuickDistObjectList_fp)(vector *pos, int init_roomnum, float rad, short *object_index_list, int // max_elements, bool f_lightmap_only, bool f_only_players_and_ais = false, bool f_include_non_collide_objects = false, // bool f_stop_at_closed_doors = false); typedef int (*fvi_QuickDistObjectList_fp)(vector *pos, int init_roomnum, float rad, short *object_index_list, int max_elements, bool f_lightmap_only, bool f_only_players_and_ais, bool f_include_non_collide_objects, bool f_stop_at_closed_doors); DMFCDLLOUT(fvi_QuickDistObjectList_fp DLLfvi_QuickDistObjectList;) // returns true if the given point is in the given room // typedef bool (*fvi_QuickRoomCheck_fp)(vector *pos, room *cur_room, bool try_again = false); typedef bool (*fvi_QuickRoomCheck_fp)(vector *pos, room *cur_room, bool try_again); DMFCDLLOUT(fvi_QuickRoomCheck_fp DLLfvi_QuickRoomCheck;) // returns true if audio taunts are enabled typedef bool (*taunt_AreEnabled_fp)(void); DMFCDLLOUT(taunt_AreEnabled_fp DLLtaunt_AreEnabled;) // Enables/Disables audio_taunts for the player typedef void (*taunt_Enable_fp)(bool enable); DMFCDLLOUT(taunt_Enable_fp DLLtaunt_Enable;) // Returns a ranking index based on the player rating // If rankbuf is non-null, fills in the string corresponding to that rank // Returns -1 if not a pxo game (ie no rankings in this game) // typedef int (*GetPlayerRankIndex_fp) (int pnum,char *rankbuf=NULL); typedef int (*GetPlayerRankIndex_fp)(int pnum, char *rankbuf); DMFCDLLOUT(GetPlayerRankIndex_fp GetPlayerRankIndex;) // Returns the next free viseffect typedef int (*VisEffectAllocate_fp)(void); DMFCDLLOUT(VisEffectAllocate_fp DLLVisEffectAllocate;) // Frees up a viseffect for use typedef int (*VisEffectFree_fp)(int visnum); DMFCDLLOUT(VisEffectFree_fp DLLVisEffectFree;) typedef int (*VisEffectInitType_fp)(vis_effect *vis); DMFCDLLOUT(VisEffectInitType_fp DLLVisEffectInitType;) // initialize a new viseffect. adds to the list for the given room // returns the object number typedef int (*VisEffectCreate_fp)(ubyte type, ubyte id, int roomnum, vector *pos); DMFCDLLOUT(VisEffectCreate_fp DLLVisEffectCreate;) // link the viseffect into the list for its room // Does nothing for effects over terrain typedef void (*VisEffectLink_fp)(int visnum, int roomnum); DMFCDLLOUT(VisEffectLink_fp DLLVisEffectLink;) // Unlinks a viseffect from a room // Does nothing for terrain typedef void (*VisEffectUnlink_fp)(int visnum); DMFCDLLOUT(VisEffectUnlink_fp DLLVisEffectUnlink;) // when an effect has moved into a new room, this function unlinks it // from its old room and links it into the new room typedef void (*VisEffectRelink_fp)(int visnum, int newroomnum); DMFCDLLOUT(VisEffectRelink_fp DLLVisEffectRelink;) // remove viseffect from the world typedef void (*VisEffectDelete_fp)(int visnum); DMFCDLLOUT(VisEffectDelete_fp DLLVisEffectDelete;) // Creates a some sparks that go in random directions // typedef void (*CreateRandomSparks_fp) (int num_sparks,vector *pos,int roomnum,int which_index=-1,float // force_scalar=1); typedef void (*CreateRandomSparks_fp)(int num_sparks, vector *pos, int roomnum, int which_index, float force_scalar); DMFCDLLOUT(CreateRandomSparks_fp DLLCreateRandomSparks;) // Creates a some line sparks that go in random directions // typedef void (*CreateRandomLineSparks_fp) (int num_sparks,vector *pos,int roomnum,ushort color=0,float // force_scalar=1); typedef void (*CreateRandomLineSparks_fp)(int num_sparks, vector *pos, int roomnum, ushort color, float force_scalar); DMFCDLLOUT(CreateRandomLineSparks_fp DLLCreateRandomLineSparks;) // Creates vis effects but has the caller set their parameters // initialize a new viseffect. adds to the list for the given room // returns the vis number // typedef int (*VisEffectCreateControlled_fp)(ubyte type,object *parent,ubyte id,int roomnum,vector *pos,float // lifetime,vector *velocity,int phys_flags=0,float size=0,float mass=0.0f,float drag=0.0f,bool isreal=0); typedef int (*VisEffectCreateControlled_fp)(ubyte type, object *parent, ubyte id, int roomnum, vector *pos, float lifetime, vector *velocity, int phys_flags, float size, float mass, float drag, bool isreal); DMFCDLLOUT(VisEffectCreateControlled_fp DLLVisEffectCreateControlled;) // Creates a some particles that go in random directions typedef void (*CreateRandomParticles_fp)(int num_sparks, vector *pos, int roomnum, int bm_handle, float size, float life); DMFCDLLOUT(CreateRandomParticles_fp DLLCreateRandomParticles;) // Attaches viseffects that move with an object typedef void (*AttachRandomNapalmEffectsToObject_fp)(object *obj); DMFCDLLOUT(AttachRandomNapalmEffectsToObject_fp DLLAttachRandomNapalmEffectsToObject;) // allocates and initializes the scripts for an object. // robots, powerups, doors, etc. typedef void (*InitObjectScripts_fp)(object *objp, bool do_evt_created); DMFCDLLOUT(InitObjectScripts_fp DLLInitObjectScripts;) // Frame setup functions: // start the frame, specifying view position, matrix, & zoom typedef void (*g3_StartFrame_fp)(vector *view_pos, matrix *view_matrix, float zoom); DMFCDLLOUT(g3_StartFrame_fp DLLg3_StartFrame;) // end the frame typedef void (*g3_EndFrame_fp)(void); DMFCDLLOUT(g3_EndFrame_fp DLLg3_EndFrame;) // get the current view position typedef void (*g3_GetViewPosition_fp)(vector *vp); DMFCDLLOUT(g3_GetViewPosition_fp DLLg3_GetViewPosition;) // returns the current view matrix typedef void (*g3_GetViewMatrix_fp)(matrix *mat); DMFCDLLOUT(g3_GetViewMatrix_fp DLLg3_GetViewMatrix;) // returns the current unscaled view matrix typedef void (*g3_GetUnscaledMatrix_fp)(matrix *mat); DMFCDLLOUT(g3_GetUnscaledMatrix_fp DLLg3_GetUnscaledMatrix;) // Instancing // instance at specified point with specified orientation typedef void (*g3_StartInstanceMatrix_fp)(vector *pos, matrix *orient); DMFCDLLOUT(g3_StartInstanceMatrix_fp DLLg3_StartInstanceMatrix;) // instance at specified point with specified orientation typedef void (*g3_StartInstanceAngles_fp)(vector *pos, angvec *angles); DMFCDLLOUT(g3_StartInstanceAngles_fp DLLg3_StartInstanceAngles;) // pops the old context typedef void (*g3_DoneInstance_fp)(); DMFCDLLOUT(g3_DoneInstance_fp DLLg3_DoneInstance;) // Misc utility functions: // returns true if a plane is facing the viewer. takes the unrotated surface // normal of the plane, and a point on it. The normal need not be normalized typedef bool (*g3_CheckNormalFacing_fp)(vector *v, vector *norm); DMFCDLLOUT(g3_CheckNormalFacing_fp DLLg3_CheckNormalFacing;) // Point definition and rotation functions: // rotates a point. returns codes. does not check if already rotated typedef ubyte (*g3_RotatePoint_fp)(g3Point *dest, vector *src); DMFCDLLOUT(g3_RotatePoint_fp DLLg3_RotatePoint;) // projects a point typedef void (*g3_ProjectPoint_fp)(g3Point *point); DMFCDLLOUT(g3_ProjectPoint_fp DLLg3_ProjectPoint;) // calculate the depth of a point - returns the z coord of the rotated point typedef float (*g3_CalcPointDepth_fp)(vector *pnt); DMFCDLLOUT(g3_CalcPointDepth_fp DLLg3_CalcPointDepth;) // from a 2d point, compute the vector through that point typedef void (*g3_Point2Vec_fp)(vector *v, short sx, short sy); DMFCDLLOUT(g3_Point2Vec_fp DLLg3_Point2Vec;) // code a point. fills in the p3_codes field of the point, and returns the codes typedef ubyte (*g3_CodePoint_fp)(g3Point *point); DMFCDLLOUT(g3_CodePoint_fp DLLg3_CodePoint;) // delta rotation functions typedef vector *(*g3_RotateDeltaX_fp)(vector *dest, float dx); DMFCDLLOUT(g3_RotateDeltaX_fp DLLg3_RotateDeltaX;) typedef vector *(*g3_RotateDeltaY_fp)(vector *dest, float dy); DMFCDLLOUT(g3_RotateDeltaY_fp DLLg3_RotateDeltaY;) typedef vector *(*g3_RotateDeltaZ_fp)(vector *dest, float dz); DMFCDLLOUT(g3_RotateDeltaZ_fp DLLg3_RotateDeltaZ;) typedef vector *(*g3_RotateDeltaVec_fp)(vector *dest, vector *src); DMFCDLLOUT(g3_RotateDeltaVec_fp DLLg3_RotateDeltaVec;) typedef ubyte (*g3_AddDeltaVec_fp)(g3Point *dest, g3Point *src, vector *deltav); DMFCDLLOUT(g3_AddDeltaVec_fp DLLg3_AddDeltaVec;) // Drawing functions: // draw a polygon // Parameters: nv - the number of verts in the poly // pointlist - a pointer to a list of pointers to points // bm - the bitmap handle if texturing. ignored if flat shading // typedef int (*g3_DrawPoly_fp)(int nv,g3Point **pointlist,int bm,int map_type=0,g3Codes *clip_codes=NULL); typedef int (*g3_DrawPoly_fp)(int nv, g3Point **pointlist, int bm, int map_type, g3Codes *clip_codes); DMFCDLLOUT(g3_DrawPoly_fp DLLg3_DrawPoly;) // draw a sortof sphere - i.e., the 2d radius is proportional to the 3d // radius, but not to the distance from the eye typedef void (*g3_DrawSphere_fp)(ddgr_color color, g3Point *pnt, float rad); DMFCDLLOUT(g3_DrawSphere_fp DLLg3_DrawSphere;) // like g3_DrawPoly(), but checks to see if facing. If surface normal is // NULL, this routine must compute it, which will be slow. It is better to // pre-compute the normal, and pass it to this function. When the normal // is passed, this function works like g3_CheckNormalFacing() plus // g3_DrawPoly(). typedef void (*g3_CheckAndDrawPoly_fp)(int nv, g3Point **pointlist, int bm, vector *norm, vector *pnt); DMFCDLLOUT(g3_CheckAndDrawPoly_fp DLLg3_CheckAndDrawPoly;) // draws a line. takes two points. typedef void (*g3_DrawLine_fp)(ddgr_color color, g3Point *p0, g3Point *p1); DMFCDLLOUT(g3_DrawLine_fp DLLg3_DrawLine;) // draws a bitmap with the specified 3d width & height // returns 1 if off screen, 0 if drew // typedef void (*g3_DrawBitmap_fp)(vector *pos,float width,float height,int bm,int color=-1); typedef void (*g3_DrawBitmap_fp)(vector *pos, float width, float height, int bm, int color); DMFCDLLOUT(g3_DrawBitmap_fp DLLg3_DrawBitmap;) // Draws a bitmap that has been rotated about its center. Angle of rotation is passed as 'rot_angle' // typedef void (*g3_DrawRotatedBitmap_fp)(vector *pos,angle rot_angle,float width,float height,int bm,int color=-1); typedef void (*g3_DrawRotatedBitmap_fp)(vector *pos, angle rot_angle, float width, float height, int bm, int color); DMFCDLLOUT(g3_DrawRotatedBitmap_fp DLLg3_DrawRotatedBitmap;) // Draw a wireframe box aligned with the screen. Used for the editor. // Parameters: color - the color to draw the lines // pnt - the center point // rad - specifies the width/2 & height/2 of the box typedef void (*g3_DrawBox_fp)(ddgr_color color, g3Point *pnt, float rad); DMFCDLLOUT(g3_DrawBox_fp DLLg3_DrawBox;) // Sets up a custom clipping plane - g3_StartFrame must be called before this is called typedef void (*g3_SetCustomClipPlane_fp)(ubyte state, vector *pnt, vector *normal); DMFCDLLOUT(g3_SetCustomClipPlane_fp DLLg3_SetCustomClipPlane;) // sets the z distance of the far clipping plane typedef void (*g3_SetFarClipZ_fp)(float z); DMFCDLLOUT(g3_SetFarClipZ_fp DLLg3_SetFarClipZ;) // Clips a polygon // Parameters: pointlist - pointer to a list of pointers to points // nv - the number of points in the polygon // cc - the clip codes for this polygon // Returns: a pointer to a list of pointer of points in the clipped polygon // NOTE: You MUST call g3_FreeTempPoints() when you're done with the clipped polygon typedef g3Point **(*g3_ClipPolygon_fp)(g3Point **pointlist, int *nv, g3Codes *cc); DMFCDLLOUT(g3_ClipPolygon_fp DLLg3_ClipPolygon;) // Free up any temp points (created by the clipper) in the given pointlist // Parameters: pointlist - pointer to list of pointers to points, returned by g3_ClipPolygon() // nv - the number of points in pointlist typedef void (*g3_FreeTempPoints_fp)(g3Point **pointlist, int nv); DMFCDLLOUT(g3_FreeTempPoints_fp DLLg3_FreeTempPoints;) // Gets the matrix scale vector typedef void (*g3_GetMatrixScale_fp)(vector *matrix_scale); DMFCDLLOUT(g3_GetMatrixScale_fp DLLg3_GetMatrixScale;) // Sets the triangulation test to on or off typedef void (*g3_SetTriangulationTest_fp)(int state); DMFCDLLOUT(g3_SetTriangulationTest_fp DLLg3_SetTriangulationTest;) // draws a line based on the current setting of render states. takes two points. returns true if drew typedef void (*g3_DrawSpecialLine_fp)(g3Point *p0, g3Point *p1); DMFCDLLOUT(g3_DrawSpecialLine_fp DLLg3_DrawSpecialLine;) // Draws a bitmap on a specific plane. Also does rotation. Angle of rotation is passed as 'rot_angle' typedef void (*g3_DrawPlanarRotatedBitmap_fp)(vector *pos, vector *norm, angle rot_angle, float width, float height, int bm); DMFCDLLOUT(g3_DrawPlanarRotatedBitmap_fp DLLg3_DrawPlanarRotatedBitmap;) // Stops all sounds for a player typedef void (*PlayerStopSounds_fp)(int slot); DMFCDLLOUT(PlayerStopSounds_fp DLLPlayerStopSounds;) // Returns index of argument sought, or 0 if not found typedef int (*FindArg_fp)(const char *which); DMFCDLLOUT(FindArg_fp DLLFindArg;) // Given an object and a weapon, fires a shot from that object typedef int (*FireWeaponFromObject_fp)(object *obj, int weapon_num, int gun_num, bool f_force_forward, bool f_force_target); DMFCDLLOUT(FireWeaponFromObject_fp DLLFireWeaponFromObject;) // Creates an weapon and sends it speeding on its way typedef int (*CreateAndFireWeapon_fp)(vector *pos, vector *dir, object *parent, int weapon_num); DMFCDLLOUT(CreateAndFireWeapon_fp DLLCreateAndFireWeapon;) // Selects the next camera view in the small windows typedef void (*SelectNextCameraView_fp)(int window); DMFCDLLOUT(SelectNextCameraView_fp DLLSelectNextCameraView;) // adds a type/id item to the inventory (returns true on success) // typedef bool (*dInven_Add_fp)(Inventory *inven,int type,int id,object *parent=NULL,int aux_type=-1,int aux_id=-1,int // flags=0,char *description=NULL); typedef bool (*dInven_Add_fp)(Inventory *inven, int type, int id, object *parent, int aux_type, int aux_id, int flags, char *description); DMFCDLLOUT(dInven_Add_fp Inven_Add;) // adds an object to the inventory (marked by it's objhandle) // typedef bool (*dInven_AddObject_fp)(Inventory *inven,int object_handle,int flags=0,char *description=NULL); typedef bool (*dInven_AddObject_fp)(Inventory *inven, int object_handle, int flags, char *description); DMFCDLLOUT(dInven_AddObject_fp Inven_AddObject;) // adds a special cased CounterMeasure into the inventory // typedef bool (*dInven_AddCounterMeasure_fp)(Inventory *inven,int id,int aux_type=-1,int aux_id=-1,int flags=0,char // *description=NULL); typedef bool (*dInven_AddCounterMeasure_fp)(Inventory *inven, int id, int aux_type, int aux_id, int flags, char *description); DMFCDLLOUT(dInven_AddCounterMeasure_fp Inven_AddCounterMeasure;) // removes an item from the inventory (reduces it's count by one...if there is no more, then it goes bye-bye) // to remove an object that was added via objhandle, then pass the objhandle // in the 'type' parameter, and don't pass in an id. // typedef bool (*dInven_Remove_fp)(Inventory *inven,int type,int id=-1); typedef bool (*dInven_Remove_fp)(Inventory *inven, int type, int id); DMFCDLLOUT(dInven_Remove_fp Inven_Remove;) // uses an item in the inventory (also reduces its count by one...if there is no more, then it goes bye-bye) // typedef bool (*dInven_Use_fp)(Inventory *inven,int type,int id,object *parent=NULL); typedef bool (*dInven_Use_fp)(Inventory *inven, int type, int id, object *parent); DMFCDLLOUT(dInven_Use_fp Inven_Use;) // uses an item in the inventory (given it's objhandle). // typedef bool (*dInven_UseObjHandle_fp)(Inventory *inven,int objhandle,object *parent=NULL); typedef bool (*dInven_UseObjHandle_fp)(Inventory *inven, int objhandle, object *parent); DMFCDLLOUT(dInven_UseObjHandle_fp Inven_UseObjHandle;) // returns how many unique type/ids are in the inventory typedef int (*dInven_Size_fp)(Inventory *inven); DMFCDLLOUT(dInven_Size_fp Inven_Size;) // returns true if there is an item in the inventory with the given type/id (or objhandle if id is -1, pass the object // handle as the type parameter) typedef bool (*dInven_CheckItem_fp)(Inventory *inven,int type,int id=-1); typedef bool (*dInven_CheckItem_fp)(Inventory *inven, int type, int id); DMFCDLLOUT(dInven_CheckItem_fp Inven_CheckItem;) // Resets the inventory, cleaning it out // in_game: set to true if this is being called from during gameplay // reset_stage: // INVRESET_ALL: Reset _EVERYTHING_ // INVRESET_LEVELCHANGE: Remove everything except those that last across levels // INVRESET_DEATHSPEW: Remove everything except those that do not spew (Default) // typedef void (*dInven_Reset_fp)(Inventory *inven,bool in_game,int reset_stage=INVRESET_DEATHSPEW); typedef void (*dInven_Reset_fp)(Inventory *inven, bool in_game, int reset_stage); DMFCDLLOUT(dInven_Reset_fp Inven_Reset;) // resets the position pointer in the list to the beginning typedef void (*dInven_ResetPos_fp)(Inventory *inven); DMFCDLLOUT(dInven_ResetPos_fp Inven_ResetPos;) // moves the position pointer to the next inventory item // skip : if true then skip over non-selectable items // typedef void (*dInven_NextPos_fp)(Inventory *inven,bool skip=false); typedef void (*dInven_NextPos_fp)(Inventory *inven, bool skip); DMFCDLLOUT(dInven_NextPos_fp Inven_NextPos;) // moves the position pointer to the previous inventory item // skip : if true then skip over non-selectable items // typedef void (*dInven_PrevPos_fp)(Inventory *inven,bool skip=false); typedef void (*dInven_PrevPos_fp)(Inventory *inven, bool skip); DMFCDLLOUT(dInven_PrevPos_fp Inven_PrevPos;) // returns the type/id of the item at the current position // return true if it is a real object (meaning it was placed in the inventory // via an object handle...so id will be -1) typedef bool (*dInven_GetPosTypeID_fp)(Inventory *inven, int &type, int &id); DMFCDLLOUT(dInven_GetPosTypeID_fp Inven_GetPosTypeID;) // returns the aux type/id of the item // return true if it is a real object (meaning it was placed in the inventory // via an object handle...so id will be -1) typedef bool (*dInven_GetAuxPosTypeID_fp)(Inventory *inven, int &type, int &id); DMFCDLLOUT(dInven_GetAuxPosTypeID_fp Inven_GetAuxPosTypeID;) // returns the description of the item at the current position typedef char *(*dInven_GetPosDescription_fp)(Inventory *inven); DMFCDLLOUT(dInven_GetPosDescription_fp Inven_GetPosDescription;) // returns the icon name of the item at the current position typedef char *(*dInven_GetPosIconName_fp)(Inventory *inven); DMFCDLLOUT(dInven_GetPosIconName_fp Inven_GetPosIconName;) // returns the name of the item at the current position typedef char *(*dInven_GetPosName_fp)(Inventory *inven); DMFCDLLOUT(dInven_GetPosName_fp Inven_GetPosName;) // return information about the current position item // return true if it is a real object typedef bool (*dInven_GetPosInfo_fp)(Inventory *inven, ushort &iflags, int &flags); DMFCDLLOUT(dInven_GetPosInfo_fp Inven_GetPosInfo;) // returns the count of the item at the current position typedef int (*dInven_GetPosCount_fp)(Inventory *inven); DMFCDLLOUT(dInven_GetPosCount_fp Inven_GetPosCount;) // returns true if the position pointer is at the begining of the inventory list typedef bool (*dInven_AtBeginning_fp)(Inventory *inven); DMFCDLLOUT(dInven_AtBeginning_fp Inven_AtBeginning;) // returns false if the position pointer is at the end of the inventory list typedef bool (*dInven_AtEnd_fp)(Inventory *inven); DMFCDLLOUT(dInven_AtEnd_fp Inven_AtEnd;) // jump right to an item in the inventory typedef void (*dInven_GotoPos_fp)(Inventory *inven, int newpos); DMFCDLLOUT(dInven_GotoPos_fp Inven_GotoPos;) // jump right to an item in the inventory give it's type and id // to jump to an item that was added via object handle, pass the object // handle in as the type, and make id -1. typedef void (*dInven_GotoPosTypeID_fp)(Inventory *inven, int type, int id); DMFCDLLOUT(dInven_GotoPosTypeID_fp Inven_GotoPosTypeID;) // uses the currently selected item // typedef bool (*dInven_UsePos_fp)(Inventory *inven,object *parent=NULL); typedef bool (*dInven_UsePos_fp)(Inventory *inven, object *parent); DMFCDLLOUT(dInven_UsePos_fp Inven_UsePos;) // returns the 'index' position of the current position typedef int (*dInven_GetPos_fp)(Inventory *inven); DMFCDLLOUT(dInven_GetPos_fp Inven_GetPos;) // checks the pos, if its on a nonselectable item it will move to the next selectable (NULL if none) // typedef void (*dInven_ValidatePos_fp)(Inventory *inven,bool forward=true); typedef void (*dInven_ValidatePos_fp)(Inventory *inven, bool forward); DMFCDLLOUT(dInven_ValidatePos_fp Inven_ValidatePos;) // returns whether an item is selectable typedef bool (*dInven_IsSelectable_fp)(Inventory *inven); DMFCDLLOUT(dInven_IsSelectable_fp Inven_IsSelectable;) typedef bool (*dInven_IsUsable_fp)(Inventory *inven); DMFCDLLOUT(dInven_IsUsable_fp Inven_IsUsable;) // returns how many of an type/id is in the inventory // for object handle items, pass the object handle in as the type and leave // id as -1 typedef int (*dInven_GetTypeIDCount_fp)(Inventory *inven, int type, int id); DMFCDLLOUT(dInven_GetTypeIDCount_fp Inven_GetTypeIDCount;) // searches the inventory for the specified type/id, sets the pos to it // for object handle items, pass the object handle in as the type and leave // id as -1 // typedef bool (*dInven_FindPos_fp)(Inventory *inven,int type,int id=-1); typedef bool (*dInven_FindPos_fp)(Inventory *inven, int type, int id); DMFCDLLOUT(dInven_FindPos_fp Inven_FindPos;) // gets a detailed list of information about what is in the inventory // returns the number of items filled in. typedef int (*dInven_GetInventoryItemList_fp)(Inventory *inven, tInvenList *list, int max_amount, int *cur_sel); DMFCDLLOUT(dInven_GetInventoryItemList_fp Inven_GetInventoryItemList;) #endif