@ -53,7 +53,7 @@ DFhackCExport command_result plugin_init ( color_ostream &out, std::vector <Plug
{
{
//// Fill the command list with your commands.
//// Fill the command list with your commands.
//commands.push_back(PluginCommand(
//commands.push_back(PluginCommand(
// "isoworldremote", "D o nothing, look pretty .",
// "isoworldremote", "D ump north-west embark tile to text file for debug purposes .",
// isoWorldRemote, false, /* true means that the command can't be used from non-interactive user interface */
// isoWorldRemote, 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:
// // Extended help string. Used by CR_WRONG_USAGE and the help command:
// " This command does nothing at all.\n"
// " This command does nothing at all.\n"
@ -163,8 +163,6 @@ DFhackCExport command_result plugin_onupdate ( color_ostream &out )
// }
// }
// debug_text << std::endl;
// debug_text << std::endl;
// }
// }
// //clean everything up.
// google::protobuf::ShutdownProtobufLibrary();
// // Give control back to DF.
// // Give control back to DF.
// return CR_OK;
// return CR_OK;
//}
//}
@ -223,9 +221,9 @@ int coord_to_index_48(int x, int y) {
bool gather_embark_tile ( int EmbX , int EmbY , EmbarkTile * tile , MapExtras : : MapCache * MP ) {
bool gather_embark_tile ( int EmbX , int EmbY , EmbarkTile * tile , MapExtras : : MapCache * MP ) {
tile - > set_is_valid ( false ) ;
tile - > set_is_valid ( false ) ;
tile - > set_world_x ( df : : global : : world - > map . region_x + ( EmbX / 3 ) ) ; //fixme: verify.
tile - > set_world_x ( df : : global : : world - > map . region_x + ( EmbX / 3 ) ) ;
tile - > set_world_y ( df : : global : : world - > map . region_y + ( EmbY / 3 ) ) ; //fixme: verify.
tile - > set_world_y ( df : : global : : world - > map . region_y + ( EmbY / 3 ) ) ;
tile - > set_world_z ( df : : global : : world - > map . region_z ) ; //fixme: verify .
tile - > set_world_z ( df : : global : : world - > map . region_z + 1 ) ; //adding one because floors get shifted one downwards .
tile - > set_current_year ( * df : : global : : cur_year ) ;
tile - > set_current_year ( * df : : global : : cur_year ) ;
tile - > set_current_season ( * df : : global : : cur_season ) ;
tile - > set_current_season ( * df : : global : : cur_season ) ;
int num_valid_layers = 0 ;
int num_valid_layers = 0 ;
@ -249,41 +247,64 @@ bool gather_embark_tile_layer(int EmbX, int EmbY, int EmbZ, EmbarkTileLayer * ti
int num_valid_blocks = 0 ;
int num_valid_blocks = 0 ;
for ( int yy = 0 ; yy < 3 ; yy + + ) {
for ( int yy = 0 ; yy < 3 ; yy + + ) {
for ( int xx = 0 ; xx < 3 ; xx + + ) {
for ( int xx = 0 ; xx < 3 ; xx + + ) {
DFCoord current _coord;
DFCoord current_coord , upper _coord;
current_coord . x = EmbX + xx ;
current_coord . x = EmbX + xx ;
current_coord . y = EmbY + yy ;
current_coord . y = EmbY + yy ;
current_coord . z = EmbZ ;
current_coord . z = EmbZ ;
upper_coord = current_coord ;
upper_coord . z + = 1 ;
MapExtras : : Block * b = MP - > BlockAt ( current_coord ) ;
MapExtras : : Block * b = MP - > BlockAt ( current_coord ) ;
MapExtras : : Block * b_upper = MP - > BlockAt ( upper_coord ) ;
if ( b & & b - > getRaw ( ) ) {
if ( b & & b - > getRaw ( ) ) {
for ( int block_y = 0 ; block_y < 16 ; block_y + + ) {
for ( int block_y = 0 ; block_y < 16 ; block_y + + ) {
for ( int block_x = 0 ; block_x < 16 ; block_x + + ) {
for ( int block_x = 0 ; block_x < 16 ; block_x + + ) {
df : : coord2d block_coord ;
df : : coord2d block_coord ;
block_coord . x = block_x ;
block_coord . x = block_x ;
block_coord . y = block_y ;
block_coord . y = block_y ;
DFHack : : t_matpair actual_mat = b - > staticMaterialAt ( block_coord ) ;
df : : tiletype tile_type = b - > tiletypeAt ( block_coord ) ;
df : : tiletype tile_type = b - > tiletypeAt ( block_coord ) ;
df : : tiletype upper_tile = df : : tiletype : : Void ;
if ( b_upper & & b_upper - > getRaw ( ) ) {
upper_tile = b_upper - > tiletypeAt ( block_coord ) ;
}
df : : tile_designation designation = b - > DesignationAt ( block_coord ) ;
df : : tile_designation designation = b - > DesignationAt ( block_coord ) ;
DFHack : : t_matpair actual_mat ;
if ( tileShapeBasic ( tileShape ( upper_tile ) ) = = tiletype_shape_basic : : Floor & & ( tileMaterial ( tile_type ) ! = tiletype_material : : FROZEN_LIQUID ) & & ( tileMaterial ( tile_type ) ! = tiletype_material : : BROOK ) ) { //if the upper tile is a floor, use that material instead. Unless it's ice.
actual_mat = b_upper - > staticMaterialAt ( block_coord ) ;
}
else {
actual_mat = b - > staticMaterialAt ( block_coord ) ;
}
if ( ( ( tileMaterial ( tile_type ) = = tiletype_material : : FROZEN_LIQUID ) | | ( tileMaterial ( tile_type ) = = tiletype_material : : BROOK ) ) & & ( tileShapeBasic ( tileShape ( tile_type ) ) = = tiletype_shape_basic : : Floor ) ) {
tile_type = tiletype : : OpenSpace ;
}
unsigned int array_index = coord_to_index_48 ( xx * 16 + block_x , yy * 16 + block_y ) ;
unsigned int array_index = coord_to_index_48 ( xx * 16 + block_x , yy * 16 + block_y ) ;
//make a new fake material at the given index
//make a new fake material at the given index
if ( tileMaterial ( tile_type ) = = tiletype_material : : FROZEN_LIQUID ) { //Ice.
if ( tileMaterial ( tile_type ) = = tiletype_material : : FROZEN_LIQUID & & ! ( ( tileShapeBasic ( tileShape ( upper_tile ) ) = = tiletype_shape_basic : : Floor ) & & ( tileMaterial ( upper_tile ) ! = tiletype_material : : FROZEN_LIQUID ) ) ) { //Ice.
tile - > set_mat_type_table ( array_index , BasicMaterial : : LIQUID ) ; //Ice is totally a liquid, shut up.
tile - > set_mat_type_table ( array_index , BasicMaterial : : LIQUID ) ; //Ice is totally a liquid, shut up.
tile - > set_mat_subtype_table ( array_index , 0 ) ;
tile - > set_mat_subtype_table ( array_index , LiquidType : : ICE ) ;
num_valid_blocks + + ;
num_valid_blocks + + ;
}
}
else if ( designation . bits . flow_size ) { //Contains either water or lava.
else if ( designation . bits . flow_size & & ( tileShapeBasic ( tileShape ( upper_tile ) ) ! = tiletype_shape_basic : : Floor ) ) { //Contains either water or lava.
tile - > set_mat_type_table ( array_index , BasicMaterial : : LIQUID ) ;
tile - > set_mat_type_table ( array_index , BasicMaterial : : LIQUID ) ;
if ( designation . bits . liquid_type ) //Magma
if ( designation . bits . liquid_type ) //Magma
tile - > set_mat_subtype_table ( array_index , 2 ) ;
tile - > set_mat_subtype_table ( array_index , LiquidType : : MAGMA ) ;
else //water
else //water
tile - > set_mat_subtype_table ( array_index , 1 ) ;
tile - > set_mat_subtype_table ( array_index , LiquidType : : WATER ) ;
num_valid_blocks + + ;
num_valid_blocks + + ;
}
}
else if ( tileShapeBasic ( tileShape ( tile_type ) ) ! = tiletype_shape_basic : : Open ) {
else if ( ( ( tileShapeBasic ( tileShape ( tile_type ) ) ! = tiletype_shape_basic : : Open ) | |
( tileShapeBasic ( tileShape ( upper_tile ) ) = = tiletype_shape_basic : : Floor ) ) & &
( ( tileShapeBasic ( tileShape ( tile_type ) ) ! = tiletype_shape_basic : : Floor ) | |
( tileShapeBasic ( tileShape ( upper_tile ) ) = = tiletype_shape_basic : : Floor ) ) ) { //if the upper tile is a floor, we don't skip, otherwise we do.
if ( actual_mat . mat_type = = builtin_mats : : INORGANIC ) { //inorganic
if ( actual_mat . mat_type = = builtin_mats : : INORGANIC ) { //inorganic
tile - > set_mat_type_table ( array_index , BasicMaterial : : INORGANIC ) ;
tile - > set_mat_type_table ( array_index , BasicMaterial : : INORGANIC ) ;
tile - > set_mat_subtype_table ( array_index , actual_mat . mat_index ) ;
tile - > set_mat_subtype_table ( array_index , actual_mat . mat_index ) ;
}
}
else if ( actual_mat . mat_type > = 419 ) { //Wooden constructions. Different from growing plants.
else if ( actual_mat . mat_type = = 419 ) { //Growing plants
tile - > set_mat_type_table ( array_index , BasicMaterial : : PLANT ) ;
tile - > set_mat_subtype_table ( array_index , actual_mat . mat_index ) ;
}
else if ( actual_mat . mat_type > = 420 ) { //Wooden constructions. Different from growing plants.
tile - > set_mat_type_table ( array_index , BasicMaterial : : WOOD ) ;
tile - > set_mat_type_table ( array_index , BasicMaterial : : WOOD ) ;
tile - > set_mat_subtype_table ( array_index , actual_mat . mat_index ) ;
tile - > set_mat_subtype_table ( array_index , actual_mat . mat_index ) ;
}
}