Files
Client/Library/dxx8/samples/Multimedia/Demos/Duel/gameproc.h
LGram16 e067522598 Initial commit: ROW Client source code
Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 16:24:34 +09:00

222 lines
6.5 KiB
C

//-----------------------------------------------------------------------------
// File: GameProc.h
//
// Desc: Game processing routines
//
// Copyright (C) 1995-2001 Microsoft Corporation. All Rights Reserved.
//-----------------------------------------------------------------------------
#define IDIRECTPLAY2_OR_GREATER
#include <ddraw.h>
#include <dplay.h>
#include <dsound.h>
// align on single byte boundaries
// this is a stop-gap measure until the structures can be re-arranged.
#pragma pack(1)
#define MAX_SHIP_X (MAX_SCREEN_X - 32)
#define MAX_SHIP_Y (MAX_SCREEN_Y - 32)
#define MAX_SHIP_FRAME 40
#define MAX_BULLET_X (MAX_SCREEN_X - 3)
#define MAX_BULLET_Y (MAX_SCREEN_Y - 3)
#define MAX_BULLET_FRAME 400
#define NUM_SHIP_TYPES 4
#define DEF_SHOW_DELAY (2000)
#define MAX_BUFFER_SIZE 256
#define UPDATE_INTERVAL 40 // interval between position updates in milliseconds (25 FPS)
#define SYNC_INTERVAL 1000 // synchronize once every second
#define HIDE_TIMEOUT 5000 // time for which a ship is disabled after a hit
// Keyboard commands
#define KEY_STOP 0x00000001l
#define KEY_DOWN 0x00000002l
#define KEY_LEFT 0x00000004l
#define KEY_RIGHT 0x00000008l
#define KEY_UP 0x00000010l
#define KEY_FIRE 0x00000020l
#define KEY_ENGINEOFF 0x00000040l
// Offsets for the bullet bitmap
#define BULLET_X 304
#define BULLET_Y 0
struct FRAG
{
double dPosX;
double dPosY;
LPDIRECTDRAWSURFACE pdds;
RECT src;
double dVelX;
double dVelY;
BOOL valid;
};
struct SHIP
{
double dPosX, dPosY; // ship x and y position
double dBulletPosX, dBulletPosY; // bullet x and y position
DWORD dwBulletFrame; // bullet frame
char cFrame; // current ship frame
BYTE byType; // ship type
BOOL bEnable; // is this ship active?
BOOL bBulletEnable; // Is there an active bullet?
double dVelX, dVelY; // ship x and y velocity (pixels/millisecond)
double dBulletVelX, dBulletVelY; // bullet x and y velocity (pixels/millisecond)
DWORD dwScore; // current score
DWORD dwLastTick; // most recent time stamp
BOOL bIgnore; // flag used to synchronize ship explosions
int iCountDown; // enable time-out
DWORD dwFrameCount; // number of frames since beginning of time
// DSound members
DWORD dwKeys; // the keyboard state
BOOL bEngineRunning; // These BOOLs keep track of the ship's
BOOL bMoving; // last condition so we can play sounds
BOOL bBounced; // when they change
BOOL bBlockHit;
BOOL bDeath;
BOOL bFiring;
};
struct BLOCKS
{
BYTE bits[30][5];
};
//-----------------------------------------------------------------------------
// communication packet structures
//-----------------------------------------------------------------------------
#define MSG_HOST 0x11 // message containing field layout, sent by host
#define MSG_BLOCKHIT 0x22 // block hit message
#define MSG_SHIPHIT 0x33 // ship hit message
#define MSG_ADDBLOCK 0x44 // add block message
#define MSG_CONTROL 0x55 // game keys message
#define MSG_SYNC 0x66 // synchronization message containing the rendezvous location
struct GENERICMSG
{
BYTE byType;
};
struct OLDHOSTMSG
{
BYTE byType;
BLOCKS Blocks;
};
struct HOSTMSG
{
BYTE byType;
BLOCKS Blocks;
int usedShipTypes[NUM_SHIP_TYPES];
};
struct BLOCKHITMSG
{
BYTE byType;
BYTE byRow;
BYTE byCol;
BYTE byMask;
};
struct SHIPHITMSG
{
BYTE byType;
DPID Id;
};
struct ADDBLOCKMSG
{
BYTE byType;
BYTE byX;
BYTE byY;
};
struct CONTROLMSG
{
BYTE byType;
BYTE byState;
};
struct SYNCMSG
{
BYTE byType;
BYTE byShipType; // this is needed only when sends are unreliable
char cFrame;
double dPosX;
double dPosY;
};
//-----------------------------------------------------------------------------
// Prototypes
//-----------------------------------------------------------------------------
VOID LaunchGame();
VOID ExitGame();
HRESULT InitOurShip();
HRESULT InitLocalSoundData();
BOOL WINAPI SetPlayerLocalSoundDataCB( DPID dpId, DWORD dwPlayerType,
LPCDPNAME pName, DWORD dwFlags,
VOID* pContext );
VOID ReleaseLocalData();
VOID ReleasePlayerLocalSoundData( SHIP* pShip );
BOOL WINAPI ReleasePlayerLocalDataCB( DPID dpId, DWORD dwPlayerType,
LPCDPNAME pName, DWORD dwFlags,
VOID* pContext );
VOID UpdateState( SHIP* pShip, DWORD dwControls );
VOID SendSync( SHIP* pShip );
VOID UpdateDisplayStatus( SHIP* pShip );
VOID UpdatePosition( DPID dpId, SHIP* ship );
BOOL IsHit( int x, int y );
VOID InitField();
BOOL setBlock( int x, int y );
VOID AddFrag( SHIP* pShip, int offX, int offY );
VOID UpdateFragment( int i );
VOID DestroyShip( SHIP* pShip );
VOID DestroyGame();
BOOL UpdateFrame();
VOID ProcessSoundFlags( SHIP* pShip );
BOOL WINAPI RenderPlayerCB( DPID dpId, DWORD dwPlayerType, LPCDPNAME pName,
DWORD dwFlags, VOID* pContext );
BOOL DrawScreen();
BOOL DrawScore();
VOID DrawShip( SHIP* pShip );
VOID DrawBlock( int x, int y );
VOID DrawBullet( SHIP* pShip );
VOID DrawFragments();
VOID DisplayFrameRate();
VOID GetConnection();
HRESULT ReceiveMessages();
VOID DoSystemMessage( DPMSG_GENERIC* pMsg, DWORD dwMsgSize, DPID idFrom,
DPID idTo );
VOID DoApplicationMessage( GENERICMSG* pMsg, DWORD dwMsgSize, DPID idFrom,
DPID idTo );
VOID SendGameMessage( GENERICMSG* pMsg, DPID idTo );
VOID CleanupComm();
HRESULT InitializeGameSounds();
VOID CleanupGameSounds();
// restore default alignment
#pragma pack()