@ -207,300 +207,6 @@ command_result loadArtImageChunk(color_ostream &out, vector <string> & parameter
return CR_OK ;
}
command_result dump_bp_mods ( color_ostream & out , vector < string > & parameters )
{
remove ( " bp_appearance_mods.csv " ) ;
ofstream output ;
output . open ( " bp_appearance_mods.csv " ) ;
output < < " Race Index;Race;Caste;Bodypart Token;Bodypart Name;Tissue Layer;Modifier Type;Range \n " ;
for ( size_t creatureIndex = 0 ; creatureIndex < world - > raws . creatures . all . size ( ) ; creatureIndex + + )
{
auto creatureRaw = world - > raws . creatures . all [ creatureIndex ] ;
for ( size_t casteIndex = 0 ; casteIndex < creatureRaw - > caste . size ( ) ; casteIndex + + )
{
df : : caste_raw * casteRaw = creatureRaw - > caste [ casteIndex ] ;
for ( size_t partIndex = 0 ; partIndex < casteRaw - > bp_appearance . part_idx . size ( ) ; partIndex + + )
{
output < < creatureIndex < < " ; " ;
output < < creatureRaw - > creature_id < < " ; " ;
output < < casteRaw - > caste_id < < " ; " ;
output < < casteRaw - > body_info . body_parts [ casteRaw - > bp_appearance . part_idx [ partIndex ] ] - > token < < " ; " ;
output < < casteRaw - > body_info . body_parts [ casteRaw - > bp_appearance . part_idx [ partIndex ] ] - > name_singular [ 0 ] - > c_str ( ) < < " ; " ;
int layer = casteRaw - > bp_appearance . layer_idx [ partIndex ] ;
if ( layer < 0 )
output < < " N/A; " ;
else
output < < casteRaw - > body_info . body_parts [ casteRaw - > bp_appearance . part_idx [ partIndex ] ] - > layers [ layer ] - > layer_name < < " ; " ;
output < < ENUM_KEY_STR ( appearance_modifier_type , casteRaw - > bp_appearance . modifiers [ casteRaw - > bp_appearance . modifier_idx [ partIndex ] ] - > type ) < < " ; " ;
auto appMod = casteRaw - > bp_appearance . modifiers [ casteRaw - > bp_appearance . modifier_idx [ partIndex ] ] ;
# if DF_VERSION_INT > 34011
if ( appMod - > growth_rate > 0 )
{
output < < appMod - > growth_min < < " - " < < appMod - > growth_max < < " \n " ;
}
else
# endif
{
output < < casteRaw - > bp_appearance . modifiers [ casteRaw - > bp_appearance . modifier_idx [ partIndex ] ] - > ranges [ 0 ] < < " - " ;
output < < casteRaw - > bp_appearance . modifiers [ casteRaw - > bp_appearance . modifier_idx [ partIndex ] ] - > ranges [ 6 ] < < " \n " ;
}
}
}
}
output . close ( ) ;
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 < < u8 " \u2591 " ;
else if ( tile . bits . branches )
{
if ( tile . bits . connection_east ) // East Connection
{
if ( tile . bits . connection_south ) // South Connection
{
if ( tile . bits . connection_west ) // West Connection
{
if ( tile . bits . connection_north ) // North Connection
{
if ( tile . bits . trunk )
output < < u8 " \u256c " ;
else
output < < u8 " \u253c " ;
}
else
{
if ( tile . bits . trunk )
output < < u8 " \u2566 " ;
else
output < < u8 " \u252c " ;
}
}
else
{
if ( tile . bits . connection_north ) // North Connection
{
if ( tile . bits . trunk )
output < < u8 " \u2560 " ;
else
output < < u8 " \u251c " ;
}
else
{
if ( tile . bits . trunk )
output < < u8 " \u2554 " ;
else
output < < u8 " \u250c " ;
}
}
}
else
{
if ( tile . bits . connection_west ) // West Connection
{
if ( tile . bits . connection_north ) // North Connection
{
if ( tile . bits . trunk )
output < < u8 " \u2569 " ;
else
output < < u8 " \u2534 " ;
}
else
{
if ( tile . bits . trunk )
output < < u8 " \u2550 " ;
else
output < < u8 " \u2500 " ;
}
}
else
{
if ( tile . bits . connection_north ) // North Connection
{
if ( tile . bits . trunk )
output < < u8 " \u255a " ;
else
output < < u8 " \u2514 " ;
}
else
{
if ( tile . bits . trunk )
output < < u8 " \u255e " ;
else
output < < " > " ;
}
}
}
}
else
{
if ( tile . bits . connection_south ) // South Connection
{
if ( tile . bits . connection_west ) // West Connection
{
if ( tile . bits . connection_north ) // North Connection
{
if ( tile . bits . trunk )
output < < u8 " \u2563 " ;
else
output < < u8 " \u2524 " ;
}
else
{
if ( tile . bits . trunk )
output < < u8 " \u2557 " ;
else
output < < u8 " \u2510 " ;
}
}
else
{
if ( tile . bits . connection_north ) // North Connection
{
if ( tile . bits . trunk )
output < < u8 " \u2551 " ;
else
output < < u8 " \u2502 " ;
}
else
{
if ( tile . bits . trunk )
output < < u8 " \u2565 " ;
else
output < < " v " ;
}
}
}
else
{
if ( tile . bits . connection_west ) // West Connection
{
if ( tile . bits . connection_north ) // North Connection
{
if ( tile . bits . trunk )
output < < u8 " \u255d " ;
else
output < < u8 " \u2518 " ;
}
else
{
if ( tile . bits . trunk )
output < < u8 " \u2561 " ;
else
output < < " < " ;
}
}
else
{
if ( tile . bits . connection_north ) // North Connection
{
if ( tile . bits . trunk )
output < < u8 " \u2568 " ;
else
output < < " ^ " ;
}
else
{
if ( tile . bits . trunk )
output < < " o " ;
else
output < < u8 " \u2592 " ;
}
}
}
}
}
else if ( tile . bits . trunk )
output < < " O " ;
else if ( tile . whole > 0 )
output < < + tile . whole ;
else
output < < " " ;
}
output < < endl ;
}
output < < " extent_east: " < < treeInfo - > extent_east [ z ] ;
output < < " extent_south: " < < treeInfo - > extent_south [ z ] ;
output < < " extent_west: " < < treeInfo - > extent_west [ z ] ;
output < < " extent_north: " < < treeInfo - > extent_north [ z ] ;
output < < endl ;
}
//...
output . close ( ) ;
}
}
return CR_OK ;
}
command_result RemoteFortressReader_version ( color_ostream & out , vector < string > & parameters )
{
out . print ( RFR_VERSION ) ;
@ -512,19 +218,6 @@ DFHACK_PLUGIN_IS_ENABLED(enableUpdates);
// Mandatory init function. If you have some global state, create it here.
DFhackCExport command_result plugin_init ( color_ostream & out , std : : vector < PluginCommand > & commands )
{
//// Fill the command list with your commands.
commands . push_back ( PluginCommand (
" 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:
" 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 (
" load-art-image-chunk " ,