@ -255,6 +255,247 @@ command_result dump_bp_mods(color_ostream &out, vector <string> & parameters)
 
		
	
		
			
				    return  CR_OK ; 
 
		
	
		
			
				}  
		
	
		
			
				
 
		
	
		
			
				command_result  Dump_Trees ( color_ostream  & out ,  vector < string >  & parameters )  
		
	
		
			
				{  
		
	
		
			
				    char  filename [ 255 ] ; 
 
		
	
		
			
				    for ( int  columnIndex  =  0 ;  columnIndex  <  world - > map . map_block_columns . size ( ) ;  columnIndex + + ) 
 
		
	
		
			
				    { 
 
		
	
		
			
				        auto  column  =  world - > map . map_block_columns [ columnIndex ] ; 
 
		
	
		
			
				        if ( ! column ) 
 
		
	
		
			
				            continue ; 
 
		
	
		
			
				        if ( column - > plants . size ( )  = =  0 ) 
 
		
	
		
			
				            continue ; 
 
		
	
		
			
				        for ( int  plantIndex  =  0 ;  plantIndex  <  column - > plants . size ( ) ;  plantIndex + + ) 
 
		
	
		
			
				        { 
 
		
	
		
			
				            auto  plant  =  column - > plants [ plantIndex ] ; 
 
		
	
		
			
				            if ( ! plant ) 
 
		
	
		
			
				                continue ; 
 
		
	
		
			
				            if ( ! plant - > tree_info ) 
 
		
	
		
			
				                continue ; 
 
		
	
		
			
				            sprintf ( filename ,  " plant_%03d,%03d,%03d.txt " ,  plant - > pos . z ,  plant - > pos . y ,  plant - > pos . x ) ; 
 
		
	
		
			
				            remove ( filename ) ; 
 
		
	
		
			
				            ofstream  output ; 
 
		
	
		
			
				            output . open ( filename ) ; 
 
		
	
		
			
				            output  < <  " Pos:  "  < <  plant - > pos . x  < <  " ,  "  < <  plant - > pos . y  < <  " ,  "  < <  plant - > pos . z  < <  endl ; 
 
		
	
		
			
				            output  < <  " Material:  "  < <  plant - > material  < <  endl ; 
 
		
	
		
			
				            output  < <  " Grow Counter:  "  < <  plant - > grow_counter  < <  endl ; 
 
		
	
		
			
				            output  < <  " Damage Flags:  " ; 
 
		
	
		
			
				            if ( plant - > damage_flags . bits . is_burning ) 
 
		
	
		
			
				                output  < <  " is_burning,  " ; 
 
		
	
		
			
				            if ( plant - > damage_flags . bits . is_drowning ) 
 
		
	
		
			
				                output  < <  " is_drowning,  " ; 
 
		
	
		
			
				            if ( plant - > damage_flags . bits . anon_1 ) 
 
		
	
		
			
				                output  < <  " anon_1,  " ; 
 
		
	
		
			
				            output  < <  endl ; 
 
		
	
		
			
				            output  < <  " HP:  "  < <  plant - > hitpoints  < <  endl ; 
 
		
	
		
			
				            output  < <  " Update Order:  "  < <  plant - > update_order  < <  endl ; 
 
		
	
		
			
				            output  < <  " Site ID:  "  < <  plant - > site_id  < <  endl ; 
 
		
	
		
			
				            output  < <  " SRB ID:  "  < <  plant - > srb_id  < <  endl ; 
 
		
	
		
			
				            auto  treeInfo  =  plant - > tree_info ; 
 
		
	
		
			
				            output  < <  " Dim X:  "  < <  treeInfo - > dim_x  < <  endl ; 
 
		
	
		
			
				            output  < <  " Dim Y:  "  < <  treeInfo - > dim_y  < <  endl ; 
 
		
	
		
			
				            output  < <  " Dim Z:  "  < <  treeInfo - > body_height  < <  endl ; 
 
		
	
		
			
				            for ( int  z  =  0 ;  z  <  treeInfo - > body_height ;  z + + ) 
 
		
	
		
			
				            { 
 
		
	
		
			
				                for ( int  y  =  - 1 ;  y  <  treeInfo - > dim_y ;  y + + ) 
 
		
	
		
			
				                { 
 
		
	
		
			
				                    for ( int  x  =  - 1 ;  x  <  treeInfo - > dim_x ;  x + + ) 
 
		
	
		
			
				                    { 
 
		
	
		
			
				                        if ( x  <  0 ) 
 
		
	
		
			
				                        { 
 
		
	
		
			
				                            if ( y  <  0 ) 
 
		
	
		
			
				                            { 
 
		
	
		
			
				                                output  < <  "   " ; 
 
		
	
		
			
				                                continue ; 
 
		
	
		
			
				                            } 
 
		
	
		
			
				                            output  < <  y % 9 ; 
 
		
	
		
			
				                            continue ; 
 
		
	
		
			
				                        } 
 
		
	
		
			
				                        if ( y  <  0 ) 
 
		
	
		
			
				                        { 
 
		
	
		
			
				                            output  < <  x % 9 ; 
 
		
	
		
			
				                            continue ; 
 
		
	
		
			
				                        } 
 
		
	
		
			
				                        auto  tile  =  treeInfo - > body [ z ] [ x  +  treeInfo - > dim_x * y ] ; 
 
		
	
		
			
				                        if ( tile . bits . blocked ) 
 
		
	
		
			
				                            output  < <  " x " ; 
 
		
	
		
			
				                        else  if ( tile . bits . twigs ) 
 
		
	
		
			
				                            output  < <  " ░ " ; 
 
		
	
		
			
				                        else  if ( tile . bits . branches ) 
 
		
	
		
			
				                        { 
 
		
	
		
			
				                            if ( tile . bits . thick_branches_1 )  // East Connection
 
 
		
	
		
			
				                            { 
 
		
	
		
			
				                                if ( tile . bits . thick_branches_2 )  // South Connection
 
 
		
	
		
			
				                                { 
 
		
	
		
			
				                                    if ( tile . bits . thick_branches_3 )  // West Connection
 
 
		
	
		
			
				                                    { 
 
		
	
		
			
				                                        if ( tile . bits . thick_branches_4 )  // North Connection
 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " ╬ " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " ┼ " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                        else 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " ╦ " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " ┬ " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                    } 
 
		
	
		
			
				                                    else 
 
		
	
		
			
				                                    { 
 
		
	
		
			
				                                        if ( tile . bits . thick_branches_4 )  // North Connection
 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " ╠ " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " ├ " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                        else 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " ╔ " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " ┌ " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                    } 
 
		
	
		
			
				                                } 
 
		
	
		
			
				                                else 
 
		
	
		
			
				                                { 
 
		
	
		
			
				                                    if ( tile . bits . thick_branches_3 )  // West Connection
 
 
		
	
		
			
				                                    { 
 
		
	
		
			
				                                        if ( tile . bits . thick_branches_4 )  // North Connection
 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " ╩ " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " ┴ " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                        else 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " ═ " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " ─ " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                    } 
 
		
	
		
			
				                                    else 
 
		
	
		
			
				                                    { 
 
		
	
		
			
				                                        if ( tile . bits . thick_branches_4 )  // North Connection
 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " ╚ " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " └ " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                        else 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " ╞ " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " > " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                    } 
 
		
	
		
			
				                                } 
 
		
	
		
			
				                            } 
 
		
	
		
			
				                            else 
 
		
	
		
			
				                            { 
 
		
	
		
			
				                                if ( tile . bits . thick_branches_2 )  // South Connection
 
 
		
	
		
			
				                                { 
 
		
	
		
			
				                                    if ( tile . bits . thick_branches_3 )  // West Connection
 
 
		
	
		
			
				                                    { 
 
		
	
		
			
				                                        if ( tile . bits . thick_branches_4 )  // North Connection
 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " ╣ " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " ┤ " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                        else 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " ╗ " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " ┐ " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                    } 
 
		
	
		
			
				                                    else 
 
		
	
		
			
				                                    { 
 
		
	
		
			
				                                        if ( tile . bits . thick_branches_4 )  // North Connection
 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " ║ " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " │ " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                        else 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " ╥ " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " v " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                    } 
 
		
	
		
			
				                                } 
 
		
	
		
			
				                                else 
 
		
	
		
			
				                                { 
 
		
	
		
			
				                                    if ( tile . bits . thick_branches_3 )  // West Connection
 
 
		
	
		
			
				                                    { 
 
		
	
		
			
				                                        if ( tile . bits . thick_branches_4 )  // North Connection
 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " ╝ " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " ┘ " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                        else 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " ╡ " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " < " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                    } 
 
		
	
		
			
				                                    else 
 
		
	
		
			
				                                    { 
 
		
	
		
			
				                                        if ( tile . bits . thick_branches_4 )  // North Connection
 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " ╨ " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " ^ " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                        else 
 
		
	
		
			
				                                            { 
 
		
	
		
			
				                                                if ( tile . bits . trunk ) 
 
		
	
		
			
				                                                    output  < <  " o " ; 
 
		
	
		
			
				                                                else 
 
		
	
		
			
				                                                    output  < <  " ▒ " ; 
 
		
	
		
			
				                                            } 
 
		
	
		
			
				                                    } 
 
		
	
		
			
				                                } 
 
		
	
		
			
				                            } 
 
		
	
		
			
				                        } 
 
		
	
		
			
				                        else  if ( tile . bits . trunk ) 
 
		
	
		
			
				                            output  < <  " O " ; 
 
		
	
		
			
				                        else  if ( tile . whole  >  0 ) 
 
		
	
		
			
				                            output  < <  + tile . whole ; 
 
		
	
		
			
				                        else 
 
		
	
		
			
				                            output  < <  "   " ; 
 
		
	
		
			
				                    } 
 
		
	
		
			
				                    output  < <  endl ; 
 
		
	
		
			
				                } 
 
		
	
		
			
				                output  < <  endl ; 
 
		
	
		
			
				            } 
 
		
	
		
			
				            //...
 
 
		
	
		
			
				            output . close ( ) ; 
 
		
	
		
			
				        } 
 
		
	
		
			
				    } 
 
		
	
		
			
				    return  CR_OK ; 
 
		
	
		
			
				}  
		
	
		
			
				
 
		
	
		
			
				command_result  RemoteFortressReader_version ( color_ostream  & out ,  vector < string >  & parameters )  
		
	
		
			
				{  
		
	
		
			
				    out . print ( RFR_VERSION ) ; 
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -271,12 +512,15 @@ DFhackCExport command_result plugin_init(color_ostream &out, std::vector <Plugin
 
		
	
		
			
				        " dump-bp-mods " ,  " Dump bodypart mods for debugging " , 
 
		
	
		
			
				        dump_bp_mods ,  false ,  /* true means that the command can't be used from non-interactive user interface */ 
 
		
	
		
			
				                             // Extended help string. Used by CR_WRONG_USAGE and the help command:
 
 
		
	
		
			
				        "   This command does nothing at all. \n " 
 
		
	
		
			
				        " Example: \n " 
 
		
	
		
			
				        "   isoworldremote \n " 
 
		
	
		
			
				        "     Does nothing. \n " 
 
		
	
		
			
				        "   Saves every possible body part appearance modifier to bp_appearance_mods.csv \n " 
 
		
	
		
			
				    ) ) ; 
 
		
	
		
			
				     commands . push_back ( PluginCommand ( 
 
		
	
		
			
				        " dump-trees " ,  " Dump trees for debugging " , 
 
		
	
		
			
				        Dump_Trees ,  false ,  /* true means that the command can't be used from non-interactive user interface */ 
 
		
	
		
			
				                             // Extended help string. Used by CR_WRONG_USAGE and the help command:
 
 
		
	
		
			
				        "   saves each tree on the map to a separate text file. \n " 
 
		
	
		
			
				    ) ) ; 
 
		
	
		
			
				    commands . push_back ( PluginCommand ( " RemoteFortressReader_version " ,  " List the loaded RemoteFortressReader version " ,  RemoteFortressReader_version ,  false ,  " This is used for plugin version checking. " ) ) ; 
 
		
	
		
			
				   commands . push_back ( PluginCommand ( " RemoteFortressReader_version " ,  " List the loaded RemoteFortressReader version " ,  RemoteFortressReader_version ,  false ,  " This is used for plugin version checking. " ) ) ; 
 
		
	
		
			
				    commands . push_back ( PluginCommand ( 
 
		
	
		
			
				        " load-art-image-chunk " , 
 
		
	
		
			
				        " Gets an art image chunk by index, loading from disk if necessary " , 
 
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
			
			@ -1557,9 +1801,9 @@ static command_result GetBlockList(color_ostream &stream, const BlockRequest *in
 
		
	
		
			
				                segment_passed  =  0 ; 
 
		
	
		
			
				
 
		
	
		
			
				                // 'rotate' directions
 
 
		
	
		
			
				                int  buffer  =  di ; 
 
		
	
		
			
				                int  filename  =  di ; 
 
		
	
		
			
				                di  =  - dj ; 
 
		
	
		
			
				                dj  =  buffer ; 
 
		
	
		
			
				                dj  =  filename ; 
 
		
	
		
			
				
 
		
	
		
			
				                // increase segment length if necessary
 
 
		
	
		
			
				                if  ( dj  = =  0 )  {