// defines.h
#ifndef DEFINES_H
#define DEFINES_H
// common definitions
#define PROGRAM_NAME L"Chess Giants"
#define DEMO_TIMEOUT (6.0f * 60.0f)
#define PROGRAM_URL L"https://www.pmbaty.com/chess"
#define AUTHOR_EMAIL L"pm@pmbaty.com"
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// PayPal stuff - BEGIN <-button ID-> <--------notify URL-------> <---------return URL--------> <-user UUID->
#define PAYPAL_URL_FR L"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=DC5JKRXQQFNKQ¬ify_url=" PROGRAM_URL L"/notify.php&return=" PROGRAM_URL L"/thankyou.php&custom=" // french
#define PAYPAL_URL_XX L"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=XEQFUPRM5WN68¬ify_url=" PROGRAM_URL L"/notify.php&return=" PROGRAM_URL L"/thankyou.php&custom=" // rest of the world
#define NO_REGISTRATION 1 // define this to DISABLE registration -- comment to enable it
// PayPal stuff - END
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define ACCOUNTCREATION_URL L"http://www.freechess.org/cgi-bin/Register/FICS_register.cgi?Language=%s"
#define MAX_STACKABLE_PARTS 7
#define MAX_PITCH_FOR_FLAT_ICONS 75.0f
#define CLOSEUP_VIEW_DISTANCE 40.0f
#define CLOSEUP_VIEW_PITCH 6.0f
#define MIN_VIEW_PITCH 10.0f
#define MIN_VIEW_DISTANCE 48.0f
#define MAX_VIEW_PITCH 89.99f
#define MAX_VIEW_DISTANCE 100.0f
#define ANIMATION_DURATION 1.0f
#define WCHAR_SIZEOF(a) (sizeof (a) / sizeof (wchar_t))
#define LOCALIZE(a) LocalizedTexts_GetLocalizedTextFor (a)
#define IS_VALID_POSITION(pos) (((pos)[0] >= 0) && ((pos)[0] < 8) && ((pos)[1] >= 0) && ((pos)[1] < 8))
#define FENSTARTUP_STANDARDCHESS L"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"
#define PGNMOVENUMBER_TO_MOVEINDEX(move,color) (2 * ((move) - 1) + ((color) == COLOR_BLACK ? 1 : 0))
#define MOVEINDEX_TO_PGNMOVENUMBER(moveindex) (1 + ((moveindex) - ((moveindex) % 2)) / 2)
#define NOCHANGE (-1)
#define DURATION_INFINITE (999999999.0f)
// color handling macros
#define RGB_TO_RGBACOLOR(r,g,b) ((((unsigned long) (r)) << 24) | (((unsigned long) (g)) << 16) | (((unsigned long) (b)) << 8) | 0x000000FF)
#define RGBA_TO_RGBACOLOR(r,g,b,a) ((((unsigned long) (r)) << 24) | (((unsigned long) (g)) << 16) | (((unsigned long) (b)) << 8) | ((unsigned long) (a)))
#define RGBACOLOR_RED(rgba) ((unsigned char) (((rgba) & 0xFF000000) >> 24))
#define RGBACOLOR_GREEN(rgba) ((unsigned char) (((rgba) & 0x00FF0000) >> 16))
#define RGBACOLOR_BLUE(rgba) ((unsigned char) (((rgba) & 0x0000FF00) >> 8))
#define RGBACOLOR_ALPHA(rgba) ((unsigned char) ((rgba) & 0x000000FF))
#define RGBACOLOR_SETRED(rgba,red) (((rgba) & 0x00FFFFFF) | (((unsigned long) (red)) << 24))
#define RGBACOLOR_SETGREEN(rgba,green) (((rgba) & 0xFF00FFFF) | (((unsigned long) (green)) << 16))
#define RGBACOLOR_SETBLUE(rgba,blue) (((rgba) & 0xFFFF00FF) | (((unsigned long) (blue)) << 8))
#define RGBACOLOR_SETALPHA(rgba,alpha) (((rgba) & 0xFFFFFF00) | ((unsigned long) (alpha)))
#define RGBACOLOR_FULLALPHA(rgba) ((rgba) | 0x000000FF)
#define RGBACOLOR_TO_ARGBCOLOR(rgba) ((((rgba) & 0xFFFFFF00) >> 8) | (((rgba) & 0x00FFFFFF) << 24))
// handy macros
#define GUIBUTTON_ENABLE(button) { if ((button).state == 0) { (button).state = 1; /*the_board.reevaluate =*/ the_scene.update = true; } }
#define GUIBUTTON_DISABLE(button) { if ((button).state > 0) { (button).state = 0; /*the_board.reevaluate =*/ the_scene.update = true; } }
// menu item IDs
#define MENUID_RESOURCEBASE 20000
#define MENUID_GAME_NEWGAME (MENUID_RESOURCEBASE + 101)
#define MENUID_GAME_SETUPPOSITION (MENUID_RESOURCEBASE + 102)
#define MENUID_GAME_LOAD (MENUID_RESOURCEBASE + 103)
#define MENUID_GAME_SAVE (MENUID_RESOURCEBASE + 104)
#define MENUID_GAME_SAVEAS (MENUID_RESOURCEBASE + 105)
#define MENUID_GAME_SAVEPOSITIONAS (MENUID_RESOURCEBASE + 106)
#define MENUID_GAME_PAUSE (MENUID_RESOURCEBASE + 107)
#define MENUID_GAME_RESIGN (MENUID_RESOURCEBASE + 108)
#define MENUID_GAME_STATISTICS (MENUID_RESOURCEBASE + 109)
#define MENUID_GAME_OPTIONS (MENUID_RESOURCEBASE + 110)
#define MENUID_GAME_QUIT (MENUID_RESOURCEBASE + 111)
#define MENUID_MOVE_CANCELLASTMOVE (MENUID_RESOURCEBASE + 201)
#define MENUID_MOVE_SUGGESTMOVE (MENUID_RESOURCEBASE + 202)
#define MENUID_MOVE_COMMENTMOVE (MENUID_RESOURCEBASE + 203)
#define MENUID_MOVE_GOTOMOVE (MENUID_RESOURCEBASE + 204)
#define MENUID_CHESSBOARD_SWAPSIDES (MENUID_RESOURCEBASE + 205)
#define MENUID_CHESSBOARD_RENAMESIDES (MENUID_RESOURCEBASE + 206)
#define MENUID_CHESSBOARD_BEGINNINGOFGAME (MENUID_RESOURCEBASE + 207)
#define MENUID_CHESSBOARD_PREVIOUSMOVE (MENUID_RESOURCEBASE + 208)
#define MENUID_CHESSBOARD_NEXTMOVE (MENUID_RESOURCEBASE + 209)
#define MENUID_CHESSBOARD_CURRENTSTATEOFGAME (MENUID_RESOURCEBASE + 210)
#define MENUID_CHESSBOARD_TOPVIEW (MENUID_RESOURCEBASE + 211)
#define MENUID_CHESSBOARD_DEFAULTVIEW (MENUID_RESOURCEBASE + 212)
#define MENUID_CHESSBOARD_RESETVIEW (MENUID_RESOURCEBASE + 213)
#define MENUID_CHESSBOARD_ZOOMIN (MENUID_RESOURCEBASE + 214)
#define MENUID_CHESSBOARD_ZOOMOUT (MENUID_RESOURCEBASE + 215)
#define MENUID_CHESSBOARD_CHANGEAPPEARANCE (MENUID_RESOURCEBASE + 216)
#define MENUID_CHESSBOARD_DISPLAYWINDOWSDESKTOP (MENUID_RESOURCEBASE + 217)
#define MENUID_INTERNET_SHOWONLINEPLAYERS (MENUID_RESOURCEBASE + 301)
#define MENUID_INTERNET_SHOWSOUGHTGAMES (MENUID_RESOURCEBASE + 302)
#define MENUID_INTERNET_SEEKGAME (MENUID_RESOURCEBASE + 303)
#define MENUID_INTERNET_CHATTERCHANNELS (MENUID_RESOURCEBASE + 304)
#define MENUID_INTERNET_ENTERCHATTEXT (MENUID_RESOURCEBASE + 305)
#define MENUID_INTERNET_DISPLAYPLAYERCARD (MENUID_RESOURCEBASE + 306)
#define MENUID_INTERNET_DISPLAYYOURCARD (MENUID_RESOURCEBASE + 307)
#define MENUID_INTERNET_MOTD (MENUID_RESOURCEBASE + 308)
#define MENUID_HELP_HELP (MENUID_RESOURCEBASE + 401)
#define MENUID_HELP_GETCHESSGAMES (MENUID_RESOURCEBASE + 402)
#define MENUID_HELP_ADDMODIFYVISUALTHEMES (MENUID_RESOURCEBASE + 403)
#define MENUID_HELP_ADDMODIFYENGINES (MENUID_RESOURCEBASE + 404)
#define MENUID_HELP_ADDMODIFYTRANSLATIONS (MENUID_RESOURCEBASE + 405)
#define MENUID_HELP_REPORTAPROBLEM (MENUID_RESOURCEBASE + 406)
#define MENUID_HELP_ABOUT (MENUID_RESOURCEBASE + 407)
// sound IDs
#define SOUNDTYPE_NONE 0
#define SOUNDTYPE_MOVE 1
#define SOUNDTYPE_ILLEGALMOVE 2
#define SOUNDTYPE_PIECETAKEN 3
#define SOUNDTYPE_CHECK 4
#define SOUNDTYPE_VICTORY 5
#define SOUNDTYPE_DEFEAT 6
#define SOUNDTYPE_CLICK 7
#define SOUNDTYPE_SLIDE 8
#define SOUNDTYPE_HINTWINDOW 9
#define SOUNDTYPE_IMPORTANT 10
// text alignments
#define ALIGN_LEFT 0
#define ALIGN_TOP 0
#define ALIGN_RIGHT 1
#define ALIGN_BOTTOM 1
#define ALIGN_CENTER 2
// in case this ever changes...
#define MATH_PI 3.14159265358979323846f
#define TO_RADIANS (MATH_PI / 180.0f)
#define TO_DEGREES (180.0f / MATH_PI)
// light types
#define LIGHT_NONE 0
#define LIGHT_DIRECTIONAL 1
#define LIGHT_POINT 2
#define LIGHT_SPOT 3
// chess colors
#define COLOR_UNSPECIFIED -1 // used in dialog_sendchallenge.cpp and dialog_sendseek.cpp
#define COLOR_BLACK 0
#define COLOR_WHITE 1
// chess parts
#define PART_NONE 0
#define PART_KING 1
#define PART_QUEEN 2
#define PART_BISHOP 3
#define PART_KNIGHT 4
#define PART_ROOK 5
#define PART_PAWN 6
// slot flags
#define FLAG_NONE 0
#define FLAG_SELECTED (1 << 0)
#define FLAG_POSSIBLEMOVE (1 << 1)
#define FLAG_TAKEABLE (1 << 2)
#define FLAG_THREAT (1 << 3)
#define FLAG_CHECK (1 << 4)
// game states
#define STATE_UNKNOWN 0
#define STATE_SETUPPOSITION 1
#define STATE_PLAYING 2
#define STATE_WHITEWIN_CHECKMATE 3
#define STATE_WHITEWIN_RESIGNORFORFEIT 4
#define STATE_BLACKWIN_CHECKMATE 5
#define STATE_BLACKWIN_RESIGNORFORFEIT 6
#define STATE_DRAW_STALEMATE 7
#define STATE_DRAW_AGREEMENT 8
#define STATE_DRAW_OTHER 9
#define STATE_ADJOURNED 10
// resign types
#define RESIGNTYPE_UNDEFINED 0
#define RESIGNTYPE_NEWGAME 1
#define RESIGNTYPE_LOADGAME 2
// player types
#define PLAYER_HUMAN 0
#define PLAYER_COMPUTER 1
#define PLAYER_INTERNET 2
// network opponent rating types
#define OPPONENTRATINGTYPE_DEFAULT 0
#define OPPONENTRATINGTYPE_ESTIMATED 1 // E character
#define OPPONENTRATINGTYPE_PROVISIONAL 2 // P character
// network opponent handle status
#define HANDLESTATUS_UNDEFINED 0
#define HANDLESTATUS_AVAILABLE 1 // (space) character
#define HANDLESTATUS_INGAME 2 // ^ character
#define HANDLESTATUS_INSIMULATION 3 // ~ character
#define HANDLESTATUS_INTOURNAMENT 4 // & character
#define HANDLESTATUS_EXAMININGAGAME 5 // # character
#define HANDLESTATUS_NOTOPENFORAMATCH 6 // : character
#define HANDLESTATUS_INACTIVEORBUSY 7 // . character
#define HANDLESTATUS_OFFLINE 8 // no representation in player list
// network opponent handle codes
#define HANDLECODE_NONE 0
#define HANDLECODE_ADMINISTRATOR (1 << 0) // (*)
#define HANDLECODE_BLINDFOLD (1 << 1) // (B)
#define HANDLECODE_COMPUTER (1 << 2) // (C)
#define HANDLECODE_TEAM (1 << 3) // (T)
#define HANDLECODE_UNREGISTERED (1 << 4) // (U)
#define HANDLECODE_CHESSADVISOR (1 << 5) // (CA)
#define HANDLECODE_SERVICEREPRESENTATIVE (1 << 6) // (SR)
#define HANDLECODE_TOURNAMENTDIRECTOR (1 << 7) // (TD)
#define HANDLECODE_MAMERMANAGER (1 << 8) // (TM)
#define HANDLECODE_FIDEMASTER (1 << 9) // (FM)
#define HANDLECODE_FIDEINTERNATIONALMASTER (1 << 10) // (IM)
#define HANDLECODE_FIDEGREATMASTER (1 << 11) // (GM)
#define HANDLECODE_FIDEWOMENSINTERNATIONALMASTER (1 << 12) // (WIM)
#define HANDLECODE_FIDEWOMENSGREATMASTER (1 << 13) // (WGM)
// rating types
#define GAMERATINGTYPE_UNSUPPORTED 0
#define GAMERATINGTYPE_SUPPORTEDRATED 1
#define GAMERATINGTYPE_SUPPORTEDUNRATED 2
#endif // DEFINES_H