--- /dev/null
+/* game_blackjack.h - NeonServ v5.6
+ * Copyright (C) 2011-2012 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef _game_blackjack_h
+#define _game_blackjack_h
+#include "../../timeq.h"
+
+#define BJ_STATE_WAITING 1
+#define BJ_STATE_RUNNING 2
+
+#define BJ_CTYPE_HEARTS 0
+#define BJ_CTYPE_SPADES 1
+#define BJ_CTYPE_DIAMONDS 2
+#define BJ_CTYPE_CLUBS 3
+
+#define BJ_CTYPE_COUNT 4
+
+#define BJ_CARD_NUMBER_2 0
+#define BJ_CARD_NUMBER_3 1
+#define BJ_CARD_NUMBER_4 2
+#define BJ_CARD_NUMBER_5 3
+#define BJ_CARD_NUMBER_6 4
+#define BJ_CARD_NUMBER_7 5
+#define BJ_CARD_NUMBER_8 6
+#define BJ_CARD_NUMBER_9 7
+#define BJ_CARD_NUMBER_10 8
+#define BJ_CARD_JACK 9
+#define BJ_CARD_QUEEN 10
+#define BJ_CARD_KING 11
+#define BJ_CARD_ACE 12
+
+struct UserNode;
+struct ChanNode;
+struct ChanUser;
+struct ClientSocket;
+extern struct bj_game *bj_active_games;
+
+struct bj_card {
+ unsigned char type;
+ unsigned char card;
+ struct bj_card *prev, *next;
+};
+
+struct bj_card_deck {
+ struct bj_card *cards;
+ int count;
+};
+
+struct bj_player {
+ struct ChanUser *chanuser;
+ struct bj_card *cards;
+ int count;
+ struct bj_player *prev, *next;
+};
+
+struct bj_game {
+ struct ChanNode *channel;
+ struct ClientSocket *textbot;
+ int state : 3;
+ struct bj_card_deck *deck;
+ struct bj_player *player;
+ struct bj_player *active_player;
+ int players;
+
+ struct timeq_entry *timer;
+ struct bj_game *next;
+};
+
+struct bj_card_deck *bj_shuffle_deck();
+struct bj_card *bj_get_card(struct bj_card_deck *deck);
+void bj_free_deck(struct bj_card_deck *deck);
+void bj_free_player(struct bj_player *player, struct bj_card_deck *deck);
+void bj_free_game(struct bj_game *game);
+struct bj_player *bj_get_next_player(struct bj_game *game);
+int bj_get_player_card_points(struct bj_player *player);
+void bj_show_player_cards(struct bj_game *game, struct bj_player *player);
+
+TIMEQ_CALLBACK(bj_game_wait_timeout);
+TIMEQ_CALLBACK(bj_player_timeout);
+
+void bj_action_take_card(struct bj_game *game, struct bj_player *player);
+void bj_action_next_player(struct bj_game *game, struct bj_player *player);
+
+void bj_event_part(struct ChanUser *chanuser);
+void bj_event_freechan(struct ChanNode *chan);
+
+void bj_game_end(struct bj_game *game);
+
+#endif