00001
00002
00003
00004 #include <KEY.H>
00005 #include <OVGA.H>
00006 #include <OFONT.H>
00007 #include <OWORLD.H>
00008 #include <OSYS.H>
00009 #include <OSCHLRES.H>
00010 #include <OPEERSCH.H>
00011 #include <OINFO.H>
00012 #include <OGRPHYR.H>
00013 #include <OIFACE.H>
00014 #include <OBUTTON.H>
00015 #include <ODEPT.H>
00016 #include <OPSCHOOL.H>
00017 #include <OSTUDENT.H>
00018 #include <OTEXT.H>
00019 #include <OLgTEXT.H>
00020 #include <OGAMESTR.H>
00021 #include <OPIECHRT.H>
00022 #include <OGRPH_PM.H>
00023 #include <OHELPIF.H>
00024 #include <OVBROW98.H>
00025 #include <OAUDIO.H>
00026 #include <OCONFIG.H>
00027 #include <OTASK.H>
00028
00029
00030
00031 enum {
00032 REPORT_X1 = ZOOM_X1+15,
00033 REPORT_Y1 = ZOOM_Y1+10,
00034 REPORT_X2 = ZOOM_X2-15,
00035 REPORT_Y2 = ZOOM_Y2-40,
00036 };
00037
00038 enum {
00039 BOTTOM_BUTTON_WIDTH = 100,
00040 BOTTOM_BUTTON_WIDTH2 = 150,
00041 BOTTOM_BUTTON_WIDTH3 = 220,
00042 BOTTOM_BUTTON_HEIGHT = 25,
00043 BOTTOM_BUTTON_DISTANCE
00044 = (REPORT_X2-REPORT_X1-BOTTOM_BUTTON_WIDTH*6)/6+30 ,
00045 BOTTOM_BUTTON_DISTANCE2
00046 = (REPORT_X2-REPORT_X1-BOTTOM_BUTTON_WIDTH2*2)/24,
00047 BOTTOM_BUTTON_DISTANCE3
00048 = (REPORT_X2-REPORT_X1-BOTTOM_BUTTON_WIDTH3*3)/3-5
00049 };
00050
00051 enum {
00052 WINDOW_X1 = REPORT_X1+10,
00053 WINDOW_Y1 = REPORT_Y1+16,
00054 WINDOW_X2 = REPORT_X2-10,
00055
00056 WINDOW_Y2 = REPORT_Y2-52,
00057 };
00058
00059 enum {
00060 BG_PIC_ID = 10
00061 };
00062
00063 enum {
00064 MODE_OVERALL=0,
00065 MODE_RANK=1,
00066 MODE_OUTPUTS=2,
00067 MODE_GENERAL_INSTITUTIONAL_PERFORMANCE=3,
00068 MODE_ATTITUDES_TOWARD_THE_INSTITUTION=4,
00069 MODE_FINANCE=5,
00070 MODE_MANAGEMENT=6,
00071 MODE_ADMISSION=7,
00072 };
00073
00074 static char report_init_flag=0;
00075
00076 static ButtonGroup type_button_group(8);
00077
00078 static Button help_button_array[9];
00079
00080 static short *type_button_up_bitmap[8];
00081
00082 static short *type_button_down_bitmap[8];
00083
00084 static char *type_button_label[8]= {
00085 "Overall","Rank","Outputs",
00086 "Performance indicators",
00087 "Attitudes toward the institution",
00088 "Financial indicators","Management","Admission"
00089 };
00090
00091 static void report_overall(int);
00092 static void report_rank(int);
00093 static void report_outputs(int);
00094 static void report_general(int);
00095 static void report_attitudes(int);
00096 static void report_management(int);
00097 static void report_finance(int);
00098
00099 static int detect_overall();
00100 static int detect_rank();
00101 static int detect_outputs();
00102 static int detect_general();
00103 static int detect_attitudes();
00104 static int detect_management();
00105 static int detect_finance();
00106
00107 static void deinit_overall();
00108 static void deinit_rank();
00109 static void deinit_outputs();
00110 static void deinit_general();
00111 static void deinit_attitudes();
00112 static void deinit_management();
00113 static void deinit_finance();
00114
00115 static void overall_disp_rep_row(int recNo, int x, int y, int refreshFlag);
00116 static void rank_disp_rep_row(int recNo, int x, int y, int refreshFlag);
00117
00118 typedef void (*ReportFP)(int refreshFlag);
00119 typedef int (*DetectFP)();
00120 typedef void (*DeinitFP)();
00121
00122 static ReportFP report_func_ptr[] = {
00123 &report_overall,
00124 &report_rank,
00125 &report_outputs,
00126 &report_general,
00127 &report_attitudes,
00128
00129 &report_finance,
00130 };
00131
00132 static DetectFP detect_func_ptr[] = {
00133 &detect_overall,
00134 &detect_rank,
00135 &detect_outputs,
00136 &detect_general,
00137 &detect_attitudes,
00138
00139 &detect_finance,
00140 };
00141
00142 static DeinitFP deinit_func_ptr[] = {
00143 &deinit_overall,
00144 &deinit_rank,
00145 &deinit_outputs,
00146 &deinit_general,
00147 &deinit_attitudes,
00148
00149 &deinit_finance,
00150 };
00151
00152 void PlayerSchool::score_report(int refreshFlag) {
00153 const static tab1=10,tab2=150,tab3=320,tab4=420,tab5=490,tab6=620,tab7=680;
00154 const static vtab1=22,vtab2=37,vtab3=200,vtab4=330,vtab5=320;
00155
00156 vga.use_back();
00157 sys.is_institution_report=1;
00158 if( refreshFlag == INFO_REPAINT ) {
00159
00160 if( report_init_flag )
00161 score_report_deinit();
00162 report_init_flag = 1;
00163
00164
00165
00166 user_interface.bg_img(BG_PIC_ID, &vga_back);
00167
00168
00169 user_interface.brighten(REPORT_X1+100,REPORT_Y1-10,REPORT_X1+630,REPORT_Y1+13);
00170 user_interface.rect(REPORT_X1+100,REPORT_Y1-10,REPORT_X1+630,REPORT_Y1+13,1);
00171 font_charts.put(REPORT_X1+300,REPORT_Y1-4,"Game Score");
00172
00173 for (int i = 0; i < 6 ;i++) {
00174 type_button_up_bitmap[i] = NULL;
00175 type_button_down_bitmap[i] = NULL;
00176 }
00177
00178 int x=REPORT_X1+tab1;
00179 int y=REPORT_Y1+vtab4;
00180
00181 user_interface.create_button_bitmap(x, y,
00182 x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00183 type_button_label[0], &type_button_up_bitmap[0],
00184 &type_button_down_bitmap[0], &vga_back);
00185
00186 type_button_group[0].create_bitmapW(x, y,
00187 x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00188 ((i == current_score_report_type) ?
00189 type_button_down_bitmap[0] :
00190 type_button_up_bitmap[0])+4);
00191
00192 y+=30;
00193
00194 user_interface.create_button_bitmap(x, y,
00195 x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00196 type_button_label[1], &type_button_up_bitmap[1],
00197 &type_button_down_bitmap[1], &vga_back);
00198
00199 type_button_group[1].create_bitmapW(x, y,
00200 x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00201 ((i == current_score_report_type) ?
00202 type_button_down_bitmap[1] :
00203 type_button_up_bitmap[1])+4);
00204
00205 x=REPORT_X1+tab2;
00206 y=REPORT_Y1+vtab4;
00207
00208 user_interface.create_button_bitmap(x, y,
00209 x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00210 type_button_label[2], &type_button_up_bitmap[2],
00211 &type_button_down_bitmap[2], &vga_back);
00212 type_button_group[2].create_bitmapW(x, y,
00213 x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00214 ((i == current_score_report_type) ?
00215 type_button_down_bitmap[2] :
00216 type_button_up_bitmap[2])+4);
00217
00218 x+=BOTTOM_BUTTON_WIDTH3+BOTTOM_BUTTON_DISTANCE;
00219
00220 user_interface.create_button_bitmap(x, y,
00221 x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00222 type_button_label[3], &type_button_up_bitmap[3],
00223 &type_button_down_bitmap[3], &vga_back);
00224 type_button_group[3].create_bitmapW(x, y,
00225 x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00226 ((i == current_score_report_type) ?
00227 type_button_down_bitmap[3] :
00228 type_button_up_bitmap[3])+4);
00229
00230 x=REPORT_X1+tab2;
00231 y=REPORT_Y1+vtab4+30;
00232 user_interface.create_button_bitmap(x, y,
00233 x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00234 type_button_label[4], &type_button_up_bitmap[4],
00235 &type_button_down_bitmap[4], &vga_back);
00236
00237 type_button_group[4].create_bitmapW(x, y,
00238 x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00239 ((current_score_report_type==4)?
00240 type_button_down_bitmap[4] :
00241 type_button_up_bitmap[4])+4);
00242
00243 x+=BOTTOM_BUTTON_WIDTH3+BOTTOM_BUTTON_DISTANCE;
00244
00245 user_interface.create_button_bitmap(x, y,
00246 x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00247 type_button_label[5], &type_button_up_bitmap[5],
00248 &type_button_down_bitmap[5], &vga_back);
00249
00250 type_button_group[5].create_bitmapW(x, y,
00251 x+BOTTOM_BUTTON_WIDTH3, y+BOTTOM_BUTTON_HEIGHT,
00252 ((current_score_report_type==5)?
00253 type_button_down_bitmap[5] :
00254 type_button_up_bitmap[5])+4);
00255
00256 if(current_score_report_type>1) {
00257 #if(GAME_VERSION>=200)
00258 user_interface.brighten(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y2);
00259 user_interface.rect(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y2);
00260 user_interface.rect(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y1+vtab1);
00261 font_chartsm.put(WINDOW_X1+tab1,WINDOW_Y1+vtab1-17,"Contributing factors");
00262 font_chartsm.put(WINDOW_X1+tab3-100,WINDOW_Y1+vtab1-17,"Current value");
00263 font_chartsm.put(WINDOW_X1+tab4-95,WINDOW_Y1+vtab1-17,"Weight");
00264 font_chartsm.right_put(WINDOW_X1+tab5, WINDOW_Y1+vtab1-17,"Change in last year");
00265 font_chartsm.put(WINDOW_X1+tab5+10,WINDOW_Y1+vtab1-17,"Change since start");
00266 font_chartsm.put(WINDOW_X1+tab6,WINDOW_Y1+vtab1-17,"Trend");
00267 #else
00268 user_interface.brighten(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y2);
00269 user_interface.rect(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y2);
00270 user_interface.rect(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y1+vtab1);
00271 font_chartsm.put(WINDOW_X1+tab1,WINDOW_Y1+vtab1-17,"Contributing factors");
00272 font_chartsm.put(WINDOW_X1+tab3-20,WINDOW_Y1+vtab1-17,"Current value");
00273 font_chartsm.put(WINDOW_X1+tab4-15,WINDOW_Y1+vtab1-17,"Weight");
00274 font_chartsm.put(WINDOW_X1+tab5-20,WINDOW_Y1+vtab1-17,"Change since start");
00275 font_chartsm.put(WINDOW_X1+tab6,WINDOW_Y1+vtab1-17,"Trend");
00276 #endif
00277 }
00278 else {
00279 user_interface.brighten(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y2);
00280 user_interface.rect(WINDOW_X1,WINDOW_Y1,WINDOW_X2,WINDOW_Y2);
00281 }
00282 }
00283 type_button_group.paint(current_score_report_type);
00284
00285 vga.use_back();
00286 (*report_func_ptr[current_score_report_type])(refreshFlag);
00287
00288 vga.blt_buf(ZOOM_X1, ZOOM_Y1, ZOOM_X2, ZOOM_Y2);
00289
00290 vga.use_front();
00291
00292 }
00293
00294 void PlayerSchool::score_report_detect() {
00295
00296 int summaryButtonGroupDetect;
00297
00298 if((summaryButtonGroupDetect = type_button_group.detect()) >= 0) {
00299 type_button_group[current_score_report_type].body_ptr = (void *) (type_button_up_bitmap[current_score_report_type] + 4);
00300 current_score_report_type = summaryButtonGroupDetect;
00301 type_button_group[current_score_report_type].body_ptr = (void *) (type_button_down_bitmap[current_score_report_type] + 4);
00302 sys.redraw_all_flag = 1;
00303 }
00304 (*detect_func_ptr[current_score_report_type])();
00305 }
00306
00307 void PlayerSchool::score_report_deinit() {
00308
00309 type_button_group.deinit_buttons();
00310 if (*type_button_up_bitmap) {
00311 for (int i = 0; i < 6; i++) {
00312 mem_del(type_button_up_bitmap[i]);
00313 mem_del(type_button_down_bitmap[i]);
00314 type_button_up_bitmap[i] = NULL;
00315 type_button_down_bitmap[i] = NULL;
00316 }
00317 }
00318 for(int i=0;i<6;i++)
00319 (*deinit_func_ptr[i])();
00320
00321 report_init_flag = 0;
00322 }
00323
00324
00325
00326 static overall_report_init_flag=0;
00327
00328 static LargeText overall_text[6];
00329 static GraphPerformanceIndicatorMonth overall_graphicon1;
00330 static GraphPerformanceIndicatorMonth overall_graphicon2;
00331
00332 static void report_overall(int refreshFlag) {
00333 const static tab1=10,tab2=450,tab3=560,tab4=680;
00334 const static vtab1=40,vtab2=135,vtab3=110,vtab4=285;
00335 char *label[]= {
00336 #if(GAME_VERSION>=200)
00337 "\tCurrent game score",
00338 #else
00339 "\tCurrent trustee evaluation",
00340 #endif
00341 "\tLast month change",
00342 "\tTrustee evaluation at the beginning of the game",
00343 "\tNumber of gaming years",
00344
00345 "\tCumulative game score",
00346 #if(GAME_VERSION>=200)
00347 "\t= (Current game score - Initial trustee evaluation) X 10",
00348 #else
00349 "\t= (Current trustee evaluation - Initial trustee evaluation) X 10",
00350 #endif
00351 "\t + Number of gaming years",
00352 "\t + Total bonus points",
00353 "\t= ",
00354 };
00355
00356 static int data_num=HISTORY_MONTH_COUNT;
00357 static float *dataArray;
00358 static int *dataArray2;
00359 static float v[6];
00360
00361 v[0]=player_school.cur_game_score;
00362
00363 v[1]=(float)( (int)player_school.game_score_history[HISTORY_MONTH_COUNT-1]-
00364 (int)player_school.game_score_history[HISTORY_MONTH_COUNT-2] );
00365
00366 v[2]=player_school.init_game_score;
00367
00368 v[3]=(float)info.year_passed-1;
00369 v[4]=(float)player_school.ultimate_game_score;
00370 #if(GAME_VERSION>=200)
00371 static float totalBonusPoint;
00372 totalBonusPoint = task_array.total_bonus_pt + player_school.bonus_point + player_school.threshold_event_bonus;
00373 #endif
00374 dataArray=player_school.game_score_history;
00375 dataArray2=player_school.ultimate_game_score_history;
00376 vga.use_back();
00377 if( refreshFlag == INFO_REPAINT ) {
00378 if( overall_report_init_flag )
00379 deinit_overall();
00380 overall_report_init_flag = 1;
00381
00382 #if(GAME_VERSION>=200)
00383 overall_graphicon1.init(
00384 WINDOW_X1+tab3-30,WINDOW_Y1+50,
00385 WINDOW_X1+tab4-30,WINDOW_Y1+123,
00386 1 ,&data_num ,dataArray, 1, 0, 3);
00387 overall_graphicon1.paint();
00388 #else
00389 overall_graphicon1.init(
00390 WINDOW_X1+tab3-30,WINDOW_Y1+20,
00391 WINDOW_X1+tab4-30,WINDOW_Y1+93,
00392 1 ,&data_num ,dataArray, 1, 0, 3);
00393 overall_graphicon1.paint();
00394 #endif
00395
00396 overall_graphicon2.init(
00397 WINDOW_X1+tab3-30,WINDOW_Y1+170,
00398 WINDOW_X1+tab4-30,WINDOW_Y1+243,
00399 1 ,&data_num ,dataArray2, 1, 0, 3);
00400 overall_graphicon2.paint();
00401
00402 #if(GAME_VERSION>=200)
00403 font_chartsm.put( WINDOW_X1+tab3-123,WINDOW_Y1+5, "Change in last year" );
00404 font_chartsm.put( WINDOW_X1+tab3+5,WINDOW_Y1+5, "Change in since start" );
00405
00406 float zn = player_school.get_protagonist_info(1)->normalizing_factor;
00407
00408 float trend = (v[0] - player_school.game_score_history[THIS_MONTH-12]) / zn;
00409 float level = (v[0] - player_school.init_game_score) / zn;
00410
00411 font_chartsm.put( WINDOW_X1+tab3-88, WINDOW_Y1+5+5+vtab1-25, m.format(trend,24) );
00412 font_chartsm.put( WINDOW_X1+tab3+45, WINDOW_Y1+5+5+vtab1-25, m.format(level,24) );
00413
00414 for(int i=0;i<4;i++)
00415 overall_text[i].right_put
00416 (WINDOW_X1+tab2-25,WINDOW_Y1+vtab1+(i-1)*25+5+5,(float*)(&v[i]),4);
00417 #else
00418 for(int i=0;i<4;i++)
00419
00420
00421
00422 overall_text[i].right_put
00423 (WINDOW_X1+tab2+30,WINDOW_Y1+vtab1+(i-1)*25+5,(float*)(&v[i]),4);
00424 #endif
00425
00426 #if(GAME_VERSION>=200)
00427 overall_text[4].right_put
00428 (WINDOW_X1+tab2-25,WINDOW_Y1+vtab1+(3)*25+5,&totalBonusPoint,4);
00429 #else
00430 overall_text[4].right_put
00431 (WINDOW_X1+tab2+30,WINDOW_Y1+vtab1+(3)*25+5,task_array.total_bonus_pt,4);
00432 #endif
00433
00434
00435
00436 overall_text[5].put
00437 (WINDOW_X1+tab1+70,WINDOW_Y1+vtab2+125,(float*)(&v[4]),4);
00438
00439 }
00440
00441 user_interface.bar(WINDOW_X1+tab1,WINDOW_Y1+vtab1+105,WINDOW_X1+tab4,WINDOW_Y1+vtab1+106,V_BROWN);
00442
00443 #if(GAME_VERSION>=200)
00444 for(int i=0;i<4;i++)
00445
00446
00447 font_charts.put(WINDOW_X1+tab1,WINDOW_Y1+vtab1+(i-1)*25+5+5,label[i]);
00448
00449
00450 font_charts.put(WINDOW_X1+tab1,WINDOW_Y1+vtab1+(3)*25+5+5,"\tTotal bonus points");
00451 #else
00452 for(int i=0;i<4;i++)
00453
00454
00455 font_charts.put(WINDOW_X1+tab1,WINDOW_Y1+vtab1+(i-1)*25+5,label[i]);
00456
00457
00458 font_charts.put(WINDOW_X1+tab1,WINDOW_Y1+vtab1+(3)*25+5,"\tTotal bonus points");
00459 #endif
00460
00461
00462 for(i=4;i<9;i++)
00463 font_charts.put(WINDOW_X1+tab1,WINDOW_Y1+vtab2+(i-3)*25,label[i]);
00464
00465 overall_graphicon1.refresh();
00466 overall_graphicon2.refresh();
00467
00468 for(i=0;i<6;i++)
00469 overall_text[i].refresh();
00470
00471 };
00472
00473 static int detect_overall() {
00474
00475 return 0;
00476 };
00477
00478 static void deinit_overall() {
00479 if(overall_report_init_flag==0)return;
00480 overall_graphicon1.deinit();
00481 overall_graphicon2.deinit();
00482
00483 for(int i=0;i<6;i++)
00484 overall_text[i].deinit();
00485 overall_report_init_flag=0;
00486
00487 };
00488
00489 static void overall_disp_rep_row(int recNo, int x, int y, int refreshFlag) {
00490 };
00491
00492 #define REC_HEIGHT 16
00493 #define SHEET_COLOR Vga::active_buf->color_down
00494
00495 static rank_report_init_flag=0;
00496 static short* rank_text_refresh_bitmap1;
00497 static GraphPerformanceIndicatorMonth rank_graphicon;
00498 static VBrowse98 rank_vbrowse;
00499
00500
00501 static int sort_peer_school_score_function( const void *a, const void *b ) {
00502 float valueA = school_res.peer_school_array[(*((short*)a))].game_score;
00503 float valueB = school_res.peer_school_array[(*((short*)b))].game_score;
00504
00505 float rc = valueA - valueB;
00506
00507 if( rc > 0 )
00508 return -1;
00509 else if( rc <= 0 )
00510 return 1;
00511 else
00512 return 0;
00513 }
00514
00515
00516
00517 static void report_rank(int refreshFlag) {
00518 const static tab1=10,tab2=450,tab3=560,tab4=680;
00519 const static vtab1=20,vtab2=105,vtab3=110,vtab4=285;
00520 static int report_recno=1;
00521
00522 vga.use_back();
00523
00524
00525 if((int)school_res.player_peer_school->game_score!=(int)player_school.cur_game_score) {
00526 school_res.player_peer_school->game_score=player_school.cur_game_score;
00527 qsort( school_res.peer_school_rank, school_res.peer_school_count, sizeof(school_res.peer_school_rank[0]), sort_peer_school_score_function );
00528 }
00529
00530
00531 if( refreshFlag == INFO_REPAINT ) {
00532 if( rank_report_init_flag )
00533 deinit_rank();
00534 rank_report_init_flag = 1;
00535
00536 rank_vbrowse.init(
00537 WINDOW_X1+tab1,WINDOW_Y1+vtab1+10,
00538 WINDOW_X2-tab1,WINDOW_Y1+vtab4,
00539 0, REC_HEIGHT, school_res.peer_school_count,
00540 rank_disp_rep_row,NULL,0);
00541
00542 rank_vbrowse.open(report_recno);
00543 }
00544 font_chartsm.put(WINDOW_X1+200,WINDOW_Y1+vtab1+10,"");
00545 rank_vbrowse.update();
00546 report_recno=rank_vbrowse.recno();
00547 };
00548
00549 static int detect_rank() {
00550 rank_vbrowse.detect();
00551 return 0;
00552 };
00553
00554 static void deinit_rank() {
00555 if(rank_report_init_flag==0)return;
00556
00557 rank_vbrowse.deinit();
00558 rank_report_init_flag = 0;
00559
00560 };
00561
00562 static void rank_disp_rep_row(int recNo, int x, int y, int refreshFlag) {
00563 int tab1=10,tab2=60,tab3=400,tab4=600;
00564
00565
00566
00567 if(recNo==1) {
00568 font_chartsm.put(x+tab1,y,"Rank");
00569 font_chartsm.put(x+tab2,y,"University");
00570 font_chartsm.put(x+tab3,y,"Current trustee evaluation");
00571 return;
00572 }
00573 else {
00574 int idx = school_res.peer_school_rank[recNo-2];
00575
00576 PeerSchool *ps = &(school_res.peer_school_array[idx]);
00577 if(ps==school_res.player_peer_school) {
00578 font_chart_blue_sm.right_put(x+tab1+20,y,m.format(recNo-1,4));
00579 font_chart_blue_sm.put(x+tab2,y,ps->name);
00580 font_chart_blue_sm.right_put(x+tab3+70,y,m.format((int)ps->game_score,4));
00581 }
00582 else {
00583 font_chartsm.right_put(x+tab1+20,y,m.format(recNo-1,4));
00584 font_chartsm.put(x+tab2,y,ps->name);
00585 font_chartsm.right_put(x+tab3+70,y,m.format((int)ps->game_score,4));
00586 }
00587 }
00588
00589 };
00590
00591
00592 #define OUTPUTS_ITEMS_NUM 2
00593 static outputs_report_init_flag=0;
00594 static GraphPerformanceIndicatorMonth outputs_graphicon[OUTPUTS_ITEMS_NUM];
00595 static Text outputs_text1[OUTPUTS_ITEMS_NUM];
00596 static Text outputs_text2[OUTPUTS_ITEMS_NUM];
00597 static Text outputs_text3[OUTPUTS_ITEMS_NUM];
00598 #if(GAME_VERSION>=200)
00599 static Text outputs_text4[OUTPUTS_ITEMS_NUM];
00600 #endif
00601
00602 #if(GAME_VERSION>=200)
00603 static char * outputs_help_title[OUTPUTS_ITEMS_NUM]= {
00604 "Degrees granted",
00605
00606
00607 "Faculty research performance"
00608 };
00609 #else
00610 static char * outputs_help_title[OUTPUTS_ITEMS_NUM]= {
00611 "Degrees granted",
00612
00613
00614 "Sponsored research performance"
00615 };
00616 #endif
00617
00618 static void report_outputs(int refreshFlag) {
00619 const static tab1=30,tab2=320,tab3=420,tab4=490;
00620 const static tab5=620,tab6=680,tab7=660,tab8=760;
00621 const static vtab1=22,vtab2=37,vtab3=200,vtab4=330,vtab5=320;
00622
00623 static int data_num=HISTORY_MONTH_COUNT;
00624 static float *dataArray[OUTPUTS_ITEMS_NUM];
00625 static float v1[OUTPUTS_ITEMS_NUM];
00626 static float v2[OUTPUTS_ITEMS_NUM];
00627 static float v3[OUTPUTS_ITEMS_NUM];
00628 #if(GAME_VERSION>=200)
00629 static float v4[OUTPUTS_ITEMS_NUM];
00630 #endif
00631
00632 int i,j;
00633 for(i=0,j=S_DEGREES_GRANTED;i<OUTPUTS_ITEMS_NUM;i++,j++) {
00634 dataArray[i]=player_school.sub_score[j];
00635 v1[i]=dataArray[i][HISTORY_MONTH_COUNT-1];
00636 v2[i]=player_school.sub_score_weight[j];
00637 v3[i]=player_school.sub_score_change[j];
00638 #if(GAME_VERSION>=200)
00639 float zn = player_school.get_protagonist_info(j+2)->normalizing_factor;
00640
00641 float trend = (v1[i] - dataArray[i][HISTORY_MONTH_COUNT-1-12]) / zn;
00642 float level = (v1[i] - player_school.sub_score_start[j]) / zn;
00643 v4[i] = trend;
00644 v3[i] = level;
00645 #endif
00646 }
00647
00648 vga.use_back();
00649 if( refreshFlag == INFO_REPAINT ) {
00650 if( outputs_report_init_flag )
00651 deinit_outputs();
00652 outputs_report_init_flag = 1;
00653
00654 for(int i=0;i<OUTPUTS_ITEMS_NUM;i++) {
00655 outputs_graphicon[i].init(
00656 WINDOW_X1+tab5,WINDOW_Y1+vtab2+i*32-10,
00657 WINDOW_X1+tab6,WINDOW_Y1+vtab2+i*32+20,
00658 1 ,&data_num ,dataArray[i], 1, 0, 3);
00659 outputs_graphicon[i].paint();
00660 #if(GAME_VERSION>=200)
00661 outputs_text1[i].right_put(WINDOW_X1+tab2-40,WINDOW_Y1+vtab2+i*32,v1+i,4);
00662 outputs_text2[i].right_put(WINDOW_X1+tab3-60,WINDOW_Y1+vtab2+i*32,v2+i,24);
00663 outputs_text4[i].right_put(WINDOW_X1+tab3+30, WINDOW_Y1+vtab2+i*32, v4+i, 24);
00664
00665 outputs_text3[i].right_put(WINDOW_X1+tab4+95,WINDOW_Y1+vtab2+i*32,v3+i,24);
00666 #else
00667 outputs_text1[i].right_put(WINDOW_X1+tab2+40,WINDOW_Y1+vtab2+i*32,v1+i,4);
00668 outputs_text2[i].right_put(WINDOW_X1+tab3+20,WINDOW_Y1+vtab2+i*32,v2+i,24);
00669
00670 outputs_text3[i].right_put(WINDOW_X1+tab4+60,WINDOW_Y1+vtab2+i*32,v3+i,24);
00671 #endif
00672
00673 if(user_interface.backgd_flag==1) {
00674 image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,"QUEST_UP");
00675 help_button_array[i].create_text(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,WINDOW_X1+tab1-5,WINDOW_Y1+vtab2+i*32+16,"?");
00676 }
00677 }
00678 }
00679
00680 for(i=0;i<OUTPUTS_ITEMS_NUM;i++) {
00681 outputs_text1[i].refresh();
00682 outputs_text2[i].refresh();
00683 outputs_text3[i].refresh();
00684 #if(GAME_VERSION>=200)
00685 outputs_text4[i].refresh();
00686 #endif
00687 outputs_graphicon[i].refresh();
00688 font_chartsm.put(WINDOW_X1+tab1,WINDOW_Y1+vtab2+i*32,outputs_help_title[i]);
00689 }
00690
00691 vga.blt_buf(WINDOW_X1, WINDOW_Y1, WINDOW_X2, WINDOW_Y2);
00692
00693 vga.use_front();
00694 };
00695
00696 static int detect_outputs() {
00697 const static tab1=30,vtab2=37;
00698 vga.use_back();
00699 for(int i=0;i<OUTPUTS_ITEMS_NUM;i++)
00700 if(help_button_array[i].detect()) {
00701
00702 String str;
00703 str = DIR_RES;
00704 str += "SCORE";
00705
00706 ResTxt rs;
00707 rs.init(str);
00708
00709
00710 image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,"QUEST_DN");
00711 vga.blt_buf(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,WINDOW_X1+tab1-2,WINDOW_Y1+vtab2+i*32+16);
00712 sys.back_view_mode=sys.view_mode;
00713 help_if.help_textlist.topic_id=rs.locate_topic(outputs_help_title[i]);
00714 if(help_if.help_textlist.topic_id>0) {
00715 help_if.help_textlist.add_history(help_if.help_textlist.topic_id);
00716 sys.set_view_mode(MODE_HELP_DESC);
00717 sys.redraw_all_flag = 1;
00718 audio.play_wav("BEEPS-1",audio.int_to_DsVolume(config.sound_effect_volume));
00719 }
00720 return 1;
00721 }
00722 return 0;
00723 };
00724
00725 static void deinit_outputs() {
00726
00727 if(outputs_report_init_flag==0)return;
00728
00729 for(int i=0;i<OUTPUTS_ITEMS_NUM;i++) {
00730 outputs_graphicon[i].deinit();
00731 outputs_text1[i].deinit();
00732 outputs_text2[i].deinit();
00733 outputs_text3[i].deinit();
00734
00735 help_button_array[i].deinit();
00736
00737 }
00738
00739 outputs_report_init_flag = 0;
00740
00741
00742 };
00743
00744
00745 #define GENERAL_ITEMS_NUM 6
00746 static char * general_help_title[GENERAL_ITEMS_NUM]= {
00747 "Institutional prestige",
00748 "Educational quality",
00749 "Scholarship, broadly defined",
00750 "Student diversity",
00751 "Faculty diversity",
00752 "Percentage of alumni who have donated during the last five years",
00753 };
00754
00755 static general_report_init_flag=0;
00756 static GraphPerformanceIndicatorMonth general_graphicon[GENERAL_ITEMS_NUM];
00757 static Text general_text1[GENERAL_ITEMS_NUM];
00758 static Text general_text2[GENERAL_ITEMS_NUM];
00759 static Text general_text3[GENERAL_ITEMS_NUM];
00760 #if(GAME_VERSION>=200)
00761 static Text general_text4[GENERAL_ITEMS_NUM];
00762 #endif
00763
00764 static void report_general(int refreshFlag) {
00765 const static tab1=30,tab2=320,tab3=420,tab4=490;
00766 const static tab5=620,tab6=680,tab7=660,tab8=760;
00767 const static vtab1=22,vtab2=37,vtab3=200,vtab4=330,vtab5=320;
00768
00769 static int data_num=HISTORY_MONTH_COUNT;
00770
00771 static float *dataArray[GENERAL_ITEMS_NUM];
00772 static float v1[GENERAL_ITEMS_NUM];
00773 static float v2[GENERAL_ITEMS_NUM];
00774 static float v3[GENERAL_ITEMS_NUM];
00775 #if(GAME_VERSION>=200)
00776 static float v4[GENERAL_ITEMS_NUM];
00777 #endif
00778
00779 int i,j;
00780
00781 for(i=0,j=S_PRESTIGE;i<GENERAL_ITEMS_NUM;i++,j++) {
00782 dataArray[i]=player_school.sub_score[j];
00783 v1[i]=dataArray[i][HISTORY_MONTH_COUNT-1];
00784 v2[i]=player_school.sub_score_weight[j];
00785 v3[i]=player_school.sub_score_change[j];
00786 #if(GAME_VERSION>=200)
00787 float zn = player_school.get_protagonist_info(j+2)->normalizing_factor;
00788
00789 float trend = (v1[i] - dataArray[i][HISTORY_MONTH_COUNT-1-12]) / zn;
00790 float level = (v1[i] - player_school.sub_score_start[j]) / zn;
00791 v4[i] = trend;
00792 v3[i] = level;
00793 #endif
00794 }
00795
00796
00797 if(info.game_date < 1721699)
00798 v3[0] = task_array.rand_init;
00799
00800 vga.use_back();
00801 if( refreshFlag == INFO_REPAINT ) {
00802 if( general_report_init_flag )
00803 deinit_general();
00804 general_report_init_flag = 1;
00805
00806 for(int i=0;i<GENERAL_ITEMS_NUM;i++) {
00807 general_graphicon[i].init(
00808 WINDOW_X1+tab5,WINDOW_Y1+vtab2+i*40-10,
00809 WINDOW_X1+tab6,WINDOW_Y1+vtab2+i*40+20,
00810 1 ,&data_num ,dataArray[i], 1, 0, 3);
00811 general_graphicon[i].paint();
00812
00813 if(user_interface.backgd_flag==1) {
00814 image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*40-2,"QUEST_UP");
00815 help_button_array[i].create_text(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*40-2,WINDOW_X1+tab1-5,WINDOW_Y1+vtab2+i*40+16,"?");
00816 }
00817 #if(GAME_VERSION>=200)
00818 general_text1[i].right_put(WINDOW_X1+tab2-40,WINDOW_Y1+vtab2+i*40,v1+i,4);
00819 general_text2[i].right_put(WINDOW_X1+tab3-60,WINDOW_Y1+vtab2+i*40,v2+i,24);
00820 general_text4[i].right_put(WINDOW_X1+tab3+30, WINDOW_Y1+vtab2+i*40, v4+i, 24);
00821
00822 general_text3[i].right_put(WINDOW_X1+tab4+95,WINDOW_Y1+vtab2+i*40,v3+i,24);
00823 #else
00824 general_text1[i].right_put(WINDOW_X1+tab2+40,WINDOW_Y1+vtab2+i*40,v1+i,4);
00825 general_text2[i].right_put(WINDOW_X1+tab3+20,WINDOW_Y1+vtab2+i*40,v2+i,24);
00826
00827
00828 general_text3[i].right_put(WINDOW_X1+tab4+60,WINDOW_Y1+vtab2+i*40,v3+i,24);
00829 #endif
00830 }
00831 }
00832
00833 for(i=0;i<GENERAL_ITEMS_NUM;i++) {
00834 #if(GAME_VERSION>=200)
00835 font_chartsm.put_paragraph(WINDOW_X1+tab1,WINDOW_Y1+vtab2+i*40,
00836 WINDOW_X1+tab2-90,WINDOW_Y1+vtab2+i*40+40,
00837 general_help_title[i]);
00838 #else
00839 font_chartsm.put_paragraph(WINDOW_X1+tab1,WINDOW_Y1+vtab2+i*40,
00840 WINDOW_X1+tab2-10,WINDOW_Y1+vtab2+i*40+40,
00841 general_help_title[i]);
00842 #endif
00843 general_graphicon[i].refresh();
00844 general_text1[i].refresh();
00845 general_text2[i].refresh();
00846 general_text3[i].refresh();
00847 }
00848
00849 vga.blt_buf(WINDOW_X1, WINDOW_Y1, WINDOW_X2, WINDOW_Y2);
00850 vga.use_front();
00851 };
00852
00853 static int detect_general() {
00854 const static tab1=30,vtab2=37;
00855
00856 vga.use_back();
00857 for(int i=0;i<GENERAL_ITEMS_NUM;i++) {
00858 if(help_button_array[i].detect()) {
00859
00860 String str;
00861 str = DIR_RES;
00862 str += "SCORE";
00863
00864 ResTxt rs;
00865 rs.init(str);
00866
00867
00868 if(user_interface.backgd_flag==1) {
00869 image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*40-2,"QUEST_DN");
00870 vga.blt_buf(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*40-2,WINDOW_X1+tab1-2,WINDOW_Y1+vtab2+i*40+16);
00871 }
00872 sys.back_view_mode=sys.view_mode;
00873 help_if.help_textlist.topic_id=rs.locate_topic(general_help_title[i]);
00874 if(help_if.help_textlist.topic_id>0) {
00875 help_if.help_textlist.add_history(help_if.help_textlist.topic_id);
00876 sys.set_view_mode(MODE_HELP_DESC);
00877 sys.redraw_all_flag = 1;
00878 audio.play_wav("BEEPS-1",audio.int_to_DsVolume(config.sound_effect_volume));
00879 }
00880 return 1;
00881 }
00882 }
00883 return 0;
00884 };
00885
00886 static void deinit_general() {
00887 if(general_report_init_flag==0)return;
00888
00889 for(int i=0;i<GENERAL_ITEMS_NUM;i++) {
00890 general_graphicon[i].deinit();
00891 general_text1[i].deinit();
00892 general_text2[i].deinit();
00893 general_text3[i].deinit();
00894
00895 help_button_array[i].deinit();
00896
00897 }
00898
00899
00900 general_report_init_flag = 0;
00901
00902 };
00903
00904
00905 #define ATTITUDES_ITEMS_NUM 3
00906 static attitudes_report_init_flag=0;
00907 static char *attitudes_help_title[]= {
00908 "Faculty morale",
00909 "Student morale",
00910 "Staff morale",
00911 };
00912 static GraphPerformanceIndicatorMonth attitudes_graphicon[ATTITUDES_ITEMS_NUM];
00913 static Text attitudes_text1[ATTITUDES_ITEMS_NUM];
00914 static Text attitudes_text2[ATTITUDES_ITEMS_NUM];
00915 static Text attitudes_text3[ATTITUDES_ITEMS_NUM];
00916 #if(GAME_VERSION>=200)
00917 static Text attitudes_text4[ATTITUDES_ITEMS_NUM];
00918 #endif
00919
00920 static void report_attitudes(int refreshFlag) {
00921 const static tab1=30,tab2=320,tab3=420,tab4=490;
00922 const static tab5=620,tab6=680,tab7=660,tab8=760;
00923 const static vtab1=22,vtab2=37,vtab3=200,vtab4=330,vtab5=320;
00924
00925 static int data_num=HISTORY_MONTH_COUNT;
00926
00927 static float *dataArray[ATTITUDES_ITEMS_NUM];
00928 static float v1[ATTITUDES_ITEMS_NUM];
00929 static float v2[ATTITUDES_ITEMS_NUM];
00930 static float v3[ATTITUDES_ITEMS_NUM];
00931 #if(GAME_VERSION>=200)
00932 static float v4[ATTITUDES_ITEMS_NUM];
00933 #endif
00934
00935 int i,j;
00936 for(i=0,j=S_FACULTY_MORALE;i<ATTITUDES_ITEMS_NUM;i++,j++) {
00937 dataArray[i]=player_school.sub_score[j];
00938 v1[i]=dataArray[i][HISTORY_MONTH_COUNT-1];
00939 v2[i]=player_school.sub_score_weight[j];
00940 v3[i]=player_school.sub_score_change[j];
00941 #if(GAME_VERSION>=200)
00942 float zn = player_school.get_protagonist_info(j+2)->normalizing_factor;
00943
00944 float trend = (v1[i] - dataArray[i][HISTORY_MONTH_COUNT-1-12]) / zn;
00945 float level = (v1[i] - player_school.sub_score_start[j]) / zn;
00946 v4[i] = trend;
00947 v3[i] = level;
00948 #endif
00949 }
00950
00951 vga.use_back();
00952 if( refreshFlag == INFO_REPAINT ) {
00953 if( attitudes_report_init_flag )
00954 deinit_attitudes();
00955 attitudes_report_init_flag = 1;
00956
00957 for(int i=0;i<ATTITUDES_ITEMS_NUM;i++) {
00958 attitudes_graphicon[i].init(
00959 WINDOW_X1+tab5,WINDOW_Y1+vtab2+i*32-10,
00960 WINDOW_X1+tab6,WINDOW_Y1+vtab2+i*32+20,
00961 1 ,&data_num ,dataArray[i], 1, 0, 3);
00962 attitudes_graphicon[i].paint();
00963
00964 #if(GAME_VERSION>=200)
00965 attitudes_text1[i].right_put(WINDOW_X1+tab2-40,WINDOW_Y1+vtab2+i*32,v1+i,4);
00966 attitudes_text2[i].right_put(WINDOW_X1+tab3-60,WINDOW_Y1+vtab2+i*32,v2+i,24);
00967 attitudes_text4[i].right_put(WINDOW_X1+tab3+30, WINDOW_Y1+vtab2+i*32, v4+i, 24);
00968
00969 attitudes_text3[i].right_put(WINDOW_X1+tab4+95,WINDOW_Y1+vtab2+i*32,v3+i,24);
00970 #else
00971 attitudes_text1[i].right_put(WINDOW_X1+tab2+40,WINDOW_Y1+vtab2+i*32,v1+i,4);
00972 attitudes_text2[i].right_put(WINDOW_X1+tab3+20,WINDOW_Y1+vtab2+i*32,v2+i,24);
00973
00974
00975 attitudes_text3[i].right_put(WINDOW_X1+tab4+60,WINDOW_Y1+vtab2+i*32,v3+i,24);
00976 #endif
00977 if(user_interface.backgd_flag==1) {
00978 image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,"QUEST_UP");
00979 help_button_array[i].create_text(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,WINDOW_X1+tab1-5,WINDOW_Y1+vtab2+i*32+16,"?");
00980 }
00981 }
00982 }
00983
00984 for(i=0;i<ATTITUDES_ITEMS_NUM;i++) {
00985 font_chartsm.put(WINDOW_X1+tab1,WINDOW_Y1+vtab2+i*32,attitudes_help_title[i]);
00986 attitudes_graphicon[i].refresh();
00987 attitudes_text1[i].refresh();
00988 attitudes_text2[i].refresh();
00989 attitudes_text3[i].refresh();
00990 }
00991
00992 vga.blt_buf(WINDOW_X1, WINDOW_Y1, WINDOW_X2, WINDOW_Y2);
00993 vga.use_front();
00994 };
00995
00996 static int detect_attitudes() {
00997 const static tab1=30,vtab2=37;
00998
00999 vga.use_back();
01000 for(int i=0;i<ATTITUDES_ITEMS_NUM;i++) {
01001 if(help_button_array[i].detect()) {
01002
01003 String str;
01004 str = DIR_RES;
01005 str += "SCORE";
01006
01007 ResTxt rs;
01008 rs.init(str);
01009
01010
01011 image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,"QUEST_DN");
01012 vga.blt_buf(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*32-2,WINDOW_X1+tab1-2,WINDOW_Y1+vtab2+i*32+16);
01013 sys.back_view_mode=sys.view_mode;
01014 help_if.help_textlist.topic_id=rs.locate_topic(attitudes_help_title[i]);
01015 if(help_if.help_textlist.topic_id>0) {
01016 help_if.help_textlist.add_history(help_if.help_textlist.topic_id);
01017 sys.set_view_mode(MODE_HELP_DESC);
01018 sys.redraw_all_flag = 1;
01019 audio.play_wav("BEEPS-1",audio.int_to_DsVolume(config.sound_effect_volume));
01020 }
01021 return 1;
01022 }
01023 }
01024 return 0;
01025 };
01026
01027 static void deinit_attitudes() {
01028 if(attitudes_report_init_flag==0)return;
01029
01030 for(int i=0;i<ATTITUDES_ITEMS_NUM;i++) {
01031 attitudes_graphicon[i].deinit();
01032 attitudes_text1[i].deinit();
01033 attitudes_text2[i].deinit();
01034 attitudes_text3[i].deinit();
01035
01036 help_button_array[i].deinit();
01037
01038 }
01039
01040 attitudes_report_init_flag = 0;
01041
01042 };
01043
01044
01045 #define MANAGEMENT_ITEMS_NUM 5
01046 static char *management_help_title[]= {
01047 "Average of class sizes as a percent normal class sizes",
01048 "Library volumes per FTE student",
01049 "Percent of TSUs using IT in course",
01050 "Administrative performance",
01051 "Percentage of alumni who have donated during the last five years",
01052 };
01053 static management_report_init_flag=0;
01054 static GraphPerformanceIndicatorMonth management_graphicon[MANAGEMENT_ITEMS_NUM];
01055 static Text management_text1[MANAGEMENT_ITEMS_NUM];
01056 static Text management_text2[MANAGEMENT_ITEMS_NUM];
01057 static Text management_text3[MANAGEMENT_ITEMS_NUM];
01058 #if(GAME_VERSION>=200)
01059 static Text management_text4[MANAGEMENT_ITEMS_NUM];
01060 #endif
01061
01062 static void report_management(int refreshFlag) {
01063 const static tab1=30,tab2=320,tab3=420,tab4=490;
01064 const static tab5=620,tab6=680,tab7=660,tab8=760;
01065 const static vtab1=22,vtab2=37,vtab3=200,vtab4=330,vtab5=480;
01066
01067 static int data_num=HISTORY_MONTH_COUNT;
01068
01069 static float *dataArray[MANAGEMENT_ITEMS_NUM];
01070 static float v1[MANAGEMENT_ITEMS_NUM];
01071 static float v2[MANAGEMENT_ITEMS_NUM];
01072 static float v3[MANAGEMENT_ITEMS_NUM];
01073
01074 int i,j;
01075
01076
01077 for(i=0,j=7;i<MANAGEMENT_ITEMS_NUM;i++,j++) {
01078
01079 dataArray[i]=player_school.sub_score[j];
01080 v1[i]=dataArray[i][HISTORY_MONTH_COUNT-1];
01081 v2[i]=player_school.sub_score_weight[j];
01082 v3[i]=player_school.sub_score_change[j];
01083 }
01084
01085 vga.use_back();
01086 if( refreshFlag == INFO_REPAINT ) {
01087 if( management_report_init_flag )
01088 deinit_management();
01089 management_report_init_flag = 1;
01090
01091 for(int i=0;i<MANAGEMENT_ITEMS_NUM;i++) {
01092 management_graphicon[i].init(
01093 WINDOW_X1+tab5,WINDOW_Y1+vtab2+i*48-10,
01094 WINDOW_X1+tab6,WINDOW_Y1+vtab2+i*48+20,
01095 1 ,&data_num ,dataArray[i], 1, 0, 3);
01096 management_graphicon[i].paint();
01097
01098 management_text1[i].right_put(WINDOW_X1+tab2+40,WINDOW_Y1+vtab2+i*48,v1+i,4);
01099 management_text2[i].right_put(WINDOW_X1+tab3+20,WINDOW_Y1+vtab2+i*48,v2+i,24);
01100
01101
01102 management_text3[i].right_put(WINDOW_X1+tab4+60,WINDOW_Y1+vtab2+i*48,v3+i,24);
01103
01104 if(user_interface.backgd_flag==1) {
01105 image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*48-2,"QUEST_UP");
01106 help_button_array[i].create_text(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*48-2,WINDOW_X1+tab1-5,WINDOW_Y1+vtab2+i*48+16,"?");
01107 }
01108 }
01109 }
01110
01111 for(i=0;i<MANAGEMENT_ITEMS_NUM;i++) {
01112 font_chartsm.put_paragraph( WINDOW_X1+tab1,WINDOW_Y1+vtab2+i*48,
01113 WINDOW_X1+tab2,WINDOW_Y1+vtab2+(i+1)*48,
01114 management_help_title[i]);
01115 management_graphicon[i].refresh();
01116 management_text1[i].refresh();
01117 management_text2[i].refresh();
01118 management_text3[i].refresh();
01119 }
01120
01121 vga.blt_buf(WINDOW_X1, WINDOW_Y1, WINDOW_X2, WINDOW_Y2);
01122 vga.use_front();
01123 };
01124
01125 static int detect_management() {
01126 const static tab1=30,vtab2=37;
01127
01128 vga.use_back();
01129 for(int i=0;i<GENERAL_ITEMS_NUM;i++) {
01130 if(help_button_array[i].detect()) {
01131
01132 String str;
01133 str = DIR_RES;
01134 str += "SCORE";
01135
01136 ResTxt rs;
01137 rs.init(str);
01138
01139
01140 image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*48-2,"QUEST_DN");
01141 vga.blt_buf(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*48-2,WINDOW_X1+tab1-2,WINDOW_Y1+vtab2+i*48+16);
01142 sys.back_view_mode=sys.view_mode;
01143 help_if.help_textlist.topic_id=rs.locate_topic(management_help_title[i]);
01144 if(help_if.help_textlist.topic_id>0) {
01145 help_if.help_textlist.add_history(help_if.help_textlist.topic_id);
01146 sys.set_view_mode(MODE_HELP_DESC);
01147 sys.redraw_all_flag = 1;
01148 audio.play_wav("BEEPS-1",audio.int_to_DsVolume(config.sound_effect_volume));
01149 }
01150 return 1;
01151 }
01152 }
01153 return 0;
01154 }
01155
01156 static void deinit_management() {
01157 if(management_report_init_flag==0)return;
01158
01159 for(int i=0;i<MANAGEMENT_ITEMS_NUM;i++) {
01160 management_graphicon[i].deinit();
01161 management_text1[i].deinit();
01162 management_text2[i].deinit();
01163 management_text3[i].deinit();
01164
01165 help_button_array[i].deinit();
01166
01167 }
01168
01169 management_report_init_flag = 0;
01170
01171 };
01172
01173
01174 #define FINANCE_ITEMS_NUM 4
01175 static finance_report_init_flag=0;
01176 static char *finance_help_title[FINANCE_ITEMS_NUM]= {
01177 "Current surplus (deficit) as a percentage of expenditure",
01178 "Smoothed surplus (deficit) as a percentage of expenditure",
01179 "Endowment payout rate relative to the equilibrium payout rate",
01180 "Deferred maintenance backlog",
01181 };
01182 static GraphPerformanceIndicatorMonth finance_graphicon[FINANCE_ITEMS_NUM];
01183 static Text finance_text1[FINANCE_ITEMS_NUM];
01184 static Text finance_text2[FINANCE_ITEMS_NUM];
01185 static Text finance_text3[FINANCE_ITEMS_NUM];
01186 #if(GAME_VERSION>=200)
01187 static Text finance_text4[FINANCE_ITEMS_NUM];
01188 #endif
01189
01190 static void report_finance(int refreshFlag) {
01191 const static tab1=30,tab2=320,tab3=420,tab4=490;
01192 const static tab5=620,tab6=680,tab7=660,tab8=760;
01193 const static vtab1=22,vtab2=37,vtab3=200,vtab4=330,vtab5=480;
01194
01195 static int data_num=HISTORY_MONTH_COUNT;
01196
01197 static float *dataArray[FINANCE_ITEMS_NUM];
01198 static float v1[FINANCE_ITEMS_NUM];
01199 static float v2[FINANCE_ITEMS_NUM];
01200 static float v3[FINANCE_ITEMS_NUM];
01201 #if(GAME_VERSION>=200)
01202 static float v4[FINANCE_ITEMS_NUM];
01203 #endif
01204
01205 int i,j;
01206 for(i=0,j=S_CURRENT_SURPLUS_DEFICIT_PERCENT;i<FINANCE_ITEMS_NUM;i++,j++) {
01207 dataArray[i]=player_school.sub_score[j];
01208 v1[i]=dataArray[i][HISTORY_MONTH_COUNT-1];
01209 v2[i]=player_school.sub_score_weight[j];
01210 v3[i]=player_school.sub_score_change[j];
01211 #if(GAME_VERSION>=200)
01212 float zn = player_school.get_protagonist_info(j+2)->normalizing_factor;
01213
01214 float trend = (v1[i] - dataArray[i][HISTORY_MONTH_COUNT-1-12]) / zn;
01215 float level = (v1[i] - player_school.sub_score_start[j]) / zn;
01216 v4[i] = trend;
01217 v3[i] = level;
01218 #endif
01219 }
01220
01221 vga.use_back();
01222 if(refreshFlag == INFO_REPAINT) {
01223 if(finance_report_init_flag)
01224 deinit_finance();
01225 finance_report_init_flag = 1;
01226
01227 for(int i=0;i<FINANCE_ITEMS_NUM;i++) {
01228 finance_graphicon[i].init(
01229 WINDOW_X1+tab5,WINDOW_Y1+vtab2+i*40-10,
01230 WINDOW_X1+tab6,WINDOW_Y1+vtab2+i*40+20,
01231 1 ,&data_num ,dataArray[i], 1, 0, 3);
01232 finance_graphicon[i].paint();
01233 if(user_interface.backgd_flag==1) {
01234 image_interface.put_back(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*40-2,"QUEST_UP");
01235 help_button_array[i].create_text(WINDOW_X1+tab1-23,WINDOW_Y1+vtab2+i*40-2,WINDOW_X1+tab1-5,WINDOW_Y1+vtab2+i*40+16,"?");
01236 }
01237 #if(GAME_VERSION>=200)
01238 finance_text1[i].right_put(WINDOW_X1+tab2-40,WINDOW_Y1+vtab2+i*40,v1+i,4);
01239 finance_text2[i].right_put(WINDOW_X1+tab3-60,WINDOW_Y1+vtab2+i*40,v2+i,24);
01240 finance_text4[i].right_put(WINDOW_X1+tab3+30, WINDOW_Y1+vtab2+i*40, v4+i, 24);
01241
01242 finance_text3[i].