One image is more than a thousand words:
At the moment this is just a proof of concept (that is working actually).
Basically the whole idea was to have containers that would help with hauling jobs - instead of 10 hauling jobs over long distance a dwarf would pack items on a wheelbarrow and do one hauling job and then unpack those items when he reached the destination.
How does it work?
- build loading station near items that you want to haul (A)
- build unloading station (B) somewhere far away
- queue "Load stone" job in (A)
- dwarf will look for an empty wheelbarrow and 5 stones and load them on it
- unloading station will automatically queue unload job (when it will find a boulder containing wheelbarrow)
- another dwarf will move wheelbarrow full of stones to unloading station (B) and begin to unload one stone at a time
To improve this one could put a burrow on loading station so loader will not look for items outside of designated area.
Raws:1. Copy this and save as "
item_bdog.txt":
item_bdog
[OBJECT:ITEM]
[ITEM_TOOL:WHEELBARROW]
[NAME:Wheelbarrow:Wheelbarrows]
[SIZE:20000]
[HARD_MAT]
[UNIMPROVABLE] remove this if you want to have wheelbarrows with quality
[CONTAINER_CAPACITY:100000]
[TILE:229]
[VALUE:10]
2. Copy this and save it as "
building_bdog.txt" (it's just copypasta from screw press so one would want to customize it a bit; for example build_labor, tile or color):
building_bdog
[OBJECT:BUILDING]
[BUILDING_WORKSHOP:STATION_LOADING]
[NAME:Loading station]
[NAME_COLOR:7:0:1]
[DIM:1:1]
[WORK_LOCATION:1:1]
[BUILD_LABOR:MECHANIC]
[BUILD_KEY:CUSTOM_L]
[BLOCK:1:0]
[TILE:0:1:207]
[COLOR:0:1:0:7:0]
[TILE:1:1:207]
[COLOR:1:1:MAT]
[BUILD_ITEM:1:NONE:NONE:NONE:NONE][BUILDMAT][WORTHLESS_STONE_ONLY][CAN_USE_ARTIFACT]
[BUILDING_WORKSHOP:STATION_UNLOADING]
[NAME:Unloading station]
[NAME_COLOR:7:0:1]
[DIM:1:1]
[WORK_LOCATION:1:1]
[BUILD_LABOR:MECHANIC]
[BUILD_KEY:CUSTOM_U]
[BLOCK:1:0]
[TILE:0:1:207]
[COLOR:0:1:0:7:0]
[TILE:1:1:207]
[COLOR:1:1:MAT]
[BUILD_ITEM:1:NONE:NONE:NONE:NONE][BUILDMAT][WORTHLESS_STONE_ONLY][CAN_USE_ARTIFACT]
3. Copy this and save it as "
reaction_bdog.txt" (this is where magic happens
):
reaction_bdog
[OBJECT:REACTION]
[REACTION:LOAD_STONE]
[NAME:Load stone]
[BUILDING:STATION_LOADING:CUSTOM_S]
[REAGENT:container:1:TOOL:WHEELBARROW:NONE:NONE]
[EMPTY]
[NOT_CONTAIN_BARREL_ITEM]
[PRESERVE_REAGENT]
[REAGENT:B:1:BOULDER:NONE:NONE:NONE]
[REAGENT:C:1:BOULDER:NONE:NONE:NONE]
[REAGENT:D:1:BOULDER:NONE:NONE:NONE]
[REAGENT:E:1:BOULDER:NONE:NONE:NONE]
[REAGENT:F:1:BOULDER:NONE:NONE:NONE]
[PRODUCT:100:1:BOULDER:NONE:GET_MATERIAL_FROM_REAGENT:B:NONE][PRODUCT_TO_CONTAINER:container]
[PRODUCT:100:1:BOULDER:NONE:GET_MATERIAL_FROM_REAGENT:C:NONE][PRODUCT_TO_CONTAINER:container]
[PRODUCT:100:1:BOULDER:NONE:GET_MATERIAL_FROM_REAGENT:D:NONE][PRODUCT_TO_CONTAINER:container]
[PRODUCT:100:1:BOULDER:NONE:GET_MATERIAL_FROM_REAGENT:E:NONE][PRODUCT_TO_CONTAINER:container]
[PRODUCT:100:1:BOULDER:NONE:GET_MATERIAL_FROM_REAGENT:F:NONE][PRODUCT_TO_CONTAINER:container]
[SKILL:ALCHEMY]
[REACTION:UNLOAD_STONE]
[NAME:Unload stone]
[BUILDING:STATION_UNLOADING:CUSTOM_S]
[REAGENT:boulder:1:BOULDER:NONE:NONE:NONE]
[REAGENT:container:1:TOOL:WHEELBARROW:NONE:NONE]
[CONTAINS:boulder]
[PRESERVE_REAGENT]
[PRODUCT:100:1:BOULDER:NONE:GET_MATERIAL_FROM_REAGENT:boulder:NONE]
[SKILL:ALCHEMY]
[AUTOMATIC]
4. Copy this and
ADD it to "
entity_default.txt" after
[ENTITY:MOUTAIN] tag:
bdog
[TOOL:WHEELBARROW]
[PERMITTED_BUILDING:STATION_LOADING]
[PERMITTED_BUILDING:STATION_UNLOADING]
[PERMITTED_REACTION:LOAD_STONE]
[PERMITTED_REACTION:UNLOAD_STONE]
/bdog
What will just not work:- items are
destroyed in loading station and
recreated when unloading at the end so theres no way (that I know) to preserve item quality. It's just not possible to have wheelbarrow full of masterwork goblinite spears... well it is possible but upon unloading one will get spears without quality
- I don't know if there is a GET_TYPE_FROM_REAGENT tag or something similar so most of items needs separate reaction (stone, wood etc)
What could be done but I don't have time :- if one doesn't care for goblinite (because it will be melted anyway) there could be reaction that loads wheelbarrow with "steel junk", "iron junk" etc ("junk" would need to be a separate item created in reaction that no entity have permission for) and when unloading one would get junk that could be melted
- same thing could be done with clothes and other trash that is piled in battle zone
Note:- skill used for reaction is
alchemy I did choose it just because it is not used anywhere else and can be toggled from dwarf therapist
- if you build loading and unloading station too close (and you wont set a burrow to lock loading dwarf) don't be surprised that he will haul unloaded stones from unloading station to load them again... remember that dwarfs are stupid sometimes