//returns number of item chosen int DoMenu() { int menu_choice[25]; newmenu_item m[25]; int num_options = 0; if ( Players[Player_num].callsign[0]==0 ) { RegisterPlayer(); return 0; } if ((Game_mode & GM_SERIAL) || (Game_mode & GM_MODEM)) { do_option(MENU_START_SERIAL); return 0; } create_main_menu(m, menu_choice, &num_options); do { keyd_time_when_last_pressed = timer_get_fixed_seconds(); // .. 20 seconds from now! if (main_menu_choice < 0 ) main_menu_choice = 0; Menu_draw_copyright = 1; main_menu_choice = newmenu_do2( "", NULL, num_options, m, autodemo_menu_check, main_menu_choice, Menu_pcx_name); if ( main_menu_choice > -1 ) do_option(menu_choice[main_menu_choice]); create_main_menu(m, menu_choice, &num_options); // may have to change, eg, maybe selected pilot and no save games. } while( Function_mode==FMODE_MENU ); // if (main_menu_choice != -2) // do_auto_demo = 0; // No more auto demos if ( Function_mode==FMODE_GAME ) gr_palette_fade_out( gr_palette, 32, 0 ); return main_menu_choice; }
void died_in_mine_message(void) { // Tell the player he died in the mine, explain why int old_fmode, pcx_error; grs_bitmap bmp; grs_point scale_pts[] = FULLSCREEN_SCALE_PTS; if (Game_mode & GM_MULTI) return; gr_palette_fade_out(gr_palette, 32, 0); gr_set_current_canvas(NULL); bmp.bm_data = NULL; pcx_error = pcx_read_bitmap("STARS.PCX",&bmp,BM_LINEAR,NULL); Assert(pcx_error == PCX_ERROR_NONE); scale_bitmap(&bmp, scale_pts); free(bmp.bm_data); old_fmode = Function_mode; Function_mode = FMODE_MENU; nm_messagebox(NULL, 1, TXT_OK, TXT_DIED_IN_MINE); Function_mode = old_fmode; }
void gr_restore_mode() { int i; //gr_set_text_25(); #ifndef NOGRAPH gr_palette_fade_out( gr_palette, 32, 0 ); gr_palette_set_gamma(0); if ( gr_saved_screen.video_mode == 3 ) { switch( gr_saved_screen.height ) { case 43: gr_set_text_43(); break; case 50: gr_set_text_50(); break; default: gr_set_text_25(); break; } } else { gr_set_misc_mode(gr_saved_screen.video_mode); } if (gr_saved_screen.is_graphics==0) { gr_sync_display(); gr_sync_display(); gr_palette_read( gr_pal_default ); gr_palette_clear(); for (i=0; i < gr_saved_screen.width*gr_saved_screen.height; i++ ) pTextMemory[i]=gr_saved_screen.video_memory[i]; gr_setcursor( gr_saved_screen.cursor_x, gr_saved_screen.cursor_y, gr_saved_screen.cursor_sline, gr_saved_screen.cursor_eline ); gr_palette_faded_out = 1; gr_palette_fade_in( gr_pal_default, 32, 0 ); } #endif }
//returns number of item chosen int DoMenu() { int menu_choice[25]; newmenu_item m[25]; int num_options = 0; if ( Players[Player_num].callsign[0]==0 ) { RegisterPlayer(); return 0; } if ((Game_mode & GM_SERIAL) || (Game_mode & GM_MODEM)) { do_option(MENU_START_SERIAL); return 0; } create_main_menu(m, menu_choice, &num_options); do { keyd_time_when_last_pressed = timer_get_fixed_seconds(); // .. 20 seconds from now! if (main_menu_choice < 0 ) main_menu_choice = 0; Menu_draw_copyright = 1; //added on 11/19/98 by Victor Rachels to add immediate join/start if(start_net_immediately == 1){ if ( gr_palette_faded_out ) {//fix black screen with -startnetgame gr_palette_fade_in( gr_palette, 32, 0 ); } do_option(MENU_START_NETGAME); start_net_immediately = 0; } else if(start_net_immediately == 2) { do_option(MENU_JOIN_NETGAME); start_net_immediately = 0; } else { //end this section addition - VR extern int Menu_Special; Menu_Special = 1; main_menu_choice = newmenu_do2(NULL, NULL, num_options, m, autodemo_menu_check, main_menu_choice, Menu_pcx_name); if ( main_menu_choice > -1 ) do_option(menu_choice[main_menu_choice]); } create_main_menu(m, menu_choice, &num_options); // may have to change, eg, maybe selected pilot and no save games. } while( Function_mode==FMODE_MENU ); // if (main_menu_choice != -2) // do_auto_demo = 0; // No more auto demos if ( Function_mode==FMODE_GAME ) gr_palette_fade_out( gr_palette, 32, 0 ); return main_menu_choice; }
stop_endlevel_sequence() { Interpolation_method = 0; gr_palette_fade_out(gr_palette, 32, 0); select_cockpit(cockpit_mode_save); Endlevel_sequence = EL_OFF; PlayerFinishedLevel(0); }
int show_title_screen( char * filename, int allow_keys ) { fix timer; int pcx_error; grs_bitmap title_bm; gr_init_bitmap_data (&title_bm); if ((pcx_error=pcx_read_bitmap( filename, &title_bm, BM_LINEAR, New_pal ))!=PCX_ERROR_NONE) { printf( "File '%s', PCX load error: %s (%i)\n (No big deal, just no title screen.)\n",filename, pcx_errormsg(pcx_error), pcx_error); mprintf((0, "File '%s', PCX load error: %s (%i)\n (No big deal, just no title screen.)\n",filename, pcx_errormsg(pcx_error), pcx_error)); Int3(); gr_free_bitmap_data (&title_bm); return 0; } // vfx_set_palette_sub( New_pal ); #ifdef OGL gr_palette_load(New_pal); #else gr_palette_clear(); #endif gr_set_current_canvas( NULL ); show_fullscr(&title_bm); //added on 9/13/98 by adb to make update-needing arch's work gr_update(); //end addition - adb gr_free_bitmap_data (&title_bm); if (allow_keys > 2 || gr_palette_fade_in( New_pal, 32, allow_keys ) || allow_keys > 1) { return 1; } gr_palette_load( New_pal ); timer = timer_get_fixed_seconds() + i2f(3); while (1) { if ( local_key_inkey() && allow_keys ) break; if ( timer_get_fixed_seconds() > timer ) break; } if (gr_palette_fade_out( New_pal, 32, allow_keys )) return 1; return 0; }
void do_new_game_menu() { int new_level_num,player_highest_level; #ifndef SHAREWARE int n_missions = build_mission_list(0); if (n_missions > 1) { int new_mission_num,i, default_mission; char * m[MAX_MISSIONS]; default_mission = 0; for (i=0;i<n_missions;i++) { m[i] = Mission_list[i].mission_name; if ( !strcasecmp( m[i], config_last_mission ) ) default_mission = i; } new_mission_num = newmenu_listbox1( "New Game\n\nSelect mission", n_missions, m, 1, default_mission, NULL ); if (new_mission_num == -1) return; //abort! strcpy(config_last_mission, m[new_mission_num] ); if (!load_mission(new_mission_num)) { nm_messagebox( NULL, 1, TXT_OK, "Error in Mission file"); return; } } #endif new_level_num = 1; player_highest_level = get_highest_level(); if (player_highest_level > Last_level) player_highest_level = Last_level; if (player_highest_level > 1) { newmenu_item m[2]; char info_text[80]; char num_text[10]; int choice; try_again: sprintf(info_text,"%s %d",TXT_START_ANY_LEVEL, player_highest_level); m[0].type=NM_TYPE_TEXT; m[0].text = info_text; m[1].type=NM_TYPE_INPUT; m[1].text_len = 10; m[1].text = num_text; strcpy(num_text,"1"); choice = newmenu_do( NULL, TXT_SELECT_START_LEV, 2, m, NULL ); if (choice==-1 || m[1].text[0]==0) return; new_level_num = atoi(m[1].text); if (!(new_level_num>0 && new_level_num<=player_highest_level)) { m[0].text = TXT_ENTER_TO_CONT; nm_messagebox( NULL, 1, TXT_OK, TXT_INVALID_LEVEL); goto try_again; } } Difficulty_level = Player_default_difficulty; if (!do_difficulty_menu()) return; gr_palette_fade_out( gr_palette, 32, 0 ); #ifdef PSX_BUILD_TOOLS { int i; for (i=Last_secret_level; i<=Last_level; i++ ) { if ( i!=0 ) StartNewGame(i); } } #endif StartNewGame(new_level_num); }
//returns flag, true means quit menu void do_option ( int select) { switch (select) { case MENU_NEW_GAME: do_new_game_menu(); break; case MENU_GAME: break; case MENU_DEMO_PLAY: { char demo_file[16]; if (newmenu_get_filename( TXT_SELECT_DEMO, "*.dem", demo_file, 1 )) { newdemo_start_playback(demo_file); } } break; case MENU_LOAD_GAME: #ifdef SHAREWARE do_load_game_menu(); #else state_restore_all(0); #endif break; #ifdef EDITOR case MENU_EDITOR: Function_mode = FMODE_EDITOR; init_cockpit(); break; #endif case MENU_VIEW_SCORES: gr_palette_fade_out( gr_palette,32,0 ); scores_view(-1); break; #ifdef SHAREWARE case MENU_ORDER_INFO: show_order_form(); break; #endif case MENU_QUIT: #ifdef EDITOR if (! SafetyCheck()) break; #endif gr_palette_fade_out( gr_palette,32,0); Function_mode = FMODE_EXIT; break; case MENU_NEW_PLAYER: RegisterPlayer(); //1 == allow escape out of menu break; case MENU_HELP: do_show_help(); break; #ifndef RELEASE case MENU_PLAY_SONG: { int i; char * m[MAX_SONGS]; for (i=0;i<MAX_SONGS;i++) { m[i] = Songs[i].filename; } i = newmenu_listbox( "Select Song", MAX_SONGS, m, 1, NULL ); if ( i > -1 ) { songs_play_song( i, 0 ); } } break; case MENU_LOAD_LEVEL: { newmenu_item m; char text[10]=""; int new_level_num; m.type=NM_TYPE_INPUT; m.text_len = 10; m.text = text; newmenu_do( NULL, "Enter level to load", 1, &m, NULL ); new_level_num = atoi(m.text); if (new_level_num!=0 && new_level_num>=Last_secret_level && new_level_num<=Last_level) { gr_palette_fade_out( gr_palette, 32, 0 ); StartNewGame(new_level_num); } break; } #endif case MENU_START_NETGAME: #ifdef NETWORK //temp! #ifndef SHAREWARE load_mission(0); #endif read_player_file(); network_start_game(); #endif break; case MENU_JOIN_NETGAME: //temp! #ifdef NETWORK #ifndef SHAREWARE load_mission(0); #endif read_player_file(); network_join_game(); #endif break; #ifdef NETWORK case MENU_IPX_MULTIPLAYER: do_ipx_multi_player_menu(); break; case MENU_KALI_MULTIPLAYER: do_kali_multi_player_menu(); break; #ifdef SUPPORTS_NET_IP case MENU_IP_MULTIPLAYER: do_ip_multi_player_menu(); break; case MENU_IP_SERV_CONNECT: do_ip_serv_connect_menu(); break; case MENU_MANUAL_IP_JOIN: do_ip_manual_join_menu(); break; #endif case MENU_START_SERIAL: com_main_menu(); break; case MENU_MULTIPLAYER: do_multi_player_menu(); break; #endif //NETWORK case MENU_CONFIG: do_options_menu(); break; case MENU_SHOW_CREDITS: gr_palette_fade_out( gr_palette,32,0); credits_show(); break; default: Error("Unknown option %d in do_option",select); break; } }
start_endlevel_sequence() { int last_segnum,exit_side,tunnel_length; if (Newdemo_state == ND_STATE_RECORDING) // stop demo recording Newdemo_state = ND_STATE_PAUSED; if (Newdemo_state == ND_STATE_PLAYBACK) // don't do this if in playback mode return; if (Player_is_dead || ConsoleObject->flags&OF_SHOULD_BE_DEAD) return; //don't start if dead! Players[Player_num].homing_object_dist = -F1_0; // Turn off homing sound. reset_rear_view(); //turn off rear view if set if (!endlevel_data_loaded) { #ifdef NETWORK if (Game_mode & GM_MULTI) { multi_send_endlevel_start(0); #ifdef NETWORK network_do_frame(1, 1); #endif } #endif gr_palette_fade_out(gr_palette, 32, 0); PlayerFinishedLevel(0); //don't do special sequence return; } { int segnum,old_segnum,entry_side,i; //count segments in exit tunnel old_segnum = ConsoleObject->segnum; exit_side = find_exit_side(ConsoleObject); segnum = Segments[old_segnum].children[exit_side]; tunnel_length = 0; do { entry_side = matt_find_connect_side(segnum,old_segnum); exit_side = Side_opposite[entry_side]; old_segnum = segnum; segnum = Segments[segnum].children[exit_side]; tunnel_length++; } while (segnum >= 0); if (segnum != -2) { PlayerFinishedLevel(0); //don't do special sequence return; } last_segnum = old_segnum; //now pick transition segnum 1/3 of the way in old_segnum = ConsoleObject->segnum; exit_side = find_exit_side(ConsoleObject); segnum = Segments[old_segnum].children[exit_side]; i=tunnel_length/3; while (i--) { entry_side = matt_find_connect_side(segnum,old_segnum); exit_side = Side_opposite[entry_side]; old_segnum = segnum; segnum = Segments[segnum].children[exit_side]; } transition_segnum = segnum; } Assert(last_segnum == exit_segnum); cockpit_mode_save = Cockpit_mode; #ifdef NETWORK if (Game_mode & GM_MULTI) { multi_send_endlevel_start(0); network_do_frame(1, 1); } #endif songs_play_song( SONG_ENDLEVEL, 0 ); Endlevel_sequence = EL_FLYTHROUGH; ConsoleObject->movement_type = MT_NONE; //movement handled by flythrough ConsoleObject->control_type = CT_NONE; Game_suspended |= SUSP_ROBOTS; //robots don't move cur_fly_speed = desired_fly_speed = FLY_SPEED; start_endlevel_flythrough(0,ConsoleObject,cur_fly_speed); //initialize HUD_init_message( TXT_EXIT_SEQUENCE ); outside_mine = ext_expl_playing = 0; flash_scale = f1_0; //init_endlevel(); mine_destroyed=0; }
void scores_view(int citem) { fix time_out_value; fix t1; int i,done,looper; int k; byte fades[64] = { 1,1,1,2,2,3,4,4,5,6,8,9,10,12,13,15,16,17,19,20,22,23,24,26,27,28,28,29,30,30,31,31,31,31,31,30,30,29,28,28,27,26,24,23,22,20,19,17,16,15,13,12,10,9,8,6,5,4,4,3,2,2,1,1 }; ReshowScores: scores_read(); set_screen_mode(SCREEN_MENU); gr_set_current_canvas(NULL); nm_draw_background(0,0,grd_curcanv->cv_bitmap.bm_w, grd_curcanv->cv_bitmap.bm_h ); grd_curcanv->cv_font = Gamefonts[GFONT_MEDIUM_3]; gr_string( 0x8000, 15, TXT_HIGH_SCORES ); grd_curcanv->cv_font = Gamefonts[GFONT_SMALL]; gr_set_fontcolor( BM_XRGB(31,26,5), -1 ); gr_string( 31+33+XX, 46+7+YY, TXT_NAME ); gr_string( 82+33+XX, 46+7+YY, TXT_SCORE ); gr_string( 127+33+XX, 46+7+YY, TXT_SKILL ); gr_string( 170+33+XX, 46+7+YY, TXT_LEVELS ); // gr_string( 202, 46, "Kills" ); // gr_string( 234, 46, "Rescues" ); gr_string( 288-42+XX, 46+7+YY, TXT_TIME ); if ( citem < 0 ) gr_string( 0x8000, 175, TXT_PRESS_CTRL_R ); gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); gr_printf( 0x8000, 31, "%c%s%c - %s", 34, Scores.cool_saying, 34, Scores.stats[0].name ); for (i=0; i<MAX_HIGH_SCORES; i++ ) { if (i==0) { gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); } else { gr_set_fontcolor( gr_fade_table[BM_XRGB(28,28,28)+((28-i*2)*256)], -1 ); } scores_draw_item( i, &Scores.stats[i] ); } gr_palette_fade_in( gr_palette,32, 0); game_flush_inputs(); done = 0; looper = 0; time_out_value = timer_get_fixed_seconds()+i2f(60*5); while(!done) { if ( citem > -1 ) { t1 = timer_get_fixed_seconds(); if ( t1 > time_out_value ) done = 1; while ( timer_get_fixed_seconds() < t1+F1_0/128 ); gr_set_fontcolor( gr_fade_table[fades[looper]*256+BM_XRGB(28,28,28)], -1 ); looper++; if (looper>63) looper=0; if ( citem == MAX_HIGH_SCORES ) scores_draw_item( MAX_HIGH_SCORES, &Last_game ); else scores_draw_item( citem, &Scores.stats[citem] ); } for (i=0; i<4; i++ ) if (joy_get_button_down_cnt(i)>0) done=1; for (i=0; i<3; i++ ) if (mouse_button_down_count(i)>0) done=1; k = key_inkey(); switch( k ) { case KEY_CTRLED+KEY_R: if ( citem < 0 ) { // Reset scores... if ( nm_messagebox( NULL, 2, TXT_NO, TXT_YES, TXT_RESET_HIGH_SCORES )==1 ) { remove( get_scores_filename() ); gr_palette_fade_out( gr_palette, 32, 0 ); goto ReshowScores; } } break; case KEY_BACKSP: Int3(); k = 0; break; case KEY_PRINT_SCREEN: save_screen_shot(0); k = 0; break; case KEY_ENTER: case KEY_SPACEBAR: case KEY_ESC: done=1; break; } } // Restore background and exit gr_palette_fade_out( gr_palette, 32, 0 ); gr_set_current_canvas(NULL); game_flush_inputs(); }
// ----------------------------------------------------------------------------- // Does the bonus scoring. // Call with dead_flag = 1 if player died, but deserves some portion of bonus (only skill points), anyway. void DoEndLevelScoreGlitz(int network) { int level_points, skill_points, energy_points, shield_points, hostage_points; int all_hostage_points; int endgame_points; char all_hostage_text[64]; char endgame_text[64]; #define N_GLITZITEMS 9 char m_str[N_GLITZITEMS][30]; newmenu_item m[9]; int i,c; char title[128]; int is_last_level; level_points = Players[Player_num].score-Players[Player_num].last_score; if (!Cheats_enabled) { if (Difficulty_level > 1) { skill_points = level_points*(Difficulty_level-1)/2; skill_points -= skill_points % 100; } else skill_points = 0; shield_points = f2i(Players[Player_num].shields) * 10 * (Difficulty_level+1); energy_points = f2i(Players[Player_num].energy) * 5 * (Difficulty_level+1); hostage_points = Players[Player_num].hostages_on_board * 500 * (Difficulty_level+1); } else { skill_points = 0; shield_points = 0; energy_points = 0; hostage_points = 0; } all_hostage_text[0] = 0; endgame_text[0] = 0; if (!Cheats_enabled && (Players[Player_num].hostages_on_board == Players[Player_num].hostages_level)) { all_hostage_points = Players[Player_num].hostages_on_board * 1000 * (Difficulty_level+1); sprintf(all_hostage_text, "%s%i\n", TXT_FULL_RESCUE_BONUS, all_hostage_points); } else all_hostage_points = 0; if (!Cheats_enabled && !(Game_mode & GM_MULTI) && (Players[Player_num].lives) && (Current_level_num == Last_level)) { //player has finished the game! endgame_points = Players[Player_num].lives * 10000; sprintf(endgame_text, "%s%i\n", TXT_SHIP_BONUS, endgame_points); is_last_level=1; } else endgame_points = is_last_level = 0; add_bonus_points_to_score(skill_points + energy_points + shield_points + hostage_points + all_hostage_points + endgame_points); c = 0; sprintf(m_str[c++], "%s%i", TXT_SHIELD_BONUS, shield_points); // Return at start to lower menu... sprintf(m_str[c++], "%s%i", TXT_ENERGY_BONUS, energy_points); sprintf(m_str[c++], "%s%i", TXT_HOSTAGE_BONUS, hostage_points); sprintf(m_str[c++], "%s%i", TXT_SKILL_BONUS, skill_points); sprintf(m_str[c++], "%s", all_hostage_text); if (!(Game_mode & GM_MULTI) && (Players[Player_num].lives) && (Current_level_num == Last_level)) sprintf(m_str[c++], "%s", endgame_text); sprintf(m_str[c++], "%s%i\n", TXT_TOTAL_BONUS, shield_points+energy_points+hostage_points+skill_points+all_hostage_points+endgame_points); sprintf(m_str[c++], "%s%i", TXT_TOTAL_SCORE, Players[Player_num].score); for (i=0; i<c; i++) { m[i].type = NM_TYPE_TEXT; m[i].text = m_str[i]; } // m[c].type = NM_TYPE_MENU; m[c++].text = "Ok"; if (Current_level_num < 0) sprintf(title,"%s%s %d %s\n %s %s",is_last_level?"\n\n\n":"\n",TXT_SECRET_LEVEL, -Current_level_num, TXT_COMPLETE, Current_level_name, TXT_DESTROYED); else sprintf(title,"%s%s %d %s\n%s %s",is_last_level?"\n\n\n":"\n",TXT_LEVEL, Current_level_num, TXT_COMPLETE, Current_level_name, TXT_DESTROYED); Assert(c <= N_GLITZITEMS); gr_palette_fade_out(gr_palette, 32, 0); time_out_value = timer_get_approx_seconds() + i2f(60*5); #ifdef NETWORK if ( network && (Game_mode & GM_NETWORK) ) newmenu_do2(NULL, title, c, m, network_endlevel_poll2, 0, "MENU.PCX"); else #endif // Note link! newmenu_do2(NULL, title, c, m, DoEndLevelScoreGlitzPoll, 0, "MENU.PCX"); }
void scores_view(int citem) { grs_canvas *center_canv; fix t1; int i,done,looper; int k; sbyte fades[64] = { 1,1,1,2,2,3,4,4,5,6,8,9,10,12,13,15,16,17,19,20,22,23,24,26,27,28,28,29,30,30,31,31,31,31,31,30,30,29,28,28,27,26,24,23,22,20,19,17,16,15,13,12,10,9,8,6,5,4,4,3,2,2,1,1 }; ReshowScores: scores_read(); set_screen_mode(SCREEN_MENU); gr_set_current_canvas(NULL); nm_draw_background(0, 0, GWIDTH-1, GHEIGHT-1); // args are x,y,x2,y2 NOT x,y,w,h center_canv = gr_create_sub_canvas(grd_curcanv, GWIDTH/2-LHX(160), 0, LHX(320), GHEIGHT); gr_set_current_canvas(center_canv); grd_curcanv->cv_font = MEDIUM3_FONT; gr_string( 0x8000, LHY(15), TXT_HIGH_SCORES ); grd_curcanv->cv_font = SMALL_FONT; gr_set_fontcolor( BM_XRGB(31,26,5), -1 ); gr_string( LHX(31+33+XX), LHY(46+7+YY), TXT_NAME ); gr_string( LHX(82+33+XX), LHY(46+7+YY), TXT_SCORE ); gr_string( LHX(127+33+XX), LHY(46+7+YY), TXT_SKILL ); gr_string( LHX(170+33+XX), LHY(46+7+YY), TXT_LEVELS ); // gr_string( 202, 46, "Kills" ); // gr_string( 234, 46, "Rescues" ); gr_string( LHX(288-42+XX), LHY(46+7+YY), TXT_TIME ); if ( citem < 0 ) gr_string( 0x8000, LHY(175), TXT_PRESS_CTRL_R ); gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); gr_printf( 0x8000, LHY(31), "%c%s%c - %s", 34, Scores.cool_saying, 34, Scores.stats[0].name ); for (i=0; i<MAX_HIGH_SCORES; i++ ) { //@@if (i==0) { //@@ gr_set_fontcolor( BM_XRGB(28,28,28), -1 ); //@@} else { //@@ gr_set_fontcolor( gr_fade_table[BM_XRGB(28,28,28)+((28-i*2)*256)], -1 ); //@@} gr_set_fontcolor( BM_XRGB(28-i*2,28-i*2,28-i*2), -1 ); scores_draw_item( i, &Scores.stats[i] ); } gr_palette_fade_in( gr_palette,32, 0); #ifdef OGL vid_update(); #endif game_flush_inputs(); done = 0; looper = 0; while(!done) { if ( citem > -1 ) { t1 = timer_get_fixed_seconds(); while ( timer_get_fixed_seconds() < t1+F1_0/128 ); //@@gr_set_fontcolor( gr_fade_table[fades[looper]*256+BM_XRGB(28,28,28)], -1 ); gr_set_fontcolor( BM_XRGB(7+fades[looper],7+fades[looper],7+fades[looper]), -1 ); looper++; if (looper>63) looper=0; if ( citem == MAX_HIGH_SCORES ) scores_draw_item( MAX_HIGH_SCORES, &Last_game ); else scores_draw_item( citem, &Scores.stats[citem] ); vid_update(); } for (i=0; i<4; i++ ) if (joy_get_button_down_cnt(i)>0) done=1; for (i=0; i<3; i++ ) if (mouse_button_down_count(i)>0) done=1; //see if redbook song needs to be restarted songs_check_redbook_repeat(); k = newmenu_inkey(); switch( k ) { case KEY_CTRLED+KEY_R: if ( citem < 0 ) { // Reset scores... if ( nm_messagebox( NULL, 2, TXT_NO, TXT_YES, TXT_RESET_HIGH_SCORES )==1 ) { PHYSFS_delete(get_scores_filename()); gr_palette_fade_out( gr_palette, 32, 0 ); goto ReshowScores; } } break; case KEY_BACKSP: Int3(); k = 0; break; case KEY_PRINT_SCREEN: save_screen_shot(0); k = 0; break; case KEY_ENTER: case KEY_SPACEBAR: case KEY_ESC: done=1; break; } } // Restore background and exit gr_palette_fade_out( gr_palette, 32, 0 ); gr_set_current_canvas(NULL); gr_free_sub_canvas(center_canv); game_flush_inputs(); }
int check_trigger_sub(int trigger_num, int pnum) { if (pnum == Player_num) { if (Triggers[trigger_num].flags & TRIGGER_SHIELD_DAMAGE) { Players[Player_num].shields -= Triggers[trigger_num].value; mprintf((0,"BZZT!\n")); } if (Triggers[trigger_num].flags & TRIGGER_EXIT) { start_endlevel_sequence(); mprintf((0,"WOOHOO! (leaving the mine!)\n")); } if (Triggers[trigger_num].flags & TRIGGER_SECRET_EXIT) { if (Newdemo_state == ND_STATE_RECORDING) // stop demo recording Newdemo_state = ND_STATE_PAUSED; Fuelcen_control_center_destroyed = 0; mprintf((0,"Exiting to secret level\n")); #ifdef NETWORK if (Game_mode & GM_MULTI) multi_send_endlevel_start(1); #endif #ifdef NETWORK if (Game_mode & GM_NETWORK) network_do_frame(1, 1); #endif gr_palette_fade_out(gr_palette, 32, 0); PlayerFinishedLevel(1); //1 means go to secret level return 1; } if (Triggers[trigger_num].flags & TRIGGER_ENERGY_DRAIN) { Players[Player_num].energy -= Triggers[trigger_num].value; mprintf((0,"SLURP!\n")); } } if (Triggers[trigger_num].flags & TRIGGER_CONTROL_DOORS) { mprintf((0,"D")); do_link(trigger_num); } if (Triggers[trigger_num].flags & TRIGGER_MATCEN) { if (!(Game_mode & GM_MULTI) || (Game_mode & GM_MULTI_ROBOTS)) do_matcen(trigger_num); } if (Triggers[trigger_num].flags & TRIGGER_ILLUSION_ON) { mprintf((0,"I")); do_il_on(trigger_num); } if (Triggers[trigger_num].flags & TRIGGER_ILLUSION_OFF) { // Triggers[trigger_num].time = TRIGGER_DELAY_DOOR; mprintf((0,"i")); do_il_off(trigger_num); } return 0; }
void credits_show() { int i, j, l, done; CFILE * file; char buffer[NUM_LINES][80]; grs_bitmap backdrop; ubyte backdrop_palette[768]; int pcx_error; int buffer_line = 0; fix last_time; fix time_delay = 4180 / f2fl(Scale_y); // ~ F1_0 / 12.9 int first_line_offset,extra_inc=0; int have_bin_file = 0; char * tempp; grs_point scale_pts[] = FULLSCREEN_SCALE_PTS; ubyte *fade_values = malloc(grd_curscreen->sc_h); for (i = 0; i < grd_curscreen->sc_h; ++i) { fade_values[i] = fade_values_200[(int)(((float)i / (float)grd_curscreen->sc_h) * 200)]; } set_screen_mode(SCREEN_MENU); // Clear out all tex buffer lines. for (i=0; i<NUM_LINES; i++ ) buffer[i][0] = 0; have_bin_file = 0; file = cfopen( "credits.tex", "rb" ); if (file == NULL) { file = cfopen("credits.txb", "rb"); if (file == NULL) Error("Missing CREDITS.TEX and CREDITS.TXB file\n"); have_bin_file = 1; } gr_use_palette_table( "credits.256" ); header_font = gr_init_font( "font1-1.fnt" ); title_font = gr_init_font( "font2-3.fnt" ); names_font = gr_init_font( "font2-2.fnt" ); backdrop.bm_data=NULL; pcx_error = pcx_read_bitmap("stars.pcx",&backdrop,BM_LINEAR,backdrop_palette); if (pcx_error != PCX_ERROR_NONE) { cfclose(file); return; } songs_play_song( SONG_CREDITS, 0 ); gr_remap_bitmap_good( &backdrop,backdrop_palette, -1, -1 ); gr_set_current_canvas(NULL); scale_bitmap(&backdrop,scale_pts); gr_palette_fade_in( gr_palette, 32, 0 ); vfx_set_palette_sub( gr_palette ); //gr_clear_canvas(BM_XRGB(0,0,0)); key_flush(); last_time = timer_get_fixed_seconds(); done = 0; first_line_offset = 0; while( 1 ) { int k; do { buffer_line = (buffer_line+1) % NUM_LINES; if (cfgets( buffer[buffer_line], 80, file )) { char *p; if (have_bin_file) { // is this a binary tbl file for (i = 0; i < strlen(buffer[buffer_line]) - 1; i++) { encode_rotate_left(&(buffer[buffer_line][i])); buffer[buffer_line][i] ^= BITMAP_TBL_XOR; encode_rotate_left(&(buffer[buffer_line][i])); } } p = strchr(&buffer[buffer_line][0],'\n'); if (p) *p = '\0'; } else { //fseek( file, 0, SEEK_SET); buffer[buffer_line][0] = 0; done++; } } while (extra_inc--); extra_inc = 0; for (i=0; i<ROW_SPACING; i++ ) { int y; y = first_line_offset - i; #ifndef OGLES gr_set_current_canvas(VR_offscreen_buffer); #endif scale_bitmap(&backdrop, scale_pts); for (j=0; j<NUM_LINES; j++ ) { char *s; l = (buffer_line + j + 1 ) % NUM_LINES; s = buffer[l]; if ( s[0] == '!' ) { s++; } else if ( s[0] == '$' ) { grd_curcanv->cv_font = header_font; s++; } else if ( s[0] == '*' ) { grd_curcanv->cv_font = title_font; s++; } else grd_curcanv->cv_font = names_font; gr_bitblt_fade_table = fade_values; tempp = strchr( s, '\t' ); if ( tempp ) { int w, h, aw; *tempp = 0; gr_get_string_size( s, &w, &h, &aw ); w *= f2fl(Scale_x); h *= f2fl(Scale_y); gr_scale_printf( (160-w)/2, y, Scale_factor, Scale_factor, s ); gr_get_string_size( &tempp[1], &w, &h, &aw ); w *= f2fl(Scale_x); h *= f2fl(Scale_y); gr_scale_printf( 160+((160-w)/2), y, Scale_factor, Scale_factor, &tempp[1] ); *tempp = '\t'; } else { gr_scale_printf( 0x8000, y, Scale_factor, Scale_factor, s ); } gr_bitblt_fade_table = NULL; if (buffer[l][0] == '!') y += ROW_SPACING/2; else y += ROW_SPACING; } #ifdef OGLES showRenderBuffer(); #else gr_bm_ubitblt(grd_curscreen->sc_w, grd_curscreen->sc_h, 0, 0, 0, 0, &(VR_offscreen_buffer->cv_bitmap), &(grd_curscreen->sc_canvas.cv_bitmap) ); #endif while( timer_get_fixed_seconds() < last_time+time_delay ); last_time = timer_get_fixed_seconds(); k = key_inkey(); #ifndef NDEBUG if (k == KEY_BACKSP) { Int3(); k=0; } #endif // { // fix ot = time_delay; // time_delay += (keyd_pressed[KEY_X] - keyd_pressed[KEY_Z])*100; // if (ot!=time_delay) { // mprintf( (0, "[%x] ", time_delay )); // } // } if (k == KEY_PRINT_SCREEN) { save_screen_shot(0); k = 0; } if ((k>0)||(done>NUM_LINES)) { gr_close_font(header_font); gr_close_font(title_font); gr_close_font(names_font); gr_palette_fade_out( gr_palette, 32, 0 ); gr_use_palette_table( "palette.256" ); free(backdrop.bm_data); cfclose(file); songs_play_song( SONG_TITLE, 1 ); return; } } if (buffer[(buffer_line + 1 ) % NUM_LINES][0] == '!') { first_line_offset -= ROW_SPACING-ROW_SPACING/2; if (first_line_offset <= -ROW_SPACING) { first_line_offset += ROW_SPACING; extra_inc++; } } } free(fade_values); }
int gr_init(void) { int org_gamma; int retcode; int mode = SM(320,200); // Only do this function once! if (gr_installed==1) return 3; #ifdef __DJGPP__ if (!__djgpp_nearptr_enable()) { printf("nearptr enable=%x\n", __dpmi_error); return 10; } #ifndef SAVEGR gr_video_memory = (unsigned char *)(__djgpp_conventional_base + 0xa0000); #else gr_video_memory=(unsigned char *)-1; #endif pVideoMode = (volatile ubyte *)(__djgpp_conventional_base+0x449); pNumColumns = (volatile ushort *)(__djgpp_conventional_base+0x44a); pNumRows = (volatile ubyte *)(__djgpp_conventional_base+0x484); pCharHeight = (volatile ushort *)(__djgpp_conventional_base+0x485); pCursorPos = (volatile ushort *)(__djgpp_conventional_base+0x450); pCursorType = (volatile ushort *)(__djgpp_conventional_base+0x460); pTextMemory = (volatile ushort *)(__djgpp_conventional_base+0xb8000); #endif #ifndef __DJGPP__ if (gr_init_A0000()) return 10; #endif // Save the current text screen mode if (gr_save_mode()==1) return 2; #ifndef NOGRAPH // Save the current palette, and fade it out to black. gr_palette_read( gr_pal_default ); gr_palette_faded_out = 0; org_gamma = gr_palette_get_gamma(); gr_palette_set_gamma( 0 ); gr_palette_fade_out( gr_pal_default, 32, 0 ); gr_palette_clear(); gr_palette_set_gamma( org_gamma ); gr_sync_display(); gr_sync_display(); #endif #ifdef __DJGPP__ #ifdef SAVEGR __djgpp_nearptr_disable(); #endif #endif MALLOC( grd_curscreen,grs_screen,1 ); memset( grd_curscreen, 0, sizeof(grs_screen)); // Set the mode. if ((retcode=gr_set_mode(mode))) { gr_restore_mode(); return retcode; } //JOHNgr_disable_default_palette_loading(); // Set all the screen, canvas, and bitmap variables that // aren't set by the gr_set_mode call: grd_curscreen->sc_canvas.cv_color = 0; grd_curscreen->sc_canvas.cv_drawmode = 0; grd_curscreen->sc_canvas.cv_font = NULL; grd_curscreen->sc_canvas.cv_font_fg_color = 0; grd_curscreen->sc_canvas.cv_font_bg_color = 0; gr_set_current_canvas( &grd_curscreen->sc_canvas ); #if 0 if (!dpmi_allocate_selector( &gr_fade_table, 256*GR_FADE_LEVELS, &gr_fade_table_selector )) Error( "Error allocating fade table selector!" ); if (!dpmi_allocate_selector( &gr_palette, 256*3, &gr_palette_selector )) Error( "Error allocating palette selector!" ); #endif // if (!dpmi_allocate_selector( &gr_inverse_table, 32*32*32, &gr_inverse_table_selector )) // Error( "Error allocating inverse table selector!" ); // Set flags indicating that this is installed. gr_installed = 1; #ifdef __GNUC__ atexit((void (*)) gr_close); #else atexit(gr_close); #endif return 0; }