1 /* $Id: kmatrix.c,v 1.6 2003-10-11 09:28:38 btb Exp $ */
3 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
4 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
5 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
6 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
7 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
8 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
9 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
10 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
11 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
12 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
17 * Kill matrix displayed at end of level.
20 * Revision 1.6 1995/09/24 10:57:48 allender
21 * made any key move off of kill matrix screen as text indicates it should
23 * Revision 1.5 1995/08/18 08:33:05 allender
24 * fixed text problem with top level player names
26 * Revision 1.4 1995/07/26 17:03:05 allender
27 * sort of fixed spacing for mac
29 * Revision 1.3 1995/06/06 15:36:14 allender
30 * be sure to bitblt to screen inside of kmatrix loop
32 * Revision 1.2 1995/06/02 07:47:15 allender
33 * removed bogus include files
35 * Revision 1.1 1995/05/16 15:27:07 allender
38 * Revision 2.3 1995/05/02 17:01:22 john
39 * Fixed bug with kill list not showing up in VFX mode.
41 * Revision 2.2 1995/03/21 14:38:20 john
42 * Ifdef'd out the NETWORK code.
44 * Revision 2.1 1995/03/06 15:22:54 john
45 * New screen techniques.
47 * Revision 2.0 1995/02/27 11:25:56 john
48 * New version 2.0, which has no anonymous unions, builds with
49 * Watcom 10.0, and doesn't require parsing BITMAPS.TBL.
51 * Revision 1.19 1995/02/15 14:47:23 john
52 * Added code to keep track of kills during endlevel.
54 * Revision 1.18 1995/02/08 11:00:06 rob
55 * Moved string to localized file
57 * Revision 1.17 1995/02/01 23:45:55 rob
60 * Revision 1.16 1995/01/30 21:47:11 rob
61 * Added a line of instructions.
63 * Revision 1.15 1995/01/20 16:58:43 rob
64 * careless careless careless...
67 * Revision 1.14 1995/01/20 13:43:48 rob
68 * Longer time to view.
70 * Revision 1.13 1995/01/20 13:42:34 rob
73 * Revision 1.12 1995/01/19 17:35:21 rob
74 * Fixed coloration of player names in team mode.
76 * Revision 1.11 1995/01/16 21:26:15 rob
79 * Revision 1.10 1995/01/16 18:55:41 rob
80 * Added include of network.h
82 * Revision 1.9 1995/01/16 18:22:35 rob
83 * Fixed problem with signs.
85 * Revision 1.8 1995/01/12 16:07:51 rob
86 * ADded sorting before display.
88 * Revision 1.7 1995/01/04 08:46:53 rob
89 * JOHN CHECKED IN FOR ROB !!!
91 * Revision 1.6 1994/12/09 20:17:20 yuan
94 * Revision 1.5 1994/12/09 19:46:35 yuan
95 * Localized the sucker.
97 * Revision 1.4 1994/12/09 19:24:58 rob
98 * Yuan's fix to the centering.
100 * Revision 1.3 1994/12/09 19:02:37 yuan
103 * Revision 1.2 1994/12/09 16:19:46 yuan
106 * Revision 1.1 1994/12/09 15:08:58 yuan
126 #include "pa_enabl.h" //$$POLY_ACC
134 #include "gamefont.h"
140 #include "gamefont.h"
141 #include "cntrlcen.h"
153 #if defined(POLY_ACC)
154 #include "poly_acc.h"
157 #define CENTERING_OFFSET(x) ((300 - (70 + (x)*25 ))/2)
158 #define CENTERSCREEN (MenuHires?320:160)
160 int kmatrix_kills_changed = 0;
161 char ConditionLetters[]={' ','P','E','D','E','E','V','W'};
162 char WaitingForOthers=0;
164 int Kmatrix_nomovie_message=0;
166 extern char MaxPowerupsAllowed[],PowerupsInMine[];
168 void kmatrix_reactor (char *message);
169 void kmatrix_phallic ();
170 void kmatrix_redraw_coop();
172 #define LHX(x) ((x)*(MenuHires?2:1))
173 #define LHY(y) ((y)*(MenuHires?2.4:1))
175 void kmatrix_draw_item( int i, int *sorted )
182 // Print player name.
184 gr_printf( LHX(CENTERING_OFFSET(N_players)), y, "%s", Players[sorted[i]].callsign );
186 if (!((Game_mode & GM_MODEM) || (Game_mode & GM_SERIAL)))
187 gr_printf (LHX(CENTERING_OFFSET(N_players)-15),y,"%c",ConditionLetters[Players[sorted[i]].connected]);
189 for (j=0; j<N_players; j++) {
191 x = LHX(70 + CENTERING_OFFSET(N_players) + j*25);
193 if (sorted[i]==sorted[j]) {
194 if (kill_matrix[sorted[i]][sorted[j]] == 0) {
195 gr_set_fontcolor( BM_XRGB(10,10,10),-1 );
196 gr_printf( x, y, "%d", kill_matrix[sorted[i]][sorted[j]] );
198 gr_set_fontcolor( BM_XRGB(25,25,25),-1 );
199 gr_printf( x, y, "-%d", kill_matrix[sorted[i]][sorted[j]] );
202 if (kill_matrix[sorted[i]][sorted[j]] <= 0) {
203 gr_set_fontcolor( BM_XRGB(10,10,10),-1 );
204 gr_printf( x, y, "%d", kill_matrix[sorted[i]][sorted[j]] );
206 gr_set_fontcolor( BM_XRGB(25,25,25),-1 );
207 gr_printf( x, y, "%d", kill_matrix[sorted[i]][sorted[j]] );
213 if (Players[sorted[i]].net_killed_total+Players[sorted[i]].net_kills_total==0)
216 sprintf (temp,"%d%%",(int)((float)((float)Players[sorted[i]].net_kills_total/((float)Players[sorted[i]].net_killed_total+(float)Players[sorted[i]].net_kills_total))*100.0));
218 x = LHX(60 + CENTERING_OFFSET(N_players) + N_players*25);
219 gr_set_fontcolor( BM_XRGB(25,25,25),-1 );
220 gr_printf( x ,y,"%4d/%s",Players[sorted[i]].net_kills_total,temp);
223 void kmatrix_draw_coop_item( int i, int *sorted )
229 // Print player name.
231 gr_printf( LHX(CENTERING_OFFSET(N_players)), y, "%s", Players[sorted[i]].callsign );
232 gr_printf (LHX(CENTERING_OFFSET(N_players)-15),y,"%c",ConditionLetters[Players[sorted[i]].connected]);
237 gr_set_fontcolor( BM_XRGB(60,40,10),-1 );
238 gr_printf( x, y, "%d", Players[sorted[i]].score );
240 x = CENTERSCREEN+LHX(50);
242 gr_set_fontcolor( BM_XRGB(60,40,10),-1 );
243 gr_printf( x, y, "%d", Players[sorted[i]].net_killed_total);
247 void kmatrix_draw_names(int *sorted)
253 if (Kmatrix_nomovie_message)
255 gr_set_fontcolor( BM_XRGB(63,0,0),-1 );
256 gr_printf( CENTERSCREEN-LHX(40), LHY(20), "(Movie not played)");
259 for (j=0; j<N_players; j++) {
260 if (Game_mode & GM_TEAM)
261 color = get_team(sorted[j]);
265 x = LHX (70 + CENTERING_OFFSET(N_players) + j*25);
267 if (Players[sorted[j]].connected==0)
268 gr_set_fontcolor(gr_find_closest_color(31,31,31),-1);
270 gr_set_fontcolor(gr_getcolor(player_rgb[color].r,player_rgb[color].g,player_rgb[color].b),-1 );
272 gr_printf( x, LHY(40), "%c", Players[sorted[j]].callsign[0] );
276 x = LHX(72 + CENTERING_OFFSET(N_players) + N_players*25);
277 gr_set_fontcolor( BM_XRGB(31,31,31),-1 );
278 gr_printf( x, LHY(40), "K/E");
281 void kmatrix_draw_coop_names(int *sorted)
285 if (Kmatrix_nomovie_message)
287 gr_set_fontcolor( BM_XRGB(63,0,0),-1 );
288 gr_printf( CENTERSCREEN-LHX(40), LHY(20), "(Movie not played)");
291 gr_set_fontcolor( BM_XRGB(63,31,31),-1 );
292 gr_printf( CENTERSCREEN, LHY(40), "SCORE");
294 gr_set_fontcolor( BM_XRGB(63,31,31),-1 );
295 gr_printf( CENTERSCREEN+LHX(50), LHY(40), "DEATHS");
299 void kmatrix_draw_deaths(int *sorted)
302 char reactor_message[50];
306 y = LHY(55 + 72 + 35);
313 gr_set_fontcolor(gr_find_closest_color(63,20,0),-1);
314 gr_get_string_size("P-Playing E-Escaped D-Died", &sw, &sh, &aw);
316 if (!((Game_mode & GM_MODEM) || (Game_mode & GM_SERIAL)))
317 gr_printf( CENTERSCREEN-(sw/2), y,"P-Playing E-Escaped D-Died");
320 gr_get_string_size("V-Viewing scores W-Waiting", &sw, &sh, &aw);
322 if (!((Game_mode & GM_MODEM) || (Game_mode & GM_SERIAL)))
323 gr_printf( CENTERSCREEN-(sw/2), y,"V-Viewing scores W-Waiting");
331 gr_set_fontcolor(gr_find_closest_color(63,63,63),-1);
333 if (Players[Player_num].connected==7)
335 gr_get_string_size("Waiting for other players...",&sw, &sh, &aw);
336 gr_printf( CENTERSCREEN-(sw/2), y,"Waiting for other players...");
340 gr_get_string_size(TXT_PRESS_ANY_KEY2, &sw, &sh, &aw);
341 gr_printf( CENTERSCREEN-(sw/2), y, TXT_PRESS_ANY_KEY2);
345 if (Countdown_seconds_left <=0)
346 kmatrix_reactor(TXT_REACTOR_EXPLODED);
349 sprintf((char *)&reactor_message, "%s: %d %s ", TXT_TIME_REMAINING, Countdown_seconds_left, TXT_SECONDS);
350 kmatrix_reactor ((char *)&reactor_message);
353 if (Game_mode & GM_HOARD)
357 void kmatrix_draw_coop_deaths(int *sorted)
360 char reactor_message[50];
362 y = LHY(55 + N_players * 9);
364 // gr_set_fontcolor(gr_getcolor(player_rgb[j].r,player_rgb[j].g,player_rgb[j].b),-1 );
365 gr_set_fontcolor( BM_XRGB(31,31,31),-1 );
367 x = CENTERSCREEN+LHX(50);
368 gr_printf( x, y, TXT_DEATHS );
370 for (j=0; j<N_players; j++) {
371 x = CENTERSCREEN+LHX(50);
372 gr_printf( x, y, "%d", Players[sorted[j]].net_killed_total );
375 y = LHY(55 + 72 + 35);
382 gr_set_fontcolor(gr_find_closest_color(63,20,0),-1);
383 gr_get_string_size("P-Playing E-Escaped D-Died", &sw, &sh, &aw);
385 if (!((Game_mode & GM_MODEM) || (Game_mode & GM_SERIAL)))
386 gr_printf( CENTERSCREEN-(sw/2), y,"P-Playing E-Escaped D-Died");
390 gr_get_string_size("V-Viewing scores W-Waiting", &sw, &sh, &aw);
392 if (!((Game_mode & GM_MODEM) || (Game_mode & GM_SERIAL)))
393 gr_printf( CENTERSCREEN-(sw/2), y,"V-Viewing scores W-Waiting");
401 gr_set_fontcolor(gr_find_closest_color(63,63,63),-1);
403 if (Players[Player_num].connected==7)
405 gr_get_string_size("Waiting for other players...",&sw, &sh, &aw);
406 gr_printf( CENTERSCREEN-(sw/2), y,"Waiting for other players...");
410 gr_get_string_size(TXT_PRESS_ANY_KEY2, &sw, &sh, &aw);
411 gr_printf( CENTERSCREEN-(sw/2), y, TXT_PRESS_ANY_KEY2);
415 if (Countdown_seconds_left <=0)
416 kmatrix_reactor(TXT_REACTOR_EXPLODED);
419 sprintf((char *)&reactor_message, "%s: %d %s ", TXT_TIME_REMAINING, Countdown_seconds_left, TXT_SECONDS);
420 kmatrix_reactor ((char *)&reactor_message);
425 void kmatrix_reactor (char *message)
427 static char oldmessage[50]={0};
430 if ((Game_mode & GM_MODEM) || (Game_mode & GM_SERIAL))
433 grd_curcanv->cv_font = SMALL_FONT;
435 if (oldmessage[0]!=0)
437 gr_set_fontcolor(gr_find_closest_color(0,0,0),-1);
438 gr_get_string_size(oldmessage, &sw, &sh, &aw);
439 // gr_printf( CENTERSCREEN-(sw/2), LHY(55+72+12), oldmessage);
441 gr_set_fontcolor(gr_find_closest_color(0,32,63),-1);
442 gr_get_string_size(message, &sw, &sh, &aw);
443 gr_printf( CENTERSCREEN-(sw/2), LHY(55+72+12), message);
445 strcpy ((char *)&oldmessage,message);
448 extern int PhallicLimit,PhallicMan;
450 void kmatrix_phallic ()
455 if (!(Game_mode & GM_HOARD))
458 if ((Game_mode & GM_MODEM) || (Game_mode & GM_SERIAL))
462 strcpy (message,"There was no record set for this level.");
464 sprintf (message,"%s had the best record at %d points.",Players[PhallicMan].callsign,PhallicLimit);
466 grd_curcanv->cv_font = SMALL_FONT;
467 gr_set_fontcolor(gr_find_closest_color(63,63,63),-1);
468 gr_get_string_size(message, &sw, &sh, &aw);
469 gr_printf( CENTERSCREEN-(sw/2), LHY(55+72+3), message);
473 void load_stars(void);
475 WINDOS(dd_grs_canvas *StarBackCanvas,
476 grs_canvas *StarBackCanvas
480 void kmatrix_redraw()
483 int sorted[MAX_NUM_NET_PLAYERS];
485 dd_grs_canvas *tempcanvas,
486 grs_canvas *tempcanvas
489 if (Game_mode & GM_MULTI_COOP)
491 kmatrix_redraw_coop();
495 multi_sort_kill_list();
498 tempcanvas=dd_gr_create_canvas( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h ),
499 tempcanvas=gr_create_canvas( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h )
503 dd_gr_set_current_canvas(tempcanvas),
504 gr_set_current_canvas (tempcanvas)
508 dd_gr_blt_notrans(StarBackCanvas, 0,0,0,0, tempcanvas,0,0,0,0),
509 gr_bitmap (0,0,&StarBackCanvas->cv_bitmap)
512 WIN(DDGRLOCK(dd_grd_curcanv));
513 grd_curcanv->cv_font = MEDIUM3_FONT;
515 gr_string( 0x8000, LHY(10), TXT_KILL_MATRIX_TITLE );
517 grd_curcanv->cv_font = SMALL_FONT;
519 multi_get_kill_list(sorted);
521 kmatrix_draw_names(sorted);
523 for (i=0; i<N_players; i++ ) {
524 // mprintf((0, "Sorted kill list pos %d = %d.\n", i+1, sorted[i]));
526 if (Game_mode & GM_TEAM)
527 color = get_team(sorted[i]);
531 if (Players[sorted[i]].connected==0)
532 gr_set_fontcolor(gr_find_closest_color(31,31,31),-1);
534 gr_set_fontcolor(gr_getcolor(player_rgb[color].r,player_rgb[color].g,player_rgb[color].b),-1 );
536 kmatrix_draw_item( i, sorted );
539 kmatrix_draw_deaths(sorted);
540 WIN(DDGRUNLOCK(dd_grd_curcanv));
543 dd_gr_set_current_canvas(NULL),
544 gr_set_current_canvas(NULL)
547 #if defined(POLY_ACC)
549 pa_update_clut(gr_palette, 0, 256, 0);
552 PA_DFX (pa_set_frontbuffer_current());
555 dd_gr_blt_notrans(tempcanvas, 0,0,0,0, dd_grd_curcanv, 0,0,0,0),
556 gr_bitmap (0,0,&tempcanvas->cv_bitmap)
559 PA_DFX (pa_set_backbuffer_current());
561 #if defined(POLY_ACC)
565 gr_palette_load(gr_palette);
567 dd_gr_free_canvas(tempcanvas),
568 gr_free_canvas (tempcanvas)
572 void kmatrix_redraw_coop()
575 int sorted[MAX_NUM_NET_PLAYERS];
578 dd_grs_canvas *tempcanvas,
579 grs_canvas *tempcanvas
582 multi_sort_kill_list();
585 tempcanvas=dd_gr_create_canvas( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h ),
586 tempcanvas=gr_create_canvas( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h )
589 dd_gr_set_current_canvas(tempcanvas),
590 gr_set_current_canvas (tempcanvas)
594 dd_gr_blt_notrans(StarBackCanvas, 0,0,0,0, tempcanvas,0,0,0,0),
595 gr_bitmap (0,0,&StarBackCanvas->cv_bitmap)
600 WIN(DDGRLOCK(dd_grd_curcanv));
601 grd_curcanv->cv_font = MEDIUM3_FONT;
602 gr_string( 0x8000, LHY(10), "COOPERATIVE SUMMARY" );
604 grd_curcanv->cv_font = SMALL_FONT;
606 multi_get_kill_list(sorted);
608 kmatrix_draw_coop_names(sorted);
610 for (i=0; i<N_players; i++ ) {
614 if (Players[sorted[i]].connected==0)
615 gr_set_fontcolor(gr_find_closest_color(31,31,31),-1);
617 gr_set_fontcolor(gr_getcolor(player_rgb[color].r,player_rgb[color].g,player_rgb[color].b),-1 );
619 kmatrix_draw_coop_item( i, sorted );
622 kmatrix_draw_deaths(sorted);
623 WIN(DDGRUNLOCK(dd_grd_curcanv));
626 dd_gr_set_current_canvas(NULL),
627 gr_set_current_canvas(NULL)
630 #if defined(POLY_ACC)
632 pa_update_clut(gr_palette, 0, 256, 0);
635 PA_DFX (pa_set_frontbuffer_current());
638 dd_gr_blt_notrans(tempcanvas, 0,0,0,0, dd_grd_curcanv, 0,0,0,0),
639 gr_bitmap (0,0,&tempcanvas->cv_bitmap)
642 PA_DFX (pa_set_backbuffer_current());
644 #if defined(POLY_ACC)
648 gr_palette_load(gr_palette);
650 dd_gr_free_canvas(tempcanvas),
651 gr_free_canvas (tempcanvas)
655 #define MAX_VIEW_TIME F1_0*15
656 #define ENDLEVEL_IDLE_TIME F1_0*10
658 fix StartAbortMenuTime;
662 extern void load_stars_palette();
665 extern void network_endlevel_poll3( int nitems, struct newmenu_item * menus, int * key, int citem );
667 void kmatrix_view(int network)
669 int i, k, done,choice;
670 fix entry_time = timer_get_approx_seconds();
672 int oldstates[MAX_PLAYERS];
673 int previous_seconds_left=-1;
674 int num_ready,num_escaped;
676 network=Game_mode & GM_NETWORK;
678 for (i=0;i<MAX_NUM_NET_PLAYERS;i++)
679 digi_kill_sound_linked_to_object (Players[i].objnum);
681 set_screen_mode( SCREEN_MENU );
684 StarBackCanvas=dd_gr_create_canvas( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h ),
685 StarBackCanvas=gr_create_canvas( grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h )
688 dd_gr_set_current_canvas(StarBackCanvas),
689 gr_set_current_canvas(StarBackCanvas)
692 if (virtual_memory_on) {
693 load_stars_palette(); // horrible hack to prevent too much paging when doing endlevel syncing
694 gr_clear_canvas( BM_XRGB(0, 0, 0) );
696 #endif // note link to above if/else pair
702 //@@gr_palette_fade_in( gr_palette,32, 0);
707 for (i=0;i<N_players;i++)
708 oldstates[i]=Players[i].connected;
711 network_endlevel(&key);
717 DoMessageStuff(&msg);
723 kmatrix_kills_changed = 0;
725 if (joy_get_button_down_cnt(i)>0)
729 if (Current_level_num==8)
731 Players[Player_num].connected=0;
733 network_send_endlevel_packet();
735 dd_gr_free_canvas(StarBackCanvas),
736 gr_free_canvas (StarBackCanvas)
739 Kmatrix_nomovie_message=0;
740 longjmp(LeaveGame, 0);
745 Players[Player_num].connected=7;
747 network_send_endlevel_packet();
751 if (mouse_button_down_count(i)>0)
755 if (Current_level_num==8)
757 Players[Player_num].connected=0;
759 network_send_endlevel_packet();
761 dd_gr_free_canvas(StarBackCanvas),
762 gr_free_canvas (StarBackCanvas)
765 Kmatrix_nomovie_message=0;
766 longjmp(LeaveGame, 0);
770 Players[Player_num].connected=7;
772 network_send_endlevel_packet();
776 //see if redbook song needs to be restarted
777 songs_check_redbook_repeat();
783 if ((Game_mode & GM_SERIAL) || (Game_mode & GM_MODEM))
791 if (Current_level_num==8)
793 Players[Player_num].connected=0;
795 network_send_endlevel_packet();
797 dd_gr_free_canvas(StarBackCanvas),
798 gr_free_canvas (StarBackCanvas)
801 Kmatrix_nomovie_message=0;
802 longjmp(LeaveGame, 0);
807 Players[Player_num].connected=7;
809 network_send_endlevel_packet();
812 if (Game_mode & GM_NETWORK)
814 StartAbortMenuTime=timer_get_approx_seconds();
815 choice=nm_messagebox1( NULL,network_endlevel_poll3, 2, TXT_YES, TXT_NO, TXT_ABORT_GAME );
818 choice=nm_messagebox( NULL, 2, TXT_YES, TXT_NO, TXT_ABORT_GAME );
821 Players[Player_num].connected=0;
823 network_send_endlevel_packet();
825 dd_gr_free_canvas(StarBackCanvas),
826 gr_free_canvas (StarBackCanvas)
829 Kmatrix_nomovie_message=0;
830 longjmp(LeaveGame, 0);
834 kmatrix_kills_changed=1;
838 case KEY_PRINT_SCREEN:
847 if (timer_get_approx_seconds() >= (entry_time+MAX_VIEW_TIME) && Players[Player_num].connected!=7)
851 if (Current_level_num==8)
853 Players[Player_num].connected=0;
855 network_send_endlevel_packet();
857 dd_gr_free_canvas(StarBackCanvas),
858 gr_free_canvas (StarBackCanvas)
861 Kmatrix_nomovie_message=0;
862 longjmp(LeaveGame, 0);
867 if ((Game_mode & GM_SERIAL) || (Game_mode & GM_MODEM))
872 Players[Player_num].connected=7;
874 network_send_endlevel_packet();
877 if (network && (Game_mode & GM_NETWORK))
879 network_endlevel_poll2(0, NULL, &key, 0);
881 for (num_escaped=0,num_ready=0,i=0;i<N_players;i++)
883 if (Players[i].connected && i!=Player_num)
885 // Check timeout for idle players
886 if (timer_get_approx_seconds() > LastPacketTime[i]+ENDLEVEL_IDLE_TIME)
888 mprintf((0, "idle timeout for player %d.\n", i));
889 Players[i].connected = 0;
890 network_send_endlevel_sub(i);
894 if (Players[i].connected!=oldstates[i])
896 if (ConditionLetters[Players[i].connected]!=ConditionLetters[oldstates[i]])
897 kmatrix_kills_changed=1;
898 oldstates[i]=Players[i].connected;
899 network_send_endlevel_packet();
901 if (Players[i].connected==0 || Players[i].connected==7)
904 if (Players[i].connected!=1)
908 if (num_ready>=N_players)
910 if (num_escaped>=N_players)
911 Countdown_seconds_left=-1;
913 if (previous_seconds_left != Countdown_seconds_left)
915 previous_seconds_left=Countdown_seconds_left;
916 kmatrix_kills_changed=1;
919 if ( kmatrix_kills_changed )
922 kmatrix_kills_changed=0;
928 Players[Player_num].connected=7;
931 network_send_endlevel_packet(); // make sure
934 // Restore background and exit
935 gr_palette_fade_out( gr_palette, 32, 0 );
940 dd_gr_free_canvas(StarBackCanvas),
941 gr_free_canvas (StarBackCanvas)
944 Kmatrix_nomovie_message=0;