/* LORD OF HOSTS - Lord.h --- Headerdatei */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct Piece { int Number; int ID; /* R/WKING || R/WKNIGHT */ int Value; UBYTE x,y; BOOL StillAlive; }; struct Move { UBYTE fromx,fromy; UBYTE tox,toy; int Beaten; BOOL x_first; BOOL GameOver; int status; }; #define VERSION "1.1" /* für Zugriff auf das Feld Pieces[4] */ #define RKING 0 #define WKING 1 #define RKNIGHT 2 #define WKNIGHT 3 /* JoyMouse */ #define SPEED 5 /* für Feld-Matrix */ #define NOT_OCCUPIED 20 /* Werte für check_move(): Gründe, warum gewünschter Zug ungültig */ #define DIST_EXCEEDED 1 #define MUST_MOVE_FARTHER 2 #define WAY_BLOCKED 4 #define CANT_BEAT_BUDDY 8 #define KING_IN_DANGER 16 /* Bei gültigem Zug gibt check_move() zurück, in welche Richtung erst gezogen werden sollte (muß) */ #define MOVE_X_FIRST 128 #define MOVE_Y_FIRST 256 /* Werte für do_move(): Spezialsituation nach einem Zug (Check, Matt) */ #define ENEMY_KING_BEATABLE 1 #define ENEMY_MATED 2 #define ENEMY_OUT_OF_KNIGHTS 4 #define ENEMY_KNIGHT_BEATEN 8 /* für Undo/Redo */ #define MAXUNDO 500 #define NOBODY 20 #define ABS(x) ((x)<0 ? -(x) : (x)) /* board */ #define STD_NORM 0 #define STD_ROTD 1 #define RND_BAL 2 #define RND_UNB 3 /* status */ #define IDLE 0 /* kein Spiel im Gange */ #define IN_GAME 1 /* Spiel läuft */ #define PLAYER1_TO_MOVE 2 /* wenn dieses Bit gesetzt ist, ist Spieler 1 dran */ #define WAITING_FOR_PICK 4 /* Der Computer erwartet, daß der Stein gewählt wird, der ziehen soll */ #define WAITING_FOR_DEST 8 /* Nun soll das Zugziel gewählt werden */ #define WAITING_FOR_CONF 16 /* Im Show...Values-Modus ist der Probezug gemacht und muß nun bestätigt werden */ #define BOARD_UNTOUCHED 32 /* Brett ist noch nicht benutzt worden */ /* help */ #define NOHELP 0 #define SHOWKNOWN 1 #define SHOWALL 2 /* misc */ #define RED FALSE #define WHITE TRUE #define SWITCHSIDENR (SHIFTMENU(2)+SHIFTITEM(6)+SHIFTSUB(NOSUB)) /* Prototypes * joymouse.c */ void swapjoymouse(BOOL what); struct InputEvent *JoyMouseHandler(struct InputEvent *Event, ULONG *Data); /* openclose.c */ void errorstop(char *message); void open_all(void); void close_all(void); /* display.c */ void DrawRect(ULONG Color, ULONG DrMd, ULONG fromx, ULONG fromy, ULONG tox, ULONG toy); void DrawLine(ULONG Color, ULONG DrMd, ULONG fromx, ULONG fromy, ULONG tox, ULONG toy); void FillRect(ULONG Color, ULONG fromx, ULONG fromy, ULONG tox, ULONG toy); void DrawText(ULONG Color, ULONG DrMd, ULONG x, ULONG y, char *string); void drawboard(void); void drawplayers(char *Name1, char *Name2); void SetPiece(struct Piece Which, BOOL FadeIn, BOOL StayBlend); void MovePiece(UBYTE x, UBYTE y, int xdist, int ydist, BOOL FadeOut); void Highlight(UBYTE x, UBYTE y); /* board.c */ void setup_stdboard(BOOL Rotated); void setup_rndboard(BOOL Balanced); UBYTE GetValue(int Num, UBYTE x, UBYTE y); UBYTE IsOccupied(UBYTE x, UBYTE y); void InitPiece(int Num, int ID, int Val, UBYTE x, UBYTE y); void clear_board(void); /* moves.c */ int check_move(UBYTE board[][8], struct Piece *Pieces, int Num, UBYTE tox, UBYTE toy); int how_to_move(UBYTE board[][8], UBYTE fromx, UBYTE fromy, UBYTE tox, UBYTE toy); int check_check(UBYTE board[][8], struct Piece *Pieces, int Num, UBYTE tox, UBYTE toy); int do_move(UBYTE board[][8], struct Piece *Pieces, int Num, UBYTE tox, UBYTE toy, BOOL x_first); BOOL undo(void); BOOL redo(void); /* disk.c */ void FileError(int Error); BOOL checkrange(int Var, int lo, int hi); void SaveGame(void); void LoadGame(void); /* misc.c */ void Rules(void); void ExplainError(int Error); void About(void); void SetJMSpeed(void); void EnterNames(void); BOOL Coords(SHORT MouseX, SHORT MouseY, UBYTE *x, UBYTE *y); void Exchange(UBYTE *a, UBYTE *b); void Notify(int Nr, int occurrence); void NextPlayer(BOOL who); /* main.c */ void main(void); void wait_events(void); void handle_menuevents(void); void handle_mouseevents(void);