mirror of
https://github.com/kevinbentley/Descent3.git
synced 2025-01-23 03:58:59 +00:00
671 lines
22 KiB
C
671 lines
22 KiB
C
/*
|
|
* $Logfile: /DescentIII/Main/DMFC.h $
|
|
* $Revision: 1.3 $
|
|
* $Date: 2004/02/09 04:14:49 $
|
|
* $Author: kevinb $
|
|
*
|
|
* Major header file for DMFC
|
|
*
|
|
* $Log: DMFC.h,v $
|
|
* Revision 1.3 2004/02/09 04:14:49 kevinb
|
|
* Added newlines to all headers to reduce number of warnings printed
|
|
*
|
|
* Made some small changes to get everything compiling.
|
|
*
|
|
* All Ready to merge the 1.5 tree.
|
|
*
|
|
* Revision 1.2 2000/09/22 18:50:30 icculus
|
|
* Removing some x86 ASM for non-x86 builds.
|
|
*
|
|
* Revision 1.1.1.1 2000/04/18 00:00:30 icculus
|
|
* initial checkin
|
|
*
|
|
*
|
|
* 125 10/21/99 3:32p Matt
|
|
* Mac merge
|
|
*
|
|
* 124 8/11/99 1:21p Jeff
|
|
* exported needed functions for camera windows
|
|
*
|
|
* 123 7/16/99 2:43p Jeff
|
|
* changed CreateMenuItemWArgs function
|
|
*
|
|
* 122 7/11/99 3:32p Jeff
|
|
* exported game arguments, made command line option to specify
|
|
* autoexec.dmfc
|
|
*
|
|
* 121 7/07/99 12:16p Jeff
|
|
* all mangles symbol names fixed. Finished making interface functions.
|
|
*
|
|
* 120 6/12/99 10:59p Jeff
|
|
* fixed messed up #ifdef for __LINUX__
|
|
*
|
|
* 119 6/10/99 6:31p Jeff
|
|
* fixed mprintf define
|
|
*
|
|
* 118 5/12/99 11:04p Jeff
|
|
* dmfc and multiplayer games now have endian friendly packets (*whew*)
|
|
*
|
|
* 117 5/10/99 10:21p Ardussi
|
|
* changes to compile on Mac
|
|
*
|
|
* 116 4/27/99 12:36p Jeff
|
|
* fixed flags
|
|
*
|
|
* 115 4/24/99 11:13p Jeff
|
|
* added flags for creating a newui window for a title bar
|
|
*
|
|
* 114 4/20/99 7:27p Jeff
|
|
* fixed new MAX_PLAYERS
|
|
*
|
|
* 113 4/19/99 6:02p Jeff
|
|
* fixed macros (mprintf and Debug_break) for Linux
|
|
*
|
|
* 112 4/19/99 5:46p Jeff
|
|
* added int3/assert macros for Linux
|
|
*
|
|
* 111 4/03/99 9:26p Jeff
|
|
* changed dialogs that weren't using UID_OK and UID_CANCEL to use and
|
|
* handle them properly
|
|
*
|
|
* 110 3/17/99 12:23p Jeff
|
|
* converted DMFC to be COM interface
|
|
*
|
|
* 109 3/11/99 6:30p Jeff
|
|
* numerous fixes to demo system in multiplayer games (when
|
|
* recording/playback a demo in a multiplayer game)
|
|
*
|
|
* 108 3/05/99 12:02p Kevin
|
|
* New color scheme for new art
|
|
*
|
|
* 107 2/28/99 11:05p Jeff
|
|
* fixed ASSERT define in Release builds
|
|
*
|
|
* 106 2/28/99 3:06a Jeff
|
|
* adjust ok/cancel y offset for new ui artwork
|
|
*
|
|
* 105 2/11/99 12:54a Jeff
|
|
* changed names of exported variables
|
|
*
|
|
* 103 2/07/99 1:19a Jeff
|
|
* added new multiplayer game events EVT_GAMEOBJKILLED and
|
|
* EVT_GAMEOBJDESTROYED
|
|
*
|
|
* 102 2/03/99 4:09p Jeff
|
|
* moved function pointers to seperate file. created autoexec.dmfc
|
|
*
|
|
* 101 1/31/99 7:25p Matt
|
|
* Renamed a bunch of functions to have HUD capitalized
|
|
*
|
|
* 100 1/24/99 8:31p Jeff
|
|
* updated stat manager to print team scores
|
|
*
|
|
* 98 1/15/99 3:50a Jeff
|
|
* new events required new handlers
|
|
*
|
|
* 96 1/07/99 5:01p Jeff
|
|
* added Int3's and updated all net games to use stats manager...correctly
|
|
* too
|
|
*
|
|
* 95 1/06/99 7:02p Jeff
|
|
* added a multiplayer event for game controls
|
|
*
|
|
* 94 1/04/99 12:21p Jeff
|
|
* added support for hosts.allow/deny and updates stats manager a little
|
|
*
|
|
* 93 12/13/98 5:32p Jeff
|
|
* fixed ugly crash due to freeing memory allocated in another heap
|
|
*
|
|
* 92 12/08/98 4:47p Jeff
|
|
* umm, various changes, fixed pilot pics so that they work for everyone
|
|
* now
|
|
*
|
|
* 91 12/08/98 3:29p Jeff
|
|
* updated the team control dialog so the server can determine if they
|
|
* want to make the clients wait
|
|
*
|
|
* 90 12/08/98 12:17p Jeff
|
|
* various changes that include an improved Team Control dialog (doesn't
|
|
* switch teams until exit..) and spew/respawn players that change teams
|
|
*
|
|
* 89 12/04/98 7:04p Jeff
|
|
* almost finished up dmfc stat manager
|
|
*
|
|
* 88 12/03/98 7:05p Jeff
|
|
* updated new stats
|
|
*
|
|
* 87 12/01/98 6:56p Jeff
|
|
* put in quick and dirty implementation of pilot pics for testing
|
|
*
|
|
* 86 11/20/98 5:52p Jeff
|
|
* updated hyper anarchy and hoard a little
|
|
*
|
|
* 85 11/19/98 5:56p Jeff
|
|
* added slider exported and improved Hoard
|
|
*
|
|
* 84 11/18/98 5:48p Jeff
|
|
* added function/struct to get information from the DLL before it loads
|
|
*
|
|
* 83 11/17/98 6:29p Jeff
|
|
* mod can specify whether or not to display the team setup dialog on team
|
|
* game start. Added a menu item to display team setup dialog in mid-game
|
|
*
|
|
* 82 11/16/98 5:35p Jeff
|
|
* removed log functions, added support for changing team names, fixed ctf
|
|
* to work better with different team names
|
|
*
|
|
* 81 11/13/98 6:36p Jeff
|
|
* created dmfc_dll (a DLL version of DMFC) and converted current mods to
|
|
* use it
|
|
*
|
|
* 80 11/12/98 12:16p Jeff
|
|
* more changes to handle (ignore) dedicated server
|
|
*
|
|
* 79 11/11/98 7:18p Jeff
|
|
* changes made so that a dedicated server's team is always -1 (team game
|
|
* or not)
|
|
*
|
|
* 78 11/09/98 11:54a Jeff
|
|
* Added Player_colors
|
|
*
|
|
* 77 11/02/98 4:38p Jeff
|
|
* added ability to sort and display by efficiency
|
|
*
|
|
* 76 11/01/98 1:59a Jeff
|
|
* made a $help inputcommand for help in a dedicated server environment
|
|
*
|
|
* 75 10/30/98 12:46p Jeff
|
|
* cut down a couple bytes on memory usage
|
|
*
|
|
* 74 10/29/98 7:01p Jeff
|
|
* creation of team placement dialog. Moved TranslateEvent into DMFC
|
|
*
|
|
* 73 10/24/98 2:18p Jeff
|
|
*
|
|
* 72 10/23/98 11:22a Jeff
|
|
* changes to handle mixcase, and display the client netgame info
|
|
* correctly
|
|
*
|
|
* 71 10/20/98 4:35p Jeff
|
|
* added a flag for menu to add a <None> to MIT_PLIST...
|
|
*
|
|
* 70 10/20/98 12:17p Jeff
|
|
*
|
|
* 69 10/19/98 7:18p Matt
|
|
* Added system to support different types of damage to the player and
|
|
* have these different types make different sounds.
|
|
*
|
|
* 68 10/18/98 7:59p Jeff
|
|
* functions added to dmfc for client->server objnum matching. Banning
|
|
* now uses tracker id when available.
|
|
*
|
|
* 67 10/17/98 7:30p Jeff
|
|
* network_address compares don't compare port on somethings
|
|
*
|
|
* 66 10/15/98 6:18p Jeff
|
|
* created the is player banned event, removed prejoin event
|
|
*
|
|
* 65 10/15/98 1:34p Jeff
|
|
* added scrollable onscreen menu. Remove ban in dmfc. prejoin event
|
|
*
|
|
* 64 10/14/98 11:26p Jeff
|
|
* added scrollable menus
|
|
*
|
|
* 63 10/13/98 12:03p Kevin
|
|
* Changed use of preprocessors for debug, etc.
|
|
*
|
|
* 62 10/13/98 2:15a Jeff
|
|
* created new event for when a player leaves a multiplayer game. Fixed
|
|
* some 'english' bugs in the network games.
|
|
*
|
|
* 61 10/11/98 2:57a Jeff
|
|
* added new multiplayer event EVT_GAME_INTERVAL, which is to be called on
|
|
* interval, and EVT_HUD_INTERVAL is only to be called when the hud is to
|
|
* be rendered
|
|
*
|
|
* 60 10/08/98 3:37p Jeff
|
|
* general improvements (Netgame info things, save to registry). Changes
|
|
* so it would send packets on NETSEQ_OBJECTS
|
|
*
|
|
* 59 10/05/98 2:49p Jeff
|
|
*
|
|
* 58 10/01/98 7:02p Jeff
|
|
* implemented colored HUD callsigns
|
|
*
|
|
* 57 10/01/98 11:30a Jeff
|
|
* made the observer mode events into just a client event
|
|
*
|
|
* 56 9/30/98 4:21p Jeff
|
|
* team changing is handled correctly
|
|
*
|
|
* 55 9/30/98 3:50p Jeff
|
|
* general improvements (many)
|
|
*
|
|
* 54 9/29/98 3:04p Jeff
|
|
* added time in game and start_time support
|
|
*
|
|
* 53 9/28/98 5:05p Jeff
|
|
* made the statisitical death messages an option in the menu
|
|
*
|
|
* 52 9/25/98 7:25p Jeff
|
|
*
|
|
* 51 9/25/98 4:50p Jeff
|
|
*
|
|
* 50 9/24/98 6:54p Jeff
|
|
* added DisconnectMe() and made use of it when you get kicked/banned
|
|
*
|
|
* 49 9/24/98 5:52p Jeff
|
|
* starting adding statistical death messages, checked in for testing
|
|
*
|
|
* 48 9/23/98 4:17p Jeff
|
|
* basic changes/improvements, started changing death messages
|
|
*
|
|
* 47 9/21/98 7:11p Jeff
|
|
* made InputCommand interface API and moved existing input commands to
|
|
* the interface. Changed mprintf/ASSERT so they are valid in DMFC
|
|
*
|
|
* $NoKeywords: $
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __DMFC_H__
|
|
#define __DMFC_H__
|
|
|
|
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
#include <time.h>
|
|
#include "gamedll_header.h"
|
|
#include "DMFCKeyCodes.h"
|
|
|
|
#if ( (defined __LINUX__) && (!defined __i386__) )
|
|
#include <signal.h>
|
|
#endif
|
|
|
|
#ifndef RELEASE
|
|
|
|
#ifdef WIN32
|
|
#ifdef DEBUG_BREAK
|
|
#undef DEBUG_BREAK
|
|
#endif
|
|
#define DEBUG_BREAK() \
|
|
do { \
|
|
if (DLLDebugBreak_callback_stop) \
|
|
DLLDebugBreak_callback_stop(); \
|
|
_asm{ int 3}; \
|
|
if (DebugBreak_callback_resume) \
|
|
DebugBreak_callback_resume(); \
|
|
} while(0)
|
|
|
|
#define DLLASSERT(x) \
|
|
do { \
|
|
DLLassert(x,#x,__FILE__,__LINE__); \
|
|
} while(0)
|
|
#define DLLmprintf(args) DLLDebug_ConsolePrintf args
|
|
#ifdef ASSERT
|
|
#undef ASSERT
|
|
#endif
|
|
#define ASSERT(x) \
|
|
do { \
|
|
DLLassert(x,#x,__FILE__,__LINE__); \
|
|
} while(0)
|
|
|
|
#ifdef Int3
|
|
#undef Int3
|
|
#endif
|
|
#define Int3() do { \
|
|
mprintf((0, "Int3 at %s line %d.\n", __FILE__, __LINE__)); \
|
|
if (DLLDebugBreak_callback_stop) \
|
|
DLLDebugBreak_callback_stop(); \
|
|
_asm{ int 3}; \
|
|
if (DLLDebugBreak_callback_resume) \
|
|
DLLDebugBreak_callback_resume(); \
|
|
} while (0)
|
|
#elif defined (__LINUX__)
|
|
//For some reason Linux doesn't like the \ continuation character, so I have to uglify this
|
|
#define DLLmprintf(args) DLLDebug_ConsolePrintf args
|
|
#ifdef DEBUG_BREAK
|
|
#undef DEBUG_BREAK
|
|
#endif
|
|
#if (defined __i386__)
|
|
#define DEBUG_BREAK() do{ if(DLLDebugBreak_callback_stop) DLLDebugBreak_callback_stop(); __asm__ __volatile__ ( "int $3" ); if(DLLDebugBreak_callback_resume) DLLDebugBreak_callback_resume(); }while(0)
|
|
#else
|
|
#define DEBUG_BREAK() do{ if(DLLDebugBreak_callback_stop) DLLDebugBreak_callback_stop(); raise(SIGTRAP); if(DLLDebugBreak_callback_resume) DLLDebugBreak_callback_resume(); }while(0)
|
|
#endif
|
|
|
|
#ifdef ASSERT
|
|
#undef ASSERT
|
|
#endif
|
|
#define ASSERT(x) do { DLLassert(x,#x,__FILE__,__LINE__); } while(0)
|
|
#define DLLASSERT(x) ASSERT(x)
|
|
#ifdef Int3
|
|
#undef Int3
|
|
#endif
|
|
#define Int3() do{ mprintf((0, "Int3 at %s line %d.\n",__FILE__,__LINE__)); DEBUG_BREAK();}while(0)
|
|
#define HEAPCHECK()
|
|
#elif defined (MACINTOSH)
|
|
#ifdef DEBUG_BREAK
|
|
#undef DEBUG_BREAK
|
|
#endif
|
|
#define DEBUG_BREAK() \
|
|
do { \
|
|
if (DLLDebugBreak_callback_stop) \
|
|
DLLDebugBreak_callback_stop(); \
|
|
Debugger(); \
|
|
if (DebugBreak_callback_resume) \
|
|
DebugBreak_callback_resume(); \
|
|
} while(0)
|
|
|
|
#define DLLASSERT(x) \
|
|
do { \
|
|
DLLassert(x,#x,__FILE__,__LINE__); \
|
|
} while(0)
|
|
#define DLLmprintf(args) DLLDebug_ConsolePrintf args
|
|
#ifdef ASSERT
|
|
#undef ASSERT
|
|
#endif
|
|
#define ASSERT(x) \
|
|
do { \
|
|
DLLassert(x,#x,__FILE__,__LINE__); \
|
|
} while(0)
|
|
|
|
#ifdef Int3
|
|
#undef Int3
|
|
#endif
|
|
#define Int3() do { \
|
|
mprintf((0, "Int3 at %s line %d.\n", __FILE__, __LINE__)); \
|
|
if (DLLDebugBreak_callback_stop) \
|
|
DLLDebugBreak_callback_stop(); \
|
|
/* Debugger(); */\
|
|
if (DLLDebugBreak_callback_resume) \
|
|
DLLDebugBreak_callback_resume(); \
|
|
} while (0)
|
|
#else
|
|
#ifdef DEBUG_BREAK
|
|
#undef DEBUG_BREAK
|
|
#define DEBUG_BREAK()
|
|
#endif
|
|
#define DLLASSERT(x)
|
|
#define DLLmprintf(args)
|
|
#ifdef Int3
|
|
#undef Int3
|
|
#define Int3()
|
|
#endif
|
|
#define Int3()
|
|
#ifdef ASSERT
|
|
#undef ASSERT
|
|
#define ASSERT(x)
|
|
#endif
|
|
#endif//OS check
|
|
|
|
#else //Release build
|
|
#ifdef DEBUG_BREAK
|
|
#undef DEBUG_BREAK
|
|
#define DEBUG_BREAK()
|
|
#endif
|
|
#define DLLASSERT(x)
|
|
#define DLLmprintf(args)
|
|
#ifdef Int3
|
|
#undef Int3
|
|
#define Int3()
|
|
#endif
|
|
#define Int3()
|
|
#ifdef ASSERT
|
|
#undef ASSERT
|
|
#define ASSERT(x)
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef mprintf //undefine mprintf and redirect it to use DLLmprintf
|
|
#undef mprintf
|
|
#endif
|
|
#define mprintf DLLmprintf
|
|
|
|
#define DLLMAX_PLAYERS MAX_PLAYERS
|
|
#define DLLMAX_TEAMS 4
|
|
#define RED_TEAM 0
|
|
#define BLUE_TEAM 1
|
|
#define GREEN_TEAM 2
|
|
#define YELLOW_TEAM 3
|
|
|
|
#define GR_GREY GR_RGB(128,128,128)
|
|
#define GR_GRAY GR_GREY
|
|
|
|
#define SP_ALL -1
|
|
#define SP_SERVER -2
|
|
#define SPH_DMFCFUNC 0
|
|
#define SPH_FUNC 1
|
|
|
|
#define HI_TEXT 0
|
|
#define HI_BITMAP 1
|
|
|
|
#define MAX_TEAMNAME_LEN 16
|
|
|
|
// Defines for the window camera views
|
|
#define CV_NONE 0 //View not active
|
|
#define CV_REARVIEW 1 //Rear view
|
|
#define CV_MARKER1 2 //Marker view
|
|
#define CV_MARKER2 3 //Marker view
|
|
#define CV_MARKER3 4 //Marker view
|
|
#define CV_MARKER4 5 //Marker view
|
|
#define CV_MARKER5 6 //Marker view
|
|
#define CV_MARKER6 7 //Marker view
|
|
#define CV_MARKER7 8 //Last marker view
|
|
#define CV_MARKER8 9 //Last marker view
|
|
#define CV_GUIDEBOT 10 //Guide-Bot
|
|
#define NUM_CAMERA_VIEWS 3
|
|
|
|
|
|
///special characters in the fonts
|
|
#define CHAR_LEFT_ARROW 24
|
|
#define CHAR_UP_ARROW 25
|
|
#define CHAR_RIGHT_ARROW 26
|
|
#define CHAR_DOWN_ARROW 27
|
|
#define CHAR_CHECKBOX_OFF 28
|
|
#define CHAR_CHECKBOX_ON 29
|
|
#define CHAR_RADIO_OFF 30
|
|
#define CHAR_RADIO_ON 31
|
|
|
|
// The following defines are RGB definitions for colors that should be used throughout the UI for text
|
|
#define UICOL_HOTSPOT_LO GR_RGB(85,234,3) // Color for a hotspot when it isn't in focus//GR_RGB(50,50,255) // Color for a hotspot when it isn't in focus
|
|
#define UICOL_HOTSPOT_HI GR_RGB(207,248,105) // Color for a hotspot when it is in focus
|
|
#define UICOL_TEXT_NORMAL GR_RGB(206,254,241) // Color for text that is used for labels
|
|
#define UICOL_WINDOW_TITLE GR_RGB(207,248,105) // Color for window title text
|
|
#define UICOL_TEXT_AUX GR_RGB(200,200,200) // Color for auxillary text (text that isn't a label)
|
|
#define UICOL_LISTBOX_LO GR_RGB(85,234,3) // Color for listbox text that isn't in focus
|
|
#define UICOL_LISTBOX_HI GR_RGB(207,248,105) // Color for listbox text that is in focus
|
|
#define UICOL_BUTTON_LO GR_RGB(85,234,3) // Color for text on a button that isn't in focus
|
|
#define UICOL_BUTTON_HI GR_RGB(207,248,105) // Color for text on a button that is in focus
|
|
#define UIALPHA_HOTSPOT_LO 192 // Alpha value for hotspots not in focus
|
|
#define UIALPHA_HOTSPOT_HI 255 // Alpha value for hotspots in focus
|
|
#define OKCANCEL_YOFFSET 50 //subtract this from the height of the window
|
|
|
|
// additional flags for creating a newui window
|
|
#define NUWF_TITLENONE 0x00000000 //don't display a title bar
|
|
#define NUWF_TITLESMALL 0x00100000 //display a small title bar
|
|
#define NUWF_TITLEMED 0x00200000 //display a medium size title bar
|
|
#define NUWF_TITLELARGE 0x00300000 //display a large title bar
|
|
#define NUWF_TITLEBARMASK 0x00300000 //mask to use with flags to get title bar flags
|
|
|
|
// predefined return values for DLLDoUI/DLLPollUI...exit the dialog immediatly!!
|
|
#define NEWUIRES_FORCEQUIT -2
|
|
#define UID_OK 0xEE
|
|
#define UID_CANCEL 0xEF
|
|
|
|
|
|
#define MAX_MENUNAME 32
|
|
#define MF_SERVER 0x0001
|
|
#define MF_CLIENT 0x0002
|
|
#define MF_ALL 0x0003
|
|
|
|
#define REGT_STRING 0
|
|
#define REGT_DWORD 1
|
|
#define CFG_NOERROR 0 //There was no error
|
|
#define CFG_ALREADYOPEN 1 //The registry/cfg is already open
|
|
#define CFG_OUTOFMEMORY 2 //Out of memory
|
|
#define CFG_NOCFGFILE 3 //You didn't give a config file name
|
|
#define CFG_NOTOPEN 4 //You haven't opened the config file yet
|
|
#define CFG_KEYNOTFOUND 5 //The key you're looking up hasn't been created or isn't in the registry
|
|
#define CFG_RECORDNOTFOUND 6 //The record you're lookup up isn't in the active key
|
|
#define CFG_CANTCREATE 7 //There was an error trying to create a record
|
|
|
|
#define MIT_NORMAL 0 //Allowed to have submenus
|
|
#define MIT_PLIST 1 //A Player List
|
|
#define MIT_STATE 2 //Radio Button like submenu list
|
|
#define MIT_STATEITEM 3 //Given to the submenu list items of the above
|
|
#define MIT_CUSTOM 4 //use this along with filled in tCustomMenu* (as the only parm in the variable parms section
|
|
// of MenuItem constructor to create a user defined menu list
|
|
|
|
#define MAX_STRING_LEN 32 //Maximum string length for a menu title
|
|
#define MAX_DMFC_TIMERS 16
|
|
#define MAX_DEATH_MSGS 32
|
|
|
|
#define MAX_CALLSIGN_SIZE 25
|
|
#define MAX_PLAYER_RECORDS 64
|
|
#define DSTAT_LEVEL 0
|
|
#define DSTAT_OVERALL 1
|
|
|
|
#define MAX_DBNAME_SIZE 32
|
|
#define MAX_DBLABEL_SIZE 128
|
|
|
|
typedef struct{
|
|
int (*GetListCount)(void); //this function should return the number of items in the list
|
|
char *(*GetItem)(int index); //this function should return a string of the item at the given index, NULL on error
|
|
}tCustomMenu;
|
|
|
|
typedef struct
|
|
{
|
|
int slot; //player record slot
|
|
int kills; //number of times you killed this player
|
|
int deaths; //number of times this player killed you
|
|
}tPInfoStat;
|
|
|
|
typedef enum {STATE_EMPTY,STATE_INGAME,STATE_DISCONNECTED} slot_state;
|
|
|
|
typedef struct{
|
|
int kills[2],deaths[2],suicides[2];
|
|
}t_dstat;
|
|
|
|
typedef struct{
|
|
slot_state state; //state of this slot
|
|
char callsign[MAX_CALLSIGN_SIZE]; //Player's callsign
|
|
char *tracker_id; //Player's master tracker ID, NULL if there isn't one
|
|
network_address net_addr; //Player's address
|
|
int pnum; //Player's pnum
|
|
union{
|
|
float disconnect_time; //Time player disconnected
|
|
float start_time; //Time the player entered the game
|
|
};
|
|
float total_time_in_game; //Total time the player has been in the game
|
|
t_dstat dstats; //DMFC's stats
|
|
void *user_info; //Multiplayer Mod user defined struct pointer
|
|
int user_info_size; //Size of user_info;
|
|
|
|
sbyte team; //The player's team (for when they reconnect)
|
|
void *pinfo; //Pointer to player info (who killed whom)
|
|
}player_record;
|
|
|
|
#define MIF_INCLUDENONE 0x01 //for MIT_PSTATE, this will place a <None> at the top, it will send a -1 to the function, if selected
|
|
//#define MIF_IGNORESERVER 0x02 //for MIT_PSTATE, this will keep the server out of the list
|
|
//#define MIF_IGNOREME 0x04 //for MIT_PSTATE, this will keep your pnum out of the list
|
|
|
|
|
|
#define MAX_COLUMN_TITLE_SIZE 15
|
|
|
|
typedef enum{
|
|
DSCOL_KILLS_LEVEL,DSCOL_KILLS_OVERALL,DSCOL_KILLS_BOTH,
|
|
DSCOL_DEATHS_LEVEL,DSCOL_DEATHS_OVERALL,DSCOL_DEATHS_BOTH,
|
|
DSCOL_SUICIDES_LEVEL,DSCOL_SUICIDES_OVERALL,DSCOL_SUICIDES_BOTH,
|
|
DSCOL_PILOT_NAME,DSCOL_PILOT_TEAM,DSCOL_PING,DSCOL_CUSTOM,DSCOL_BLANK,
|
|
DSCOL_BMP
|
|
}tColumnType;
|
|
|
|
typedef enum{
|
|
DSCOLOR_NORMAL,DSCOLOR_TEAM,DSCOLOR_SHIPCOLOR,DSCOLOR_CUSTOM
|
|
}tColorType;
|
|
|
|
typedef struct{
|
|
//what type of information should be displayed in this column, use custom if you want
|
|
//the callback to fill in your own data
|
|
tColumnType type;
|
|
//what type of color to use
|
|
tColorType color_type;
|
|
//title for column
|
|
char title[MAX_COLUMN_TITLE_SIZE];
|
|
//width of the column (note: columns will not be rendered if the total width of the
|
|
//columns exceeds the width of the display)
|
|
int width;
|
|
//color of the text for this column (if color type is custom)
|
|
ddgr_color color;
|
|
}tDmfcStatsColumnInfo;
|
|
|
|
//=====================================================================
|
|
//tDmfcStatsInit flags
|
|
#define DSIF_SEPERATE_BY_TEAM 0x00000001 //this tells the stats manager to seperate the players by
|
|
//team (useful only in a team game). By default it will
|
|
//list all the players in a straight list
|
|
#define DSIF_SHOW_PIC 0x00000002 //The pilot's picture (if available else logo if available) should
|
|
//be shown in the detailed section
|
|
#define DSIF_ONLY_X_PLAYERS_SHOWN 0x000004 //If set, than the MaxNumberDisplayed member of tDmfcStatsInit
|
|
//must also be valid (throughout the lifetime of the stats
|
|
//being displayed). The stat manager will only display
|
|
// (*MaxNumberDisplayed) stats (checked each frame).
|
|
#define DSIF_SHOW_OBSERVERICON 0x00000008 //if this flag is given, the observer mode icon will be
|
|
//displayed as the first item in the column
|
|
#define DSIF_NOLASTKILLER 0x00000010 //don't display the "Last Killer"
|
|
#define DSIF_NOLASTVICTIM 0x00000020 //don't display the "Last Victim"
|
|
#define DSIF_NODETAILEDINFO 0x00000040 //don't display the detailed stats
|
|
#define DSIF_SHOWPLAYERVIEW 0x00000080 //display the current view of the selected player (only available if DSIF_NODETAILEDINFO is also set)
|
|
|
|
//=====================================================================
|
|
typedef struct{
|
|
//see the DSIF_* for the list of available flags and descriptions
|
|
int flags;
|
|
//points to an array of player record numbers, sorted to however you want them sorted. Each
|
|
//frame this array will be used when displaying the stats.
|
|
int *SortedPlayerRecords;
|
|
//the number of columns you want printed in the player list column for each player
|
|
int cColumnCountPlayerList;
|
|
//the number of columns you want printed in the detailed player info
|
|
int cColumnCountDetailed;
|
|
//Informtaion for the player list columns (array of tDmfcStatsColumnInfo structs)
|
|
tDmfcStatsColumnInfo *PlayerListColumns;
|
|
//Information for the detailed columns (array of tDmfcStatsColumnInfo structs)
|
|
tDmfcStatsColumnInfo *DetailedColumns;
|
|
//Callback function when the stats manager needs to get information when displaying a playerlist column
|
|
// precord_num: contains the player record number of the player it needs information about
|
|
// column_num: which column (index into the PlayerListColumns array) it is working on
|
|
// buffer: buffer to fill in for your data
|
|
// buffer_size: number of bytes you can use for your data (IT MUST BE NULL TERMINATED STRING)
|
|
void (*clbPlayerColumn)(int precord_num,int column_num,char *buffer,int buffer_size);
|
|
//Callback function when the stats manager needs to get information when displaying a detailed column
|
|
// precord_num: contains the player record number of the player it needs information about
|
|
// column_num: which column (index into the DetailedColumns array) it is working on
|
|
// buffer: buffer to fill in for your data
|
|
// buffer_size: number of bytes you can use for your data (IT MUST BE NULL TERMINATED STRING)
|
|
void (*clbDetailedColumn)(int precord_num,int column_num,char *buffer,int buffer_size);
|
|
//Callback function when the stats manager needs to draw the custom bitmap on the playerlist column
|
|
// precord_num: contains the player record number of the player it displaying
|
|
// column_num: which column (index into the PlayerListColumns array) it is working on
|
|
// x,y,w,h: the (x,y) position of the upper left corner of the area, and the allowed width/height
|
|
//handle the drawing in this function
|
|
void (*clbPlayerColumnBMP)(int precord_num,int column_num,int x,int y,int w,int h,ubyte alpha_to_use);
|
|
//Callback function when the stats manager needs to draw the custom bitmap on the detailed column
|
|
// precord_num: contains the player record number of the player it displaying
|
|
// column_num: which column (index into the DetailedColumns array) it is working on
|
|
// x,y,w,h: the (x,y) position of the upper left corner of the area, and the allowed width/height
|
|
//handle the drawing in this function
|
|
void (*clbDetailedColumnBMP)(int precord_num,int column_num,int x,int y,int w,int h,ubyte alpha_to_use);
|
|
//Callback function when the stats manager needs to display team info for a particular team
|
|
// team: contains the team it's displaying about (0 = red, ... 3 = yellow)
|
|
// buffer: buffer to fill in for your data
|
|
// buffer_size: number of bytes you can use for your data (IT MUST BE NULL TERMINATED STRING)
|
|
void (*clTeamLine)(int team,char *buffer,int buffer_size);
|
|
//Points to a buffer that contains the name of the multiplayer game (NULL TERMINATED STRING)
|
|
char *GameName;
|
|
//if the DSIF_ONLY_X_PLAYERS_SHOWN flag is set, than the stat manager checks this value (dereferenced) every frame and will only show this many players
|
|
int *MaxNumberDisplayed;
|
|
}tDmfcStatsInit;
|
|
|
|
#endif
|