home *** CD-ROM | disk | FTP | other *** search
/ The Best of Select: Games Special 11 / CD_1.iso / win95gam / hyp32 / hyperoid.h < prev    next >
C/C++ Source or Header  |  1994-04-12  |  7KB  |  215 lines

  1. // ***************************************************************************
  2. // HYPEROID.H - hyperoid internal header information
  3. //
  4. // Version: 1.1  Copyright (C) 1990,91 Hutchins Software
  5. //      This software is licenced under the GNU General Public Licence
  6. //      Please read the associated legal documentation
  7. //
  8. // Author: Edward Hutchins
  9. // Internet: eah1@cec1.wustl.edu
  10. // USMail: c/o Edward Hutchins, 63 Ridgemoor Dr., Clayton, MO, 63105
  11. //
  12. // Revisions:
  13. // 10/31/91 made game better/harder - Ed.
  14. //
  15. // Music: R.E.M./The Cure/Ministry/Front 242/The Smiths/New Order/Hendrix...
  16. // Beers: Bass Ale, Augsberger Dark
  17. //
  18. // 03/04/92 ported to Win32 - Paul Tissue & Robert Hess [Microsoft].
  19. // ***************************************************************************
  20.  
  21. #include <stdlib.h>
  22. #include <string.h>
  23. #include <ctype.h>
  24. #include <math.h>
  25. #include <limits.h>
  26.  
  27. #define OEMRESOURCE
  28. #include "winext.h"
  29.  
  30. //
  31. // typedefs and defines
  32. //
  33.  
  34. // color stuff
  35. #define PALETTE_SIZE 16
  36. typedef enum {
  37.   BLACK, DKGREY, GREY, WHITE,
  38.   DKRED, RED, DKGREEN, GREEN, DKBLUE, BLUE,
  39.   DKYELLOW, YELLOW, DKCYAN, CYAN, DKMAGENTA, MAGENTA
  40. } COLORS;
  41.  
  42. // degrees scaled to integer math
  43. #define DEGREE_SIZE 256
  44. #define DEGREE_MASK 255
  45. #define DEGREE_MAX 0x4000
  46.  
  47. // object limits
  48. #define MAX_PTS 16
  49. #define MAX_OBJS 100
  50. #define MAX_COORD 0x2000
  51. #define CLIP_COORD (MAX_COORD+300)
  52.  
  53. // timer stuff
  54. #define DRAW_TIMER 1
  55. #define DRAW_DELAY 50
  56. #define RESTART_TIMER 2
  57. #define RESTART_DELAY 5000
  58.  
  59. // restart modes
  60. typedef enum { RESTART_GAME, RESTART_LEVEL, RESTART_NEXTLEVEL } RESTART_MODE;
  61.  
  62. // letter scaling
  63. #define LETTER_MAX 256
  64.  
  65. // extra life every
  66. #define EXTRA_LIFE 33333
  67.  
  68. // list node
  69. typedef struct tagNODE {
  70.   struct tagNODE  *npNext, *npPrev;
  71. } NODE;
  72. pointerdef( NODE );
  73.  
  74. // list header
  75. typedef struct {
  76.   NPNODE          npHead, npTail;
  77. } LIST;
  78. pointerdef( LIST );
  79.  
  80. // object descriptor
  81. typedef struct {
  82.   NODE    Link;               // for object list
  83.   POINT   Pos;                // position of center of object
  84.   POINT   Vel;                // velocity in logical units/update
  85.   INT     nMass;              // mass of object
  86.   INT     nDir;               // direction in degrees
  87.   INT     nSpin;              // angular momentum degrees/update
  88.   INT     nCount;             // used by different objects
  89.   INT     nDelay;             // used by different objects
  90.   BYTE    byColor;            // palette color
  91.   BYTE    byPts;              // number of points in object
  92.   POINT   Pts[MAX_PTS];       // points making up an object
  93.   POINT   Old[MAX_PTS];       // last plotted location
  94. } OBJ;
  95. pointerdef( OBJ );
  96.  
  97. //
  98. // inline macro functions
  99. //
  100.  
  101. // function aliases
  102. #define AddHeadObj(l,o) AddHead((l),((NPNODE)o))
  103. #define RemHeadObj(l) ((NPOBJ)RemHead(l))
  104. #define RemoveObj(l,o) Remove((l),((NPNODE)o))
  105. #define HeadObj(l) ((NPOBJ)((l)->npHead))
  106. #define NextObj(o) ((NPOBJ)((o)->Link.npNext))
  107.  
  108. // real-time check of the keyboard
  109. #define IsKeyDown(x) (GetAsyncKeyState(x)<0)
  110.  
  111. // I HATE typing this allatime!
  112. #define INTRES(x) MAKEINTRESOURCE(x)
  113.  
  114. // size of an array
  115. #define DIM(x) (sizeof(x)/sizeof((x)[0]))
  116.  
  117. // faster than MulDiv!
  118. #define MULDEG(x,y) ((INT)(((LONG)(x)*(y))/DEGREE_MAX))
  119.  
  120. // DEG - convert an integer into a degree lookup index
  121. #define DEG(x) ((WORD)(x)&DEGREE_MASK)
  122.  
  123. // ACCEL - accelerate an object in a given direction
  124. #define ACCEL(o,d,s) \
  125. (((o)->Vel.x += MULDEG((s),nCos[DEG(d)])), \
  126. ((o)->Vel.y += MULDEG((s),nSin[DEG(d)])))
  127.  
  128. // PTINRECT - a faster PtInRect
  129. #define PTINRECT(r,p) \
  130. (((r)->left <= (p).x) && ((r)->right > (p).x) && \
  131. ((r)->top <= (p).y) && ((r)->bottom > (p).y))
  132.  
  133. // INTRECT - a faster IntersectRect that just returns the condition
  134. #define INTRECT(r1,r2) \
  135. (((r1)->right >= (r2)->left) && \
  136. ((r1)->left < (r2)->right) && \
  137. ((r1)->bottom >= (r2)->top) && \
  138. ((r1)->top < (r2)->bottom))
  139.  
  140. // MKRECT - make a rect around a point
  141. #define MKRECT(r,p,s) \
  142. (((r)->left = ((p).x-(s))), ((r)->right = ((p).x+(s))), \
  143. ((r)->top = ((p).y-(s))), ((r)->bottom = ((p).y+(s))))
  144.  
  145. //
  146. // prototypes
  147. //
  148.  
  149. #ifndef WIN32
  150.   #ifndef APIENTRY
  151.     #define APIENTRY far pascal
  152.   #endif
  153. #endif
  154.  
  155. // hyperoid.c
  156. INT APIENTRY arand( INT x );
  157. VOID APIENTRY AddHead( NPLIST npList, NPNODE npNode );
  158. NPNODE APIENTRY RemHead( NPLIST npList );
  159. VOID APIENTRY Remove( NPLIST npList, NPNODE npNode );
  160. VOID APIENTRY DrawObject( HDC hDC, NPOBJ npObj );
  161. VOID APIENTRY SetRestart( RESTART_MODE Restart );
  162. VOID APIENTRY AddExtraLife( VOID );
  163. VOID APIENTRY Hit( HDC hDC, NPOBJ npObj );
  164. VOID APIENTRY Explode( HDC hDC, NPOBJ npObj );
  165. BOOL APIENTRY HitPlayer( HDC hDC, NPOBJ npObj );
  166. NPOBJ APIENTRY CreateLetter( CHAR cLetter, INT nSize, INT nCount );
  167. VOID APIENTRY DrawLetters( HDC hDC );
  168. VOID APIENTRY DrawHunterShots( HDC hDC );
  169. VOID APIENTRY FireHunterShot( NPOBJ npHunt );
  170. VOID APIENTRY CreateHunter( VOID );
  171. VOID APIENTRY DrawHunters( HDC hDC );
  172. VOID APIENTRY CreateSpinner( VOID );
  173. VOID APIENTRY DrawSpinners( HDC hDC );
  174. VOID APIENTRY CreateRoid( POINT Pos, POINT Vel, INT nSides, BYTE byColor, INT nDir, INT nSpeed, INT nSpin );
  175. VOID APIENTRY BreakRoid( HDC hDC, NPOBJ npRoid, NPOBJ npShot );
  176. VOID APIENTRY DrawRoids( HDC hDC );
  177. VOID APIENTRY DrawShots( HDC hDC );
  178. VOID APIENTRY DrawFlames( HDC hDC );
  179. VOID APIENTRY FireShot( VOID );
  180. VOID APIENTRY AccelPlayer( INT nDir, INT nAccel );
  181. VOID APIENTRY DrawPlayer( HDC hDC );
  182. VOID APIENTRY DrawObjects( HWND hWnd );
  183. VOID APIENTRY CheckScore( HWND hWnd );
  184. VOID APIENTRY HitList( HDC hDC, NPLIST npList );
  185. VOID APIENTRY ExplodeBadguys( HDC hDC, NPLIST npList );
  186. VOID APIENTRY NewGame( HWND hWnd );
  187. VOID APIENTRY RestartHyperoid( VOID );
  188. VOID APIENTRY Panic( BOOL bPanic );
  189. VOID APIENTRY PaintHyperoid( HWND hWnd );
  190. VOID APIENTRY DisableHyperoidInput( HWND hWnd, BOOL bCapture );
  191. LONG APIENTRY HyperoidWndProc( HWND hWnd, UINT message, UINT wParam, LONG lParam );
  192. BOOL APIENTRY InitHyperoid( VOID );
  193. VOID APIENTRY ExitHyperoid( VOID );
  194. int APIENTRY WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);
  195. VOID APIENTRY NCPaintHyperoid( HWND hWnd );
  196. BOOL APIENTRY EraseHyperoidBkgnd( HWND hWnd, HDC hDC );
  197.  
  198. // roidsupp.c
  199. VOID APIENTRY PrintLetters( LPSTR npszText, POINT Pos, POINT Vel, BYTE byColor, INT nSize );
  200. VOID APIENTRY SpinLetters( LPSTR npszText, POINT Pos, POINT Vel, BYTE byColor, INT nSize );
  201. HPALETTE APIENTRY CreateHyperoidPalette( VOID );
  202. BOOL APIENTRY CreateHyperoidClass( VOID );
  203. VOID APIENTRY SetHyperoidMenu( HWND hWnd, INT nFirstID, INT nLastID );
  204. HWND APIENTRY CreateHyperoidWindow( LPSTR lpszCmd, INT nCmdShow );
  205. VOID APIENTRY SaveHyperoidWindowPos( HWND hWnd );
  206. VOID APIENTRY GetHyperoidIni( VOID );
  207. VOID APIENTRY HyperoidHelp( HWND hWnd );
  208. BOOL APIENTRY HyperoidAboutDlg( HWND hDlg, UINT mess, UINT wParam, LONG lParam );
  209. VOID APIENTRY AboutHyperoid( HWND hWnd );
  210.  
  211. #include "resource.h"
  212.  
  213. // user messages
  214. #define UM_SIZE (WM_USER+0)
  215.