Subversion Repositories Games.Chess Giants

Rev

Rev 124 | Rev 131 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 pmbaty 1
// common.h
2
 
3
#ifndef COMMON_H
4
#define COMMON_H
5
 
6
 
7
// standard includes
8
#include <windows.h>
9
#include <windowsx.h>
10
#include <wininet.h>
11
#include <commctrl.h>
12
#include <richedit.h>
13
#include <stdio.h>
116 pmbaty 14
#include <stdint.h>
59 pmbaty 15
#include <io.h>
1 pmbaty 16
#include <malloc.h>
17
#include <math.h>
18
#include <time.h>
19
#include <share.h>
20
#include <shlwapi.h>
81 pmbaty 21
#pragma warning(disable:4091)
1 pmbaty 22
#include <shlobj.h>
81 pmbaty 23
#pragma warning(default:4091)
1 pmbaty 24
#include <process.h>
25
#include <sys/stat.h>
26
 
27
 
28
// project resources includes
29
#include "resource/resource.h"
30
 
31
 
32
// link with specific libraries
33
#pragma comment (lib, "comctl32.lib") // for ImageList_*()
34
#pragma comment (lib, "winmm.lib") // for PlaySound()
35
#pragma comment (lib, "ws2_32.lib") // for network
36
 
37
 
38
// global preprocessor defines
39
#include "defines.h"
40
 
41
 
42
// modeless message box definition
43
typedef struct messagebox_s
44
{
45
   HWND hWndParent; // message box parent window
46
   wchar_t title[128]; // message box title
47
   wchar_t text[4096]; // message box text
48
   int flags; // message box flags (such as MB_OK, MB_ICONEXCLAMATION, etc...)
49
} messagebox_t;
50
 
51
 
116 pmbaty 52
// resizeable buffer structure type definition
53
typedef struct buffer_s
54
{
55
   char *data; // buffer data, mallocated
56
   unsigned long size; // buffer size in bytes
57
} buffer_t;
58
 
59
 
1 pmbaty 60
// part color theme data definition
61
typedef struct partcolor_s
62
{
63
   int texture; // index of the texture used for the pieces in this theme
64
   int material; // index of the material used for the pieces in this theme
65
} partcolor_t;
66
 
67
 
68
// background sprite definition
69
typedef struct backgroundsprite_s
70
{
71
   int sprite_index; // index of the sprite used as the background in this theme
72
   int sprite_width; // nominal width of bg sprite in pixels, rounded to the nearest higher power of 2
73
   int sprite_height; // nominal height of bg sprite in pixels, rounded to the nearest higher power of 2
74
} backgroundsprite_t;
75
 
76
 
77
// light definition
78
typedef struct light_s
79
{
80
   int type; // one of LIGHT_DIRECTIONAL, LIGHT_POINT, or LIGHT_SPOT
81
   unsigned long color; // diffuse color (RGBA)
82
   float pos_x; // X position in space
83
   float pos_y; // Y position in space
84
   float pos_z; // Z position in space
85
   float direction_x; // X direction in space
86
   float direction_y; // Y direction in space
87
   float direction_z; // Z direction in space
88
   float range; // distance after which the light won't be computed
89
   float attenuation_constant; // constant light attenuation
90
   float attenuation_proportional; // light attenuation that is proportional to distance
91
   float attenuation_square; // light attenuation that is proportional to distance squared
92
   float cone_inner; // inner cone angle, in degrees
93
   float cone_outer; // outer cone angle, in degrees
94
} light_t;
95
 
96
 
97
// definition for the scene illumination
98
typedef struct illumination_s
99
{
100
   unsigned long ambient_light; // scene ambient light color (RGBA)
101
   light_t *lights; // mallocated array of lights to render
102
   int light_count; // size of the lights array
103
} illumination_t;
104
 
105
 
106
// theme definition
107
typedef struct theme_s
108
{
109
   bool is_loaded; // set to TRUE when this theme is fully loaded
110
   int load_index; // when loading asynchronously, index of the item to load for each pass
111
 
112
   wchar_t name[64]; // theme name (folder name)
113
   wchar_t *description; // theme description or credits (mallocated)
114
   backgroundsprite_t bg; // background sprite structure
115
   illumination_t illum; // scene lights
116
   int board_texture; // index of the texture used for the chess grid in this theme
117
   int table_texture; // index of the texture used for the rest of the table in this theme
118
   int grid_texture; // index of the texture used for the board grid numbers and letters
119
   int trim_texture; // index of the texture used for the table/board delimiter
120
   int board_material; // index of the material used for the chess grid in this theme
121
   int table_material; // index of the material used for the rest of the table in this theme
122
   int trim_material; // index of the material used for the table/board delimiter
123
   unsigned char reflection_alpha; // table reflection alpha from 0 to 255 (high for marble, low for wood)
124
   partcolor_t part_colors[2]; // part theme data for the two colors, COLOR_BLACK and COLOR_WHITE
125
 
126
   // meshes
127
   int board_meshindex;
128
   int table_meshindex;
129
   int trim_meshindex;
130
   int tile_meshindex;
131
   int part_meshes[7]; // first slot unused
132
   // textures
133
   int shadow_textureindex;
134
   int hovered_textureindex;
135
   int check_textureindex;
136
   int threat_textureindex;
137
   int lastmovesource_textureindex;
138
   int lastmovetarget_textureindex;
139
   int selected_textureindex;
140
   int possiblemove_textureindex;
141
   int takeable_textureindex;
142
   int flattextures[2][7]; // [color][part], with first slot of the 7 unused
143
   // sprites
144
   int flatsprites[2][7]; // [color][part], with first slot of the 7 unused
145
   int lastmovesource_spriteindex;
146
   int lastmovetarget_spriteindex;
147
} theme_t;
148
 
149
 
150
// local typedefs
151
typedef struct pgngame_s
152
{
153
   wchar_t event_str[64]; // [Event "blah"]
154
   wchar_t site_str[64]; // [Site "blah"]
155
   wchar_t date_str[16]; // [Date "YYYY.MM.DD"]
156
   wchar_t round_str[16]; // [Round "N"]
157
   wchar_t white_str[64]; // [White "blah"]
158
   wchar_t black_str[64]; // [Black "blah"]
159
   wchar_t result_str[16]; // [Result "blah"]
160
   wchar_t eco_str[8]; // [ECO "XNN"] <-- this tag is optional, but useful nevertheless
161
   wchar_t fen_str[128]; // [FEN "start pos"] <-- this tag is optional, but VERY useful
162
   int gamedata_start; // offset at which the game data begins for this entry
163
} pgngame_t;
164
 
165
 
166
// player definition
167
typedef struct player_s
168
{
169
   // common data
170
   int type; // PLAYER_COMPUTER, PLAYER_INTERNET or PLAYER_HUMAN
171
   char color; // either COLOR_BLACK, COLOR_WHITE or COLOR_UNSPECIFIED
172
   wchar_t name[64]; // player name (machine name if human vs human or human vs cpu, login if human vs network)
173
   float view_pitch; // current view pitch (vertical axis orientation towards the table center)
174
   float view_yaw; // current view yaw (horizontal axis orientation towards the table center)
175
   float view_distance; // current view distance to the table center
176
   float custom_pitch; // user-saved view pitch
177
   float custom_yaw; // user-saved view yaw
178
   float custom_distance; // user-saved view distance
179
   bool wants_cancel; // set to TRUE when this player wants to cancel its last move
180
 
181
   // PLAYER_HUMAN related data
182
 
183
   // PLAYER_COMPUTER related data
184
   bool wants_hint;
185
 
186
   // PLAYER_INTERNET related data
187
   int our_socket;
188
   bool is_connected;
189
   bool is_logged_in;
190
   bool is_in_game;
191
   int game_number;
192
   int remaining_seconds;
193
 
194
   // PLAYER_COMPUTER and PLAYER_INTERNET related data
195
   bool sendbuffer_locked; // set to TRUE if a thread currently locks the send buffer
196
   wchar_t *sendbuffer; // used both for PLAYER_COMPUTER and PLAYER_INTERNET, mallocated
197
   int sendbuffer_size; // size of the sendbuffer buffer
198
   char *ascii_recvbuffer; // mallocated
199
   wchar_t *recvbuffer; // used both for PLAYER_COMPUTER and PLAYER_INTERNET, mallocated
200
   int recvbuffer_size; // size of the recvbuffer buffer
201
 
202
} player_t;
203
 
204
 
205
// definitions for a grid slot, a board side and a chess board
206
typedef struct boardslot_s
207
{
208
   unsigned char part; // part ID of the part occupying this slot, or PART_NONE if not occupied
209
   unsigned char color; // color ID of the part occupying this slot (either COLOR_WHITE or COLOR_BLACK)
210
   unsigned char flags; // bitmap of slot flags (e.g: selected, move allowed, etc)
211
} boardslot_t;
212
 
213
 
214
typedef struct boardside_s
215
{
216
   unsigned char *takenparts; // mallocated array of part IDs that this side has captured from the opposing side
217
   int takenpart_count; // size of the takenparts array
218
   bool shortcastle_allowed; // set to TRUE if this side's king can still castle to G (column id 6)
219
   bool longcastle_allowed; // set to TRUE if this side's king can still castle queenside, to C (column id 3)
220
} boardside_t;
221
 
222
 
223
typedef struct boardmove_s
224
{
225
   char color; // color this board move was for (either COLOR_UNSPECIFIED, COLOR_BLACK or COLOR_WHITE)
226
   char part; // board move part type (to handle promotions)
227
   char promotion_type; // in case of a pawn promotion, the new part's type
228
   bool has_captured; // set to TRUE if this part has just captured another part
229
   bool is_enpassant; // set to TRUE if the move was an "en passant" capture move
230
   bool is_check; // set to TRUE if this move puts the opponent's king to check
231
   bool is_stalemate; // set to TRUE if this move puts the opponent to stalemate
232
   char source[2]; // this chess board's move source position ([line][column] array)
233
   char target[2]; // this chess board's move target position ([line][column] array)
234
   wchar_t pgntext[16]; // move PGN text
235
   wchar_t *comment; // comment about that move (mallocated)
236
   int comment_size; // size of the mallocated space used for comments, *IN WCHARS*
237
   boardside_t sides[2]; // game state data structure for both opposing sides (COLOR_BLACK and COLOR_WHITE) after move is made
238
   boardslot_t slots[8][8]; // this chess board's slots (8x8 array) after move is made
239
   wchar_t fen_string[128]; // FEN string describing that move
240
} boardmove_t;
241
 
242
 
243
typedef struct board_s
244
{
245
   bool was_setup; // set to TRUE when the board has just been set up
246
   int hovered_position[2]; // this chess board's hovered position ([line][column] array)
247
   int selected_position[2]; // this chess board's selected position ([line][column] array)
248
   boardmove_t *moves; // array of moves describing the game (mallocated)
249
   int move_count; // amount of moves in this game so far
250
   int viewed_move; // index of the move currently viewed (for watching game history)
251
   player_t players[2]; // game state data structure for both opposing sides (COLOR_BLACK and COLOR_WHITE)
252
   bool has_playerchanged; // set to TRUE when the current player has just changed
253
   bool want_playerswap; // set to TRUE when a players swap is requested
254
   int game_state; // one of the STATE_XXX #defines that describe the game and victory state
255
   float lastmove_time; // date of last move
256
   bool reevaluate; // set to TRUE if the game state should be reevaluated
257
} board_t;
258
 
259
 
260
// scene object definition
261
typedef struct sceneobject_s
262
{
263
   int mesh_index; // object mesh index
264
   int texture_index; // object texture index
265
   int material_index; // object material index
266
   float scale; // object scale, 1.0f = default size
267
   float simpleshadow_size; // multiplier for the size of the original texture
268
   float x; // X position in space
269
   float y; // Y position in space
270
   float z; // Z position in space
271
   float pitch; // object pitch in degrees (leaning left/right)
272
   float yaw; // object yaw in degrees (turning left/right)
273
} sceneobject_t;
274
 
275
 
276
// chatter channel reply
277
typedef struct ccreply_s
278
{
279
   float arrival_time; // date at which this reply arrived
280
   unsigned long color; // text color (RGBA)
124 pmbaty 281
   wchar_t channelname[64]; // id of the channel this message is sent on (64 characters max!)
1 pmbaty 282
   wchar_t nickname[32]; // sender's nickname
283
   wchar_t *text; // message text (mallocated)
284
   int text_length; // length of the above text, in characters, NOT including the null terminator
285
} ccreply_t;
286
 
287
 
288
// user interface button definition
289
typedef struct guibutton_s
290
{
291
   int state; // render state: 0 = invisible, 1 = enabled, 2 = hovered
292
   float left; // position of the top left corner, in percentage of screen width
293
   float top; // position of the top left corner, in percentage of screen height
294
   float width; // button tile width, in percentage of screen width
295
   float height; // button tile height, in percentage of screen height
296
   int sprite_index; // index of the sprite this button displays
124 pmbaty 297
   wchar_t text[64]; // GUI button text (64 characters max!)
1 pmbaty 298
} guibutton_t;
299
 
300
 
301
// user interface text field definition
302
typedef struct guitext_s
303
{
304
   bool is_displayed; // set to TRUE if this text is displayed
305
   float xpos_percent; // text's X position, in percents from left to right
306
   float ypos_percent; // text's Y position, in percents from top to bottom
307
   float maxwidth_percent; // text's max width before word wrapping, in percents of draw area width
308
   int horizontal_align; // bounding rectangle's horizontal alignment regarding the X position (one of the ALIGN_xxx defines)
309
   int vertical_align; // bounding rectangle's vertical alignment regarding the Y position (one of the ALIGN_xxx defines)
310
   int text_align; // text's horizontal alignment inside that bounding rectangle
311
   int font_index; // index of the font with which to display this text
312
   unsigned long color; // text's color (RGBA)
313
   wchar_t *buffer; // text printed in this area of the screen (mallocated)
314
   int buffer_size; // size of the text buffer
315
   float appear_time; // date at which this text was put
316
   float disappear_time; // date at which this text should disappear
317
   bool want_fade; // set to TRUE if this text is to be faded in and out
318
} guitext_t;
319
 
320
 
321
// game user interface definition
322
typedef struct gui_s
323
{
324
   // IMPORTANT: ensure all guitext_t buffers are freed in Scene_Shutdown()
325
 
326
   guibutton_t larrow; // render state: 0 = invisible, 1 = enabled, 2 = hovered
327
   guibutton_t rarrow; // render state: 0 = invisible, 1 = enabled, 2 = hovered
328
   guitext_t arrow_text; // usually, viewed move number versus the total of moves
124 pmbaty 329
   guibutton_t newgamebutton; // render state: 0 = invisible, 1 = enabled, 2 = hovered
330
   guibutton_t opengamebutton; // render state: 0 = invisible, 1 = enabled, 2 = hovered
1 pmbaty 331
   guibutton_t chatbutton; // render state: 0 = invisible, 1 = enabled, 2 = hovered
332
   guibutton_t gamesbutton; // render state: 0 = invisible, 1 = enabled, 2 = hovered
333
   guibutton_t peoplebutton; // render state: 0 = invisible, 1 = enabled, 2 = hovered
334
   guitext_t comment_text; // text printed in the comments area
335
   guitext_t history_text; // text printed in the moves text area
336
   guitext_t clock_text; // text printed in the game clock area
337
   guitext_t turn_text; // text printed in the "X moves" area
338
   guitext_t central_text; // text printed in the center of the screen
339
   ccreply_t *cchistory; // mallocated array of chatter channel replies
340
   int cchistory_count; // number of elements in the above array
341
   bool is_entering_text; // set to TRUE if player is entering text
342
   ccreply_t entered_ccreply; // text that is currently being entered
343
   bool is_partspick_displayed; // set to TRUE if the parts pick line is displayed
344
   bool want_spinwheel; // set to TRUE to display a spinning wheel
345
   char partspick_hoveredpart; // one of "PRNBQK kqbnrp"
346
   char partspick_selectedpart; // one of "PRNBQK kqbnrp"
347
} gui_t;
348
 
349
 
350
// rendering scene definition
351
typedef struct scene_s
352
{
353
   int background_spriteindex; // index of the background sprite (-1 if none)
354
   sceneobject_t *objects; // mallocated array of objects to render
355
   int object_count; // size of the objects array
356
   int overlay_spriteindex; // index of the overlay sprite (-1 if none)
357
   gui_t gui; // GUI laid over this scene
358
   bool update; // set to TRUE if the scene needs to be updated
359
} scene_t;
360
 
361
 
40 pmbaty 362
// engine program options definition (populated from "engines/<program>/engine.ini")
119 pmbaty 363
typedef struct engineprogram_s
1 pmbaty 364
{
119 pmbaty 365
   wchar_t folder[MAX_PATH]; // chess engine folder name
32 pmbaty 366
   wchar_t name[64]; // chess engine name (will be used as player name)
367
   wchar_t cmdline[MAX_PATH]; // chess engine binary startup command-line, e.g "gnuchess.exe"
368
   wchar_t replystring_move[64]; // chess engine reply string for a move (positions come right after)
44 pmbaty 369
   wchar_t command_new[64]; // command to send the chess engine to tell him we are starting a new game
370
   wchar_t command_setboard[64]; // command to send the chess engine to tell him to set the table in a particular way (FEN notation)
371
   wchar_t command_sd[64]; // command to send the chess engine to instruct it about its allowed depth (will be followed by numeric)
372
   wchar_t command_go[64]; // command to send the chess engine to make it play the current move
373
   wchar_t command_move[64]; // command to send the chess engine to instruct it that its opponent played a particular move
374
   wchar_t command_force[64]; // command to send the chess engine to force it to play a particular move instead of the one it wants
375
   wchar_t command_quit[64]; // command to send the chess engine to make it exit cleanly
119 pmbaty 376
} engineprogram_t;
40 pmbaty 377
 
378
 
379
// engine options definition
380
typedef struct engineoptions_s
381
{
382
   int depth; // chess engine's currently allowed search depth
383
   int max_depth; // chess engine maximum search depth (used just for slider display)
384
   int blunder_chances; // chess engine blunder chances, in percent
385
   int obstinacy_level; // chess engine obstinacy level, in number of moves
386
   bool is_expert_mode; // set to TRUE if this player claims to be an expert player (in the game settings)
119 pmbaty 387
   engineprogram_t *programs; // engine programs
388
   int program_count; // size of the engines array
389
   int selected_program; // index of the selected engine
1 pmbaty 390
} engineoptions_t;
391
 
392
 
393
// network options definition
394
typedef struct networkoptions_s
395
{
396
   wchar_t server_address[MAX_PATH]; // chess server URL for online gaming
397
   int server_port; // chess server listen port (usually 5000) for online gaming
398
   wchar_t login[32]; // login for online gaming
399
   wchar_t password[32]; // password for online gaming
400
   bool want_servermessages; // set to TRUE if server messages are to be displayed (MOTD, RoboAdmin messages, announcements)
401
   bool want_publicchat; // set to TRUE if public chat messages and chatter channels list are to be displayed
402
   bool want_motdonconnect; // set to TRUE if the MOTD is to be displayed when connecting to the chess server
403
} networkoptions_t;
404
 
405
 
14 pmbaty 406
// registration options definition
407
typedef struct registrationoptions_s
408
{
409
   wchar_t user_email[MAX_PATH]; // registered user's email address
83 pmbaty 410
   unsigned __int32 activation_code; // registered user's activation code (a 32-bit integer)
14 pmbaty 411
} registrationoptions_t;
412
 
413
 
1 pmbaty 414
// game options definition
415
typedef struct options_s
416
{
124 pmbaty 417
   bool want_fullscreen; // set to TRUE to run in fullscreen mode (no taskbar)
418
   bool want_maximized; // set to TRUE to run in maximized window mode
1 pmbaty 419
   int window_width; // window width when not in fullscreen mode
420
   int window_height; // window height when not in fullscreen mode
421
   bool want_sounds; // set to TRUE to enable sounds
422
   bool want_animations; // set to TRUE to enable part animations
130 pmbaty 423
   bool want_slidinganimations; // set to TRUE to enable SLIDING part animations
1 pmbaty 424
   bool want_possiblemoves; // set to TRUE to show possible moves
425
   bool want_lastmove; // set to TRUE to show the last move
426
   bool want_threats; // set to TRUE to display king's threats
427
   bool want_autorotateon1vs1; // set to TRUE to enable board auto-rotation when playing human vs human locally
428
   bool want_takenparts; // set to TRUE to display the taken parts on the side of the board
429
   bool want_turn; // set to TRUE to display the current turn
430
   bool want_clock; // set to TRUE to display a game clock
431
   unsigned long clock_color; // RGBA color of the game clock
432
   bool want_history; // set to TRUE to enable the display of game history
433
   unsigned long history_color; // RGBA color of the game history
434
   bool want_sepiafilter; // set to TRUE to enable the sepia filter when displaying past moves
435
   bool want_filtering; // set to TRUE to enable texture filtering
436
   bool want_hiquality; // set to TRUE to enable maximum possible quality filtering
437
   bool want_reflections; // set to TRUE to enable part reflections
438
   bool want_specularlighting; // set to TRUE to enable specular lighting
439
   int rotate_speed; // board rotation speed
14 pmbaty 440
   registrationoptions_t registration; // registration options
1 pmbaty 441
   engineoptions_t engine; // engine options
442
   networkoptions_t network; // network options
443
} options_t;
444
 
445
 
446
// online player definition
447
typedef struct onlineplayer_s
448
{
449
   int rating; // player rating (ELO estimate)
450
   unsigned char ratingtype; // either one of RATING_xxx (default, estimated or provisional)
451
   unsigned char handlestatus; // either one of HANDLESTATUS_xxx values
452
   wchar_t nickname[32]; // this player's nickname
453
   unsigned short handlecodes; // bitmap: one or several of HANDLECODE_xxx flag
454
} onlineplayer_t;
455
 
456
 
457
// chatter channel member definition
458
typedef struct chatterchannelmember_s
459
{
460
   bool is_silenced; // set to TRUE if this player plays in silence
461
   wchar_t nickname[32]; // this player's nickname
462
} chatterchannelmember_t;
463
 
464
 
465
// chatter channel definition
466
typedef struct chatterchannel_s
467
{
468
   int id; // channel's numeric ID
469
   bool is_open; // set to TRUE if listening is currently enabled for this channel
470
   wchar_t theme[64]; // channel theme, as reported by the server
471
   unsigned long color; // channel text color (RGBA)
472
   chatterchannelmember_t *members; // mallocated array of members
473
   int member_count; // number of members in this channel
474
} chatterchannel_t;
475
 
476
 
477
// challenge definition
478
typedef struct challenge_s
479
{
480
   bool is_active; // set to TRUE if this challenge is active
481
   wchar_t challenger[32]; // challenger nickname
482
   HWND hWnd; // challenge window handle
483
   int challenger_level; // challenger level
484
   int color; // color this challenger wants to play
485
   bool is_rated; // whether this game is rated or not
486
   wchar_t game_type[32]; // game type, literally
487
   float initial_time; // initial time of the game for each color
488
   float increment; // eventual time increment (Fischer pace)
489
   bool update_dialog; // set to TRUE when the dialog window should be updated
490
} challenge_t;
491
 
492
 
493
// sought game definition
494
typedef struct soughtgame_s
495
{
496
   int id; // sought game ID
497
   int rating; // player rating (ELO estimate)
498
   wchar_t nickname[32]; // this player's nickname
499
   float initial_time; // initial time of the game for each color
500
   float increment; // eventual time increment (Fischer pace)
501
   unsigned char rating_type; // one of GAMERATINGTYPE_xxx #defines
502
   wchar_t game_type[32]; // game type, literally
503
   int color; // color this player will have
504
   int lowest_accepted; // lowest ELO accepted
505
   int highest_accepted; // highest ELO accepted
506
   bool manual_start; // set to TRUE if the game should start manually
507
   bool formula_checked; // set to TRUE if the filter formula will be used
508
} soughtgame_t;
509
 
510
 
511
// chat interlocutor
512
typedef struct interlocutor_s
513
{
514
   bool is_active; // set to TRUE if this interlocutor is active
515
   wchar_t nickname[32]; // interlocutor nickname (don't point to player list, because it changes...)
516
   HWND hWnd; // chat window handle
517
   int current_displaypicture; // current display picture index
518
   wchar_t *dialogtext; // mallocated wchar_t buffer of dialog text (beware: RTF is ASCII-only)
519
   int dialogtext_size; // size of the dialog text buffer, in WCHARs
520
   bool update_dialog; // set to TRUE when the dialog window should be updated
521
} interlocutor_t;
522
 
523
 
524
// game style ratings
525
typedef struct gamestylerating_s
526
{
527
   wchar_t name[32]; // game style name (e.g, "standard", "blitz", etc.)
528
   int rating; // ELO rating for this style of play
529
   float rd; // unknown data ???
530
   int win_count; // amount of won matches in this style of play
531
   int loss_count; // amount of lost matches in this style of play
532
   int draw_count; // amount of draw matches in this style of play
533
   int total_matches; // amount of played matches in this style of play (basically, sum of win + loss + draws)
534
} gamestylerating_t;
535
 
536
 
537
// player cards
538
typedef struct playercard_s
539
{
540
   bool is_active; // set to TRUE if this slot is active
541
   bool is_own; // set to TRUE if this card is the local player's one
542
   wchar_t nickname[32]; // interlocutor nickname (don't point to player list, because it changes...)
543
   HWND hWnd; // player card window handle
544
   bool got_reply; // set to TRUE when this player card slot got server reply (i.e, it contains actual data)
545
   bool doesnt_exist; // set to TRUE when the chess server reports that this player doesn't exist
546
   int minutes_online; // amount of minutes this player has been online
547
   int seconds_idle; // amount of seconds elapsed since this player's last activity
548
   unsigned char disconnection_day; // day of disconnection
549
   unsigned char disconnection_month; // month of disconnection
550
   unsigned short disconnection_year; // year of disconnection
551
   int game_played; // index of the game currently played by this player
552
   wchar_t game_name[64]; // name of the game currently played by this player
553
   wchar_t *fingertext; // mallocated wchar_t buffer of personal finger text
554
   int fingertext_length; // size of the finger text buffer, in WCHARs
555
   gamestylerating_t *gamestyleratings; // mallocated array of game styles for which this player is rated
556
   int gamestylerating_count; // amount of different game styles for which this player is rated
557
   bool update_dialog; // set to TRUE when the dialog window should be updated
558
} playercard_t;
559
 
560
 
561
// handle status pictures
562
typedef struct handlestatus_s
563
{
564
   HICON icon; // icon handle
565
   HBITMAP bitmap; // bitmap handle
566
   wchar_t *text; // pointer to the text string describing this status
567
} handlestatus_t;
568
 
569
 
570
// smilies
571
typedef struct smiley_s
572
{
573
   wchar_t name[32]; // smiley name
574
   wchar_t filename[MAX_PATH]; // filename of that smiley's PNG picture
575
   wchar_t *rtf_data; // smiley RTF data, mallocated
576
   int rtf_len; // length of the above data string (minus the null terminator)
577
} smiley_t;
578
 
579
 
580
// localized texts
581
typedef struct text_s
582
{
583
   wchar_t *id_string; // ID string for the given text (mallocated), example: "AboutBox_Title"
584
   wchar_t *localized_string; // localized string for the given text (mallocated), example: "A propos de ce logiciel"
585
} text_t;
586
 
587
 
59 pmbaty 588
// languages
589
typedef struct language_s
590
{
591
   wchar_t name[64]; // language name, e.g. "French", "English" or "Norwegian (norsk)"
592
   text_t *texts; // mallocated array of localized texts
593
   int text_count; // size of the texts array
594
} language_t;
595
 
596
 
1 pmbaty 597
// global declarations
598
#ifndef DEFINE_GLOBALS
599
#define GLOBAL extern
600
#else
601
#define GLOBAL
602
#endif
59 pmbaty 603
GLOBAL int language_id;
14 pmbaty 604
GLOBAL bool is_registered;
1 pmbaty 605
GLOBAL bool terminate_everything;
606
GLOBAL HINSTANCE hAppInstance;
607
GLOBAL wchar_t app_path[MAX_PATH];
608
GLOBAL wchar_t load_pathname[MAX_PATH];
609
GLOBAL wchar_t save_pathname[MAX_PATH];
59 pmbaty 610
GLOBAL HMENU hMainMenu;
611
GLOBAL HACCEL hMainAccelerators;
1 pmbaty 612
GLOBAL HWND hMainWnd;
613
GLOBAL HWND hChatterChannelsWnd;
614
GLOBAL HWND hGamesWnd;
615
GLOBAL HWND hMOTDWnd;
616
GLOBAL HWND hOpponentsWnd;
617
GLOBAL HWND hSoughtWnd;
618
GLOBAL messagebox_t messagebox;
619
GLOBAL bool want_framerate;
75 pmbaty 620
GLOBAL bool is_paused;
1 pmbaty 621
GLOBAL float current_time;
75 pmbaty 622
GLOBAL float stoppage_time;
1 pmbaty 623
GLOBAL float animation_endtime;
21 pmbaty 624
GLOBAL float command_ignoretime;
1 pmbaty 625
GLOBAL float highlight_endtime;
626
GLOBAL float current_pitch;
627
GLOBAL float current_yaw;
628
GLOBAL float current_distance;
629
GLOBAL int current_viewer;
630
GLOBAL handlestatus_t handlestatus[9]; // first slot unused
631
// dialog boxes and windows
632
GLOBAL bool is_dialogbox_about_validated;
633
GLOBAL bool is_dialogbox_challenge_validated;
634
GLOBAL bool is_dialogbox_changeappearance_validated;
635
GLOBAL bool is_dialogbox_comment_validated;
636
GLOBAL bool is_dialogbox_endgame_validated;
637
GLOBAL bool is_dialogbox_gotomove_validated;
75 pmbaty 638
GLOBAL bool is_dialogbox_renamesides_validated;
1 pmbaty 639
GLOBAL bool is_dialogbox_load_validated;
640
GLOBAL bool is_dialogbox_message_validated;
641
GLOBAL bool is_dialogbox_newgame_validated;
642
GLOBAL bool is_dialogbox_options_validated;
643
GLOBAL bool is_dialogbox_pawnpromotion_validated;
644
GLOBAL bool is_dialogbox_playercard_validated;
645
GLOBAL bool is_dialogbox_playerinfoname_validated;
646
GLOBAL bool is_dialogbox_quit_validated;
647
GLOBAL bool is_dialogbox_resign_validated;
648
GLOBAL bool is_dialogbox_save_validated;
649
GLOBAL bool is_dialogbox_saveposition_validated;
650
GLOBAL bool is_dialogbox_sendchallenge_validated;
651
GLOBAL bool is_dialogbox_sendseek_validated;
652
GLOBAL bool is_dialogbox_takeback_validated;
653
GLOBAL bool is_window_chat_validated;
654
GLOBAL bool is_window_chatterchannels_validated;
655
GLOBAL bool is_window_games_validated;
656
GLOBAL bool is_window_motd_validated;
657
GLOBAL bool is_window_opponents_validated;
658
GLOBAL bool is_window_sought_validated;
659
// themes
660
GLOBAL theme_t *themes; // mallocated, slot 0 must always be valid (default theme)
661
GLOBAL int theme_count;
662
GLOBAL theme_t *theme; // pointer to current theme
663
GLOBAL wchar_t wantedtheme_name[64];
664
GLOBAL bool want_grid;
665
GLOBAL bool want_flaticons;
666
GLOBAL bool want_custombackground;
667
GLOBAL wchar_t custombackground_pathname[MAX_PATH];
668
GLOBAL backgroundsprite_t custombg;
669
// main objects
670
GLOBAL options_t options;
671
GLOBAL board_t the_board;
672
GLOBAL scene_t the_scene;
59 pmbaty 673
// languages
674
GLOBAL language_t *languages; // mallocated
675
GLOBAL int language_count;
124 pmbaty 676
GLOBAL bool is_language_auto;
1 pmbaty 677
// online stuff
678
GLOBAL wchar_t server_motd[USHRT_MAX];
679
GLOBAL onlineplayer_t *onlineplayers; // mallocated
680
GLOBAL int onlineplayer_count; // -1 means "reply not arrived"
681
GLOBAL bool onlineplayers_updated; // TRUE when display is to be updated
682
GLOBAL float lastonlineplayers_time; // date at which the last update was received
683
GLOBAL soughtgame_t *soughtgames; // mallocated
684
GLOBAL int soughtgame_count; // -1 means "reply not arrived"
685
GLOBAL bool soughtgames_updated; // TRUE when display is to be updated
686
GLOBAL float lastsought_time; // date at which the last update was received
687
GLOBAL chatterchannel_t *chatterchannels; // mallocated
688
GLOBAL int chatterchannel_count; // -1 means "reply not arrived"
689
GLOBAL chatterchannel_t *selected_chatterchannel;
690
GLOBAL bool chatterchannels_updated;
691
GLOBAL interlocutor_t *interlocutors; // mallocated
692
GLOBAL int interlocutor_count;
693
GLOBAL playercard_t *playercards; // mallocated
694
GLOBAL int playercard_count;
695
GLOBAL challenge_t *challenges; // mallocated
696
GLOBAL int challenge_count;
697
// smilies
698
GLOBAL smiley_t *smilies; // mallocated
699
GLOBAL int smiley_count;
700
// PGN games
701
GLOBAL pgngame_t *games; // mallocated
702
GLOBAL int game_count;
703
// fonts
704
GLOBAL int players_fontindex;
705
GLOBAL int centermsg_fontindex;
706
GLOBAL int chat_fontindex;
707
GLOBAL int arrow_fontindex;
708
GLOBAL HFONT hFontChat;
709
// sprites
710
GLOBAL int larrow_spriteindex;
711
GLOBAL int rarrow_spriteindex;
124 pmbaty 712
GLOBAL int newgamebutton_spriteindex;
713
GLOBAL int opengamebutton_spriteindex;
1 pmbaty 714
GLOBAL int chatbutton_spriteindex;
715
GLOBAL int gamesbutton_spriteindex;
716
GLOBAL int peoplebutton_spriteindex;
717
GLOBAL int sepia_spriteindex;
718
GLOBAL int spinner_spriteindex[12];
719
// debug logging facilities
720
GLOBAL wchar_t logfile_pathname[MAX_PATH];
721
 
722
 
723
// function prototypes
724
#include "prototypes.h"
725
 
726
 
727
#endif // COMMON_H