mirror of
https://github.com/Tha14/toxic.git
synced 2024-11-25 04:13:02 +01:00
Some minor fixes for game module
This commit is contained in:
parent
321f694bb8
commit
8dfd009e0e
2
.gitignore
vendored
2
.gitignore
vendored
@ -18,3 +18,5 @@ build/*.o
|
|||||||
build/*.d
|
build/*.d
|
||||||
apidoc/python/build
|
apidoc/python/build
|
||||||
*.vim
|
*.vim
|
||||||
|
*.tox
|
||||||
|
*.nvim*
|
||||||
|
@ -151,7 +151,4 @@ texinfo_documents = [
|
|||||||
(master_doc, 'toxic_api', 'toxic_api Documentation',
|
(master_doc, 'toxic_api', 'toxic_api Documentation',
|
||||||
author, 'toxic_api', 'One line description of project.',
|
author, 'toxic_api', 'One line description of project.',
|
||||||
'Miscellaneous'),
|
'Miscellaneous'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -771,7 +771,7 @@ void chat_onGameInvite(ToxWindow *self, Tox *m, uint32_t friend_number, const ui
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (length < GAME_PACKET_HEADER_SIZE) {
|
if (length < GAME_PACKET_HEADER_SIZE || length > GAME_MAX_DATA_SIZE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,13 +162,17 @@ void game_kill(ToxWindow *self)
|
|||||||
{
|
{
|
||||||
GameData *game = self->game;
|
GameData *game = self->game;
|
||||||
|
|
||||||
if (game->cb_game_kill) {
|
if (game) {
|
||||||
game->cb_game_kill(game, game->cb_game_kill_data);
|
if (game->cb_game_kill) {
|
||||||
|
game->cb_game_kill(game, game->cb_game_kill_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
delwin(game->window);
|
||||||
|
free(game->messages);
|
||||||
|
free(game);
|
||||||
}
|
}
|
||||||
|
|
||||||
delwin(game->window);
|
kill_notifs(self->active_box);
|
||||||
free(game->messages);
|
|
||||||
free(game);
|
|
||||||
del_window(self);
|
del_window(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -746,7 +750,7 @@ bool game_onKey(ToxWindow *self, Tox *m, wint_t key, bool is_printable)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!game->is_multiplayer && key == KEY_F(2)) {
|
if (key == KEY_F(2) && !game->is_multiplayer) {
|
||||||
game_toggle_pause(self->game);
|
game_toggle_pause(self->game);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -814,6 +818,8 @@ void game_onPacket(ToxWindow *self, Tox *m, uint32_t friendnumber, const uint8_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (data[0] != GAME_NETWORKING_VERSION) {
|
if (data[0] != GAME_NETWORKING_VERSION) {
|
||||||
|
fprintf(stderr, "Game packet rejected: wrong networking version (got %d, expected %d)\n", data[0],
|
||||||
|
GAME_NETWORKING_VERSION);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1081,7 +1087,7 @@ void game_set_cb_on_packet(GameData *game, cb_game_on_packet *func, void *cb_dat
|
|||||||
/*
|
/*
|
||||||
* Wraps `packet` in a header comprised of the custom packet type, game type and game id.
|
* Wraps `packet` in a header comprised of the custom packet type, game type and game id.
|
||||||
*/
|
*/
|
||||||
static int game_wrap_packet(const GameData *game, uint8_t *packet, size_t size, GamePacketType packet_type)
|
static int game_packet_wrap(const GameData *game, uint8_t *packet, size_t size, GamePacketType packet_type)
|
||||||
{
|
{
|
||||||
if (size < GAME_PACKET_HEADER_SIZE + 1) {
|
if (size < GAME_PACKET_HEADER_SIZE + 1) {
|
||||||
return -1;
|
return -1;
|
||||||
@ -1100,7 +1106,7 @@ static int game_wrap_packet(const GameData *game, uint8_t *packet, size_t size,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int game_send_packet(const GameData *game, const uint8_t *data, size_t length, GamePacketType packet_type)
|
int game_packet_send(const GameData *game, const uint8_t *data, size_t length, GamePacketType packet_type)
|
||||||
{
|
{
|
||||||
if (length > GAME_MAX_DATA_SIZE) {
|
if (length > GAME_MAX_DATA_SIZE) {
|
||||||
return -1;
|
return -1;
|
||||||
@ -1108,7 +1114,7 @@ int game_send_packet(const GameData *game, const uint8_t *data, size_t length, G
|
|||||||
|
|
||||||
uint8_t packet[GAME_MAX_PACKET_SIZE];
|
uint8_t packet[GAME_MAX_PACKET_SIZE];
|
||||||
|
|
||||||
if (game_wrap_packet(game, packet, sizeof(packet), packet_type) == -1) {
|
if (game_packet_wrap(game, packet, sizeof(packet), packet_type) == -1) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1124,5 +1130,5 @@ int game_send_packet(const GameData *game, const uint8_t *data, size_t length, G
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -394,7 +394,7 @@ void game_kill(ToxWindow *self);
|
|||||||
*
|
*
|
||||||
* `packet_type` should be GP_Invite for an invite packet or GP_Data for all other game data.
|
* `packet_type` should be GP_Invite for an invite packet or GP_Data for all other game data.
|
||||||
*/
|
*/
|
||||||
int game_send_packet(const GameData *game, const uint8_t *data, size_t length, GamePacketType packet_type);
|
int game_packet_send(const GameData *game, const uint8_t *data, size_t length, GamePacketType packet_type);
|
||||||
|
|
||||||
#endif // GAME_BASE
|
#endif // GAME_BASE
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
#define CENT_MAX_NUM_SEGMENTS 12
|
#define CENT_MAX_NUM_SEGMENTS 12
|
||||||
|
|
||||||
/* Get a free life every time we get this many points. Needs to be > the most points we can get in a single shot. */
|
/* Get a free life every time we get this many points. Needs to be > the most points we can get in a single shot. */
|
||||||
#define CENT_SCORE_ONE_UP 5000
|
#define CENT_SCORE_ONE_UP 7000
|
||||||
|
|
||||||
/* Max number of lives we can have */
|
/* Max number of lives we can have */
|
||||||
#define CENT_MAX_LIVES 6
|
#define CENT_MAX_LIVES 6
|
||||||
@ -53,6 +53,9 @@
|
|||||||
/* Max speed of an enemy agent */
|
/* Max speed of an enemy agent */
|
||||||
#define CENT_MAX_ENEMY_AGENT_SPEED 8
|
#define CENT_MAX_ENEMY_AGENT_SPEED 8
|
||||||
|
|
||||||
|
/* Determines the overall speed of the game per game_set_update_interval() */
|
||||||
|
#define CENT_GAME_UPDATE_INTERVAL 14
|
||||||
|
|
||||||
/* How often a head that reaches the bottom can repdoduce */
|
/* How often a head that reaches the bottom can repdoduce */
|
||||||
#define CENT_REPRODUCE_TIMEOUT 10
|
#define CENT_REPRODUCE_TIMEOUT 10
|
||||||
|
|
||||||
@ -64,7 +67,7 @@
|
|||||||
#define CENT_BULLET_COLOUR YELLOW
|
#define CENT_BULLET_COLOUR YELLOW
|
||||||
#define CENT_BULLET_ATTR A_BOLD
|
#define CENT_BULLET_ATTR A_BOLD
|
||||||
#define CENT_BULLET_CHAR '|'
|
#define CENT_BULLET_CHAR '|'
|
||||||
#define CENT_BULLET_SPEED 150
|
#define CENT_BULLET_SPEED 300
|
||||||
|
|
||||||
#define CENT_BLASTER_ATTR A_BOLD
|
#define CENT_BLASTER_ATTR A_BOLD
|
||||||
#define CENT_BLASTER_CHAR 'U'
|
#define CENT_BLASTER_CHAR 'U'
|
||||||
@ -1730,7 +1733,7 @@ int centipede_initialize(GameData *game)
|
|||||||
game_show_lives(game, true);
|
game_show_lives(game, true);
|
||||||
game_show_high_score(game, true);
|
game_show_high_score(game, true);
|
||||||
game_increment_level(game);
|
game_increment_level(game);
|
||||||
game_set_update_interval(game, 10);
|
game_set_update_interval(game, CENT_GAME_UPDATE_INTERVAL);
|
||||||
|
|
||||||
if (cent_init_state(game, state) == -1) {
|
if (cent_init_state(game, state) == -1) {
|
||||||
free(state);
|
free(state);
|
||||||
|
@ -826,9 +826,7 @@ static bool chess_mock_move_valid(ChessState *state, const Player *player, Tile
|
|||||||
chess_copy_piece(&to->piece, &from->piece);
|
chess_copy_piece(&to->piece, &from->piece);
|
||||||
from->piece.type = NoPiece;
|
from->piece.type = NoPiece;
|
||||||
|
|
||||||
if (chess_player_in_check(state, player)) {
|
in_check = chess_player_in_check(state, player);
|
||||||
in_check = true;;
|
|
||||||
}
|
|
||||||
|
|
||||||
from->piece.type = from_piece.type;
|
from->piece.type = from_piece.type;
|
||||||
chess_copy_piece(&to->piece, &to_piece);
|
chess_copy_piece(&to->piece, &to_piece);
|
||||||
@ -1079,9 +1077,7 @@ static void chess_update_state(ChessState *state, Player *self, Player *other, c
|
|||||||
|
|
||||||
self->in_check = false;
|
self->in_check = false;
|
||||||
|
|
||||||
if (chess_player_in_check(state, other)) {
|
other->in_check = chess_player_in_check(state, other);
|
||||||
other->in_check = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
state->message_length = 0;
|
state->message_length = 0;
|
||||||
state->black_to_move ^= 1;
|
state->black_to_move ^= 1;
|
||||||
@ -1813,7 +1809,7 @@ void chess_cb_kill(GameData *game, void *cb_data)
|
|||||||
static int chess_handle_opponent_move_packet(const GameData *game, ChessState *state, const uint8_t *data,
|
static int chess_handle_opponent_move_packet(const GameData *game, ChessState *state, const uint8_t *data,
|
||||||
size_t length)
|
size_t length)
|
||||||
{
|
{
|
||||||
if (length != CHESS_PACKET_MOVE_SIZE || data == NULL) {
|
if (length < CHESS_PACKET_MOVE_SIZE || data == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1845,7 +1841,7 @@ static int chess_handle_opponent_move_packet(const GameData *game, ChessState *s
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (chess_try_move_opponent(state, from_tile, to_tile) != 0) {
|
if (chess_try_move_opponent(state, from_tile, to_tile) != 0) {
|
||||||
fprintf(stderr, "opponent tried to make an illegal move: %c%d-%c%d\n", from_l, from_n, to_l, to_n);
|
fprintf(stderr, "Chess opponent tried to make an illegal move: %c%d-%c%d\n", from_l, from_n, to_l, to_n);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1887,7 +1883,7 @@ static void chess_cb_on_packet(GameData *game, const uint8_t *data, size_t lengt
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cb_data) {
|
if (cb_data == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1928,7 +1924,7 @@ static void chess_cb_on_packet(GameData *game, const uint8_t *data, size_t lengt
|
|||||||
|
|
||||||
default: {
|
default: {
|
||||||
fprintf(stderr, "Got unknown chess packet type: %d\n", type);
|
fprintf(stderr, "Got unknown chess packet type: %d\n", type);
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2044,7 +2040,7 @@ static int chess_packet_send_resign(const GameData *game)
|
|||||||
uint8_t data[1];
|
uint8_t data[1];
|
||||||
data[0] = CHESS_PACKET_RESIGN;
|
data[0] = CHESS_PACKET_RESIGN;
|
||||||
|
|
||||||
if (game_send_packet(game, data, 1, GP_Data) == -1) {
|
if (game_packet_send(game, data, 1, GP_Data) == -1) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2060,7 +2056,7 @@ static int chess_packet_send_move(const GameData *game, const Tile *from, const
|
|||||||
data[3] = to->chess_coords.L;
|
data[3] = to->chess_coords.L;
|
||||||
data[4] = to->chess_coords.N;
|
data[4] = to->chess_coords.N;
|
||||||
|
|
||||||
if (game_send_packet(game, data, 5, GP_Data) == -1) {
|
if (game_packet_send(game, data, 5, GP_Data) == -1) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2073,7 +2069,7 @@ static int chess_packet_send_invite(const GameData *game, bool self_is_white)
|
|||||||
data[0] = CHESS_PACKET_INIT_SEND_INVITE;
|
data[0] = CHESS_PACKET_INIT_SEND_INVITE;
|
||||||
data[1] = self_is_white ? Black : White;
|
data[1] = self_is_white ? Black : White;
|
||||||
|
|
||||||
if (game_send_packet(game, data, 2, GP_Invite) == -1) {
|
if (game_packet_send(game, data, 2, GP_Invite) == -1) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2085,7 +2081,7 @@ static int chess_packet_send_accept(const GameData *game)
|
|||||||
uint8_t data[1];
|
uint8_t data[1];
|
||||||
data[0] = CHESS_PACKET_INIT_ACCEPT_INVITE;
|
data[0] = CHESS_PACKET_INIT_ACCEPT_INVITE;
|
||||||
|
|
||||||
if (game_send_packet(game, data, 1, GP_Data) == -1) {
|
if (game_packet_send(game, data, 1, GP_Data) == -1) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2160,4 +2156,3 @@ int chess_initialize(GameData *game, const uint8_t *init_data, size_t length)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,22 +104,28 @@ void game_util_move_coords(Direction direction, Coords *coords)
|
|||||||
{
|
{
|
||||||
switch (direction) {
|
switch (direction) {
|
||||||
case NORTH: {
|
case NORTH: {
|
||||||
--(coords->y);
|
if (coords->y > 0) {
|
||||||
|
--(coords->y);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case SOUTH: {
|
case SOUTH: {
|
||||||
++(coords->y);
|
++(coords->y); // Will rollover if you do something stupid
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EAST: {
|
case EAST: {
|
||||||
++(coords->x);
|
++(coords->x); // Will rollover if you do something stupid
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WEST: {
|
case WEST: {
|
||||||
--(coords->x);
|
if (coords->x > 0) {
|
||||||
|
--(coords->x);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -457,7 +457,12 @@ void del_window(ToxWindow *w)
|
|||||||
refresh();
|
refresh();
|
||||||
|
|
||||||
if (num_active_windows > 0) {
|
if (num_active_windows > 0) {
|
||||||
|
if (active_window_index == 2) { // if closing current window would bring us to friend list
|
||||||
|
set_next_window(-1); // skip back to the home window instead. FIXME: magic numbers
|
||||||
|
}
|
||||||
|
|
||||||
set_next_window(-1);
|
set_next_window(-1);
|
||||||
|
|
||||||
--num_active_windows;
|
--num_active_windows;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -519,6 +524,12 @@ void on_window_resize(void)
|
|||||||
|
|
||||||
getmaxyx(w->window, y2, x2);
|
getmaxyx(w->window, y2, x2);
|
||||||
|
|
||||||
|
if (y2 <= 0 || x2 <= 0) {
|
||||||
|
fprintf(stderr, "Failed to resize game window: max_x: %d, max_y: %d\n", x2, y2);
|
||||||
|
delwin(w->window);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
w->window_bar = subwin(w->window, WINDOW_BAR_HEIGHT, COLS, LINES - 2, 0);
|
w->window_bar = subwin(w->window, WINDOW_BAR_HEIGHT, COLS, LINES - 2, 0);
|
||||||
w->game->window = subwin(w->window, y2 - CHATBOX_HEIGHT - WINDOW_BAR_HEIGHT, x2, 0, 0);
|
w->game->window = subwin(w->window, y2 - CHATBOX_HEIGHT - WINDOW_BAR_HEIGHT, x2, 0, 0);
|
||||||
continue;
|
continue;
|
||||||
@ -549,7 +560,7 @@ void on_window_resize(void)
|
|||||||
if (y2 <= 0 || x2 <= 0) {
|
if (y2 <= 0 || x2 <= 0) {
|
||||||
fprintf(stderr, "Failed to resize window: max_x: %d, max_y: %d\n", x2, y2);
|
fprintf(stderr, "Failed to resize window: max_x: %d, max_y: %d\n", x2, y2);
|
||||||
delwin(w->window);
|
delwin(w->window);
|
||||||
return;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (w->show_peerlist) {
|
if (w->show_peerlist) {
|
||||||
@ -790,7 +801,6 @@ void draw_active_window(Tox *m)
|
|||||||
|
|
||||||
if (ch == user_settings->key_next_tab || ch == user_settings->key_prev_tab) {
|
if (ch == user_settings->key_next_tab || ch == user_settings->key_prev_tab) {
|
||||||
set_next_window(ch);
|
set_next_window(ch);
|
||||||
ch = KEY_F(2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
a->onKey(a, m, ch, false);
|
a->onKey(a, m, ch, false);
|
||||||
@ -892,18 +902,30 @@ void kill_all_windows(Tox *m)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (w->type == WINDOW_TYPE_CHAT) {
|
switch (w->type) {
|
||||||
kill_chat_window(w, m);
|
case WINDOW_TYPE_CHAT: {
|
||||||
} else if (w->type == WINDOW_TYPE_CONFERENCE) {
|
kill_chat_window(w, m);
|
||||||
free_conference(w, w->num);
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case WINDOW_TYPE_CONFERENCE: {
|
||||||
|
free_conference(w, w->num);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef GAMES
|
#ifdef GAMES
|
||||||
else if (w->type == WINDOW_TYPE_GAME) {
|
|
||||||
game_kill(w);
|
case WINDOW_TYPE_GAME: {
|
||||||
}
|
game_kill(w);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // GAMES
|
#endif // GAMES
|
||||||
|
|
||||||
|
default: {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: use enum instead of magic indices */
|
/* TODO: use enum instead of magic indices */
|
||||||
|
@ -310,5 +310,5 @@ void draw_window_bar(ToxWindow *self);
|
|||||||
call at least once per second */
|
call at least once per second */
|
||||||
void refresh_inactive_windows(void);
|
void refresh_inactive_windows(void);
|
||||||
|
|
||||||
#endif // WINWDOWS_H
|
#endif // WINDOWS_H
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user