void FirmOffensive::disp_main_menu(int refreshFlag) { Firm::put_info(refreshFlag); button_cast.create( INFO_X1 +13, INFO_Y1 +259, 'A', "GBA-1" ); if( !should_show_info() ) return; vga.active_buf->put_bitmap( INFO_X1, INFO_Y1, image_gameif.read("BLDGBASE") ); // display delay if( cast_delay > 0 ) { short* hitPointBitmap =NULL; int ratio = cast_delay *40 / cast_delay_max; int size = cast_delay *76 / cast_delay_max; //106 x 35 --- 15 to 90 ie. 0 to 40 int offsetX = -35; int offsetY = -40; hitPointBitmap = (short *)mem_add( BitmapW::size(15 +size, 35) ); if (ratio <11) vga.active_buf->put_bitmap_trans( INFO_X1 +80 +20 +offsetX, INFO_Y1 +49 +offsetY, image_spict.read("MTR_10")); else if (ratio <40) vga.active_buf->put_bitmap_trans( INFO_X1 +80 +20 +offsetX, INFO_Y1 +49 +offsetY, image_spict.read("MTR_39")); else vga.active_buf->put_bitmap_trans( INFO_X1 +80 +20 +offsetX, INFO_Y1 +49 +offsetY, image_spict.read("MTR_40")); vga.active_buf->read_bitmapW( INFO_X1 +80 +20 +offsetX, INFO_Y1 +49 +offsetY, INFO_X1 +94 +20 +size +offsetX, INFO_Y1 +80 +offsetY, hitPointBitmap ); vga.active_buf->put_bitmap_trans( INFO_X1 +80 +20 +offsetX, INFO_Y1 +49 +offsetY, image_spict.read("MTR_00")); vga.active_buf->put_bitmapW( INFO_X1 +80 +20 +offsetX, INFO_Y1 +49 +offsetY, hitPointBitmap ); mem_del( hitPointBitmap ); } if( !is_own() ) return; char fileName[] = "GBA-1"; if (button_cast.enable_flag) fileName[4] = '1' + (char) (sys.frame_count%3); button_cast.update_bitmap( fileName ); button_cast.enable_flag = can_cast(magic_id_upper_limit); button_cast.paint(); }
//----- Begin of static function group_change_spy_notify_flag -----// // static void group_change_spy_notify_flag() { Unit* unitPtr = unit_array[unit_array.selected_recno]; Spy* spyPtr = spy_array[ unitPtr->spy_recno ]; char newNotifyFlag = !spyPtr->notify_cloaked_nation_flag; //------ group chaning spy notify flag -------// for( int i=unit_array.size() ; i>0 ; i-- ) { if( unit_array.is_deleted(i) ) continue; unitPtr = unit_array[i]; //------ if this is a player spy --------// if( unitPtr->selected_flag && unitPtr->is_own_spy() ) { if( !remote.is_enable() ) { spy_array[unitPtr->spy_recno]->notify_cloaked_nation_flag = newNotifyFlag; } else { // packet structure : <spy recno> <new notify_cloaked_nation_flag> short *shortPtr = (short *)remote.new_send_queue_msg(MSG_SPY_CHANGE_NOTIFY_FLAG, sizeof(short)*2); *shortPtr = unitPtr->spy_recno; shortPtr[1] = newNotifyFlag; } } } //--------- update the spy bitmap ----------// button_spy_notify.update_bitmap( newNotifyFlag ? (char*)"SPYNOTI1" : (char*)"SPYNOTI0" ); if( newNotifyFlag ) se_ctrl.immediate_sound("TURN_ON"); else se_ctrl.immediate_sound("TURN_OFF"); }
//----- Begin of static function group_change_aggressive_mode -----// // static void group_change_aggressive_mode() { Unit* unitPtr = unit_array[unit_array.selected_recno]; int newAggressiveMode = !unitPtr->aggressive_mode; //------ group chaning spy notify flag -------// for( int i=unit_array.size() ; i>0 ; i-- ) { if( unit_array.is_deleted(i) ) continue; unitPtr = unit_array[i]; //------ if this is a player spy --------// if( unitPtr->selected_flag && unitPtr->is_own() ) { if( !remote.is_enable() ) { unitPtr->aggressive_mode = newAggressiveMode; } else { // packet structure : <unit no> <new aggressive mode> short *shortPtr = (short *)remote.new_send_queue_msg(MSG_UNIT_CHANGE_AGGRESSIVE_MODE, sizeof(short)*2); *shortPtr = i; shortPtr[1] = newAggressiveMode; } } } if( newAggressiveMode ) se_ctrl.immediate_sound("TURN_ON"); else se_ctrl.immediate_sound("TURN_OFF"); button_aggressive_mode.update_bitmap( newAggressiveMode ? (char*)"AGGRESS1" : (char*)"AGGRESS0" ); }
//--------- Begin of function FirmCamp::disp_camp_info ---------// // void FirmCamp::disp_camp_info(int dispY1, int refreshFlag) { if( is_own() ) { int x1 = INFO_X1 +13; int y1 = INFO_Y1 +235; int x2 = INFO_X1 +13; int y2 = INFO_Y1 +281; if( refreshFlag==INFO_REPAINT ) { // ##### begin Gilbert 31/12 #######// // button_patrol.create( INFO_X1+13, INFO_Y1+235, 'A', "PATROL" ); // button_reward.create( INFO_X1+13+BUTTON_DISTANCE, INFO_Y1+235, 'A', "REWARDCB" ); // button_defense.create( INFO_X1+13+2*BUTTON_DISTANCE, INFO_Y1+235, 'A', defense_flag ? "DEFENSE1" : "DEFENSE0" ); if (!is_monster()) button_patrol.create( INFO_X1+13+BUTTON_DISTANCE, INFO_Y1+281, 'A', "PATROL" ); else button_patrol.create( INFO_X1+13+BUTTON_DISTANCE, INFO_Y1+281, 'A', "F_PATROL" ); if (!is_monster()) button_reward.create( INFO_X1+13, INFO_Y1+235, 'A', "REWARD" ); else button_reward.create( INFO_X1+13, INFO_Y1+235, 'A', "F_REWARD" ); if (!is_monster()) button_defense.create( INFO_X1+13+2*BUTTON_DISTANCE, INFO_Y1+281, 'A', defense_flag ? "DEFENSE1" : "DEFENSE0" ); else button_defense.create( INFO_X1+13+2*BUTTON_DISTANCE, INFO_Y1+281, 'A', defense_flag ? "F_DEFEN1" : "F_DEFEN0" ); if (!is_monster()) button_promote.create( INFO_X1+13+2*BUTTON_DISTANCE , INFO_Y1+235, 'A', "PROMOTE" ); else button_promote.create( INFO_X1+13+2*BUTTON_DISTANCE , INFO_Y1+235, 'A', "F_PROMOT" ); // ##### end Gilbert 31/12 #######// } if( overseer_recno ) { button_patrol.enable_flag = 1; } else { for( int i = 0; i < soldier_count && soldier_array[i].is_under_training(); ++i ); button_patrol.enable_flag = i < soldier_count; } String str; switch(patrol_state) { case PATROL_ALL: // str = "Sortie All"; str = ""; break; case PATROL_NO_GENERAL: str = "Sortie No Leader"; break; case PATROL_NO_INJURED_SOILDER: str = "Sortie No Injured"; break; default: break; } button_patrol.paint(); // vga.active_buf->bar_alpha( button_patrol.x1, button_patrol.y1+15, button_patrol.x1+BUTTON_ACTION_WIDTH-1, button_patrol.y1+BUTTON_ACTION_HEIGHT-16, 1, 0 ); font_whbl.center_put_paragraph( button_patrol.x1, button_patrol.y1, button_patrol.x1+BUTTON_ACTION_WIDTH-1, button_patrol.y1+BUTTON_ACTION_HEIGHT-1, str ); // ###### begin Gilbert 15/4 ########// if( nation_array[nation_recno]->cash >= REWARD_COST && ( (overseer_recno && unit_array[overseer_recno]->rank_id != RANK_KING && unit_res[unit_array[overseer_recno]->unit_id]->class_info.has_loyalty) || (selected_soldier_id && selected_soldier_id <= soldier_count && unit_res[soldier_array[selected_soldier_id-1].unit_id]->class_info.has_loyalty)) ) button_reward.enable_flag = 1; // call paint // ###### end Gilbert 15/4 ########// else button_reward.enable_flag = 0; // call paint button_reward.paint(); if (!is_monster()) button_defense.update_bitmap( defense_flag ? "DEFENSE1" : "DEFENSE0" ); // call paint else button_defense.update_bitmap( defense_flag ? "F_DEFEN1" : "F_DEFEN0" ); if( (button_promote.visible_flag = !overseer_recno) ) { button_promote.enable_flag = 0; if( selected_soldier_id > 0 && selected_soldier_id <= soldier_count ) { Soldier *soldierPtr = soldier_array + selected_soldier_id - 1; // ##### begin Gilbert 24/3 ######// err_when( soldierPtr->unit_id == UNIT_WAGON ); if( soldierPtr->race_id != 0 && soldierPtr->rank_id == RANK_SOLDIER && !soldierPtr->is_under_training() && soldierPtr->skill_level() > 0 ) // ##### end Gilbert 24/3 ######// { button_promote.enable_flag = 1; } } button_promote.paint(); } } disp_spy_button( INFO_X1+13+BUTTON_DISTANCE, INFO_Y1+281, refreshFlag); }
//--------- Begin of function FirmCamp::detect_info ---------// // void FirmCamp::detect_info() { if( detect_basic_info() ) return; if( !should_show_info() ) return; //------ detect the overseer button -----// int rc = mouse.single_click(INFO_X1+6, INFO_Y1+58, INFO_X1+5+UNIT_LARGE_ICON_WIDTH, INFO_Y1+57+UNIT_LARGE_ICON_HEIGHT, 2 ); if( rc==1 ) // display this overseer's info { selected_worker_id = 0; disp_camp_info(INFO_Y1+54, INFO_UPDATE); disp_worker_list(INFO_Y1+104, INFO_UPDATE); disp_worker_info(INFO_Y1+168, INFO_UPDATE); } //--------- detect soldier info ---------// if( detect_worker_list() ) { disp_camp_info(INFO_Y1+54, INFO_UPDATE); disp_worker_list(INFO_Y1+104, INFO_UPDATE); disp_worker_info(INFO_Y1+168, INFO_UPDATE); } //---------- detect spy button ----------// detect_spy_button(); if( !own_firm() ) return; //------ detect the overseer button -----// if( rc==2 ) { if(remote.is_enable()) { // packet structure : <firm recno> short *shortPtr=(short *)remote.new_send_queue_msg(MSG_FIRM_MOBL_OVERSEER, sizeof(short)); shortPtr[0] = firm_recno; } else { assign_overseer(0); // the overseer quits the camp } } //----------- detect patrol -----------// if( button_patrol.detect() ) { if(remote.is_enable()) { // packet structure : <firm recno> short *shortPtr=(short *)remote.new_send_queue_msg(MSG_F_CAMP_PATROL, sizeof(short)); shortPtr[0] = firm_recno; } else { patrol(); } } //----------- detect reward -----------// if( button_reward.detect() ) { reward(selected_worker_id, COMMAND_PLAYER); // ##### begin Gilbert 25/9 ######// se_ctrl.immediate_sound("TURN_ON"); // ##### end Gilbert 25/9 ######// } //----- detect defense mode button -------// if( button_defense.detect() ) { // ##### begin Gilbert 25/9 ######// se_ctrl.immediate_sound( !defense_flag?(char*)"TURN_ON":(char*)"TURN_OFF"); // ##### end Gilbert 25/9 ######// if( !remote.is_enable() ) { // update RemoteMsg::toggle_camp_patrol() defense_flag = !defense_flag; } else { // packet structure : <firm recno> <defense_flag> short *shortPtr=(short *)remote.new_send_queue_msg(MSG_F_CAMP_TOGGLE_PATROL, 2*sizeof(short)); shortPtr[0] = firm_recno; shortPtr[1] = !defense_flag; } button_defense.update_bitmap( defense_flag ? (char*)"DEFENSE1" : (char*)"DEFENSE0" ); } }
int MapMatrix::detect() { int x=MAP_MODE_BUTTON_X1 + 4; int y=MAP_MODE_BUTTON_Y1 + 5; //#define MAP_MODE_BUTTON_WIDTH 24 //#define MAP_MODE_BUTTON_HEIGHT 24 for( int i=0 ; i<MAP_MODE_COUNT ; i++, x+=MAP_MODE_BUTTON_WIDTH, y+=MAP_MODE_BUTTON_HEIGHT ) { if( mouse.single_click( x, y, x+MAP_MODE_BUTTON_WIDTH-1, y+MAP_MODE_BUTTON_HEIGHT-1 ) ) { toggle_map_mode(i); return 1; } } if( mouse.single_click( MAP_MODE_BUTTON_X1-97, MAP_MODE_BUTTON_Y1+10, MAP_MODE_BUTTON_X1-97+34-1, MAP_MODE_BUTTON_Y1+10+34-1 ) ) { if (zoom_map_building_disappear) zoom_map_building_disappear = 0; else zoom_map_building_disappear = 1; disp_mode_button(1); // 1-display the buttons on the front buffer. #ifdef USE_FLIP disp_mode_button(0); // 0-display the buttons on the back buffer. #endif refresh(); return 1; } int rc; if( (rc=button_filter_object.detect(0, 0, 1)) > 0 ) // 1-detect right button { if( rc==2 ) // right button - locked filter { filter_object_flag = 1; button_filter_object.pushed_flag = 1; button_filter_object.update_bitmap("O-DN"); filter_object_locked = 1; set_filter_para(); } else { filter_object_flag = button_filter_object.pushed_flag; button_filter_object.update_bitmap("O-DN2"); filter_object_locked = 0; if( !filter_object_flag ) filter_object_para = 0; } disp_mode_button(1); #ifdef USE_FLIP disp_mode_button(0); #endif refresh(); } else button_filter_object.set_help_code( "OBJECT" ); if( (rc=button_filter_nation.detect(0, 0, 1)) > 0 ) // 1-detect right button { if( rc==2 ) // right button - locked filter { filter_nation_flag = 1; button_filter_nation.pushed_flag = 1; button_filter_nation.update_bitmap("N-DN"); filter_nation_locked = 1; set_filter_para(); } else { filter_nation_flag = button_filter_nation.pushed_flag; button_filter_nation.update_bitmap("N-DN2"); filter_nation_locked = 0; } disp_mode_button(1); #ifdef USE_FLIP disp_mode_button(0); #endif refresh(); } else button_filter_nation.set_help_code( "NATION" ); //----- detect clicking on the map -------// return detect_area(); }