diff --git a/CHANGELOG.txt b/CHANGELOG.txt index eb021cc78..752793654 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -3,6 +3,7 @@ D1X-Rebirth Changelog 20100326 -------- main/endlevel.c, main/gameseq.c, main/mission.c, main/mission.h, main/titles.c, main/titles.h: In Endlevel sequence, re-align big explosion to draw in front of exit model, relative to viewer; Re-organized tex files for Briefings and Endings and created more general code to play them; Re-aligned Dravis' head +main/automap.c, main/gamecntl.c, main/kconfig.c, main/net_ipx.c, main/net_udp.c, main/newmenu.c, main/scores.c: Make all windows except game and editor use EVENT_KEY_COMMAND, returning 1 if handled; pass NULL instead of userdata for the PCX filename, for newmenu_do1 20100324 -------- diff --git a/main/automap.c b/main/automap.c index 1862e87cd..af7e85959 100644 --- a/main/automap.c +++ b/main/automap.c @@ -354,10 +354,78 @@ extern int set_segment_depths(int start_seg, ubyte *segbuf); #define MAP_BACKGROUND_FILENAME "MAP.PCX" +int automap_key_command(window *wind, d_event *event, automap *am) +{ + int c = ((d_event_keycommand *)event)->keycode; + + switch (c) + { +#ifndef NDEBUG + case KEY_BACKSP: Int3(); return 1; +#endif + + case KEY_PRINT_SCREEN: { + gr_set_current_canvas(NULL); + save_screen_shot(1); + return 1; + } + + case KEY_ESC: + if (am->leave_mode==0) + { + window_close(wind); + return 1; + } + return 1; + + case KEY_ALTED+KEY_F: // Alt+F shows full map, if cheats enabled + if (Cheats_enabled) + { + uint t; + t = Players[Player_num].flags; + Players[Player_num].flags |= PLAYER_FLAGS_MAP_ALL_CHEAT; + automap_build_edge_list(am); + Players[Player_num].flags=t; + } + return 1; +#ifndef NDEBUG + case KEY_DEBUGGED+KEY_F: { + int i; + + for (i=0; i<=Highest_segment_index; i++ ) + Automap_visited[i] = 1; + automap_build_edge_list(am); + am->max_segments_away = set_segment_depths(Objects[Players[Player_num].objnum].segnum, Automap_visited); + am->segment_limit = am->max_segments_away; + adjust_segment_limit(am, am->segment_limit); + } + return 1; +#endif + + case KEY_F9: + if (am->segment_limit > 1) { + am->segment_limit--; + adjust_segment_limit(am, am->segment_limit); + } + return 1; + case KEY_F10: + if (am->segment_limit < am->max_segments_away) { + am->segment_limit++; + adjust_segment_limit(am, am->segment_limit); + } + return 1; + case KEY_ALTED+KEY_ENTER: + case KEY_ALTED+KEY_PADENTER: + gr_toggle_fullscreen(); + return 1; + } + + return 0; +} + int automap_idle(window *wind, d_event *event, automap *am) { vms_matrix tempm; - int c; if (!am->pause_game) { ConsoleObject->mtype.phys_info.flags |= am->old_wiggle; // Restore wiggle @@ -386,69 +454,6 @@ int automap_idle(window *wind, d_event *event, automap *am) //see if redbook song needs to be restarted RBACheckFinishedHook(); - while( (c=key_inkey()) ) { - switch( c ) { -#ifndef NDEBUG - case KEY_BACKSP: Int3(); break; -#endif - - case KEY_PRINT_SCREEN: { - gr_set_current_canvas(NULL); - save_screen_shot(1); - break; - } - - case KEY_ESC: - if (am->leave_mode==0) - { - window_close(wind); - return 1; - } - break; - - case KEY_ALTED+KEY_F: // Alt+F shows full map, if cheats enabled - if (Cheats_enabled) - { - uint t; - t = Players[Player_num].flags; - Players[Player_num].flags |= PLAYER_FLAGS_MAP_ALL_CHEAT; - automap_build_edge_list(am); - Players[Player_num].flags=t; - } - break; -#ifndef NDEBUG - case KEY_DEBUGGED+KEY_F: { - int i; - - for (i=0; i<=Highest_segment_index; i++ ) - Automap_visited[i] = 1; - automap_build_edge_list(am); - am->max_segments_away = set_segment_depths(Objects[Players[Player_num].objnum].segnum, Automap_visited); - am->segment_limit = am->max_segments_away; - adjust_segment_limit(am, am->segment_limit); - } - break; -#endif - - case KEY_F9: - if (am->segment_limit > 1) { - am->segment_limit--; - adjust_segment_limit(am, am->segment_limit); - } - break; - case KEY_F10: - if (am->segment_limit < am->max_segments_away) { - am->segment_limit++; - adjust_segment_limit(am, am->segment_limit); - } - break; - case KEY_ALTED+KEY_ENTER: - case KEY_ALTED+KEY_PADENTER: - gr_toggle_fullscreen(); - break; - } - } - if ( Controls.fire_primary_down_count ) { // Reset orientation am->viewDist = ZOOM_DEFAULT; @@ -516,6 +521,9 @@ int automap_handler(window *wind, d_event *event, automap *am) game_flush_inputs(); break; + case EVENT_KEY_COMMAND: + return automap_key_command(wind, event, am); + case EVENT_IDLE: return automap_idle(wind, event, am); break; diff --git a/main/gamecntl.c b/main/gamecntl.c index 9f59aa286..0d9decbf1 100644 --- a/main/gamecntl.c +++ b/main/gamecntl.c @@ -234,33 +234,34 @@ int pause_handler(window *wind, d_event *event, char *msg) game_flush_inputs(); break; - case EVENT_IDLE: - timer_delay2(50); + case EVENT_KEY_COMMAND: + key = ((d_event_keycommand *)event)->keycode; - key = key_inkey(); - - switch (key) { + switch (key) + { case 0: break; case KEY_ESC: //Function_mode = FMODE_MENU; // Don't like this, just press escape twice (kreatordxx) window_close(wind); - break; + return 1; case KEY_F1: show_help(); - break; + return 1; case KEY_PAUSE: window_close(wind); - break; + return 1; case KEY_ALTED+KEY_ENTER: case KEY_ALTED+KEY_PADENTER: gr_toggle_fullscreen(); - break; + return 1; default: - return 0; break; } - return 0; + break; + + case EVENT_IDLE: + timer_delay2(50); break; case EVENT_WINDOW_DRAW: @@ -273,15 +274,13 @@ int pause_handler(window *wind, d_event *event, char *msg) ext_music_resume(); digi_resume_midi(); // sound pausing handled by game_handler d_free(msg); - return 0; // continue closing break; default: - return 0; break; } - return 1; + return 0; } int do_game_pause() diff --git a/main/kconfig.c b/main/kconfig.c index 8d05d7b35..a0d84ec48 100644 --- a/main/kconfig.c +++ b/main/kconfig.c @@ -623,54 +623,26 @@ int kconfig_mouse(window *wind, d_event *event, kc_menu *menu) return rval; } -int kconfig_idle(window *wind, kc_menu *menu) +int kconfig_key_command(window *wind, d_event *event, kc_menu *menu) { int i,k; - if (menu->changing) - timer_delay(f0_1/10); - else - timer_delay2(50); + k = ((d_event_keycommand *)event)->keycode; - //see if redbook song needs to be restarted - RBACheckFinishedHook(); - - k = key_inkey(); - - if (menu->changing) - { - if (k == KEY_ESC) - menu->changing = 0; - else - switch( menu->items[menu->citem].type ) - { - case BT_KEY: kc_change_key( menu, &menu->items[menu->citem] ); break; - case BT_MOUSE_AXIS: kc_change_mouseaxis( menu, &menu->items[menu->citem] ); break; - case BT_JOY_BUTTON: kc_change_joybutton( menu, &menu->items[menu->citem] ); break; - case BT_JOY_AXIS: kc_change_joyaxis( menu, &menu->items[menu->citem] ); break; - } - - if (!menu->changing) - { - game_flush_inputs(); - return 1; - } - } - - switch( k ) + switch (k) { case KEY_BACKSP: Int3(); - break; + return 1; #ifdef macintosh case KEY_COMMAND+KEY_SHIFTED+KEY_3: #endif case KEY_PRINT_SCREEN: save_screen_shot(0); - break; + return 1; case KEY_CTRLED+KEY_D: menu->items[menu->citem].value = 255; - break; + return 1; case KEY_CTRLED+KEY_R: if ( menu->items==kc_keyboard ) for (i=0; iitems==kc_d1x ) for(i=0;iitems[i].value=DefaultKeySettingsD1X[i]; - break; + return 1; case KEY_DELETE: menu->items[menu->citem].value=255; - break; + return 1; case KEY_UP: case KEY_PAD8: #ifdef TABLE_CREATION if (menu->items[menu->citem].u==-1) menu->items[menu->citem].u=find_next_item_up( menu->items,menu->nitems, menu->citem); #endif menu->citem = menu->items[menu->citem].u; - break; + return 1; case KEY_DOWN: case KEY_PAD2: #ifdef TABLE_CREATION if (menu->items[menu->citem].d==-1) menu->items[menu->citem].d=find_next_item_down( menu->items,menu->nitems, menu->citem); #endif menu->citem = menu->items[menu->citem].d; - break; + return 1; case KEY_LEFT: case KEY_PAD4: #ifdef TABLE_CREATION if (menu->items[menu->citem].l==-1) menu->items[menu->citem].l=find_next_item_left( menu->items,menu->nitems, menu->citem); #endif menu->citem = menu->items[menu->citem].l; - break; + return 1; case KEY_RIGHT: case KEY_PAD6: #ifdef TABLE_CREATION if (menu->items[menu->citem].r==-1) menu->items[menu->citem].r=find_next_item_right( menu->items,menu->nitems, menu->citem); #endif menu->citem = menu->items[menu->citem].r; - break; + return 1; case KEY_ENTER: case KEY_PADENTER: kconfig_start_changing(menu); - break; + return 1; case -2: case KEY_ESC: - window_close(wind); + if (menu->changing) + menu->changing = 0; + else + window_close(wind); return 1; - break; #ifdef TABLE_CREATION case KEY_F12: { FILE * fp; @@ -806,13 +780,12 @@ int kconfig_idle(window *wind, kc_menu *menu) fclose(fp); } - break; + return 1; #endif case 0: // some other event break; default: - return 0; break; } @@ -849,9 +822,33 @@ int kconfig_handler(window *wind, d_event *event, kc_menu *menu) menu->mouse_state = (event->type == EVENT_MOUSE_BUTTON_DOWN); return kconfig_mouse(wind, event, menu); + case EVENT_KEY_COMMAND: + return kconfig_key_command(wind, event, menu); + case EVENT_IDLE: kconfig_mouse(wind, event, menu); - return kconfig_idle(wind, menu); + + if (menu->changing) + timer_delay(f0_1/10); + else + timer_delay2(50); + + //see if redbook song needs to be restarted + RBACheckFinishedHook(); + + if (menu->changing) + { + switch( menu->items[menu->citem].type ) + { + case BT_KEY: kc_change_key( menu, &menu->items[menu->citem] ); break; + case BT_MOUSE_AXIS: kc_change_mouseaxis( menu, &menu->items[menu->citem] ); break; + case BT_JOY_BUTTON: kc_change_joybutton( menu, &menu->items[menu->citem] ); break; + case BT_JOY_AXIS: kc_change_joyaxis( menu, &menu->items[menu->citem] ); break; + } + + if (!menu->changing) + game_flush_inputs(); + } break; case EVENT_WINDOW_DRAW: diff --git a/main/net_ipx.c b/main/net_ipx.c index de4bf7572..6d3835033 100644 --- a/main/net_ipx.c +++ b/main/net_ipx.c @@ -3948,24 +3948,26 @@ static int show_game_rules_handler(window *wind, d_event *event, netgame_info *n game_flush_inputs(); break; + case EVENT_KEY_COMMAND: + k = ((d_event_keycommand *)event)->keycode; + switch (k) + { + case KEY_PRINT_SCREEN: + save_screen_shot(0); k = 0; + return 1; + case KEY_ENTER: + case KEY_SPACEBAR: + case KEY_ESC: + window_close(wind); + return 1; + } + break; + case EVENT_IDLE: timer_delay2(50); //see if redbook song needs to be restarted RBACheckFinishedHook(); - - k = key_inkey(); - switch( k ) { - case KEY_PRINT_SCREEN: - save_screen_shot(0); k = 0; - break; - case KEY_ENTER: - case KEY_SPACEBAR: - case KEY_ESC: - window_close(wind); - break; - } - return 0; break; case EVENT_WINDOW_DRAW: @@ -4024,16 +4026,11 @@ static int show_game_rules_handler(window *wind, d_event *event, netgame_info *n gr_set_current_canvas(NULL); break; - case EVENT_WINDOW_CLOSE: - return 0; // continue closing - break; - default: - return 0; break; } - return 1; + return 0; } void net_ipx_show_game_rules(netgame_info *netgame) diff --git a/main/net_udp.c b/main/net_udp.c index 2efc29578..896891555 100644 --- a/main/net_udp.c +++ b/main/net_udp.c @@ -312,160 +312,199 @@ int udp_receive_packet(int socknum, ubyte *text, int len, struct _sockaddr *send /* General UDP functions - END */ -// Connect to a game host and get full info. Eventually we join! -void net_udp_game_connect(struct _sockaddr HostAddr) +typedef struct manual_join { - fix start_time = 0, time = 0, last_time = 0; + struct _sockaddr host_addr; + int connecting; + fix start_time, last_time; + char addrbuf[128]; + char portbuf[6]; +} manual_join; - N_players = 0; - change_playernum_to(1); - start_time = timer_get_fixed_seconds(); - - memcpy((struct _sockaddr *)&Netgame.players[0].protocol.udp.addr, (struct _sockaddr *)&HostAddr, sizeof(struct _sockaddr)); +// Connect to a game host and get full info. Eventually we join! +int net_udp_game_connect(manual_join *mj) +{ + fix time = 0; // Get full game info so we can show it. - while (Netgame.protocol.udp.valid != 1) - { - time = timer_get_fixed_seconds(); - - // Cancel this with ESC - if (key_inkey()==KEY_ESC) - return; - // Timeout after 10 seconds - if (timer_get_fixed_seconds() >= start_time + (F1_0*10) || timer_get_fixed_seconds() < start_time) - { - nm_messagebox(TXT_ERROR,1,TXT_OK,"No response by host.\n\nPossible reasons:\n* No game on this IP (anymore)\n* Port of Host not open\n or different\n* Host uses a game version\n I do not understand"); - return; - } - - if (Netgame.protocol.udp.valid == -1) - { - nm_messagebox(TXT_ERROR,1,TXT_OK,"Version mismatch! Cannot join Game.\nHost game version: %i.%i.%i\nYour game version: %s",Netgame.protocol.udp.program_iver[0],Netgame.protocol.udp.program_iver[1],Netgame.protocol.udp.program_iver[2],VERSION); - return; - } - - if (time >= last_time + F1_0) - { - net_udp_request_game_info(HostAddr, 0); - last_time = time; - } - timer_delay2(5); - net_udp_listen(); + time = timer_get_fixed_seconds(); + + // Timeout after 10 seconds + if (timer_get_fixed_seconds() >= mj->start_time + (F1_0*10) || timer_get_fixed_seconds() < mj->start_time) + { + nm_messagebox(TXT_ERROR,1,TXT_OK,"No response by host.\n\nPossible reasons:\n* No game on this IP (anymore)\n* Port of Host not open\n or different\n* Host uses a game version\n I do not understand"); + mj->connecting = 0; + return 0; } - - if (!net_udp_show_game_info()) // show info menu and check if we join - return; - - Netgame.protocol.udp.valid = 0; - start_time = timer_get_fixed_seconds(); - - // Get full game info again as it could have changed since we entered the info menu. - while (Netgame.protocol.udp.valid != 1) + + if (Netgame.protocol.udp.valid == -1) { - time = timer_get_fixed_seconds(); + nm_messagebox(TXT_ERROR,1,TXT_OK,"Version mismatch! Cannot join Game.\nHost game version: %i.%i.%i\nYour game version: %s",Netgame.protocol.udp.program_iver[0],Netgame.protocol.udp.program_iver[1],Netgame.protocol.udp.program_iver[2],VERSION); + mj->connecting = 0; + return 0; + } + + if (time >= mj->last_time + F1_0) + { + net_udp_request_game_info(mj->host_addr, 0); + mj->last_time = time; + } + timer_delay2(5); + net_udp_listen(); - // Cancel this with ESC - if (key_inkey()==KEY_ESC) - return; + if (Netgame.protocol.udp.valid != 1) + return 0; // still trying to connect - // Timeout after 10 seconds - if (timer_get_fixed_seconds() >= start_time + (F1_0*10) || timer_get_fixed_seconds() < start_time) + if (mj->connecting == 1) + { + if (!net_udp_show_game_info()) // show info menu and check if we join { - nm_messagebox(TXT_ERROR,1,TXT_OK,"No response by host.\n\nPossible reasons:\n* No game on this IP (anymore)\n* Port of Host not open\n or different\n* Host uses a game version\n I do not understand"); - return; + mj->connecting = 0; + return 0; } - - if (time >= last_time + F1_0) + else { - net_udp_request_game_info(HostAddr, 0); - last_time = time; + // Get full game info again as it could have changed since we entered the info menu. + mj->connecting = 2; + Netgame.protocol.udp.valid = 0; + mj->start_time = timer_get_fixed_seconds(); + + return 0; } - timer_delay2(5); - net_udp_listen(); } - net_udp_do_join_game(); + if (net_udp_do_join_game()) + { + mj->connecting = 0; + return 1; // Success! + } + + return 0; +} + +static char *connecting_txt = "Connecting..."; +static char *blank = ""; + +static int manual_join_game_handler(newmenu *menu, d_event *event, manual_join *mj) +{ + newmenu_item *items = newmenu_get_items(menu); + + switch (event->type) + { + case EVENT_KEY_COMMAND: + if (mj->connecting && ((d_event_keycommand *)event)->keycode == KEY_ESC) + { + mj->connecting = 0; + items[6].text = blank; + return 1; + } + break; + + case EVENT_IDLE: + if (mj->connecting) + { + if (net_udp_game_connect(mj)) + return -2; // Success! (Keep this menu in future) + else if (!mj->connecting) + items[6].text = blank; + } + break; + + case EVENT_NEWMENU_SELECTED: + { + int sockres = -1; + + if ((atoi(UDP_MyPort)) < 0 ||(atoi(UDP_MyPort)) > 65535) + { + snprintf (UDP_MyPort, sizeof(UDP_MyPort), "%d", UDP_PORT_DEFAULT); + nm_messagebox(TXT_ERROR, 1, TXT_OK, "Illegal port"); + return 1; + } + + sockres = udp_open_socket(0, atoi(UDP_MyPort)); + + if (sockres != 0) + { + return 1; + } + + // Resolve address + if (udp_dns_filladdr(mj->addrbuf, atoi(mj->portbuf), &mj->host_addr) < 0) + { + nm_messagebox(TXT_ERROR, 1, TXT_OK, "Could not resolve Address!"); + return 1; + } + else + { + N_players = 0; + change_playernum_to(1); + mj->start_time = timer_get_fixed_seconds(); + mj->last_time = 0; + + memcpy((struct _sockaddr *)&Netgame.players[0].protocol.udp.addr, (struct _sockaddr *)&mj->host_addr, sizeof(struct _sockaddr)); + + mj->connecting = 1; + items[6].text = connecting_txt; + return 1; + } + + break; + } + + case EVENT_WINDOW_CLOSE: + d_free(mj); + break; + + default: + break; + } + + return 0; } void net_udp_manual_join_game() { - struct _sockaddr HostAddr; - newmenu_item m[6]; - int choice = 0, nitems = 0; - int old_game_mode; - char addrbuf[128]=""; - char portbuf[6]=""; + manual_join *mj; + newmenu_item m[7]; + int nitems = 0; - // FIXME: Keep IP window to go back to + MALLOC(mj, manual_join, 1); + if (!mj) + return; + mj->connecting = 0; + mj->addrbuf[0] = '\0'; + mj->portbuf[0] = '\0'; + + // FIXME: Keep manual join window to go back to //setjmp(LeaveGame); net_udp_init(); - memset(&addrbuf,'\0', sizeof(char)*128); - snprintf(addrbuf, sizeof(char)*(strlen(GameArg.MplUdpHostAddr)+1), "%s", GameArg.MplUdpHostAddr); + memset(&mj->addrbuf,'\0', sizeof(char)*128); + snprintf(mj->addrbuf, sizeof(char)*(strlen(GameArg.MplUdpHostAddr)+1), "%s", GameArg.MplUdpHostAddr); if (GameArg.MplUdpHostPort != 0) - snprintf(portbuf, sizeof(portbuf), "%d", GameArg.MplUdpHostPort); + snprintf(mj->portbuf, sizeof(mj->portbuf), "%d", GameArg.MplUdpHostPort); else - snprintf(portbuf, sizeof(portbuf), "%d", UDP_PORT_DEFAULT); + snprintf(mj->portbuf, sizeof(mj->portbuf), "%d", UDP_PORT_DEFAULT); if (GameArg.MplUdpMyPort != 0) snprintf (UDP_MyPort, sizeof(UDP_MyPort), "%d", GameArg.MplUdpMyPort); else snprintf (UDP_MyPort, sizeof(UDP_MyPort), "%d", UDP_PORT_DEFAULT); - do { - old_game_mode = Game_mode; - nitems = 0; - - m[nitems].type = NM_TYPE_TEXT; m[nitems].text="GAME ADDRESS OR HOSTNAME:"; nitems++; - m[nitems].type = NM_TYPE_INPUT; m[nitems].text=addrbuf; m[nitems].text_len=128; nitems++; - m[nitems].type = NM_TYPE_TEXT; m[nitems].text="GAME PORT:"; nitems++; - m[nitems].type = NM_TYPE_INPUT; m[nitems].text=portbuf; m[nitems].text_len=5; nitems++; - m[nitems].type = NM_TYPE_TEXT; m[nitems].text="MY PORT:"; nitems++; - m[nitems].type = NM_TYPE_INPUT; m[nitems].text=UDP_MyPort; m[nitems].text_len=5; nitems++; + nitems = 0; + + m[nitems].type = NM_TYPE_TEXT; m[nitems].text="GAME ADDRESS OR HOSTNAME:"; nitems++; + m[nitems].type = NM_TYPE_INPUT; m[nitems].text=mj->addrbuf; m[nitems].text_len=128; nitems++; + m[nitems].type = NM_TYPE_TEXT; m[nitems].text="GAME PORT:"; nitems++; + m[nitems].type = NM_TYPE_INPUT; m[nitems].text=mj->portbuf; m[nitems].text_len=5; nitems++; + m[nitems].type = NM_TYPE_TEXT; m[nitems].text="MY PORT:"; nitems++; + m[nitems].type = NM_TYPE_INPUT; m[nitems].text=UDP_MyPort; m[nitems].text_len=5; nitems++; + m[nitems].type = NM_TYPE_TEXT; m[nitems].text=blank; nitems++; // for connecting_txt - choice = newmenu_do1( NULL, "ENTER GAME ADDRESS", nitems, m, NULL, NULL, choice ); - - if ( choice > -1 ) - { - int sockres = -1; - - if ((atoi(UDP_MyPort)) < 0 ||(atoi(UDP_MyPort)) > 65535) - { - snprintf (UDP_MyPort, sizeof(UDP_MyPort), "%d", UDP_PORT_DEFAULT); - nm_messagebox(TXT_ERROR, 1, TXT_OK, "Illegal port"); - choice = 0; - continue; - } - - sockres = udp_open_socket(0, atoi(UDP_MyPort)); - - if (sockres != 0) - { - choice = 0; - continue; - } - - // Resolve address - if (udp_dns_filladdr(addrbuf, atoi(portbuf), &HostAddr) < 0) - { - nm_messagebox(TXT_ERROR, 1, TXT_OK, "Could not resolve Address!"); - choice = 0; - continue; - } - else - { - net_udp_game_connect(HostAddr); - } - } - - if (old_game_mode != Game_mode) - { - break; // leave menu - } - } while( choice > -1 ); + newmenu_do1( NULL, "ENTER GAME ADDRESS", nitems, m, (int (*)(newmenu *, d_event *, void *))manual_join_game_handler, mj, 0 ); } void net_udp_send_sequence_packet(UDP_sequence_packet seq, struct _sockaddr recv_addr) @@ -4252,24 +4291,26 @@ static int show_game_rules_handler(window *wind, d_event *event, netgame_info *n game_flush_inputs(); break; + case EVENT_KEY_COMMAND: + k = ((d_event_keycommand *)event)->keycode; + switch (k) + { + case KEY_PRINT_SCREEN: + save_screen_shot(0); k = 0; + return 1; + case KEY_ENTER: + case KEY_SPACEBAR: + case KEY_ESC: + window_close(wind); + return 1; + } + break; + case EVENT_IDLE: timer_delay2(50); //see if redbook song needs to be restarted RBACheckFinishedHook(); - - k = key_inkey(); - switch( k ) { - case KEY_PRINT_SCREEN: - save_screen_shot(0); k = 0; - break; - case KEY_ENTER: - case KEY_SPACEBAR: - case KEY_ESC: - window_close(wind); - break; - } - return 0; break; case EVENT_WINDOW_DRAW: @@ -4328,16 +4369,11 @@ static int show_game_rules_handler(window *wind, d_event *event, netgame_info *n gr_set_current_canvas(NULL); break; - case EVENT_WINDOW_CLOSE: - return 0; // continue closing - break; - default: - return 0; break; } - return 1; + return 0; } void net_udp_show_game_rules(netgame_info *netgame) diff --git a/main/newmenu.c b/main/newmenu.c index 1578d09c5..370fa4268 100644 --- a/main/newmenu.c +++ b/main/newmenu.c @@ -512,7 +512,7 @@ int newmenu_dotiny( char * title, char * subtitle, int nitems, newmenu_item * it int newmenu_do1( char * title, char * subtitle, int nitems, newmenu_item * item, int (*subfunction)(newmenu *menu, d_event *event, void *userdata), void *userdata, int citem ) { - return newmenu_do3( title, subtitle, nitems, item, subfunction, userdata, citem, userdata, -1, -1 ); + return newmenu_do3( title, subtitle, nitems, item, subfunction, userdata, citem, NULL, -1, -1 ); } diff --git a/main/scores.c b/main/scores.c index b4f5f49bc..7f99aa0e0 100644 --- a/main/scores.c +++ b/main/scores.c @@ -343,15 +343,15 @@ int scores_handler(window *wind, d_event *event, scores_menu *menu) window_close(wind); // then remove the old one } } - break; - case KEY_BACKSP: Int3(); k = 0; break; - case KEY_PRINT_SCREEN: save_screen_shot(0); k = 0; break; + return 1; + case KEY_BACKSP: Int3(); k = 0; return 1; + case KEY_PRINT_SCREEN: save_screen_shot(0); k = 0; return 1; case KEY_ENTER: case KEY_SPACEBAR: case KEY_ESC: window_close(wind); - break; + return 1; } break;