|  |  | @ -45,7 +45,11 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <df/general_ref_unit_workerst.h> |  |  |  | #include <df/general_ref_unit_workerst.h> | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <df/general_ref_building_holderst.h> |  |  |  | #include <df/general_ref_building_holderst.h> | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <df/building_workshopst.h> |  |  |  | #include <df/building_workshopst.h> | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #include <df/building_furnacest.h> | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #include <df/building_def.h> | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <df/reaction.h> |  |  |  | #include <df/reaction.h> | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #include <df/job_item.h> | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #include <df/job_item_ref.h> | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <MiscUtils.h> |  |  |  | #include <MiscUtils.h> | 
			
		
	
	
		
		
			
				
					|  |  | @ -536,6 +540,99 @@ struct dwarf_info_t | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | static df::unit_labor hauling_labor_map[] = | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* BAR */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* SMALLGEM */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* BLOCKS */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* ROUGH */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_STONE,	/* BOULDER */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_WOOD,	/* WOOD */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* DOOR */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* FLOODGATE */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* BED */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* CHAIR */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* CHAIN */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* FLASK */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* GOBLET */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* INSTRUMENT */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* TOY */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* WINDOW */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ANIMAL,	/* CAGE */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* BARREL */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* BUCKET */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ANIMAL,	/* ANIMALTRAP */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* TABLE */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* COFFIN */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* STATUE */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_BODY,	/* CORPSE */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* WEAPON */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* ARMOR */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* SHOES */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* SHIELD */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* HELM */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* GLOVES */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* BOX */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* BIN */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* ARMORSTAND */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* WEAPONRACK */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* CABINET */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* FIGURINE */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* AMULET */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* SCEPTER */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* AMMO */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* CROWN */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* RING */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* EARRING */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* BRACELET */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* GEM */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* ANVIL */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_BODY,	/* CORPSEPIECE */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_REFUSE,	/* REMAINS */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FOOD,	/* MEAT */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FOOD,	/* FISH */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FOOD,	/* FISH_RAW */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_REFUSE,	/* VERMIN */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* PET */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FOOD,	/* SEEDS */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FOOD,	/* PLANT */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* SKIN_TANNED */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FOOD,	/* LEAVES */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* THREAD */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* CLOTH */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* TOTEM */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* PANTS */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* BACKPACK */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* QUIVER */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* CATAPULTPARTS */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* BALLISTAPARTS */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* SIEGEAMMO */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* BALLISTAARROWHEAD */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* TRAPPARTS */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* TRAPCOMP */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FOOD,	/* DRINK */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FOOD,	/* POWDER_MISC */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FOOD,	/* CHEESE */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FOOD,	/* FOOD */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FOOD,	/* LIQUID_MISC */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* COIN */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FOOD,	/* GLOB */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_STONE,	/* ROCK */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* PIPE_SECTION */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* HATCH_COVER */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* GRATE */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* QUERN */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* MILLSTONE */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* SPLINT */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* CRUTCH */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* TRACTION_BENCH */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* ORTHOPEDIC_CAST */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* TOOL */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FURNITURE,	/* SLAB */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_FOOD,	/* EGG */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::unit_labor::HAUL_ITEM,	/* BOOK */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     }; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | static bool isOptionEnabled(unsigned flag) |  |  |  | static bool isOptionEnabled(unsigned flag) | 
			
		
	
		
		
			
				
					
					|  |  |  | { |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |     return config.isValid() && (config.ival(0) & flag) != 0; |  |  |  |     return config.isValid() && (config.ival(0) & flag) != 0; | 
			
		
	
	
		
		
			
				
					|  |  | @ -736,81 +833,471 @@ static df::building* get_building_from_job(df::job* j) | 
			
		
	
		
		
			
				
					
					|  |  |  |     return 0; |  |  |  |     return 0; | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | static df::job_skill workshop_build_labor[] =  |  |  |  | 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | static df::unit_labor workshop_build_labor[] =  | 
			
		
	
		
		
			
				
					
					|  |  |  | { |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Carpenters */		df::job_skill::CARPENTRY, |  |  |  |     /* Carpenters */		df::unit_labor::CARPENTER, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Farmers */			df::job_skill::PROCESSPLANTS, |  |  |  |     /* Farmers */			df::unit_labor::HERBALIST, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     /* Masons */			df::job_skill::MASONRY, |  |  |  |     /* Masons */			df::unit_labor::MASON, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Craftsdwarfs */		df::job_skill::STONECRAFT, |  |  |  |     /* Craftsdwarfs */		df::unit_labor::STONE_CRAFT, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Jewelers */			df::job_skill::CUTGEM, |  |  |  |     /* Jewelers */			df::unit_labor::CUT_GEM, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* MetalsmithsForge */	df::job_skill::METALCRAFT, |  |  |  |     /* MetalsmithsForge */	df::unit_labor::METAL_CRAFT, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* MagmaForge */		df::job_skill::METALCRAFT, |  |  |  |     /* MagmaForge */		df::unit_labor::METAL_CRAFT, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Bowyers */			df::job_skill::BOWYER, |  |  |  |     /* Bowyers */			df::unit_labor::BOWYER, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Mechanics */			df::job_skill::MECHANICS, |  |  |  |     /* Mechanics */			df::unit_labor::MECHANIC, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Siege */				df::job_skill::SIEGECRAFT, |  |  |  |     /* Siege */				df::unit_labor::SIEGECRAFT, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Butchers */			df::job_skill::BUTCHER, |  |  |  |     /* Butchers */			df::unit_labor::BUTCHER, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Leatherworks */		df::job_skill::LEATHERWORK, |  |  |  |     /* Leatherworks */		df::unit_labor::LEATHER, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Tanners */			df::job_skill::TANNER, |  |  |  |     /* Tanners */			df::unit_labor::TANNER, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Clothiers */			df::job_skill::CLOTHESMAKING, |  |  |  |     /* Clothiers */			df::unit_labor::CLOTHESMAKER, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Fishery */			df::job_skill::FISH, |  |  |  |     /* Fishery */			df::unit_labor::FISH, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Still */				df::job_skill::BREWING, |  |  |  |     /* Still */				df::unit_labor::BREWER, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Loom */				df::job_skill::WEAVING, |  |  |  |     /* Loom */				df::unit_labor::WEAVER, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Quern */				df::job_skill::MILLING, |  |  |  |     /* Quern */				df::unit_labor::MILLER, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Kennels */			df::job_skill::ANIMALTRAIN, |  |  |  |     /* Kennels */			df::unit_labor::ANIMALTRAIN, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Kitchen */			df::job_skill::COOK, |  |  |  |     /* Kitchen */			df::unit_labor::COOK, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Ashery */			df::job_skill::LYE_MAKING, |  |  |  |     /* Ashery */			df::unit_labor::LYE_MAKING, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Dyers */				df::job_skill::DYER, |  |  |  |     /* Dyers */				df::unit_labor::DYER, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Millstone */			df::job_skill::MILLING, |  |  |  |     /* Millstone */			df::unit_labor::MILLER, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Custom */			(df::job_skill) -1, |  |  |  |     /* Custom */			df::unit_labor::NONE, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	/* Tool */				(df::job_skill) -1 |  |  |  |     /* Tool */				df::unit_labor::NONE | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | static df::unit_labor find_job_labor(df::job* j) |  |  |  | class jlfunc  | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | { |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  | 	df::job_skill skill; |  |  |  |     public: | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	df::unit_labor labor; |  |  |  |     virtual df::unit_labor get_labor(df::job* j) = 0; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	labor = df::unit_labor::NONE; |  |  |  | class jlfunc_const : public jlfunc  | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     private: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     df::unit_labor labor; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     public: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     df::unit_labor get_labor(df::job* j)  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return labor; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlfunc_const(df::unit_labor l) : labor(l) {}; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	switch (j->job_type)  |  |  |  | class jlfunc_hauling : public jlfunc  | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | public: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     df::unit_labor get_labor(df::job* j) | 
			
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  | 	case df::job_type::ConstructBuilding: |  |  |  |         df::item* item = j->items[0]->item; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	case df::job_type::DestroyBuilding: |  |  |  |         return hauling_labor_map[item->getType()]; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlfunc_hauling() {}; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | class jlfunc_construct_bld : public jlfunc  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | public: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     df::unit_labor get_labor(df::job* j) | 
			
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         df::building* bld = get_building_from_job (j); |  |  |  |         df::building* bld = get_building_from_job (j); | 
			
		
	
		
		
			
				
					
					|  |  |  |         switch (bld->getType())  |  |  |  |         switch (bld->getType())  | 
			
		
	
		
		
			
				
					
					|  |  |  |         { |  |  |  |         { | 
			
		
	
		
		
			
				
					
					|  |  |  |         case df::building_type::Workshop: |  |  |  |         case df::building_type::Workshop: | 
			
		
	
		
		
			
				
					
					|  |  |  |             df::building_workshopst* ws = (df::building_workshopst*) bld; |  |  |  |             df::building_workshopst* ws = (df::building_workshopst*) bld; | 
			
		
	
		
		
			
				
					
					|  |  |  | 				skill = workshop_build_labor[ws->type]; |  |  |  |             if (ws->type == df::workshop_type::Custom)  | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 df::building_def* def = df::building_def::find(ws->custom_type); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 return def->build_labors[0]; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             }  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             else  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 return workshop_build_labor[ws->type]; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |          | 
			
		
	
		
		
			
				
					
					|  |  |  |             break; |  |  |  |             break; | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // FIXME
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return df::unit_labor::NONE; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 		break; |  |  |  |     jlfunc_construct_bld() {} | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | class jlfunc_destroy_bld : public jlfunc  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | public: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     df::unit_labor get_labor(df::job* j) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::building* bld = get_building_from_job (j); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::building_type type = bld->getType(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // FIXME
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return df::unit_labor::NONE; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlfunc_destroy_bld() {} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	case df::job_type::CustomReaction: |  |  |  | class jlfunc_make : public jlfunc  | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | private: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     df::unit_labor metaltype; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | public: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     df::unit_labor get_labor(df::job* j) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         df::building* bld = get_building_from_job(j); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (bld->getType() == df::building_type::Workshop) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             df::workshop_type type = ((df::building_workshopst*)(bld))->type; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             switch (type)  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case df::workshop_type::Craftsdwarfs: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     df::item_type jobitem = j->job_items[0]->item_type; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     switch (jobitem)  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     case df::item_type::BOULDER: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         return df::unit_labor::STONE_CRAFT; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     case df::item_type::NONE: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         if (j->material_category.bits.bone) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                             return df::unit_labor::BONE_CARVE; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                             return df::unit_labor::NONE; //FIXME
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     default: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                         return df::unit_labor::NONE; //FIXME
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case df::workshop_type::Masons: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 return df::unit_labor::MASON; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case df::workshop_type::Carpenters: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 return df::unit_labor::CARPENTER; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case df::workshop_type::Leatherworks: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 return df::unit_labor::LEATHER; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case df::workshop_type::Clothiers: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 return df::unit_labor::CLOTHESMAKER; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case df::workshop_type::MagmaForge: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case df::workshop_type::MetalsmithsForge: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 return metaltype; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             default: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 return df::unit_labor::NONE; // FIXME
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         else if (bld->getType() == df::building_type::Furnace) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             df::furnace_type type = ((df::building_furnacest*)(bld))->type; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             switch (type)  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case df::furnace_type::MagmaGlassFurnace: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case df::furnace_type::GlassFurnace: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 return df::unit_labor::GLASSMAKER; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             default: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 return df::unit_labor::NONE; // FIXME
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return df::unit_labor::NONE; // FIXME
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlfunc_make (df::unit_labor mt) : metaltype(mt) {} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | class jlfunc_custom : public jlfunc  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | public: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     df::unit_labor get_labor(df::job* j) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         for (auto r = world->raws.reactions.begin(); r != world->raws.reactions.end(); r++) |  |  |  |         for (auto r = world->raws.reactions.begin(); r != world->raws.reactions.end(); r++) | 
			
		
	
		
		
			
				
					
					|  |  |  |         { |  |  |  |         { | 
			
		
	
		
		
			
				
					
					|  |  |  |             if ((*r)->code == j->reaction_name) |  |  |  |             if ((*r)->code == j->reaction_name) | 
			
		
	
		
		
			
				
					
					|  |  |  |             { |  |  |  |             { | 
			
		
	
		
		
			
				
					
					|  |  |  | 				skill = (*r)->skill; |  |  |  |                 df::job_skill skill = (*r)->skill; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 				break; |  |  |  |                 df::unit_labor labor = ENUM_ATTR(job_skill, labor, skill); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 return labor; | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 		break; |  |  |  |         return df::unit_labor::NONE; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	default: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		skill = ENUM_ATTR(job_type, skill, j->job_type); |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlfunc_custom() {} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	if (skill != df::job_skill::NONE) |  |  |  | static map<df::unit_labor, jlfunc*> jlf_cache; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		labor = ENUM_ATTR(job_skill, labor, skill); |  |  |  | 
 | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | jlfunc* jlf_const(df::unit_labor l) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlfunc* jlf; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (jlf_cache.count(l) == 0) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         jlf = jlf_const(l); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         jlf_cache[l] = jlf; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         jlf = jlf_cache[l]; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     return jlf; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | static jlfunc* jlf_no_labor = jlf_const(df::unit_labor::NONE); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | static jlfunc* jlf_hauling = new jlfunc_hauling(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | static jlfunc* jlf_make_furniture = new jlfunc_make(df::unit_labor::FORGE_FURNITURE); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | static jlfunc* jlf_make_object    = new jlfunc_make(df::unit_labor::METAL_CRAFT); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | static jlfunc* jlf_make_armor     = new jlfunc_make(df::unit_labor::FORGE_ARMOR); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | static jlfunc* jlf_make_weapon    = new jlfunc_make(df::unit_labor::FORGE_WEAPON); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | static jlfunc* job_to_labor_table[] = { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::DETAIL) /* CarveFortification */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::DETAIL) /* DetailWall */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::DETAIL) /* DetailFloor */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MINE) /* Dig */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MINE) /* CarveUpwardStaircase */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MINE) /* CarveDownwardStaircase */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MINE) /* CarveUpDownStaircase */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MINE) /* CarveRamp */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MINE) /* DigChannel */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::CUTWOOD) /* FellTree */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::HERBALIST) /* GatherPlants */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* RemoveConstruction */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::WEAVER) /* CollectWebs */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* BringItemToDepot */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* BringItemToShop */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* Eat */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* GetProvisions */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* Drink */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* Drink2 */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* FillWaterskin */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* FillWaterskin2 */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* Sleep */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::GLASSMAKER) /* CollectSand */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::FISH) /* Fish */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::HUNT) /* Hunt */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* HuntVermin */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* Kidnap */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* BeatCriminal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* StartingFistFight */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* CollectTaxes */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* GuardTaxCollector */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::HUNT) /* CatchLiveLandAnimal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::FISH) /* CatchLiveFish */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* ReturnKill */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* CheckChest */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* StoreOwnedItem */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::HAUL_BODY) /* PlaceItemInTomb */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_hauling /* StoreItemInStockpile */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_hauling /* StoreItemInBag */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_hauling /* StoreItemInHospital */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_hauling /* StoreItemInChest */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_hauling /* StoreItemInCabinet */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_hauling /* StoreWeapon */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_hauling /* StoreArmor */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_hauling /* StoreItemInBarrel */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_hauling /* StoreItemInBin */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* SeekArtifact */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* SeekInfant */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* AttendParty */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* GoShopping */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* GoShopping2 */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::CLEAN) /* Clean */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* Rest */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* PickupEquipment */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_hauling /* DumpItem */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* StrangeMoodCrafter */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* StrangeMoodJeweller */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* StrangeMoodForge */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* StrangeMoodMagmaForge */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* StrangeMoodBrooding */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* StrangeMoodFell */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* StrangeMoodCarpenter */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* StrangeMoodMason */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* StrangeMoodBowyer */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* StrangeMoodTanner */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* StrangeMoodWeaver */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* StrangeMoodGlassmaker */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* StrangeMoodMechanics */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     new jlfunc_construct_bld() /* ConstructBuilding */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructDoor */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructFloodgate */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructBed */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructThrone */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructCoffin */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructTable */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructChest */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructBin */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructArmorStand */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructWeaponRack */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructCabinet */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructStatue */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructBlocks */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::GLASSMAKER) /* MakeRawGlass */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_object /* MakeCrafts */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::METAL_CRAFT) /* MintCoins */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::CUT_GEM) /* CutGems */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::CUT_GEM) /* CutGlass */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::ENCRUST_GEM) /* EncrustWithGems */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::ENCRUST_GEM) /* EncrustWithGlass */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     new jlfunc_destroy_bld() /* DestroyBuilding */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::SMELT) /* SmeltOre */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::SMELT) /* MeltMetalObject */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::EXTRACT_STRAND) /* ExtractMetalStrands */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::PLANT) /* PlantSeeds */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::PLANT) /* HarvestPlants */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::ANIMALTRAIN) /* TrainHuntingAnimal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::ANIMALTRAIN) /* TrainWarAnimal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_weapon /* MakeWeapon */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ForgeAnvil */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::SIEGECRAFT) /* ConstructCatapultParts */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::SIEGECRAFT) /* ConstructBallistaParts */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_armor /* MakeArmor */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_armor /* MakeHelm */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_armor /* MakePants */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_object /* StudWith */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::BUTCHER) /* ButcherAnimal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::CLEAN_FISH) /* PrepareRawFish */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MILLER) /* MillPlants */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::TRAPPER) /* BaitTrap */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MILK) /* MilkCreature */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MAKE_CHEESE) /* MakeCheese */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::PROCESS_PLANT) /* ProcessPlants */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::PROCESS_PLANT) /* ProcessPlantsBag */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::PROCESS_PLANT) /* ProcessPlantsVial */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::PROCESS_PLANT) /* ProcessPlantsBarrel */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::COOK) /* PrepareMeal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::WEAVER) /* WeaveCloth */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_armor /* MakeGloves */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_armor /* MakeShoes */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_armor /* MakeShield */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* MakeCage */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_object /* MakeChain */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_object /* MakeFlask */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_object /* MakeGoblet */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_object/* MakeInstrument */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_object/* MakeToy */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::TRAPPER) /* MakeAnimalTrap */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* MakeBarrel */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* MakeBucket */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* MakeWindow */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::BONE_CARVE) /* MakeTotem */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_weapon /* MakeAmmo */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_object /* DecorateWith */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_object /* MakeBackpack */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_armor /* MakeQuiver */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_weapon /* MakeBallistaArrowHead */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::SIEGECRAFT) /* AssembleSiegeAmmo */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::SIEGEOPERATE) /* LoadCatapult */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::SIEGEOPERATE) /* LoadBallista */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::SIEGEOPERATE) /* FireCatapult */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::SIEGEOPERATE) /* FireBallista */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MECHANIC) /* ConstructMechanisms */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MECHANIC)  /* MakeTrapComponent */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MECHANIC)  /* LoadCageTrap */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MECHANIC)  /* LoadStoneTrap */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MECHANIC)  /* LoadWeaponTrap */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MECHANIC)  /* CleanTrap */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* CastSpell */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MECHANIC)  /* LinkBuildingToTrigger */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* PullLever */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::BREWER)  /* BrewDrink */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::HERBALIST)  /* ExtractFromPlants */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::DISSECT_FISH)  /* ExtractFromRawFish */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::DISSECT_VERMIN)  /* ExtractFromLandAnimal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::ANIMALTRAIN)  /* TameVermin */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::ANIMALTRAIN)  /* TameAnimal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* ChainAnimal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* UnchainAnimal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* UnchainPet */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* ReleaseLargeCreature */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* ReleasePet */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* ReleaseSmallCreature */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* HandleSmallCreature */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* HandleLargeCreature */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* CageLargeCreature */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* CageSmallCreature */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::RECOVER_WOUNDED) /* RecoverWounded */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::DIAGNOSE)  /* DiagnosePatient */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::BONE_SETTING)  /* ImmobilizeBreak */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::DRESSING_WOUNDS)  /* DressWound */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::CLEAN)  /* CleanPatient */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::SURGERY)  /* Surgery */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::SUTURING) /* Suture */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::BONE_SETTING)  /* SetBone */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::BONE_SETTING)  /* PlaceInTraction */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* DrainAquarium */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* FillAquarium */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* FillPond */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::FEED_WATER_CIVILIANS)  /* GiveWater */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::FEED_WATER_CIVILIANS)  /* GiveFood */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* GiveWater2 */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* GiveFood2 */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* RecoverPet */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* PitLargeAnimal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* PitSmallAnimal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::BUTCHER) /* SlaughterAnimal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::BURN_WOOD) /* MakeCharcoal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::BURN_WOOD) /* MakeAsh */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::LYE_MAKING) /* MakeLye */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::POTASH_MAKING) /* MakePotashFromLye */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::PLANT) /* FertilizeField */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::POTASH_MAKING) /* MakePotashFromAsh */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::DYER) /* DyeThread */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::DYER) /* DyeCloth */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_object /* SewImage */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* MakePipeSection */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::OPERATE_PUMP) /* OperatePump */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* ManageWorkOrders */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* UpdateStockpileRecords */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* TradeAtDepot */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructHatchCover */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructGrate */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MINE) /* RemoveStairs */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructQuern */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture  /* ConstructMillstone */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_object  /* ConstructSplint */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_object /* ConstructCrutch */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::MECHANIC) /* ConstructTractionBench */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* CleanSelf */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* BringCrutch */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::BONE_SETTING) /* ApplyCast */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     new jlfunc_custom() /* CustomReaction */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* ConstructSlab */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::STONE_CRAFT) /* EngraveSlab */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::SHEARER) /* ShearCreature */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::SPINNER) /* SpinThread */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* PenLargeAnimal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* PenSmallAnimal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_make_furniture /* MakeTool */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::POTTERY) /* CollectClay */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::BEEKEEPING) /* InstallColonyInHive */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::BEEKEEPING) /* CollectHiveProducts */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* CauseTrouble */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* DrinkBlood */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* ReportCrime */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_no_labor /* ExecuteCriminal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::ANIMALTRAIN) /* TrainAnimal */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::DETAIL) /* CarveTrack */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::PUSH_HAUL_VEHICLE) /* PushTrackVehicle */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::PUSH_HAUL_VEHICLE) /* PlaceTrackVehicle */, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jlf_const(df::unit_labor::PUSH_HAUL_VEHICLE) /* StoreItemInVehicle */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	if (labor == df::unit_labor::NONE) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		labor = ENUM_ATTR(job_type, labor, j->job_type); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	if (labor == -1)  |  |  |  | static df::unit_labor find_job_labor(df::job* j) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (j->job_type == df::job_type::CustomReaction) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         for (auto r = world->raws.reactions.begin(); r != world->raws.reactions.end(); r++) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if ((*r)->code == j->reaction_name) | 
			
		
	
		
		
			
				
					
					|  |  |  |             { |  |  |  |             { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 df::job_skill skill = (*r)->skill; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 return ENUM_ATTR(job_skill, labor, skill); | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return df::unit_labor::NONE; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     }  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     df::job_skill skill; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     df::unit_labor labor; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     skill = ENUM_ATTR(job_type, skill, j->job_type); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (skill != df::job_skill::NONE)  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         labor = ENUM_ATTR(job_skill, labor, skill); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         labor = ENUM_ATTR(job_type, labor, j->job_type); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (labor == df::unit_labor::NONE) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         labor = job_to_labor_table[j->job_type]->get_labor(j); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     return labor; |  |  |  |     return labor; | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
	
		
		
			
				
					|  |  | 
 |