00001
00002
00003
00004
00005 #include <OBOX.H>
00006 #include <OSYS.H>
00007 #include <OGAMESET.H>
00008 #include <ODYNARR.H>
00009 #include <OSCHLREC.H>
00010 #include <OSCHREC2.H>
00011 #include <OSCHLRES.H>
00012 #include <OPSCHOOL.H>
00013 #include <OPEERSCH.H>
00014 #include <OMATH.H>
00015 #include <OINFO.H>
00016 #include <OFACURES.H>
00017 #include <OFINANCE.H>
00018
00019 #include <OFIELD.H>
00020
00021 #ifdef DEBUG
00022 #include <STDIO.H>
00023 #include <OLOG.H>
00024 #endif
00025
00026 #include <MATH.H>
00027 #define EXPO2(x) ((x)*(x))
00028
00029
00030
00031 #define SCHOOL_DB1 DIR_RES"UMASTER1.RES"
00032 #define SCHOOL_DB2 DIR_RES"UMASTER2.RES"
00033 #define PEER_SCHOOL_DB "PEERNAME"
00034
00035
00036
00037 static int sort_school_distance_function( const void *a, const void *b );
00038 static int sort_peerschool_prestige_function( const void *a, const void *b );
00039
00040
00042
00043 }
00044
00045
00046
00047
00049
00050 mem_del(peer_school_array);
00051 #if(GAME_VERSION>=200)
00052 if ( desired_school_array != NULL ) {
00053 mem_del( desired_school_array );
00054 desired_school_array = NULL;
00055 desired_school_count = 0;
00056 }
00057 #endif
00058 }
00059
00060
00061
00062
00064
00065
00066 load_db_1();
00067
00068 load_db_2();
00069
00070 load_db_peer();
00071 }
00072
00073
00074
00075
00077
00078 if ( !db_school_array || !peer_info_array )
00079 return;
00080
00081 mem_del(db_school_array);
00082 mem_del(peer_info_array);
00083
00084 peer_info_count = db_school_count = 0;
00085 db_school_array = NULL;
00086 peer_info_array = NULL;
00087 }
00088
00089
00090
00091
00093
00094 SchoolRec1 *sRec;
00095 School *sPtr;
00096 Database dbSchool(SCHOOL_DB1, 1);
00097
00098 db_school_count = (short) dbSchool.rec_count();
00099 db_school_array = (School*) mem_add( sizeof(School) * db_school_count );
00100
00101
00102
00103 memset( db_school_array, 0, sizeof(School) * db_school_count );
00104
00105 for( int i=0 ; i<db_school_count ; i++ ) {
00106 sRec = (SchoolRec1*) dbSchool.read(i+1);
00107 sPtr = db_school_array+i;
00108
00109 m.rtrim_fld( sPtr->name, sRec->name, sRec->NAME_LEN );
00110 sPtr->fice = m.atoi( sRec->fice, 8 );
00111
00112 if( sRec->control[1] == 'r')
00113 sPtr->control = PRIVATE;
00114 else
00115 sPtr->control = PUBLIC;
00116
00117 switch( sRec->carnegie[0] ) {
00118 case 'R':
00119 sPtr->carnegie = PRIVATE_SCHOOL;
00120 break;
00121
00122 case 'L':
00123 sPtr->carnegie = LIBERAL_ARTS_SCHOOL;
00124 break;
00125
00126 default:
00127 sPtr->carnegie = COMPREHENSIVE_SCHOOL;
00128 break;
00129 }
00130
00131 sPtr->cc_sort = m.atoi( sRec->cc_sort, 5 );
00132 sPtr->market_score = m.atoi( sRec->market_score, 6 );
00133
00134 m.rtrim_fld( sPtr->state, sRec->state, 8 );
00135
00136 sPtr->usn_wr_ranking = m.atoi( sRec->usn_wr_ranking, 6 );
00137 sPtr->ave_midpt_sat_act = m.atoi( sRec->ave_midpt_sat_act, 8 );
00138 sPtr->freshmen_top_10_class = char(m.atof( sRec->freshmen_top_10_class, 7 ) * 100);
00139
00140 switch( sRec->campus_environment[0] ) {
00141 case 'U':
00142 sPtr->campus_environment = URBAN;
00143 break;
00144
00145 case 'S':
00146 sPtr->campus_environment = SUBURBAN;
00147 break;
00148
00149 case 'R':
00150 sPtr->campus_environment = RURAL;
00151 break;
00152 }
00153
00154
00155 m.rtrim_fld( sPtr->ncaa_football_division, sRec->ncaa_football_division, 8 );
00156 m.rtrim_fld( sPtr->ncaa_basketball_division, sRec->ncaa_basketball_division, 8 );
00157 sPtr->football_rating = m.atoi( sRec->football_rating, 6 );
00158 sPtr->basketball_rating = m.atoi( sRec->basketball_rating, 6 );
00159
00160 sPtr->in_state_tuition = m.atoi( sRec->in_state_tuition, 7 );
00161 sPtr->out_state_tuition = m.atoi( sRec->out_state_tuition, 7 );
00162
00163 sPtr->room_and_board_charges = m.atoi( sRec->room_and_board_charges, 8 );
00164 sPtr->ug_in_housing_percent = m.atoi( sRec->undergrad_in_housing_percent, 8 );
00165
00166
00167
00168
00169
00170 SchoolFacultyRec *pfRec = sRec->school_faculty_rec_array;
00171 SchoolFaculty *pfPtr = sPtr->school_faculty_array;
00172
00173 for( int j=0 ; j<FACULTY_RANK_LEVEL_COUNT-2 ; j++, pfRec++, pfPtr++ ) {
00174 pfPtr->faculty_count = m.atoi( pfRec->faculty_count, 8 );
00175 pfPtr->salary = m.atoi( pfRec->salary, 8 );
00176 pfPtr->female_percent = (float)m.atof( pfRec->female_percent, 8 ) * 100;
00177 pfPtr->minority_percent = (float)m.atof( pfRec->minority_percent, 8 ) * 100;
00178 }
00179
00180 SchoolFacultyRec2 *pfRec2 = sRec->school_faculty_rec_array2;
00181
00182 for( j=0; j<2 ; j++, pfRec2++, pfPtr++ ) {
00183 pfPtr->faculty_count = m.atoi( pfRec2->adjunct_count, 8 );
00184 pfPtr->salary = 0;
00185 pfPtr->female_percent = (float) m.atof( pfRec2->female_percent, 8 ) * 100;
00186 pfPtr->minority_percent = (float) m.atof( pfRec2->minority_percent, 8 ) * 100; {
00187 }
00188
00189
00190
00191
00192
00193 SchoolFaculty tmpFac;
00194 memcpy(&tmpFac, &(sPtr->school_faculty_array[FULL_PROF]), sizeof(SchoolFaculty));
00195 memcpy(&(sPtr->school_faculty_array[FULL_PROF]), &(sPtr->school_faculty_array[ASST_PROF]), sizeof(SchoolFaculty));
00196 memcpy(&(sPtr->school_faculty_array[ASST_PROF]), &tmpFac, sizeof(SchoolFaculty));
00197 }
00198
00199
00200 sPtr->parttime_faculty_percent = (float) m.atof( sRec->parttime_faculty_percent, 8 ) * 100;
00201
00202
00203
00204
00205
00206 sPtr->student_applications = m.atoi( sRec->student_applications, 6 );
00207 sPtr->student_accepted = m.atoi( sRec->student_accepted, 6 );
00208 sPtr->student_enrolled = m.atoi( sRec->student_enrolled, 6 );
00209
00210
00211
00212
00213 char getfromrec = m.atoi( sRec->student_get_bacc_in_5_year_percent, 6 );
00214 float final_adj_result = (float)getfromrec * (player_school.ug_get_degree_in_5year_percent /100.0f);
00215 sPtr->student_get_bacc_in_5_year_percent = (char)final_adj_result;
00216
00217 sPtr->freshmen_applied_for_aid = m.atoi( sRec->freshmen_applied_for_aid, 7 );
00218 sPtr->percent_freshmen_applied_or_aid = (float) m.atof( sRec->percent_freshmen_applied_or_aid, 10 ) * 100;
00219 sPtr->freshmen_with_need = m.atoi( sRec->freshmen_with_need, 8 );
00220 sPtr->percent_freshmen_with_need = (float) m.atof( sRec->percent_freshmen_with_need, 9 ) * 100;
00221 sPtr->freshmen_offered_aid = m.atoi( sRec->freshmen_offered_aid, 8 );
00222 sPtr->percent_freshmen_offered_aid = (float) m.atof( sRec->percent_freshmen_offered_aid, 9 ) * 100;
00223
00224 sPtr->freshmen_offered_full_aid = m.atoi( sRec->freshmen_offered_full_aid, 8 );
00225 sPtr->percent_freshmen_offered_full_aid = (float) m.atof( sRec->percent_freshmen_offered_full_aid, 8 ) * 100;
00226
00227 sPtr->percent_freshmen_with_fin_aid = m.atoi( sRec->percent_freshmen_with_fin_aid, 8 );
00228 sPtr->percent_continuing_student_with_fin_aid = m.atoi( sRec->percent_continuing_student_with_fin_aid, 8 );
00229
00230 sPtr->institutional_aid_per_fte = m.atoi( sRec->institutional_aid_per_fte, 9 );
00231
00232
00233 sPtr->total_gross_tuition_revenue = m.atoi( sRec->total_gross_tuition_revenue, 8 );
00234 sPtr->total_financial_aid = m.atoi( sRec->total_financial_aid, 8 );
00235 sPtr->total_sponsored_research = m.atoi( sRec->total_sponsored_research, 8 );
00236 sPtr->adjusted_total_sponsored_research = m.atoi( sRec->adjusted_total_sponsored_research, 8 );
00237 sPtr->raw_endowment_spending = m.atoi( sRec->raw_endowment_spending, 8 );
00238 sPtr->state_and_local_appropriations = m.atoi( sRec->state_and_local_appropriations, 8 );
00239 sPtr->total_gifts = m.atoi( sRec->total_gifts, 8 );
00240 sPtr->gifts_to_operations = m.atoi( sRec->gifts_to_operations, 8 );
00241 sPtr->athletics_revenue = m.atoi( sRec->athletics_revenue, 8 );
00242
00243 sPtr->adjusted_other_operating_income = m.atoi( sRec->adjusted_other_operating_income, 8 );
00244 sPtr->raw_other_operating_income = m.atoi( sRec->raw_other_operating_income, 8 );
00245
00246
00247 sPtr->academic_dept_total_salaries = m.atoi( sRec->academic_dept_total_salaries, 9 );
00248 sPtr->academic_dept_faculty_salaries = m.atoi( sRec->academic_dept_faculty_salaries, 9 );
00249 sPtr->academic_dept_other_expense = m.atoi( sRec->academic_dept_other_expense, 9 );
00250
00251 sPtr->sponsored_research_total_salaries = m.atoi( sRec->sponsored_research_total_salaries, 9 );
00252 sPtr->sponsored_research_faculty_salaries = m.atoi( sRec->sponsored_research_faculty_salaries, 9 );
00253 sPtr->sponsored_research_other_expense = m.atoi( sRec->sponsored_research_other_expense, 9 );
00254
00255 sPtr->library_salaries = m.atoi( sRec->library_salaries, 10 );
00256 sPtr->library_other_expense = m.atoi( sRec->library_other_expense, 10 );
00257
00258 sPtr->student_life_salaries = m.atoi( sRec->student_life_salaries, 10 );
00259 sPtr->student_life_other_expense = m.atoi( sRec->student_life_other_expense, 10 );
00260
00261 sPtr->inst_support_salaries = m.atoi( sRec->inst_support_salaries, 10 );
00262 sPtr->inst_support_other_expense = m.atoi( sRec->inst_support_other_expense, 10 );
00263
00264 sPtr->inst_support_net_salaries = m.atoi( sRec->inst_support_net_salaries, 10 );
00265 sPtr->inst_support_net_other_expense = m.atoi( sRec->inst_support_net_other_expense, 10 );
00266 sPtr->inst_advancement_salaries = m.atoi( sRec->inst_advancement_salaries, 10 );
00267 sPtr->inst_advancement_other_expense = m.atoi( sRec->inst_advancement_other_expense, 10 );
00268 sPtr->o_and_m_salaries = m.atoi( sRec->o_and_m_salaries, 8 );
00269 sPtr->o_and_m_other_expense = m.atoi( sRec->o_and_m_other_expense, 8 );
00270 sPtr->athletics_salaries = m.atoi( sRec->athletics_salaries, 8 );
00271 sPtr->athletics_other_expense = m.atoi( sRec->athletics_other_expense, 8 );
00272
00273 sPtr->academic_support_salaries = m.atoi( sRec->academic_support_salaries, 10 );
00274 sPtr->academic_support_other_expense = m.atoi( sRec->academic_support_other_expense, 10 );
00275
00276
00277 sPtr->end_of_year_endowment_market_value = m.atoi( sRec->end_of_year_endowment_market_value, 8 );
00278 sPtr->current_funds_balance = m.atoi( sRec->current_funds_balance, 8 );
00279 sPtr->year_end_book_value_of_plant = m.atoi( sRec->year_end_book_value_of_plant, 8 );
00280 sPtr->year_end_market_value_of_plant = m.atoi( sRec->year_end_market_value_of_plant, 8 );
00281 sPtr->year_end_capital_reserve = m.atoi( sRec->year_end_capital_reserve, 8 );
00282 sPtr->year_end_general_plant_and_residence_hall_debt = m.atoi( sRec->year_end_general_plant_and_residence_hall_debt, 8 );
00283 sPtr->residence_hall_debt = m.atoi( sRec->residence_hall_debt, 8 );
00284
00285 sPtr->raw_surplus = m.atoi( sRec->raw_surplus, 8 );
00286 sPtr->adjusted_surplus = m.atoi( sRec->adjusted_surplus, 8 );
00287 sPtr->transfer_to_plant = m.atoi( sRec->transfer_to_plant, 8 );
00288 sPtr->amount_added_to_other_operating_income = m.atoi( sRec->amount_added_to_other_operating_income, 8 );
00289
00290
00291 sPtr->full_time_undergrad = m.atoi( sRec->full_time_undergrad, 8 );
00292 sPtr->part_time_undergrad = m.atoi( sRec->part_time_undergrad, 8 );
00293 sPtr->master_and_professional = m.atoi( sRec->master_and_professional, 8 );
00294 sPtr->non_degree_seeking = m.atoi( sRec->non_degree_seeking, 8 );
00295 sPtr->female_undergrad_percent = char(100 * m.atof( sRec->female_undergrad_percent, 7 ));
00296 sPtr->female_grad_and_prof_percent = char(100 * m.atof( sRec->female_grad_and_prof_percent, 7 ));
00297
00298 sPtr->minority_undergrad_percent = char(100 * m.atof( sRec->minority_undergrad_percent, 7 ));
00299 sPtr->minority_grad_and_prof_percent = char(100 * m.atof( sRec->minority_grad_and_prof_percent, 7 ));
00300 sPtr->non_resident_alien_grad_and_prof_percent = char(100 * m.atof( sRec->non_resident_alien_grad_and_prof_percent, 7 ));
00301 sPtr->full_time_freshmen = m.atoi( sRec->full_time_freshmen, 9 );
00302 sPtr->freshmen_from_within_the_state_percent = char(100 * m.atof( sRec->freshmen_from_within_the_state_percent, 9 ));
00303 sPtr->total_bach_degrees = m.atoi( sRec->total_bach_degrees, 9 );
00304 sPtr->total_masters_and_prof_degree = m.atoi( sRec->total_masters_and_prof_degree, 9 );
00305 sPtr->total_doctoral_degrees = m.atoi( sRec->total_doctoral_degrees, 9 );
00306 sPtr->total_certificates = m.atoi( sRec->total_certificates, 9 );
00307
00308
00309 sPtr->enrollment_fte = m.atoi( sRec->enrollment_fte, 7 );
00310 sPtr->ug_percent = char(100 * m.atof( sRec->undergrad_percent, 7 ));
00311 sPtr->part_time_ug_percent = char(100 * m.atof( sRec->part_time_undergrad_percent, 7 ));
00312 sPtr->non_degree_seeking_percent = char(100 * m.atof( sRec->non_degree_seeking_percent, 7 ));
00313
00314 sPtr->applications_ratio = (float) m.atof( sRec->applications_ratio, 7 );
00315 sPtr->yield_rate = char(100 * m.atof( sRec->yield_rate, 7 ));
00316 sPtr->athletics_rating = m.atoi( sRec->athletics_rating, 9 );
00317
00318 sPtr->total_e_and_g_expenditure = m.atoi( sRec->total_e_and_g_expenditure, 9 );
00319 sPtr->net_tutition_reenue_as_percent_of_e_and_g_expese = char(100 * m.atof( sRec->net_tutition_reenue_as_percent_of_e_and_g_expese, 9 ));
00320 sPtr->total_tenureline_faculty = m.atoi( sRec->total_tenureline_faculty, 9 );
00321 sPtr->sponsored_research_per_reg_faculty = (float) m.atof( sRec->sponsored_research_per_reg_faculty, 9 );
00322 sPtr->doctoral_degrees_per_reg_faculty = (float) m.atof( sRec->doctoral_degrees_per_reg_faculty, 9 );
00323
00324 sPtr->overhead_rate = char(100 * m.atof( sRec->overhead_rate, 7 ));
00325 sPtr->endowment_spending_rate = 100 * (float) m.atof( sRec->endowment_spending_rate, 7 );
00326 sPtr->enrollment_masters = m.atoi( sRec->enrollment_masters, 8 );
00327 sPtr->enrollment_doctoral = m.atoi( sRec->enrollment_doctoral, 8 );
00328 }
00329 }
00330
00331
00332
00333
00335
00336 SchoolRec2 *sRec;
00337 School *sPtr;
00338 Database dbSchool(SCHOOL_DB2, 1);
00339
00340 for( int i=0 ; i<db_school_count ; i++ ) {
00341 sRec = (SchoolRec2*) dbSchool.read(i+1);
00342 sPtr = db_school_array+i;
00343
00344
00345 sPtr->target_student_intake_sl[0] = m.atoi( sRec->target_student_intake_sl1, 7 );
00346 sPtr->target_student_intake_sl[1] = m.atoi( sRec->target_student_intake_sl2, 7 );
00347 sPtr->target_student_intake_sl[2] = m.atoi( sRec->target_student_intake_sl3, 7 );
00348 sPtr->target_student_intake_sl[3] = m.atoi( sRec->target_student_intake_sl4, 7 );
00349 sPtr->target_student_intake_sl[4] = m.atoi( sRec->target_student_intake_sl5, 7 );
00350
00351
00352 sPtr->dropout_rate_sl[0] = 100 * (float) m.atof( sRec->dropout_rate_sl1, 9 );
00353 sPtr->dropout_rate_sl[1] = 100 * (float) m.atof( sRec->dropout_rate_sl2, 6 );
00354 sPtr->dropout_rate_sl[2] = 100 * (float) m.atof( sRec->dropout_rate_sl3, 6 );
00355 sPtr->dropout_rate_sl[3] = 100 * (float) m.atof( sRec->dropout_rate_sl4, 6 );
00356 sPtr->dropout_rate_sl[4] = 100 * (float) m.atof( sRec->dropout_rate_sl5, 6 );
00357
00358 sPtr->target_grad_rate_sl[0] = 100 * (float) m.atof( sRec->target_grad_rate_sl1, 6 );
00359 sPtr->target_grad_rate_sl[1] = 100 * (float) m.atof( sRec->target_grad_rate_sl2, 6 );
00360 sPtr->target_grad_rate_sl[2] = 100 * (float) m.atof( sRec->target_grad_rate_sl3, 6 );
00361 sPtr->target_grad_rate_sl[3] = 100 * (float) m.atof( sRec->target_grad_rate_sl4, 6 );
00362 sPtr->target_grad_rate_sl[4] = 100 * (float) m.atof( sRec->target_grad_rate_sl5, 6 );
00363
00364
00365 sPtr->percent_ug_students_on_aid = char(100 * m.atof( sRec->pct_ug_students_on_aid, 7 ));
00366 sPtr->endowment_per_student = (float) m.atof( sRec->endowment_per_student, 10 );
00367 sPtr->endowment_per_tenureline_faculty_member = (float) m.atof( sRec->endowment_per_tenureline_faculty_member, 11 );
00368 sPtr->ratio_of_current_funds_balance_to_total_operating_expenditure = (float) m.atof( sRec->ratio_of_current_funds_balance_to_total_operating_expenditure, 10 );
00369 sPtr->financial_condition = m.atoi( sRec->financial_condition, 10 );
00370 sPtr->number_of_incoming_ug_students = m.atoi( sRec->number_of_incoming_ug_students, 10 );
00371 sPtr->female_student_percent = char(100 * m.atof( sRec->female_student_percent, 9 ));
00372 sPtr->minority_student_percent = char(100 * m.atof( sRec->minority_student_percent, 9 ));
00373
00374
00375
00376 sPtr->sponsored_research_rating = m.atoi( sRec->sponsored_research_rating, 9 );
00377
00378
00379
00380
00381 sPtr->doctoral_degres_per_faculty_rating = m.atoi( sRec->doctoral_degres_per_faculty_rating, 9 );
00382 sPtr->adj_freshmen_top_ten_percent_of_class = char(100 * m.atof( sRec->adj_freshmen_top_ten_percent_of_class, 9 ));
00383 sPtr->apps_ratio2 = (float) m.atof( sRec->apps_ratio2, 8 );
00384 sPtr->yield_rate2 = (float) m.atof( sRec->yield_rate2, 8 );
00385 sPtr->athletics_rating2 = m.atoi( sRec->athletics_rating2, 8 );
00386 sPtr->net_tuition_revenue_as_percent_of_e_and_g_expense = char(100 * m.atof( sRec->net_tuition_revenue_as_percent_of_e_and_g_expense, 8 ));
00387 sPtr->doc_time_to_degree = (float) m.atof( sRec->doc_time_to_degree, 11 );
00388 }
00389 }
00390
00391
00392
00393
00395
00396 PeerRec *pRec;
00397 PeerInfo *pPtr;
00398
00399 Database *dbSchool = game_set.open_db(PEER_SCHOOL_DB);
00400
00401 peer_info_count = (short) dbSchool->rec_count();
00402 peer_info_array = (PeerInfo*) mem_add( sizeof(PeerInfo) * peer_info_count );
00403
00404
00405
00406 memset( peer_info_array, 0, sizeof(PeerInfo) * peer_info_count );
00407
00408 for( int i=0 ; i<peer_info_count; i++ ) {
00409 pRec = (PeerRec*) dbSchool->read(i+1);
00410 pPtr = peer_info_array+i;
00411
00412 m.rtrim_fld( pPtr->name, pRec->name, pRec->NAME_LEN );
00413 }
00414 }
00415
00416
00417
00418
00425
00426
00427
00428
00429
00430
00431
00432 load_db_info();
00433
00434 #if(GAME_VERSION>=200)
00435
00436
00437
00438
00439
00440
00441
00442
00443 get_desired_school_array();
00444
00445
00446
00447
00448
00449
00450
00451
00452 for ( int i=0; i<desired_school_count; i++ )
00453 desired_school_array[i].calc_distance_first();
00454
00455
00456
00457
00458
00459
00460 get_50_school_array();
00461 #endif
00462
00463
00464
00465
00466
00467
00468
00469 School::calc_distance_all_school();
00470
00471
00472
00473
00474
00475
00476 build_school_ex_array();
00477
00478
00479
00480 init_player_school_ex();
00481
00482
00483
00484 build_peer_school_array();
00485
00486 PeerSchool::calc_average_faculty_salary();
00487
00488
00489
00490 free_db_info();
00491 }
00492
00493
00494
00495
00499
00500
00501
00502 #if(GAME_VERSION>=200)
00503 #else
00504
00505 for( int i=0 ; i<db_school_count ; i++ ) {
00506 School* sPtr = get_db_school(i+1);
00507 if ( sPtr->control != player_school.control )
00508 sPtr->distance_value = 10000;
00509 }
00510 #endif
00511
00512 #if(GAME_VERSION>=200)
00513
00514 short* schoolSortArray = (short*) mem_add( desired_school_count * sizeof(short) );
00515 for( int i=0 ; i<desired_school_count ; i++ )
00516 schoolSortArray[i] = i;
00517
00518
00519
00520 qsort( schoolSortArray, desired_school_count, sizeof(schoolSortArray[0]), sort_school_distance_function );
00521
00522 #else
00523
00524 short* schoolSortArray = (short*) mem_add( db_school_count * sizeof(short) );
00525 for( i=0 ; i<db_school_count ; i++ )
00526 schoolSortArray[i] = i+1;
00527
00528
00529
00530 qsort( schoolSortArray, db_school_count, sizeof(schoolSortArray[0]), sort_school_distance_function );
00531 #endif
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567 for( i=0 ; i<MAX_SCHOOL_EX_FOR_INIT_CONDITION ; i++ ) {
00568
00569 school_ex_array[i].init( schoolSortArray[i] );
00570 }
00571
00572 mem_del( schoolSortArray );
00573 }
00574
00575
00576
00577
00581
00582 player_peer_school = (PeerSchool *)mem_add(sizeof(PeerSchool));
00583 memset(player_peer_school, 0 ,sizeof(PeerSchool));
00584
00585 strcpy(player_peer_school->name, player_school.school_name);
00586
00587
00588
00589
00590 #define AVERAGE_SCHOOL_EX_VAR_FLOAT(varName) \
00591 player_peer_school->varName = math.average_float( (char*) school_ex_array, sizeof(SchoolEx), MAX_SCHOOL_EX_FOR_INIT_CONDITION, \
00592 (char*) &(school_ex_array[0].varName) - (char*) &(school_ex_array[0]) )
00593
00594 #define AVERAGE_SCHOOL_EX_VAR_INT(varName) \
00595 player_peer_school->varName = math.average_int( (char*) school_ex_array, sizeof(SchoolEx), MAX_SCHOOL_EX_FOR_INIT_CONDITION, \
00596 (char*) &(school_ex_array[0].varName) - (char*) &(school_ex_array[0]) )
00597
00598 #define AVERAGE_SCHOOL_EX_VAR_SHORT(varName) \
00599 player_peer_school->varName = math.average_short( (char*) school_ex_array, sizeof(SchoolEx), MAX_SCHOOL_EX_FOR_INIT_CONDITION, \
00600 (char*) &(school_ex_array[0].varName) - (char*) &(school_ex_array[0]) )
00601
00602 #define AVERAGE_SCHOOL_EX_VAR_CHAR(varName) \
00603 player_peer_school->varName = math.average_char( (char*) school_ex_array, sizeof(SchoolEx), MAX_SCHOOL_EX_FOR_INIT_CONDITION, \
00604 (char*) &(school_ex_array[0].varName) - (char*) &(school_ex_array[0]) )
00605
00606 #define AVERAGE_SCHOOL_EX_VAR_FLOAT_SKIP_ZERO(varName) \
00607 player_peer_school->varName = math.average_float( (char*) school_ex_array, sizeof(SchoolEx), MAX_SCHOOL_EX_FOR_INIT_CONDITION, \
00608 (char*) &(school_ex_array[0].varName) - (char*) &(school_ex_array[0]), true )
00609
00610 #define AVERAGE_SCHOOL_EX_VAR_INT_SKIP_ZERO(varName) \
00611 player_peer_school->varName = math.average_int( (char*) school_ex_array, sizeof(SchoolEx), MAX_SCHOOL_EX_FOR_INIT_CONDITION, \
00612 (char*) &(school_ex_array[0].varName) - (char*) &(school_ex_array[0]), true )
00613
00614 #define AVERAGE_SCHOOL_EX_VAR_SHORT_SKIP_ZERO(varName) \
00615 player_peer_school->varName = math.average_short( (char*) school_ex_array, sizeof(SchoolEx), MAX_SCHOOL_EX_FOR_INIT_CONDITION, \
00616 (char*) &(school_ex_array[0].varName) - (char*) &(school_ex_array[0]), true )
00617
00618 #define AVERAGE_SCHOOL_EX_VAR_CHAR_SKIP_ZERO(varName) \
00619 player_peer_school->varName = math.average_char( (char*) school_ex_array, sizeof(SchoolEx), MAX_SCHOOL_EX_FOR_INIT_CONDITION, \
00620 (char*) &(school_ex_array[0].varName) - (char*) &(school_ex_array[0]), true )
00621
00622 int i;
00623
00624
00625
00626
00627
00628 AVERAGE_SCHOOL_EX_VAR_SHORT(fice);
00629 AVERAGE_SCHOOL_EX_VAR_CHAR(control);
00630 AVERAGE_SCHOOL_EX_VAR_CHAR(carnegie);
00631 AVERAGE_SCHOOL_EX_VAR_CHAR(cc_sort);
00632 AVERAGE_SCHOOL_EX_VAR_CHAR(market_score);
00633
00634
00635
00636 AVERAGE_SCHOOL_EX_VAR_SHORT(usn_wr_ranking);
00637 AVERAGE_SCHOOL_EX_VAR_SHORT(ave_midpt_sat_act);
00638 AVERAGE_SCHOOL_EX_VAR_CHAR( freshmen_top_10_class);
00639
00640 AVERAGE_SCHOOL_EX_VAR_CHAR(campus_environment);
00641
00642 AVERAGE_SCHOOL_EX_VAR_CHAR(football_rating);
00643 AVERAGE_SCHOOL_EX_VAR_CHAR(basketball_rating);
00644
00645 AVERAGE_SCHOOL_EX_VAR_SHORT(in_state_tuition);
00646 AVERAGE_SCHOOL_EX_VAR_SHORT(out_state_tuition);
00647 AVERAGE_SCHOOL_EX_VAR_SHORT(room_and_board_charges);
00648 AVERAGE_SCHOOL_EX_VAR_CHAR(ug_in_housing_percent);
00649
00650 for (i=0; i<FACULTY_RANK_LEVEL_COUNT; i++) {
00651 AVERAGE_SCHOOL_EX_VAR_SHORT(school_faculty_array[i].faculty_count);
00652 AVERAGE_SCHOOL_EX_VAR_INT(school_faculty_array[i].salary);
00653 AVERAGE_SCHOOL_EX_VAR_FLOAT(school_faculty_array[i].female_percent);
00654 AVERAGE_SCHOOL_EX_VAR_FLOAT(school_faculty_array[i].minority_percent);
00655 }
00656 AVERAGE_SCHOOL_EX_VAR_FLOAT(parttime_faculty_percent);
00657
00658
00659
00660
00661 AVERAGE_SCHOOL_EX_VAR_INT(student_applications);
00662 AVERAGE_SCHOOL_EX_VAR_SHORT(student_accepted);
00663 AVERAGE_SCHOOL_EX_VAR_SHORT(student_enrolled);
00664 AVERAGE_SCHOOL_EX_VAR_CHAR(student_get_bacc_in_5_year_percent);
00665
00666
00667 AVERAGE_SCHOOL_EX_VAR_SHORT(freshmen_applied_for_aid);
00668 AVERAGE_SCHOOL_EX_VAR_FLOAT(percent_freshmen_applied_or_aid);
00669
00670 AVERAGE_SCHOOL_EX_VAR_SHORT(freshmen_with_need);
00671 AVERAGE_SCHOOL_EX_VAR_FLOAT_SKIP_ZERO(percent_freshmen_with_need);
00672
00673 AVERAGE_SCHOOL_EX_VAR_SHORT_SKIP_ZERO(freshmen_offered_aid);
00674 AVERAGE_SCHOOL_EX_VAR_FLOAT(percent_freshmen_offered_aid);
00675
00676 AVERAGE_SCHOOL_EX_VAR_SHORT(freshmen_offered_full_aid);
00677 AVERAGE_SCHOOL_EX_VAR_FLOAT_SKIP_ZERO(percent_freshmen_offered_full_aid);
00678
00679 AVERAGE_SCHOOL_EX_VAR_CHAR( percent_freshmen_with_fin_aid);
00680 AVERAGE_SCHOOL_EX_VAR_CHAR( percent_continuing_student_with_fin_aid);
00681
00682 AVERAGE_SCHOOL_EX_VAR_SHORT_SKIP_ZERO(institutional_aid_per_fte);
00683
00684
00685
00686 AVERAGE_SCHOOL_EX_VAR_INT(total_gross_tuition_revenue);
00687 AVERAGE_SCHOOL_EX_VAR_INT(total_financial_aid);
00688 AVERAGE_SCHOOL_EX_VAR_INT(total_sponsored_research);
00689 AVERAGE_SCHOOL_EX_VAR_INT(adjusted_total_sponsored_research);
00690 AVERAGE_SCHOOL_EX_VAR_INT(raw_endowment_spending);
00691 AVERAGE_SCHOOL_EX_VAR_INT(state_and_local_appropriations);
00692 AVERAGE_SCHOOL_EX_VAR_INT(total_gifts);
00693 AVERAGE_SCHOOL_EX_VAR_INT(gifts_to_operations);
00694 AVERAGE_SCHOOL_EX_VAR_SHORT(athletics_revenue);
00695 AVERAGE_SCHOOL_EX_VAR_INT(adjusted_other_operating_income);
00696 AVERAGE_SCHOOL_EX_VAR_INT(raw_other_operating_income);
00697
00698
00699
00700 AVERAGE_SCHOOL_EX_VAR_INT(academic_dept_total_salaries);
00701 AVERAGE_SCHOOL_EX_VAR_INT(academic_dept_faculty_salaries);
00702 AVERAGE_SCHOOL_EX_VAR_INT(academic_dept_other_expense);
00703
00704 AVERAGE_SCHOOL_EX_VAR_INT(sponsored_research_total_salaries);
00705 AVERAGE_SCHOOL_EX_VAR_INT(sponsored_research_faculty_salaries);
00706 AVERAGE_SCHOOL_EX_VAR_INT(sponsored_research_other_expense);
00707
00708 AVERAGE_SCHOOL_EX_VAR_INT(library_salaries);
00709 AVERAGE_SCHOOL_EX_VAR_INT(library_other_expense);
00710
00711 AVERAGE_SCHOOL_EX_VAR_INT(student_life_salaries);
00712 AVERAGE_SCHOOL_EX_VAR_INT(student_life_other_expense);
00713
00714 AVERAGE_SCHOOL_EX_VAR_INT(inst_support_salaries);
00715 AVERAGE_SCHOOL_EX_VAR_INT(inst_support_other_expense);
00716
00717 AVERAGE_SCHOOL_EX_VAR_INT(inst_support_net_salaries);
00718 AVERAGE_SCHOOL_EX_VAR_INT(inst_support_net_other_expense);
00719
00720 AVERAGE_SCHOOL_EX_VAR_INT(inst_advancement_salaries);
00721 AVERAGE_SCHOOL_EX_VAR_INT(inst_advancement_other_expense);
00722
00723 AVERAGE_SCHOOL_EX_VAR_INT(o_and_m_salaries);
00724 AVERAGE_SCHOOL_EX_VAR_INT(o_and_m_other_expense);
00725
00726 AVERAGE_SCHOOL_EX_VAR_INT(athletics_salaries);
00727 AVERAGE_SCHOOL_EX_VAR_INT(athletics_other_expense);
00728
00729 AVERAGE_SCHOOL_EX_VAR_INT(academic_support_salaries);
00730 AVERAGE_SCHOOL_EX_VAR_INT(academic_support_other_expense);
00731
00732
00733 AVERAGE_SCHOOL_EX_VAR_INT(end_of_year_endowment_market_value);
00734 AVERAGE_SCHOOL_EX_VAR_INT(current_funds_balance);
00735 AVERAGE_SCHOOL_EX_VAR_INT(year_end_book_value_of_plant);
00736 AVERAGE_SCHOOL_EX_VAR_INT(year_end_market_value_of_plant);
00737 AVERAGE_SCHOOL_EX_VAR_INT(year_end_capital_reserve);
00738 AVERAGE_SCHOOL_EX_VAR_INT(year_end_general_plant_and_residence_hall_debt);
00739 AVERAGE_SCHOOL_EX_VAR_INT(residence_hall_debt);
00740
00741 AVERAGE_SCHOOL_EX_VAR_INT(raw_surplus);
00742 AVERAGE_SCHOOL_EX_VAR_INT(adjusted_surplus);
00743 AVERAGE_SCHOOL_EX_VAR_INT(transfer_to_plant);
00744 AVERAGE_SCHOOL_EX_VAR_INT(amount_added_to_other_operating_income);
00745
00746
00747 AVERAGE_SCHOOL_EX_VAR_SHORT(full_time_undergrad);
00748 AVERAGE_SCHOOL_EX_VAR_SHORT(part_time_undergrad);
00749 AVERAGE_SCHOOL_EX_VAR_SHORT(master_and_professional);
00750 AVERAGE_SCHOOL_EX_VAR_SHORT(non_degree_seeking);
00751 AVERAGE_SCHOOL_EX_VAR_CHAR(female_undergrad_percent);
00752 AVERAGE_SCHOOL_EX_VAR_CHAR(female_grad_and_prof_percent);
00753 AVERAGE_SCHOOL_EX_VAR_CHAR(minority_undergrad_percent);
00754 AVERAGE_SCHOOL_EX_VAR_CHAR(minority_grad_and_prof_percent);
00755 AVERAGE_SCHOOL_EX_VAR_CHAR(non_resident_alien_grad_and_prof_percent);
00756
00757
00758 AVERAGE_SCHOOL_EX_VAR_SHORT(full_time_freshmen);
00759 AVERAGE_SCHOOL_EX_VAR_CHAR(freshmen_from_within_the_state_percent);
00760 AVERAGE_SCHOOL_EX_VAR_SHORT(total_bach_degrees);
00761 AVERAGE_SCHOOL_EX_VAR_SHORT(total_masters_and_prof_degree);
00762 AVERAGE_SCHOOL_EX_VAR_SHORT(total_doctoral_degrees);
00763 AVERAGE_SCHOOL_EX_VAR_SHORT(total_certificates);
00764
00765
00766 AVERAGE_SCHOOL_EX_VAR_INT(enrollment_fte);
00767 AVERAGE_SCHOOL_EX_VAR_CHAR(ug_percent);
00768 AVERAGE_SCHOOL_EX_VAR_CHAR(part_time_ug_percent);
00769 AVERAGE_SCHOOL_EX_VAR_CHAR(non_degree_seeking_percent);
00770
00771 AVERAGE_SCHOOL_EX_VAR_FLOAT(applications_ratio);
00772 AVERAGE_SCHOOL_EX_VAR_CHAR(yield_rate);
00773 AVERAGE_SCHOOL_EX_VAR_CHAR(athletics_rating);
00774
00775 AVERAGE_SCHOOL_EX_VAR_INT(total_e_and_g_expenditure);
00776 AVERAGE_SCHOOL_EX_VAR_CHAR(net_tutition_reenue_as_percent_of_e_and_g_expese);
00777
00778 AVERAGE_SCHOOL_EX_VAR_SHORT(total_tenureline_faculty);
00779 AVERAGE_SCHOOL_EX_VAR_FLOAT(sponsored_research_per_reg_faculty);
00780 AVERAGE_SCHOOL_EX_VAR_FLOAT(doctoral_degrees_per_reg_faculty);
00781
00782 AVERAGE_SCHOOL_EX_VAR_CHAR(overhead_rate);
00783 AVERAGE_SCHOOL_EX_VAR_FLOAT(endowment_spending_rate);
00784
00785 AVERAGE_SCHOOL_EX_VAR_SHORT(enrollment_masters);
00786 AVERAGE_SCHOOL_EX_VAR_SHORT(enrollment_doctoral);
00787
00788
00789
00790 for(i=0;i<5;i++) {
00791 AVERAGE_SCHOOL_EX_VAR_SHORT(target_student_intake_sl[i]);
00792 AVERAGE_SCHOOL_EX_VAR_FLOAT_SKIP_ZERO(dropout_rate_sl[i]);
00793 AVERAGE_SCHOOL_EX_VAR_FLOAT_SKIP_ZERO(target_grad_rate_sl[i]);
00794 }
00795
00796
00797 AVERAGE_SCHOOL_EX_VAR_CHAR_SKIP_ZERO(percent_ug_students_on_aid);
00798 AVERAGE_SCHOOL_EX_VAR_FLOAT(endowment_per_student);
00799 AVERAGE_SCHOOL_EX_VAR_FLOAT(endowment_per_tenureline_faculty_member);
00800 AVERAGE_SCHOOL_EX_VAR_FLOAT(ratio_of_current_funds_balance_to_total_operating_expenditure);
00801 AVERAGE_SCHOOL_EX_VAR_CHAR(financial_condition);
00802 AVERAGE_SCHOOL_EX_VAR_SHORT(number_of_incoming_ug_students);
00803 AVERAGE_SCHOOL_EX_VAR_CHAR(female_student_percent);
00804 AVERAGE_SCHOOL_EX_VAR_CHAR(minority_student_percent);
00805 AVERAGE_SCHOOL_EX_VAR_CHAR(sponsored_research_rating);
00806 AVERAGE_SCHOOL_EX_VAR_CHAR(doctoral_degres_per_faculty_rating);
00807 AVERAGE_SCHOOL_EX_VAR_CHAR(adj_freshmen_top_ten_percent_of_class);
00808
00809 AVERAGE_SCHOOL_EX_VAR_FLOAT(apps_ratio2);
00810 AVERAGE_SCHOOL_EX_VAR_FLOAT(yield_rate2);
00811 AVERAGE_SCHOOL_EX_VAR_CHAR(athletics_rating2);
00812 AVERAGE_SCHOOL_EX_VAR_CHAR(net_tuition_revenue_as_percent_of_e_and_g_expense);
00813
00814 AVERAGE_SCHOOL_EX_VAR_FLOAT_SKIP_ZERO(doc_time_to_degree);
00815
00816
00817 AVERAGE_SCHOOL_EX_VAR_FLOAT(prestige);
00818 AVERAGE_SCHOOL_EX_VAR_FLOAT(distance_value);
00819
00820
00821
00822
00823
00824 AVERAGE_SCHOOL_EX_VAR_INT(operating_reserve);
00825 AVERAGE_SCHOOL_EX_VAR_INT(endowment_market);
00826 AVERAGE_SCHOOL_EX_VAR_INT(buildings);
00827 AVERAGE_SCHOOL_EX_VAR_INT(capital_reserve);
00828 AVERAGE_SCHOOL_EX_VAR_INT(general_plant_debt);
00829 AVERAGE_SCHOOL_EX_VAR_INT(residence_hall_debt);
00830 AVERAGE_SCHOOL_EX_VAR_INT(fund_balance);
00831
00832
00833
00834 AVERAGE_SCHOOL_EX_VAR_INT(gross_tuition_revenue);
00835 AVERAGE_SCHOOL_EX_VAR_INT(financial_aid);
00836 AVERAGE_SCHOOL_EX_VAR_INT(net_tuition_revenue);
00837
00838 AVERAGE_SCHOOL_EX_VAR_INT(state_appropriations);
00839 AVERAGE_SCHOOL_EX_VAR_INT(sponsored_research);
00840 AVERAGE_SCHOOL_EX_VAR_INT(gifts_to_operations);
00841 AVERAGE_SCHOOL_EX_VAR_INT(endowment_spending);
00842
00843
00844 AVERAGE_SCHOOL_EX_VAR_SHORT(athletics);
00845
00846 AVERAGE_SCHOOL_EX_VAR_INT(other_operating_income);
00847
00848 AVERAGE_SCHOOL_EX_VAR_INT(interest_on_operating_reserve);
00849
00850 AVERAGE_SCHOOL_EX_VAR_INT(total_sources_of_funds);
00851
00852
00853
00854 AVERAGE_SCHOOL_EX_VAR_INT(dept_expense_faculty_salaries);
00855
00856 AVERAGE_SCHOOL_EX_VAR_INT(dept_expense_staff_salaries);
00857 AVERAGE_SCHOOL_EX_VAR_INT(dept_expense_other);
00858
00859 AVERAGE_SCHOOL_EX_VAR_INT(sponsored_research_faculty_salaries);
00860
00861 AVERAGE_SCHOOL_EX_VAR_INT(sponsored_research_staff_salaries);
00862
00863 AVERAGE_SCHOOL_EX_VAR_INT(sponsored_research_other);
00864
00865
00866
00867 AVERAGE_SCHOOL_EX_VAR_INT(library_staff_salaries);
00868
00869 AVERAGE_SCHOOL_EX_VAR_INT(library_other_expense);
00870
00871
00872 AVERAGE_SCHOOL_EX_VAR_INT(academic_it_staff_salaries);
00873
00874 AVERAGE_SCHOOL_EX_VAR_INT(academic_it_other_expense);
00875
00876
00877
00878 AVERAGE_SCHOOL_EX_VAR_INT(student_life_staff_salaries);
00879
00880 AVERAGE_SCHOOL_EX_VAR_INT(student_life_other_expense);
00881
00882
00883
00884
00885
00886
00887
00888 AVERAGE_SCHOOL_EX_VAR_INT(inst_advancement_staff_salaries);
00889
00890 AVERAGE_SCHOOL_EX_VAR_INT(inst_advancement_other_expense);
00891
00892
00893 AVERAGE_SCHOOL_EX_VAR_INT(administration_staff_salaries);
00894
00895 AVERAGE_SCHOOL_EX_VAR_INT(administration_other_expense);
00896
00897
00898 AVERAGE_SCHOOL_EX_VAR_INT(o_and_m_staff_salaries);
00899
00900 AVERAGE_SCHOOL_EX_VAR_INT(o_and_m_other_expense);
00901
00902
00903
00904 AVERAGE_SCHOOL_EX_VAR_INT(other_operating_expense_staff_salaries);
00905
00906 AVERAGE_SCHOOL_EX_VAR_INT(other_operating_expense_other_expense);
00907
00908
00909 AVERAGE_SCHOOL_EX_VAR_INT(total_operating_expenditure);
00910
00911
00912
00913 AVERAGE_SCHOOL_EX_VAR_INT(service_on_general_plant_debt);
00914
00915
00916 AVERAGE_SCHOOL_EX_VAR_INT(transfer_to_capital_reserve);
00917 AVERAGE_SCHOOL_EX_VAR_INT(total_uses_of_funds);
00918 AVERAGE_SCHOOL_EX_VAR_INT(surplus_or_deficit);
00919
00920
00921
00922 AVERAGE_SCHOOL_EX_VAR_INT_SKIP_ZERO(tuition_rate);
00923
00924 AVERAGE_SCHOOL_EX_VAR_SHORT_SKIP_ZERO(room_and_board_rate);
00925
00926 AVERAGE_SCHOOL_EX_VAR_FLOAT(percent_traditional_ug_in_residence_halls);
00927
00928 AVERAGE_SCHOOL_EX_VAR_FLOAT(percent_get_bacc_in_5_year);
00929
00930 AVERAGE_SCHOOL_EX_VAR_CHAR_SKIP_ZERO(overhead_rate_on_sponsored_research);
00931
00932 AVERAGE_SCHOOL_EX_VAR_FLOAT_SKIP_ZERO(endowment_spending_rate);
00933
00934
00935 for (i=0; i<FACULTY_RANK_LEVEL_COUNT; i++) {
00936 AVERAGE_SCHOOL_EX_VAR_SHORT(school_faculty_array_ex[i].faculty_count);
00937 AVERAGE_SCHOOL_EX_VAR_INT_SKIP_ZERO(school_faculty_array_ex[i].salary);
00938 AVERAGE_SCHOOL_EX_VAR_FLOAT_SKIP_ZERO(school_faculty_array_ex[i].female_percent);
00939 AVERAGE_SCHOOL_EX_VAR_FLOAT_SKIP_ZERO(school_faculty_array_ex[i].minority_percent);
00940 AVERAGE_SCHOOL_EX_VAR_INT(school_faculty_array_ex[i].active_research_dollars);
00941 }
00942
00943
00944
00945 AVERAGE_SCHOOL_EX_VAR_SHORT(full_time_undergrad);
00946
00947 AVERAGE_SCHOOL_EX_VAR_SHORT(part_time_undergrad);
00948 AVERAGE_SCHOOL_EX_VAR_SHORT(enrollment_masters);
00949
00950 AVERAGE_SCHOOL_EX_VAR_SHORT(enrollment_doctoral);
00951 AVERAGE_SCHOOL_EX_VAR_SHORT(non_degree_seeking);
00952
00953
00954
00955 AVERAGE_SCHOOL_EX_VAR_CHAR_SKIP_ZERO(percent_female_sl[0]);
00956
00957 AVERAGE_SCHOOL_EX_VAR_CHAR_SKIP_ZERO(percent_female_sl[1]);
00958
00959 AVERAGE_SCHOOL_EX_VAR_CHAR_SKIP_ZERO(percent_female_sl[2]);
00960
00961 AVERAGE_SCHOOL_EX_VAR_CHAR_SKIP_ZERO(percent_female_sl[3]);
00962
00963 AVERAGE_SCHOOL_EX_VAR_CHAR_SKIP_ZERO(percent_female_sl[4]);
00964
00965
00966
00967 AVERAGE_SCHOOL_EX_VAR_CHAR_SKIP_ZERO(percent_minority_sl[0]);
00968
00969 AVERAGE_SCHOOL_EX_VAR_CHAR_SKIP_ZERO(percent_minority_sl[1]);
00970
00971 AVERAGE_SCHOOL_EX_VAR_CHAR_SKIP_ZERO(percent_minority_sl[2]);
00972
00973 AVERAGE_SCHOOL_EX_VAR_CHAR_SKIP_ZERO(percent_minority_sl[3]);
00974
00975 AVERAGE_SCHOOL_EX_VAR_CHAR_SKIP_ZERO(percent_minority_sl[4]);
00976
00977
00978 AVERAGE_SCHOOL_EX_VAR_CHAR(percent_instate_freshmen);
00979
00980 AVERAGE_SCHOOL_EX_VAR_CHAR_SKIP_ZERO(percent_non_resident_alien_doctoral);
00981
00982
00983
00984
00985
00986
00987
00988
00989
00990
00991
00992
00993
00994 AVERAGE_SCHOOL_EX_VAR_INT(ug_applications);
00995
00996 AVERAGE_SCHOOL_EX_VAR_FLOAT(ug_applications_rate);
00997 AVERAGE_SCHOOL_EX_VAR_CHAR(ug_yield_rate);
00998
00999
01000
01001
01002
01003
01004
01005
01006
01007
01008 for (short sl=0; sl<MAX_STUDENT_LEVEL_INI; sl++)
01009 for (short fd=0; fd < IPED_FIELD_COUNT; fd++) {
01010
01011 AVERAGE_SCHOOL_EX_VAR_FLOAT(student_ifield_pct[sl][fd]);
01012 }
01013
01014 #ifdef DEBUG_
01015 const short specialOrder[IPED_FIELD_COUNT] = {
01016 AGRICULTURE,INTER_DISCIPLINARY,BUSINESS,COMMUNICAIONS_LIBRARY_SCI,
01017 MATH_COMP_SCI,EDUCATION,ENGINEERING,FOREIGN_LANGUAGES,HEALTH_SOCIAL_SVCS,HUMANITIES,
01018 LIFE_PHYSICAL_SCI,SOCIAL_SCIENCES,VISUAL_PERFORMING_ARTS,BASIC_PERSONAL_PRACTICAL_SVCS
01019 };
01020 for (short fd=0; fd<IPED_FIELD_COUNT; fd++) {
01021 char s[300];
01022 sprintf(s, "schoolex: average: %f ", player_peer_school->student_ifield_pct[0][specialOrder[fd]]);
01023 debug_msg(s);
01024 }
01025 #endif
01026
01027
01028 }
01029
01030
01031
01032
01036
01037 #if(GAME_VERSION>=200)
01038 float distanceA = school_res.desired_school_array[*((short*)a)].distance_value;
01039 float distanceB = school_res.desired_school_array[*((short*)b)].distance_value;
01040 #else
01041 float distanceA = school_res.get_db_school(*((short*)a))->distance_value;
01042 float distanceB = school_res.get_db_school(*((short*)b))->distance_value;
01043 #endif
01044
01045 float rc = distanceA-distanceB;
01046
01047 if( rc > 0 )
01048 return 1;
01049 else if( rc < 0 )
01050 return -1;
01051 else
01052 return 0;
01053 }
01054
01055
01056
01057
01061
01062 #if(GAME_VERSION>=200)
01063 float prestigeA = school_res.desired_school_array[*((short*)a)].prestige;
01064 float prestigeB = school_res.desired_school_array[*((short*)b)].prestige;
01065 #else
01066 float prestigeA = school_res.get_db_school(*((short*)a))->prestige;
01067 float prestigeB = school_res.get_db_school(*((short*)b))->prestige;
01068 #endif
01069
01070 float rc = prestigeA - prestigeB;
01071
01072 if( rc > 0 )
01073 return 1;
01074 else if( rc < 0 )
01075 return -1;
01076 else
01077 return 0;
01078 }
01079
01080
01081
01082
01084
01085 School* SchoolRes::get_db_school(int recno) {
01086 err_when( recno < 1 || recno > db_school_count );
01087
01088 return db_school_array+recno-1;
01089 }
01090 #endif
01091
01092
01093
01097
01098 int i, recno;
01099 float distanceDeviation = 0.0f;
01100 float distanceAverage = 0.0f;
01101
01102 #if(GAME_VERSION>=200)
01103 School *sPtr = desired_school_array;
01104
01105
01106
01107
01108 for( recno=1; recno<=desired_school_count; recno++ ) {
01109 distanceAverage += desired_school_array[recno-1].distance_value;
01110 }
01111 distanceAverage /= desired_school_count;
01112
01113 for( recno=1; recno<=desired_school_count; recno++ )
01114 distanceDeviation += EXPO2(desired_school_array[recno-1].distance_value - distanceAverage);
01115 distanceDeviation /= desired_school_count;
01116 distanceDeviation = sqrtf(distanceDeviation);
01117
01118
01119 #else
01120 School *sPtr = db_school_array;
01121
01122
01123
01124
01125 for( recno=1; recno<=db_school_count; recno++ ) {
01126 distanceAverage += db_school_array[recno-1].distance_value;
01127 }
01128 distanceAverage /= db_school_count;
01129
01130 for( recno=1; recno<=db_school_count; recno++ )
01131 distanceDeviation += EXPO2(db_school_array[recno-1].distance_value - distanceAverage);
01132 distanceDeviation /= db_school_count;
01133 distanceDeviation = sqrtf(distanceDeviation);
01134
01135
01136 #endif
01137
01138
01139
01140
01141 DynArray peerRecnoArr(sizeof(int), 20);
01142
01143
01144 const float C = 0.1f;
01145 const float screenRange = player_peer_school->distance_value + C * distanceDeviation;
01146 int count = 0;
01147
01148 #if(GAME_VERSION>=200)
01149 sPtr = desired_school_array;
01150 for( recno=0; recno<desired_school_count ; recno++, sPtr++ ) {
01151 if ( sPtr->distance_value < screenRange ) {
01152 peerRecnoArr.linkin((void *) &recno);
01153
01154 if( ++count == MAX_PEER_SCHOOL_COUNT )
01155 break;
01156 }
01157 }
01158 #else
01159 sPtr = db_school_array;
01160 for( recno=1; recno<=db_school_count ; recno++, sPtr++ ) {
01161 if ( sPtr->distance_value < screenRange ) {
01162 peerRecnoArr.linkin((void *) &recno);
01163
01164 if( ++count == MAX_PEER_SCHOOL_COUNT )
01165 break;
01166 }
01167 }
01168 #endif
01169
01170 peer_school_count = peerRecnoArr.size();
01171
01172
01173
01174
01175
01176
01177
01178 short* schoolSortArray = (short*) mem_add( peer_school_count * sizeof(short) );
01179
01180 for( i=1; i<=peer_school_count; i++ ) {
01181 schoolSortArray[i-1] = *((int *) peerRecnoArr.get(i));
01182
01183 #ifdef DEBUG_PEER
01184 char s[100];
01185 recno = *((int *) peerRecnoArr.get(i));
01186 #if(GAME_VERSION>=200)
01187 sprintf(s, "b4 sort: recno/prestige/distance #%d = %d %f %f", i, recno, desired_school_array[recno-1].prestige, desired_school_array[recno-1].distance_value);
01188 #else
01189 sprintf(s, "b4 sort: recno/prestige/distance #%d = %d %f %f", i, recno, db_school_array[recno-1].prestige, db_school_array[recno-1].distance_value);
01190 #endif
01191 DEBUG_LOG(s);
01192 #endif
01193 }
01194
01195
01196 qsort( schoolSortArray, peer_school_count, sizeof(schoolSortArray[0]), sort_peerschool_prestige_function );
01197
01198
01199
01200
01201 peer_school_array = (PeerSchool*) mem_add( sizeof(PeerSchool) * (peer_school_count+1) );
01202 PeerSchool *psPtr = peer_school_array;
01203 bool isPlayerAdded = false;
01204
01205
01206 for ( i=0; i<peer_school_count; i++, psPtr++) {
01207 recno = schoolSortArray[i];
01208
01209 #if(GAME_VERSION>=200)
01210 if ( !isPlayerAdded && desired_school_array[recno].prestige > player_peer_school->prestige )
01211 #else
01212 if ( !isPlayerAdded && db_school_array[recno-1].prestige > player_peer_school->prestige )
01213 #endif
01214 {
01215
01216
01217
01218
01219 psPtr->init(-1);
01220
01221 memcpy(psPtr, player_peer_school, sizeof(PeerSchool));
01222 mem_del(player_peer_school);
01223 player_peer_school = psPtr;
01224
01225 psPtr++;
01226 isPlayerAdded = true;
01227
01228
01229 }
01230
01231
01232 psPtr->init(recno);
01233
01234
01235
01236 int loopCount=0;
01237
01238 while(1) {
01239 err_when( loopCount++ > 10000 );
01240
01241 int peerId = m.random(peer_info_count);
01242
01243
01244
01245 char* newName = peer_info_array[peerId].name;
01246
01247 for ( int j=0; j<peer_school_count; j++ ) {
01248 if( strcmp( peer_school_array[j].name, newName )==0 )
01249 break;
01250 }
01251
01252 if( j<peer_school_count )
01253 continue;
01254
01255
01256
01257 strcpy(psPtr->name, newName);
01258 break;
01259 }
01260
01261 #ifdef DEBUG_PEER
01262 char s[100];
01263 sprintf(s, "af sort: recno/prestige/distance %d = %d %f %f", i+1, recno, psPtr->prestige, psPtr->distance_value);
01264 DEBUG_LOG(s);
01265 #endif
01266 }
01267
01268
01269
01270
01271 if( !isPlayerAdded ) {
01272 psPtr->init(-1);
01273
01274 memcpy(psPtr, player_peer_school, sizeof(PeerSchool));
01275 mem_del(player_peer_school);
01276 player_peer_school = psPtr;
01277
01278 psPtr++;
01279 isPlayerAdded = true;
01280 }
01281
01282
01283 peer_school_count++;
01284 mem_del( schoolSortArray );
01285
01286
01287
01288
01289 memset(PeerSchool::average_faculty_salary, 0, sizeof(PeerSchool::average_faculty_salary));
01290
01291 psPtr = peer_school_array;
01292
01293 for ( i=0; i<peer_school_count; i++, psPtr++) {
01294 for (int r=0; r<FACULTY_RANK_LEVEL_COUNT; r++) {
01295
01296 PeerSchool::average_faculty_salary[Faculty::rank_age_group(r, 51)] += psPtr->school_faculty_array_ex[r].salary;
01297 }
01298 }
01299
01300 for (int r=0; r<MAX_RANK_AGE_GROUP; r++)
01301 PeerSchool::average_faculty_salary[r] /= peer_school_count;
01302
01303
01304
01305 int lowFullProf = Faculty::rank_age_group(FULL_PROF, 41);
01306 int midFullProf = Faculty::rank_age_group(FULL_PROF, 51);
01307 int highFullProf = Faculty::rank_age_group(FULL_PROF, 61);
01308
01309 char templateCode[1] = { FIRST_TEMPLATE_CODE };
01310 FacultyTemplate* facultyTemplate = faculty_res.get_faculty_template( templateCode, lowFullProf );
01311 FacultyTemplate* facultyTemplate2 = faculty_res.get_faculty_template( templateCode, midFullProf );
01312 FacultyTemplate* facultyTemplate3 = faculty_res.get_faculty_template( templateCode, highFullProf );
01313
01314 float lowRatio = float(facultyTemplate->overall_salary_multiplier) / facultyTemplate2->overall_salary_multiplier;
01315 float highRatio = float(facultyTemplate3->overall_salary_multiplier) / facultyTemplate2->overall_salary_multiplier;
01316
01317 PeerSchool::average_faculty_salary[lowFullProf] = int(lowRatio * PeerSchool::average_faculty_salary[midFullProf]);
01318 PeerSchool::average_faculty_salary[highFullProf] = int(highRatio * PeerSchool::average_faculty_salary[midFullProf]);
01319
01320
01321
01322
01323 if ( player_school.scenario_id == SCN_RAISE_SALARY ) {
01324 for (int r=0; r<MAX_RANK_AGE_GROUP; r++)
01325 PeerSchool::average_faculty_salary[r] = int(PeerSchool::average_faculty_salary[r] * 1.1);
01326 }
01327 }
01328
01329
01330
01331
01335
01336
01337 if ( info.game_day == 1 && info.game_month == finance.fiscal_year_start_month )
01338 PeerSchool::calc_average_faculty_salary();
01339 }
01340
01341
01342
01343 #if(GAME_VERSION>=200)
01344
01345
01346
01347 void SchoolRes::get_desired_school_array() {
01348 short numCount=0;
01349
01350
01351 for ( int i=0; i<db_school_count; i++ ) {
01352
01353 if ( get_db_school(i+1)->control == player_school.control ) {
01354 numCount++;
01355 }
01356 }
01357
01358 desired_school_count = numCount;
01359 desired_school_array = (School*) mem_add( sizeof(School) * desired_school_count );
01360
01361 numCount = 0;
01362
01363 for ( i=0; i<db_school_count; i++ ) {
01364
01365 if ( get_db_school(i+1)->control == player_school.control ) {
01366 memcpy( &desired_school_array[numCount], get_db_school(i+1), sizeof(School) );
01367 desired_school_array[numCount].desired_recno = i+1;
01368 numCount++;
01369 }
01370 }
01371 }
01372
01373
01374
01375
01376
01377
01378 void SchoolRes::get_50_school_array() {
01379
01380 short* schoolSortArray = (short*) mem_add( desired_school_count * sizeof(short) );
01381
01382 for ( int i=0; i<desired_school_count; i++ )
01383 schoolSortArray[i] = i;
01384
01385
01386 qsort( schoolSortArray, desired_school_count, sizeof(schoolSortArray[0]), sort_school_distance_function );
01387
01388
01389 short* tempSchoolRecnoArray = (short*) mem_add( MAX_FIRST_SCHOOL * sizeof(short) );
01390 for ( i=0; i<MAX_FIRST_SCHOOL; i++ )
01391 tempSchoolRecnoArray[i] = desired_school_array[schoolSortArray[i]].desired_recno;
01392 for ( i=0; i<MAX_FIRST_SCHOOL; i++ ) {
01393 memcpy( &desired_school_array[i], get_db_school(tempSchoolRecnoArray[i]), sizeof(School) );
01394 desired_school_array[i].desired_recno = tempSchoolRecnoArray[i];
01395 }
01396
01397
01398 desired_school_count = MAX_FIRST_SCHOOL;
01399
01400 desired_school_array = (School*) mem_resize( desired_school_array, sizeof(School) * desired_school_count );
01401
01402 mem_del(schoolSortArray);
01403 mem_del(tempSchoolRecnoArray);
01404 }
01405
01406
01407
01408 #endi