|  |  | @ -87,6 +87,8 @@ using namespace DFHack; | 
			
		
	
		
		
			
				
					
					|  |  |  | #include "df/announcements.h" |  |  |  | #include "df/announcements.h" | 
			
		
	
		
		
			
				
					
					|  |  |  | #include "df/stop_depart_condition.h" |  |  |  | #include "df/stop_depart_condition.h" | 
			
		
	
		
		
			
				
					
					|  |  |  | #include "df/route_stockpile_link.h" |  |  |  | #include "df/route_stockpile_link.h" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #include "df/game_mode.h" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #include "df/unit.h" | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | using namespace df::enums; |  |  |  | using namespace df::enums; | 
			
		
	
		
		
			
				
					
					|  |  |  | using df::global::gview; |  |  |  | using df::global::gview; | 
			
		
	
	
		
		
			
				
					|  |  | @ -97,6 +99,7 @@ using df::global::world; | 
			
		
	
		
		
			
				
					
					|  |  |  | using df::global::selection_rect; |  |  |  | using df::global::selection_rect; | 
			
		
	
		
		
			
				
					
					|  |  |  | using df::global::ui_menu_width; |  |  |  | using df::global::ui_menu_width; | 
			
		
	
		
		
			
				
					
					|  |  |  | using df::global::ui_area_map_width; |  |  |  | using df::global::ui_area_map_width; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | using df::global::gamemode; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | static df::layer_object_listst *getLayerList(df::viewscreen_layer *layer, int idx) |  |  |  | static df::layer_object_listst *getLayerList(df::viewscreen_layer *layer, int idx) | 
			
		
	
		
		
			
				
					
					|  |  |  | { |  |  |  | { | 
			
		
	
	
		
		
			
				
					|  |  | @ -1080,13 +1083,26 @@ df::building *Gui::getSelectedBuilding(color_ostream &out, bool quiet) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | //
 |  |  |  | //
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | static void doShowAnnouncement( |  |  |  | DFHACK_EXPORT void Gui::writeToGamelog(std::string message) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     df::announcement_type type, df::coord pos, std::string message, int color, bool bright |  |  |  | { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | ) { |  |  |  |     if (message.empty()) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     std::ofstream fseed("gamelog.txt", std::ios::out | std::ios::app); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if(fseed.is_open()) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         fseed << message << std::endl; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     fseed.close(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | DFHACK_EXPORT int Gui::makeAnnouncement(df::announcement_type type, df::announcement_flags flags, df::coord pos, std::string message, int color, bool bright) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |     using df::global::world; |  |  |  |     using df::global::world; | 
			
		
	
		
		
			
				
					
					|  |  |  |     using df::global::cur_year; |  |  |  |     using df::global::cur_year; | 
			
		
	
		
		
			
				
					
					|  |  |  |     using df::global::cur_year_tick; |  |  |  |     using df::global::cur_year_tick; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (message.empty()) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return -1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     int year = 0, year_time = 0; |  |  |  |     int year = 0, year_time = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (cur_year && cur_year_tick) |  |  |  |     if (cur_year && cur_year_tick) | 
			
		
	
	
		
		
			
				
					|  |  | @ -1102,6 +1118,31 @@ static void doShowAnnouncement( | 
			
		
	
		
		
			
				
					
					|  |  |  |         year_time = last->time; |  |  |  |         year_time = last->time; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     // Apply the requested effects
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     writeToGamelog(message); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (flags.bits.DO_MEGA || flags.bits.PAUSE || flags.bits.RECENTER) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         resetDwarfmodeView(flags.bits.DO_MEGA || flags.bits.PAUSE); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (flags.bits.RECENTER && pos.isValid()) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             revealInDwarfmodeMap(pos, true); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (flags.bits.DO_MEGA) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             showPopupAnnouncement(message, color, bright); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     bool display = false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (gamemode == NULL) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         display = flags.bits.A_DISPLAY || flags.bits.D_DISPLAY; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     else if (*gamemode == game_mode::ADVENTURE) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         display = flags.bits.A_DISPLAY; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         display = flags.bits.D_DISPLAY; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     // Generate the report objects
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     int report_idx = world->status.reports.size(); | 
			
		
	
		
		
			
				
					
					|  |  |  |     bool continued = false; |  |  |  |     bool continued = false; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     while (!message.empty()) |  |  |  |     while (!message.empty()) | 
			
		
	
	
		
		
			
				
					|  |  | @ -1117,7 +1158,6 @@ static void doShowAnnouncement( | 
			
		
	
		
		
			
				
					
					|  |  |  |         new_rep->time = year_time; |  |  |  |         new_rep->time = year_time; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         new_rep->flags.bits.continuation = continued; |  |  |  |         new_rep->flags.bits.continuation = continued; | 
			
		
	
		
		
			
				
					
					|  |  |  |         new_rep->flags.bits.announcement = true; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         int size = std::min(message.size(), (size_t)73); |  |  |  |         int size = std::min(message.size(), (size_t)73); | 
			
		
	
		
		
			
				
					
					|  |  |  |         new_rep->text = message.substr(0, size); |  |  |  |         new_rep->text = message.substr(0, size); | 
			
		
	
	
		
		
			
				
					|  |  | @ -1129,20 +1169,114 @@ static void doShowAnnouncement( | 
			
		
	
		
		
			
				
					
					|  |  |  |         new_rep->id = world->status.next_report_id++; |  |  |  |         new_rep->id = world->status.next_report_id++; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         world->status.reports.push_back(new_rep); |  |  |  |         world->status.reports.push_back(new_rep); | 
			
		
	
		
		
			
				
					
					|  |  |  |         world->status.announcements.push_back(new_rep); |  |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         world->status.display_timer = 2000; |  |  |  |         if (display) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             new_rep->flags.bits.announcement = true; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             world->status.announcements.push_back(new_rep); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             world->status.display_timer = 2000; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     return report_idx; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | bool Gui::addCombatReport(df::unit *unit, df::unit_report_type slot, int report_index) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     using df::global::world; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     CHECK_INVALID_ARGUMENT(is_valid_enum_item(slot)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     auto &vec = world->status.reports; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     auto report = vector_get(vec, report_index); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (!unit || !report) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     // Check that it is a new report
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     auto &rvec = unit->reports.log[slot]; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (!rvec.empty() && rvec.back() >= report->id) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     // Add the report
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     rvec.push_back(report->id); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     unit->reports.last_year[slot] = report->year; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     unit->reports.last_year_tick[slot] = report->time; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     switch (slot) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case unit_report_type::Combat: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             world->status.flags.bits.combat = true; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             break; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case unit_report_type::Hunting: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             world->status.flags.bits.hunting = true; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             break; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         case unit_report_type::Sparring: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             world->status.flags.bits.sparring = true; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             break; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     // And all the continuation lines
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     for (size_t i = report_index+1; i < vec.size() && vec[i]->flags.bits.continuation; i++) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         rvec.push_back(vec[i]->id); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     return true; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | bool Gui::addCombatReportAuto(df::unit *unit, df::announcement_flags mode, int report_index) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     using df::global::world; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     auto &vec = world->status.reports; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     auto report = vector_get(vec, report_index); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (!unit || !report) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     bool ok = false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (mode.bits.UNIT_COMBAT_REPORT) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (unit->flags2.bits.sparring) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             ok |= addCombatReport(unit, unit_report_type::Sparring, report_index); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         else if (unit->job.current_job && unit->job.current_job->job_type == job_type::Hunt) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             ok |= addCombatReport(unit, unit_report_type::Hunting, report_index); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             ok |= addCombatReport(unit, unit_report_type::Combat, report_index); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (mode.bits.UNIT_COMBAT_REPORT_ALL_ACTIVE) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         FOR_ENUM_ITEMS(unit_report_type, slot) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if (!unit->reports.log[slot].empty() && | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 unit->reports.last_year[slot] == report->year && | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 (report->time - unit->reports.last_year_tick[slot]) <= 500) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 ok |= addCombatReport(unit, slot, report_index); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     return ok; | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void Gui::showAnnouncement(std::string message, int color, bool bright) |  |  |  | void Gui::showAnnouncement(std::string message, int color, bool bright) | 
			
		
	
		
		
			
				
					
					|  |  |  | { |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |     doShowAnnouncement(df::announcement_type(0), df::coord(), message, color, bright); |  |  |  |     df::announcement_flags mode(0); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     mode.bits.D_DISPLAY = mode.bits.A_DISPLAY = true; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     makeAnnouncement(df::announcement_type(0), mode, df::coord(), message, color, bright); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void Gui::showZoomAnnouncement( |  |  |  | void Gui::showZoomAnnouncement( | 
			
		
	
		
		
			
				
					
					|  |  |  |     df::announcement_type type, df::coord pos, std::string message, int color, bool bright |  |  |  |     df::announcement_type type, df::coord pos, std::string message, int color, bool bright | 
			
		
	
		
		
			
				
					
					|  |  |  | ) { |  |  |  | ) { | 
			
		
	
		
		
			
				
					
					|  |  |  |     doShowAnnouncement(type, pos, message, color, bright); |  |  |  |     df::announcement_flags mode(0); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     mode.bits.D_DISPLAY = mode.bits.A_DISPLAY = true; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     makeAnnouncement(type, mode, pos, message, color, bright); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void Gui::showPopupAnnouncement(std::string message, int color, bool bright) |  |  |  | void Gui::showPopupAnnouncement(std::string message, int color, bool bright) | 
			
		
	
	
		
		
			
				
					|  |  | @ -1157,26 +1291,21 @@ void Gui::showPopupAnnouncement(std::string message, int color, bool bright) | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void Gui::showAutoAnnouncement( |  |  |  | void Gui::showAutoAnnouncement( | 
			
		
	
		
		
			
				
					
					|  |  |  |     df::announcement_type type, df::coord pos, std::string message, int color, bool bright |  |  |  |     df::announcement_type type, df::coord pos, std::string message, int color, bool bright, | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     df::unit *unit1, df::unit *unit2 | 
			
		
	
		
		
			
				
					
					|  |  |  | ) { |  |  |  | ) { | 
			
		
	
		
		
			
				
					
					|  |  |  |     using df::global::announcements; |  |  |  |     using df::global::announcements; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     df::announcement_flags flags; |  |  |  |     df::announcement_flags flags(0); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     flags.bits.D_DISPLAY = flags.bits.A_DISPLAY = true; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (is_valid_enum_item(type) && announcements) |  |  |  |     if (is_valid_enum_item(type) && announcements) | 
			
		
	
		
		
			
				
					
					|  |  |  |         flags = announcements->flags[type]; |  |  |  |         flags = announcements->flags[type]; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     doShowAnnouncement(type, pos, message, color, bright); |  |  |  |     int id = makeAnnouncement(type, flags, pos, message, color, bright); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (flags.bits.DO_MEGA || flags.bits.PAUSE || flags.bits.RECENTER) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         resetDwarfmodeView(flags.bits.DO_MEGA || flags.bits.PAUSE); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (flags.bits.RECENTER && pos.isValid()) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |             revealInDwarfmodeMap(pos, true); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (flags.bits.DO_MEGA) |  |  |  |     addCombatReportAuto(unit1, flags, id); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         showPopupAnnouncement(message, color, bright); |  |  |  |     addCombatReportAuto(unit2, flags, id); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | df::viewscreen *Gui::getCurViewscreen(bool skip_dismissed) |  |  |  | df::viewscreen *Gui::getCurViewscreen(bool skip_dismissed) | 
			
		
	
	
		
		
			
				
					|  |  | 
 |