| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -9,6 +9,7 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include "modules/World.h"
 | 
					 | 
					 | 
					 | 
					#include "modules/World.h"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#include "df/construction_type.h"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include "df/item.h"
 | 
					 | 
					 | 
					 | 
					#include "df/item.h"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include "df/job_item.h"
 | 
					 | 
					 | 
					 | 
					#include "df/job_item.h"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include "df/world.h"
 | 
					 | 
					 | 
					 | 
					#include "df/world.h"
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -282,6 +283,18 @@ static void clear_state(color_ostream &out) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    call_buildingplan_lua(&out, "reload_pens");
 | 
					 | 
					 | 
					 | 
					    call_buildingplan_lua(&out, "reload_pens");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					static int16_t get_subtype(df::building *bld) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if (!bld)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        return -1;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    int16_t subtype = bld->getSubtype();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if (bld->getType() == df::building_type::Construction &&
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            subtype >= df::construction_type::UpStair &&
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            subtype <= df::construction_type::UpDownStair)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        subtype = df::construction_type::UpDownStair;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    return subtype;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					DFhackCExport command_result plugin_load_data (color_ostream &out) {
 | 
					 | 
					 | 
					 | 
					DFhackCExport command_result plugin_load_data (color_ostream &out) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    cycle_timestamp = 0;
 | 
					 | 
					 | 
					 | 
					    cycle_timestamp = 0;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    config = World::GetPersistentData(CONFIG_KEY);
 | 
					 | 
					 | 
					 | 
					    config = World::GetPersistentData(CONFIG_KEY);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -315,7 +328,7 @@ DFhackCExport command_result plugin_load_data (color_ostream &out) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            pb.remove(out);
 | 
					 | 
					 | 
					 | 
					            pb.remove(out);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            continue;
 | 
					 | 
					 | 
					 | 
					            continue;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        }
 | 
					 | 
					 | 
					 | 
					        }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        BuildingTypeKey key(bld->getType(), bld->getSubtype(), bld->getCustomType());
 | 
					 | 
					 | 
					 | 
					        BuildingTypeKey key(bld->getType(), get_subtype(bld), bld->getCustomType());
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (pb.item_filters.size() != get_item_filters(out, key).getItemFilters().size()) {
 | 
					 | 
					 | 
					 | 
					        if (pb.item_filters.size() != get_item_filters(out, key).getItemFilters().size()) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            WARN(status).print("loaded state for building %d doesn't match world\n", pb.id);
 | 
					 | 
					 | 
					 | 
					            WARN(status).print("loaded state for building %d doesn't match world\n", pb.id);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            pb.remove(out);
 | 
					 | 
					 | 
					 | 
					            pb.remove(out);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -604,11 +617,15 @@ static bool isPlannedBuilding(color_ostream &out, df::building *bld) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static bool addPlannedBuilding(color_ostream &out, df::building *bld) {
 | 
					 | 
					 | 
					 | 
					static bool addPlannedBuilding(color_ostream &out, df::building *bld) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    DEBUG(status,out).print("entering addPlannedBuilding\n");
 | 
					 | 
					 | 
					 | 
					    DEBUG(status,out).print("entering addPlannedBuilding\n");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!bld || planned_buildings.count(bld->id)
 | 
					 | 
					 | 
					 | 
					    if (!bld || planned_buildings.count(bld->id))
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            || !isPlannableBuilding(out, bld->getType(), bld->getSubtype(),
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                    bld->getCustomType()))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        return false;
 | 
					 | 
					 | 
					 | 
					        return false;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    BuildingTypeKey key(bld->getType(), bld->getSubtype(), bld->getCustomType());
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    int16_t subtype = get_subtype(bld);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if (!isPlannableBuilding(out, bld->getType(), subtype, bld->getCustomType()))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        return false;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    BuildingTypeKey key(bld->getType(), subtype, bld->getCustomType());
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    PlannedBuilding pb(out, bld, get_heat_safety_filter(key), get_item_filters(out, key));
 | 
					 | 
					 | 
					 | 
					    PlannedBuilding pb(out, bld, get_heat_safety_filter(key), get_item_filters(out, key));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return registerPlannedBuilding(out, pb);
 | 
					 | 
					 | 
					 | 
					    return registerPlannedBuilding(out, pb);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |