void cutscenes_screen_play() { char name[MAX_FILENAME_LEN], *full_name; int which_cutscene; Assert( (Selected_line >= 0) && (Selected_line < Num_files) ); which_cutscene = Cutscene_list[Selected_line]; strcpy(name, Cutscenes[which_cutscene].filename ); full_name = cf_add_ext(name, NOX(".mve")); // no soup for you! /* int rval = movie_play(full_name); if ( !rval ) { char str[256]; sprintf(str, XSTR( "Unable to play movie %s.", 204), Cutscenes[which_cutscene].name ); popup(0, 1, POPUP_OK, str ); } */ }
// send all my files as necessary void multi_data_send_my_junk() { char *with_ext; int bmap, w, h; int ok_to_send = 1; // pilot pic -------------------------------------------------------------- // verify that my pilot pic is valid if(strlen(Net_player->m_player->image_filename)){ bmap = bm_load(Net_player->m_player->image_filename); if(bmap == -1){ ok_to_send = 0; } // verify image dimensions if(ok_to_send){ w = -1; h = -1; bm_get_info(bmap,&w,&h); // release the bitmap bm_release(bmap); bmap = -1; // if the dimensions are invalid, kill the filename if((w != PLAYER_PILOT_PIC_W) || (h != PLAYER_PILOT_PIC_H)){ ok_to_send = 0; } } } else { ok_to_send = 0; } if(ok_to_send){ with_ext = cf_add_ext(Net_player->m_player->image_filename, NOX(".pcx")); if(with_ext != NULL){ strcpy_s(Net_player->m_player->image_filename, with_ext); } // host should put his own pic file in the list now if((Net_player->flags & NETINFO_FLAG_AM_MASTER) && !(Game_mode & GM_STANDALONE_SERVER) && (Net_player->m_player->image_filename[0] != '\0')){ multi_data_add_new(Net_player->m_player->image_filename, MY_NET_PLAYER_NUM); } // otherwise clients should just queue up a send else { // add a file extension if necessary multi_xfer_send_file(Net_player->reliable_socket, Net_player->m_player->image_filename, CF_TYPE_ANY, MULTI_XFER_FLAG_AUTODESTROY | MULTI_XFER_FLAG_QUEUE); } } // squad logo -------------------------------------------------------------- // verify that my pilot pic is valid ok_to_send = 1; if(strlen(Net_player->m_player->m_squad_filename)){ bmap = bm_load(Net_player->m_player->m_squad_filename); if(bmap == -1){ ok_to_send = 0; } if(ok_to_send){ // verify image dimensions w = -1; h = -1; bm_get_info(bmap,&w,&h); // release the bitmap bm_release(bmap); bmap = -1; // if the dimensions are invalid, kill the filename if((w != PLAYER_SQUAD_PIC_W) || (h != PLAYER_SQUAD_PIC_H)){ ok_to_send = 0; } } } else { ok_to_send = 0; } if(ok_to_send){ with_ext = cf_add_ext(Net_player->m_player->m_squad_filename, NOX(".pcx")); if(with_ext != NULL){ strcpy_s(Net_player->m_player->m_squad_filename,with_ext); } // host should put his own pic file in the list now if((Net_player->flags & NETINFO_FLAG_AM_MASTER) && !(Game_mode & GM_STANDALONE_SERVER) && (Net_player->m_player->m_squad_filename[0] != '\0')){ multi_data_add_new(Net_player->m_player->m_squad_filename, MY_NET_PLAYER_NUM); } // otherwise clients should just queue up a send else { // add a file extension if necessary multi_xfer_send_file(Net_player->reliable_socket, Net_player->m_player->m_squad_filename, CF_TYPE_ANY, MULTI_XFER_FLAG_AUTODESTROY | MULTI_XFER_FLAG_QUEUE); } } }
int fs2netd_get_valid_missions_do() { if (Local_timeout == -1) { Local_timeout = timer_get_seconds() + 30; } // get the available CRCs from the server if we need to if ( FS2NetD_file_list.empty() ) { int rc = FS2NetD_GetMissionsList(FS2NetD_file_list, do_full_packet); do_full_packet = false; // communications error if (rc < 0) { Local_timeout = -1; return 4; } // no missions if ( rc && FS2NetD_file_list.empty() ) { Local_timeout = -1; return 2; } // if timeout passes then bail on crc failure if ( timer_get_seconds() > Local_timeout ) { Local_timeout = -1; return 1; } } // we should have the CRCs, or there were no missions, so process them else { static char **file_names = NULL; static int idx = 0, count = 0; bool found = false; int file_index = 0; char valid_status = MVALID_STATUS_UNKNOWN; char full_name[MAX_FILENAME_LEN], wild_card[10]; char val_text[MAX_FILENAME_LEN+15]; uint checksum = 0; if (file_names == NULL) { // allocate filename space file_names = (char**) vm_malloc_q( sizeof(char*) * 1024 ); // 1024 files should be safe! if (file_names == NULL) { Local_timeout = -1; return 3; } memset( wild_card, 0, sizeof(wild_card) ); strcpy_s( wild_card, NOX("*") ); strcat_s( wild_card, FS_MISSION_FILE_EXT ); idx = count = cf_get_file_list(1024, file_names, CF_TYPE_MISSIONS, wild_card); } // drop idx first thing idx--; // we should be done validating, or just not have nothing to validate if (idx < 0) { for (idx = 0; idx < count; idx++) { if (file_names[idx] != NULL) { vm_free(file_names[idx]); file_names[idx] = NULL; } } vm_free(file_names); file_names = NULL; idx = count = 0; Local_timeout = -1; return 4; } // verify all filenames that we know about with their CRCs // NOTE: that this is done for one file per frame, since this is inside of a popup memset( full_name, 0, MAX_FILENAME_LEN ); strncpy( full_name, cf_add_ext(file_names[idx], FS_MISSION_FILE_EXT), sizeof(full_name) - 1 ); memset( val_text, 0, sizeof(val_text) ); snprintf( val_text, sizeof(val_text) - 1, "Validating: %s", full_name ); if (Is_standalone) { if ( std_gen_is_active() ) { std_gen_set_text(val_text, 1); } } else { popup_change_text(val_text); } cf_chksum_long(full_name, &checksum); // try and find the file file_index = multi_create_lookup_mission(full_name); found = false; if (file_index >= 0) { for (SCP_vector<file_record>::iterator fr = FS2NetD_file_list.begin(); fr != FS2NetD_file_list.end() && !found; ++fr) { if ( !stricmp(full_name, fr->name) ) { if (fr->crc32 == checksum) { found = true; valid_status = MVALID_STATUS_VALID; } else { valid_status = MVALID_STATUS_INVALID; } Multi_create_mission_list[file_index].valid_status = valid_status; } } if (found) { ml_printf("FS2NetD Mission Validation: %s => Valid!", full_name); } else { ml_printf("FS2NetD Mission Validation: %s => INVALID! -- 0x%08x", full_name, checksum); } } } return 0; }