home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / netds / rpc / mazelord / winmaze.h < prev   
C/C++ Source or Header  |  1996-01-07  |  12KB  |  434 lines

  1. /*************************************************
  2. MODULE: WinMaze.h
  3.  
  4. This module contains typedefs, etc for Maze Lords.
  5. Prototypes are contained in MazProto.h.
  6. *************************************************/
  7.  
  8. #ifndef _WINMAZE_H_INC_
  9. #define _WINMAZE_H_INC_
  10.  
  11. #ifndef _IN_RC_
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15. #endif
  16. #include <windows.h>
  17. #include <mmsystem.h>
  18. #include "net.h"
  19. #include "MAZEDLG.h"
  20.  
  21. #ifdef WIN16
  22.  
  23. #define Sleep(x)                // Sleep doesn't exist.
  24. #define PT_MOVETO 1
  25. #define PT_LINETO 2
  26. #define GET_WM_COMMAND_ID(wp, lp)                   (wp)
  27. #define GET_WM_COMMAND_HWND(wp, lp)                 (HWND)LOWORD(lp)
  28. #define GET_WM_COMMAND_CMD(wp, lp)                  HIWORD(lp)
  29. typedef long INT;
  30. typedef LPCSTR LPCTSTR;
  31.  
  32. #else  // Else if it's win32
  33.  
  34. #define SELECTOROF(a) a
  35. #define GET_WM_COMMAND_ID(wp, lp)               LOWORD(wp)
  36. #define GET_WM_COMMAND_HWND(wp, lp)             (HWND)(lp)
  37. #define GET_WM_COMMAND_CMD(wp, lp)              HIWORD(wp)
  38. #undef INT
  39. #define INT int
  40.  
  41. #endif
  42.  
  43.  
  44. #define PIC_X           100     // Bitmaps are 100 pixels wide.
  45. #define PIC_Y           150     // Bitmaps are 150 pixels tall.
  46.  
  47. #define PIC_FISH        0
  48. #define PIC_ROBOT       1
  49. #define PIC_SMILEY      2
  50. #define PIC_REAPER      3
  51. #define NUM_PICS        4
  52.  
  53. #define PIC_DRONE       PIC_ROBOT
  54. #define PIC_DEFAULT     PIC_FISH
  55.  
  56.  
  57. #define IDM_FILE                  1000
  58. #define IDM_F_HIGHSCORES               1050
  59. #define IDM_F_NEWGAME                  1100
  60. #define IDM_F_EXIT                     1200
  61. #define IDM_OPTIONS               2000
  62. #define IDM_O_PLAYERSTRETCH            2040
  63. #define IDM_O_DRONESTRETCH             2041
  64. #define IDM_O_DRONES                   2050
  65. #define IDM_O_NET                      2055
  66. #define IDM_O_LOCAL                    2085
  67. #define IDM_O_PAUSE                    2100
  68. #define IDM_O_PLAYERSET                2105
  69. #define IDM_F_STOP                     2110
  70. #define IDM_O_BITMAP                   2115
  71. #define IDM_ABOUT                 3000
  72. #define IDM_DRAWPLAYERS           1001
  73. #define IDM_DRAWDRONES            1002
  74. #define IDT_NEWMAIL               4001
  75. #define IDM_REDRAW                5001
  76.  
  77.  
  78. // Resource String Definitions
  79. #define IDS_ERR_REGISTER_CLASS   1
  80. #define IDS_ERR_CREATE_WINDOW    2
  81.  
  82. #define IDS_MALLOCQUIT             16
  83. #define IDS_MALLOCFAIL             17
  84. #define IDS_RECTALLOCFAIL          18
  85. #define IDS_HSCONOTIMPL            19
  86. #define IDS_SAFEZONE               20
  87. #define IDS_CRETMRFAIL             21
  88. #define IDS_SNDPCKTFAIL            22
  89. #define IDS_RDSGRDTXTFLFAIL        23
  90. #define IDS_GETUSRNMFAIL           24
  91. #define IDS_SNDQUITPCKTFAIL        25
  92. #define IDS_DEMOMODE               26
  93.  
  94. #define IDS_MDFYSCO                28
  95. #define IDS_GETTXTMTRCSFAIL        29
  96. #define IDS_SCOADD0FAIL            30
  97. #define IDS_CHGSCOFAIL             31
  98. #define IDS_CHGDIRFAIL             32
  99. #define IDS_DELSCOFAIL             33
  100. #define IDS_BADMSG                 34
  101. #define IDS_MALLOCFAILABT          35
  102. #define IDS_FMT_DRONE              36
  103.  
  104. #define IDS_FMT_RUNDOWN            38
  105. #define IDS_BADPCKTXMITFAIL        39
  106. #define IDS_CREMSLOTFAIL           40
  107. #define IDS_CREMWATCHTHRFAIL       41
  108. #define IDS_RDMSLOTFAIL            42
  109. #define IDS_FMT_JOIN               43
  110. #define IDS_FMT_ZAPPEDYOU          44
  111. #define IDS_FMT_LEFT               45
  112. #define IDS_FMT_HIT                46
  113. #define IDS_BADCOMMSG                 47
  114. #define IDS_LDSGRIDRESFAIL         48
  115. #define IDS_FMT_BADNUMDRONES       49
  116. #define IDS_ERRINPUT               50
  117. #define IDS_FMT_BADMOVESPERSEC     51
  118.  
  119. #define IDS_TELEPORT               54
  120. #define IDS_SANCTUARY              55
  121.  
  122. #define IDS_NOVIOLENCE             58
  123. #define IDS_FMT_YOUZAPPED          59
  124. #define IDS_FMT_SLEW               60
  125. #define IDS_HSCO                   61
  126. #define IDS_FATALERR               62
  127. #define IDS_ASKSTOP                63
  128. #define IDS_STOP                   64
  129. #define IDS_INITFAIL               65
  130. #define IDS_NETINIT                66
  131. #define IDS_FMT_SANCTUARY          67
  132. #define IDS_ENTERED                68
  133. #define IDS_LEFT                   69
  134. #define IDS_FMT_BADPICNUM          70
  135.  
  136. #define WC_UPDATESCORE           1000
  137. #define WC_UPDATEDIRECTION       1010
  138. #define WC_DELETESCORE           1020
  139. #define WC_ADDSCORE              1030
  140.  
  141.  
  142.                     // we can see up to 10 squares ahead or to either side
  143.                     // (not including our current square)
  144. #define MAX_DRAW_DIST 10
  145.  
  146. #define MAX_DRONES 100
  147. #define MAX_DRONE_SPEED 5
  148.  
  149. #define ONE_SECOND 1000
  150.  
  151. #define PANEL_WIDTH 100
  152. #define PANEL_HEIGHT 150
  153.  
  154.         // Flags for walls in a Cell
  155. #define NORTH ((BYTE)0x01)
  156. #define WEST  ((BYTE)0x02)
  157. #define SOUTH ((BYTE)0x04)
  158. #define EAST  ((BYTE)0x08)
  159.  
  160. #define AWAY        0
  161. #define TOWARD      2
  162.  
  163. #define FORWARD     0
  164. #define LEFT        1
  165. #define BACK        2
  166. #define RIGHT       3
  167.  
  168.         // # of Cells in a subgrid
  169. #define X_CELLS_PER_SUBGRID 5
  170. #define Y_CELLS_PER_SUBGRID 5
  171.         // # of Subgrids in the Grid
  172. #define X_SUBGRIDS_PER_GRID 10
  173. #define Y_SUBGRIDS_PER_GRID 10
  174.  
  175. #define X_SIZE (X_CELLS_PER_SUBGRID * (X_SUBGRIDS_PER_GRID+2))
  176. #define Y_SIZE (Y_CELLS_PER_SUBGRID * (Y_SUBGRIDS_PER_GRID+2))
  177.         // We have SUBGRI00.TXT through SUBGRI06.TXT for players,
  178. #define NUM_PLAYER_SUBGRIDS 7
  179.         // And SUBGRI07.TXT through SUBGRI13.TXT for the palace
  180. #define NUM_PALACE_SUBGRIDS 7
  181.         // SUBGRI14.TXT is completely closed, for unused grids
  182.  
  183. #define NUM_SUBGRIDS (NUM_PLAYER_SUBGRIDS + NUM_PALACE_SUBGRIDS + 1)
  184. #define SUBGRID_DEFAULT 1
  185.  
  186.  
  187. // A maze is an array of characters, with each character being a combination
  188. // of the NORTH, SOUTH, EAST, and WEST bit flags.  If the flag is set, there
  189. // is a wall there. If not, there isn't. Note that both the flag of the
  190. // current cell and of the adjacent cell in that direction must be checked.
  191.  
  192.  
  193.         // Adjacent returns the coordinates of the cell in that direction
  194.         // This applies to both Grid and Maze coordinates.
  195. #define ADJ_X(x,dir) ((((BYTE)(dir)) & EAST) ? ((x)+1) : \
  196.               ((((BYTE)(dir)) & WEST) ? ((x)-1) : (x)))
  197. #define ADJ_Y(y,dir) ((((BYTE)(dir)) & SOUTH) ? ((y)+1) : \
  198.               ((((BYTE)(dir)) & NORTH) ? ((y)-1) : (y)))
  199.         // To calculate SubGrid # from a coordinate
  200. #define X_TO_SUBGRID(x) ((int) (x) / X_CELLS_PER_SUBGRID)
  201. #define Y_TO_SUBGRID(y) ((int) (y) / Y_CELLS_PER_SUBGRID)
  202.         // To get origin of a subgrid in coordinates from subgrid #'s
  203. #define SUBGRID_TO_X(x) ((int) (x) * X_CELLS_PER_SUBGRID)
  204. #define SUBGRID_TO_Y(y) ((int) (y) * Y_CELLS_PER_SUBGRID)
  205.  
  206.         // Convert relative direction to absolute
  207. #define LEFT_TO_ABS(dir) (((((BYTE)dir)) & EAST) ? NORTH : ((BYTE)(((BYTE) (dir))<<1)))
  208. #define RIGHT_TO_ABS(dir) ((((BYTE)(dir)) & NORTH) ? EAST : ((BYTE)(((BYTE) (dir))>>1)))
  209. #define BACK_TO_ABS(dir)  (LEFT_TO_ABS(LEFT_TO_ABS(dir)))
  210.  
  211.  
  212. #define RECTWIDTH(r) ((r).right - (r).left)
  213. #define RECTDEPTH(r) ((r).bottom - (r).top)
  214. #define GREATEROF(a,b) (((a)>(b))?(a):(b))
  215. #define LESSEROF(a,b) (((a)<(b))?(a):(b))
  216.  
  217. struct S_BitMapPicType {
  218.     HBITMAP hBitmap;
  219.     int xSize,ySize;
  220.     int xOrg,yOrg;
  221.     };
  222. typedef struct S_BitMapPicType BitMapPicType;
  223.  
  224. struct S_PicType {
  225.     BitMapPicType P[4];
  226.     };
  227. typedef struct S_PicType PicType;
  228.  
  229. struct S_FullPicType {
  230.     BitMapPicType P[4];     // BitMap
  231.     BitMapPicType M[4];     // Black and white Mask
  232.     int     iPicNum;
  233.     struct S_FullPicType FAR *next;
  234.     };
  235. typedef struct S_FullPicType FullPicType;
  236.  
  237.  
  238. struct _SLineType {
  239.    int x[2],y[2];
  240.    };
  241.  
  242. typedef struct _SLineType LineType;
  243.  
  244.  
  245.  
  246.         // A cell is a single square in a sub-grid
  247. typedef BYTE CellType;
  248.  
  249.         // SubGridCellsType is the array of characters that make up a sub-grid
  250. struct S_SubGridCellsType {
  251.     CellType Cell[X_CELLS_PER_SUBGRID][Y_CELLS_PER_SUBGRID];
  252.     };
  253. typedef struct S_SubGridCellsType SubGridCellsType;
  254.  
  255. typedef struct {
  256.   int ix, iy;
  257.   BYTE Facing;
  258.   } PositionType;
  259.  
  260.  
  261. struct _s_PlayerType {
  262.   unsigned long ulID;
  263.   DWORD dwPID;
  264.   char cUserName[MAX_USERNAME_LENGTH];
  265.   char cComputerName[MAX_COMPUTERNAME_LENGTH];
  266.   PositionType Pos;
  267.   BOOL Drawn;
  268.   RECT rDrawn;
  269.   RECT rFrom;
  270.   int iScore;
  271.   int iPicNum;
  272.   int iGridNum;
  273.   POINT pGridLoc;
  274.   BYTE dwDirectShown;
  275.   struct _s_PlayerType FAR *next;
  276.   };
  277. typedef struct _s_PlayerType PlayerType;
  278.  
  279.  
  280. struct _s_PlayerDrawType {
  281.   PlayerType FAR *p;            // Pointer to the player to draw
  282.   RECT rDraw,                   // Rectangle the FULL bitmap would be drawn in
  283.        rClip;                   // Rectangle available for drawing in.
  284.   int iRelx,iRely;
  285.   struct _s_PlayerDrawType FAR *next;
  286.   };
  287.  
  288. typedef struct _s_PlayerDrawType PlayerDrawType;
  289.  
  290.  
  291.  
  292.         // SubGridType is a full description of a SubGrid.
  293. struct S_SubGridType {
  294.     unsigned long ulOwnerID;
  295.     POINT Pos;
  296.         // Since there are a limited # of subgrids, we might share them.
  297.     SubGridCellsType *SubGrid;
  298.     };
  299.  
  300. typedef struct S_SubGridType SubGridType;
  301.  
  302. struct _SObjectType {
  303.     DWORD Class;
  304.     DWORD ObjectID;
  305.     POINT MazePos;
  306.     BYTE Facing;
  307.     struct _SObjectType * next;
  308. };
  309.  
  310. typedef struct _SObjectType ObjectType;
  311.  
  312. struct _SHoleType {
  313.     int x[2];
  314.     struct _SHoleType FAR *next;
  315.     };
  316.  
  317. typedef struct _SHoleType HoleType;
  318.  
  319. struct _S_ScoreType {
  320.     unsigned long ulID;
  321.     int ix,iy;          // Upper left corner of score entry
  322.     int iScore;
  323.     BYTE bDir;
  324.     struct _S_ScoreType FAR *next;
  325.     };
  326.  
  327. typedef struct _S_ScoreType ScoreType;
  328.  
  329. typedef struct {
  330.     int iLoudness;
  331.     PositionType Pos;
  332.     DWORD dwLen;
  333.     char cBuff[132];
  334.     } IntoneType;
  335.  
  336.  
  337. typedef struct {
  338.     int xSize,ySize;
  339.     int xOrg,yOrg;
  340.     } PicPosType;
  341.  
  342. typedef struct {
  343.    char cBase[5];
  344.    int iPicNum;
  345.    PicPosType PicPos[4];
  346.    } PicSpecType;
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354. ////////////////////////////////////////////////////////////////////////////
  355.  
  356. /**********************Function definitions***************************/
  357.  
  358. int ReadSubGrids(VOID);
  359. int InitGrid(VOID);
  360.  
  361. LPTSTR   GetStringRes(int id);
  362. LPTSTR   GetStringRes2(int id);
  363.  
  364. /**********************GLOBAL VARIABLES ****************************/
  365.                 // If we're in the main function, the globals
  366.                 // will be declared. Otherwise they'll just
  367.                 // be given as externs.
  368. #ifndef IN_MAIN
  369. #define EXT_DECL extern
  370. #else
  371. #define EXT_DECL
  372. #endif
  373.  
  374. EXT_DECL SubGridType FAR  * FAR *Grid;
  375. EXT_DECL SubGridCellsType FAR *SubGrids;
  376. EXT_DECL FILE  *hFile;
  377. EXT_DECL int xc,yc,xscale,yscale;
  378. EXT_DECL RECT CurView;
  379. EXT_DECL char szString[128];   /* variable to load resource strings         */
  380.  
  381. EXT_DECL char szAppName[20];   /* class name for the window               */
  382. EXT_DECL HINSTANCE hInst;
  383. EXT_DECL HWND hWndMain,hWndMaze,hWndTopView,hWndText,hWndScore;
  384. EXT_DECL RECT rMain,rMaze,rTopView,rText,rScore;
  385. EXT_DECL BYTE FAR * FAR *bMaze;
  386. EXT_DECL LPPOINT FAR * FAR *pPost;
  387. EXT_DECL int iNumDrones,iDroneSpeed,iDroneMoveAlg;
  388. EXT_DECL UINT uiTimer;
  389. EXT_DECL HBITMAP hFishBitmap[4],hFishMask[4];
  390. EXT_DECL HBITMAP hRoboBitmap[4],hRoboMask[4];
  391. EXT_DECL int ViewEnd;           // This is how many squares ahead we can see
  392. EXT_DECL BOOL GamePaused,GameStarted,bNetworked,bSelfInSanct;
  393.  
  394. EXT_DECL FullPicType fptPic;
  395. EXT_DECL HBITMAP hbScratch;
  396. EXT_DECL float scale;
  397.  
  398. EXT_DECL PlayerType ptSelf;
  399. EXT_DECL PlayerType ptPlayers;
  400. EXT_DECL PlayerType ptDrones;
  401. EXT_DECL HANDLE hMailSlot;
  402.  
  403. EXT_DECL PositionType ptLastPos;
  404.  
  405. EXT_DECL int iPlayersKilled,iDronesKilled;
  406. EXT_DECL int iTimesKilled,iKilledByDrones;
  407. EXT_DECL ScoreType Scores;
  408. EXT_DECL int iWhisperDist, iShoutDist,iLoudness;
  409.  
  410. EXT_DECL HBITMAP hShotBM[2],hFadeBM[2];
  411.  
  412. EXT_DECL HBITMAP hMaze3DBM;
  413. EXT_DECL HDC     hMazeDC;
  414. EXT_DECL BOOL    bBitmapDraw;
  415. EXT_DECL BOOL    bPlayerPrestretch,bDronePrestretch;
  416. EXT_DECL FullPicType FAR * FAR *PreStretch;
  417.  
  418. EXT_DECL BOOL    bDemoMode;
  419. EXT_DECL BOOL    bDemoEnable;
  420. EXT_DECL INT     UserIntCount;
  421.  
  422.  
  423. extern PicSpecType PicSpec[];
  424. extern int iNumPicSpecs;
  425.  
  426. /*******************END GLOBALS *************************************/
  427.  
  428. #define VIEWER_DIST              (PANEL_WIDTH)
  429. #define MC_TO_SC(x,z) (scale*(VIEWER_DIST * (x)/((z)+(VIEWER_DIST))))
  430.  
  431.  
  432.  
  433. #endif
  434.