|  |  |  | @ -14,6 +14,7 @@ | 
		
	
		
			
				|  |  |  |  | #include "DFHackVersion.h" | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | #include "df/graphic.h" | 
		
	
		
			
				|  |  |  |  | #include "df/viewscreen_optionst.h" | 
		
	
		
			
				|  |  |  |  | #include "df/viewscreen_titlest.h" | 
		
	
		
			
				|  |  |  |  | #include "uicommon.h" | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -25,34 +26,52 @@ DFHACK_PLUGIN("title-version"); | 
		
	
		
			
				|  |  |  |  | DFHACK_PLUGIN_IS_ENABLED(is_enabled); | 
		
	
		
			
				|  |  |  |  | REQUIRE_GLOBAL(gps); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | void draw_version(int start_x, int start_y) { | 
		
	
		
			
				|  |  |  |  |     int x = start_x, | 
		
	
		
			
				|  |  |  |  |         y = start_y; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     OutputString(COLOR_WHITE, x, y, string("DFHack ") + DFHACK_VERSION); | 
		
	
		
			
				|  |  |  |  |     if (!DFHACK_IS_RELEASE) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         OutputString(COLOR_WHITE, x, y, " (dev)"); | 
		
	
		
			
				|  |  |  |  |         x = start_x; y++; | 
		
	
		
			
				|  |  |  |  |         OutputString(COLOR_WHITE, x, y, "Git: "); | 
		
	
		
			
				|  |  |  |  |         OutputString(COLOR_WHITE, x, y, DFHACK_GIT_DESCRIPTION); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     if (DFHACK_IS_PRERELEASE) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         x = start_x; y++; | 
		
	
		
			
				|  |  |  |  |         OutputString(COLOR_LIGHTRED, x, y, "Pre-release build"); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | struct title_version_hook : df::viewscreen_titlest { | 
		
	
		
			
				|  |  |  |  |     typedef df::viewscreen_titlest interpose_base; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     DEFINE_VMETHOD_INTERPOSE(void, render, ()) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         INTERPOSE_NEXT(render)(); | 
		
	
		
			
				|  |  |  |  |         if (loading) | 
		
	
		
			
				|  |  |  |  |             return; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         int x = 0, y = 0; | 
		
	
		
			
				|  |  |  |  |         OutputString(COLOR_WHITE, x, y, string("DFHack ") + DFHACK_VERSION); | 
		
	
		
			
				|  |  |  |  |         if (!DFHACK_IS_RELEASE) | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             OutputString(COLOR_WHITE, x, y, " (dev)"); | 
		
	
		
			
				|  |  |  |  |             x = 0; y++; | 
		
	
		
			
				|  |  |  |  |             OutputString(COLOR_WHITE, x, y, "Git: "); | 
		
	
		
			
				|  |  |  |  |             OutputString(COLOR_WHITE, x, y, DFHACK_GIT_DESCRIPTION); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         if (DFHACK_IS_PRERELEASE) | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             x = 0; y++; | 
		
	
		
			
				|  |  |  |  |             OutputString(COLOR_LIGHTRED, x, y, "Pre-release build"); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         if (!loading) | 
		
	
		
			
				|  |  |  |  |             draw_version(0, 0); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | }; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | IMPLEMENT_VMETHOD_INTERPOSE(title_version_hook, render); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | struct options_version_hook : df::viewscreen_optionst { | 
		
	
		
			
				|  |  |  |  |     typedef df::viewscreen_optionst interpose_base; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     DEFINE_VMETHOD_INTERPOSE(void, render, ()) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         INTERPOSE_NEXT(render)(); | 
		
	
		
			
				|  |  |  |  |         if (!msg_quit && !in_retire_adv && !msg_peasant && | 
		
	
		
			
				|  |  |  |  |             !in_retire_dwf_abandon_adv && !in_abandon_dwf && !ending_game) | 
		
	
		
			
				|  |  |  |  |             draw_version(0, 0); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | }; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | IMPLEMENT_VMETHOD_INTERPOSE(options_version_hook, render); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | DFhackCExport command_result plugin_enable (color_ostream &out, bool enable) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  |     if (!gps) | 
		
	
	
		
			
				
					|  |  |  | @ -60,7 +79,8 @@ DFhackCExport command_result plugin_enable (color_ostream &out, bool enable) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     if (enable != is_enabled) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         if (!INTERPOSE_HOOK(title_version_hook, render).apply(enable)) | 
		
	
		
			
				|  |  |  |  |         if (!INTERPOSE_HOOK(title_version_hook, render).apply(enable) || | 
		
	
		
			
				|  |  |  |  |             !INTERPOSE_HOOK(options_version_hook, render).apply(enable)) | 
		
	
		
			
				|  |  |  |  |             return CR_FAILURE; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         is_enabled = enable; | 
		
	
	
		
			
				
					|  |  |  | @ -77,5 +97,6 @@ DFhackCExport command_result plugin_init (color_ostream &out, vector<PluginComma | 
		
	
		
			
				|  |  |  |  | DFhackCExport command_result plugin_shutdown (color_ostream &out) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  |     INTERPOSE_HOOK(title_version_hook, render).remove(); | 
		
	
		
			
				|  |  |  |  |     INTERPOSE_HOOK(options_version_hook, render).remove(); | 
		
	
		
			
				|  |  |  |  |     return CR_OK; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
	
		
			
				
					|  |  |  | 
 |