diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 045257fc71d..443eb98b9ac 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -86,7 +86,8 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
var/list/signalers[12]
var/lockdownbyai = 0
autoclose = 1
- var/doortype = 0
+ var/assembly_type = /obj/structure/door_assembly
+ var/mineral = null
var/justzap = 0
var/safe = 1
normalspeed = 1
@@ -96,125 +97,122 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
/obj/machinery/door/airlock/command
name = "Airlock"
icon = 'icons/obj/doors/Doorcom.dmi'
- doortype = 1
+ assembly_type = /obj/structure/door_assembly/door_assembly_com
/obj/machinery/door/airlock/security
name = "Airlock"
icon = 'icons/obj/doors/Doorsec.dmi'
- doortype = 2
+ assembly_type = /obj/structure/door_assembly/door_assembly_sec
/obj/machinery/door/airlock/engineering
name = "Airlock"
icon = 'icons/obj/doors/Dooreng.dmi'
- doortype = 3
+ assembly_type = /obj/structure/door_assembly/door_assembly_eng
/obj/machinery/door/airlock/medical
name = "Airlock"
icon = 'icons/obj/doors/Doormed.dmi'
- doortype = 4
+ assembly_type = /obj/structure/door_assembly/door_assembly_med
/obj/machinery/door/airlock/maintenance
name = "Maintenance Access"
icon = 'icons/obj/doors/Doormaint.dmi'
- doortype = 5
+ assembly_type = /obj/structure/door_assembly/door_assembly_mai
/obj/machinery/door/airlock/external
name = "External Airlock"
icon = 'icons/obj/doors/Doorext.dmi'
- doortype = 6
+ assembly_type = /obj/structure/door_assembly/door_assembly_ext
/obj/machinery/door/airlock/glass
name = "Glass Airlock"
icon = 'icons/obj/doors/Doorglass.dmi'
opacity = 0
- doortype = 7
glass = 1
/obj/machinery/door/airlock/centcom
name = "Airlock"
icon = 'icons/obj/doors/Doorele.dmi'
opacity = 0
- doortype = 8
/obj/machinery/door/airlock/vault
name = "Vault"
icon = 'icons/obj/doors/vault.dmi'
opacity = 1
- doortype = 9
+ assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity //Until somebody makes better sprites.
/obj/machinery/door/airlock/glass_large
name = "Glass Airlock"
icon = 'icons/obj/doors/Door2x1glassfull.dmi'
opacity = 0
- doortype = 10
glass = 1
/obj/machinery/door/airlock/freezer
name = "Freezer Airlock"
icon = 'icons/obj/doors/Doorfreezer.dmi'
opacity = 1
- doortype = 11
+ assembly_type = /obj/structure/door_assembly/door_assembly_fre
/obj/machinery/door/airlock/hatch
name = "Airtight Hatch"
icon = 'icons/obj/doors/Doorhatchele.dmi'
opacity = 1
- doortype = 12
+ assembly_type = /obj/structure/door_assembly/door_assembly_hatch
/obj/machinery/door/airlock/maintenance_hatch
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Doorhatchmaint2.dmi'
opacity = 1
- doortype = 13
+ assembly_type = /obj/structure/door_assembly/door_assembly_mhatch
/obj/machinery/door/airlock/glass_command
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Doorcomglass.dmi'
opacity = 0
- doortype = 14
+ assembly_type = /obj/structure/door_assembly/door_assembly_com
glass = 1
/obj/machinery/door/airlock/glass_engineering
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Doorengglass.dmi'
opacity = 0
- doortype = 15
+ assembly_type = /obj/structure/door_assembly/door_assembly_eng
glass = 1
/obj/machinery/door/airlock/glass_security
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Doorsecglass.dmi'
opacity = 0
- doortype = 16
+ assembly_type = /obj/structure/door_assembly/door_assembly_sec
glass = 1
/obj/machinery/door/airlock/glass_medical
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Doormedglass.dmi'
opacity = 0
- doortype = 17
+ assembly_type = /obj/structure/door_assembly/door_assembly_med
glass = 1
/obj/machinery/door/airlock/mining
name = "Mining Airlock"
icon = 'icons/obj/doors/Doormining.dmi'
- doortype = 18
+ assembly_type = /obj/structure/door_assembly/door_assembly_min
/obj/machinery/door/airlock/atmos
name = "Atmospherics Airlock"
icon = 'icons/obj/doors/Dooratmo.dmi'
- doortype = 19
+ assembly_type = /obj/structure/door_assembly/door_assembly_atmo
/obj/machinery/door/airlock/research
name = "Airlock"
icon = 'icons/obj/doors/Doorresearch.dmi'
- doortype = 20
+ assembly_type = /obj/structure/door_assembly/door_assembly_research
/obj/machinery/door/airlock/glass_research
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Doorresearchglass.dmi'
opacity = 0
- doortype = 21
+ assembly_type = /obj/structure/door_assembly/door_assembly_research
glass = 1
heat_proof = 1
@@ -222,40 +220,36 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Doorminingglass.dmi'
opacity = 0
- doortype = 22
+ assembly_type = /obj/structure/door_assembly/door_assembly_min
glass = 1
/obj/machinery/door/airlock/glass_atmos
name = "Maintenance Hatch"
icon = 'icons/obj/doors/Dooratmoglass.dmi'
opacity = 0
- doortype = 23
+ assembly_type = /obj/structure/door_assembly/door_assembly_atmo
glass = 1
/obj/machinery/door/airlock/gold
name = "Gold Airlock"
icon = 'icons/obj/doors/Doorgold.dmi'
- var/mineral = "gold"
- doortype = 24
+ mineral = "gold"
/obj/machinery/door/airlock/silver
name = "Silver Airlock"
icon = 'icons/obj/doors/Doorsilver.dmi'
- var/mineral = "silver"
- doortype = 25
+ mineral = "silver"
/obj/machinery/door/airlock/diamond
name = "Diamond Airlock"
icon = 'icons/obj/doors/Doordiamond.dmi'
- var/mineral = "diamond"
- doortype = 26
+ mineral = "diamond"
/obj/machinery/door/airlock/uranium
name = "Uranium Airlock"
desc = "And they said I was crazy."
icon = 'icons/obj/doors/Dooruranium.dmi'
- var/mineral = "uranium"
- doortype = 27
+ mineral = "uranium"
var/last_event = 0
/obj/machinery/door/airlock/uranium/process()
@@ -274,8 +268,7 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
name = "Plasma Airlock"
desc = "No way this can end badly."
icon = 'icons/obj/doors/Doorplasma.dmi'
- var/mineral = "plasma"
- doortype = 28
+ mineral = "plasma"
/obj/machinery/door/airlock/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 300)
@@ -303,37 +296,35 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
W.ignite((temperature/4))//Added so that you can't set off a massive chain reaction with a small flame
for(var/obj/machinery/door/airlock/plasma/D in range(3,src))
D.ignite(temperature/4)
- new/obj/structure/door_assembly/door_assembly_0( src.loc )
+ new/obj/structure/door_assembly( src.loc )
del (src)
/obj/machinery/door/airlock/clown
name = "Bananium Airlock"
icon = 'icons/obj/doors/Doorbananium.dmi'
- var/mineral = "clown"
- doortype = 29
+ mineral = "clown"
/obj/machinery/door/airlock/sandstone
name = "Sandstone Airlock"
icon = 'icons/obj/doors/Doorsand.dmi'
- var/mineral = "sandstone"
- doortype = 30
+ mineral = "sandstone"
/obj/machinery/door/airlock/science
name = "Airlock"
icon = 'icons/obj/doors/Doorsci.dmi'
- doortype = 31
+ assembly_type = /obj/structure/door_assembly/door_assembly_science
/obj/machinery/door/airlock/glass_science
name = "Glass Airlocks"
icon = 'icons/obj/doors/Doorsciglass.dmi'
opacity = 0
- doortype = 32
+ assembly_type = /obj/structure/door_assembly/door_assembly_science
glass = 1
/obj/machinery/door/airlock/highsecurity
name = "High Tech Security Airlock"
icon = 'icons/obj/doors/hightechsecurity.dmi'
- doortype = 33
+ assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity
/*
About the new airlock wires panel:
@@ -1203,37 +1194,16 @@ About the new airlock wires panel:
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.")
if(do_after(user,40))
user << "\blue You removed the airlock electronics!"
- switch(src.doortype)
- if(0) new/obj/structure/door_assembly/door_assembly_0( src.loc )
- if(1) new/obj/structure/door_assembly/door_assembly_com( src.loc )
- if(2) new/obj/structure/door_assembly/door_assembly_sec( src.loc )
- if(3) new/obj/structure/door_assembly/door_assembly_eng( src.loc )
- if(4) new/obj/structure/door_assembly/door_assembly_med( src.loc )
- if(5) new/obj/structure/door_assembly/door_assembly_mai( src.loc )
- if(6) new/obj/structure/door_assembly/door_assembly_ext( src.loc )
- if(7) new/obj/structure/door_assembly/door_assembly_glass( src.loc )
- if(12) new/obj/structure/door_assembly/door_assembly_hatch( src.loc )
- if(13) new/obj/structure/door_assembly/door_assembly_mhatch( src.loc )
- if(14) new/obj/structure/door_assembly/door_assembly_com/glass( src.loc )
- if(15) new/obj/structure/door_assembly/door_assembly_eng/glass( src.loc )
- if(16) new/obj/structure/door_assembly/door_assembly_sec/glass( src.loc )
- if(17) new/obj/structure/door_assembly/door_assembly_med/glass( src.loc )
- if(18) new/obj/structure/door_assembly/door_assembly_min( src.loc )
- if(19) new/obj/structure/door_assembly/door_assembly_atmo( src.loc )
- if(20) new/obj/structure/door_assembly/door_assembly_research( src.loc )
- if(21) new/obj/structure/door_assembly/door_assembly_research/glass( src.loc )
- if(22) new/obj/structure/door_assembly/door_assembly_min/glass( src.loc )
- if(23) new/obj/structure/door_assembly/door_assembly_atmo/glass( src.loc )
- if(24) new/obj/structure/door_assembly/door_assembly_gold( src.loc )
- if(25) new/obj/structure/door_assembly/door_assembly_silver( src.loc )
- if(26) new/obj/structure/door_assembly/door_assembly_diamond( src.loc )
- if(27) new/obj/structure/door_assembly/door_assembly_uranium( src.loc )
- if(28) new/obj/structure/door_assembly/door_assembly_plasma( src.loc )
- if(29) new/obj/structure/door_assembly/door_assembly_clown( src.loc )
- if(30) new/obj/structure/door_assembly/door_assembly_sandstone( src.loc )
- if(31) new/obj/structure/door_assembly/door_assembly_science( src.loc )
- if(32) new/obj/structure/door_assembly/door_assembly_science/glass( src.loc )
- if(33) new/obj/structure/door_assembly/door_assembly_highsecurity(src.loc)
+
+ var/obj/structure/door_assembly/da = new assembly_type(src.loc)
+ da.anchored = 1
+ if(mineral)
+ da.glass = mineral
+ else if(glass)
+ da.glass = 1
+ da.state = 1
+ da.created_name = src.name
+ da.update_state()
var/obj/item/weapon/airlock_electronics/ae
if(!electronics)
diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm
index 2dd1d7ac79e..67e5c83dc30 100644
--- a/code/game/machinery/doors/alarmlock.dm
+++ b/code/game/machinery/doors/alarmlock.dm
@@ -3,7 +3,6 @@
name = "Glass Alarm Airlock"
icon = 'icons/obj/doors/Doorglass.dmi'
opacity = 0
- doortype = 7
glass = 1
var/datum/radio_frequency/air_connection
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index c76ff2511f6..3671b6ce08e 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -124,7 +124,6 @@ var/global/list/datum/stack_recipe/plasma_recipes = list ( \
throw_range = 3
origin_tech = "materials=3"
perunit = 2000
- sheettype = "plastic"
var/global/list/datum/stack_recipe/plastic_recipes = list ( \
new/datum/stack_recipe("plastic crate", /obj/structure/closet/pcrate, 10, one_per_turf = 1, on_floor = 1), \
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 0dfabb85e12..e9ce0e9c5ba 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -13,10 +13,20 @@
var/global/list/datum/stack_recipe/metal_recipes = list ( \
new/datum/stack_recipe("stool", /obj/structure/stool, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("chair", /obj/structure/stool/bed/chair, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("swivel chair", /obj/structure/stool/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("comfy chair", /obj/structure/stool/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("bed", /obj/structure/stool/bed, 2, one_per_turf = 1, on_floor = 1), \
null, \
+ new/datum/stack_recipe_list("office chairs",list( \
+ new/datum/stack_recipe("dark office chair", /obj/structure/stool/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("light office chair", /obj/structure/stool/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1), \
+ ), 5), \
+ new/datum/stack_recipe_list("comfy chairs", list( \
+ new/datum/stack_recipe("beige comfy chair", /obj/structure/stool/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("black comfy chair", /obj/structure/stool/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("brown comfy chair", /obj/structure/stool/bed/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("lime comfy chair", /obj/structure/stool/bed/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("teal comfy chair", /obj/structure/stool/bed/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1), \
+ ), 2), \
+ null, \
new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts, 2), \
new/datum/stack_recipe("rack parts", /obj/item/weapon/rack_parts), \
new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1), \
@@ -28,10 +38,27 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
null, \
new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("machine frame", /obj/machinery/constructable_frame/machine_frame, 5, time = 25, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1), \
null, \
+ new/datum/stack_recipe_list("airlock assemblies", list( \
+ new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+/* new/datum/stack_recipe("science airlock assembly", /obj/structure/door_assembly/door_assembly_science, 4, time = 50, one_per_turf = 1, on_floor = 1), \ */
+ new/datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1), \
+ ), 4), \
+ null, \
new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade), \
new/datum/stack_recipe("light fixture frame", /obj/item/light_fixture_frame, 2), \
new/datum/stack_recipe("small light fixture frame", /obj/item/light_fixture_frame/small, 1), \
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 3c8b694d288..551213c7fb4 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -1,7 +1,8 @@
/* Stack type objects!
* Contains:
* Stacks
- * Recipe datum
+ * Recipe datum
+ * Recipe list datum
*/
/*
@@ -32,51 +33,66 @@
return
/obj/item/stack/attack_self(mob/user as mob)
- interact(user)
+ list_recipes(user)
-/obj/item/stack/interact(mob/user as mob)
+/obj/item/stack/proc/list_recipes(mob/user as mob, recipes_sublist)
if (!recipes)
return
if (!src || amount<=0)
user << browse(null, "window=stack")
user.set_machine(src) //for correct work of onclose
+ var/list/recipe_list = recipes
+ if (recipes_sublist && recipe_list[recipes_sublist] && istype(recipe_list[recipes_sublist], /datum/stack_recipe_list))
+ var/datum/stack_recipe_list/srl = recipe_list[recipes_sublist]
+ recipe_list = srl.recipes
var/t1 = text("
Constructions from []Amount Left: []
", src, src.amount)
- for(var/i=1;i<=recipes.len,i++)
- var/datum/stack_recipe/R = recipes[i]
- if (isnull(R))
+ for(var/i=1;i<=recipe_list.len,i++)
+ var/E = recipe_list[i]
+ if (isnull(E))
t1 += "
"
continue
- if (i>1 && !isnull(recipes[i-1]))
+
+ if (i>1 && !isnull(recipe_list[i-1]))
t1+="
"
- var/max_multiplier = round(src.amount / R.req_amount)
- var/title as text
- var/can_build = 1
- can_build = can_build && (max_multiplier>0)
- /*
- if (R.one_per_turf)
- can_build = can_build && !(locate(R.result_type) in usr.loc)
- if (R.on_floor)
- can_build = can_build && istype(usr.loc, /turf/simulated/floor)
- */
- if (R.res_amount>1)
- title+= "[R.res_amount]x [R.title]\s"
- else
- title+= "[R.title]"
- title+= " ([R.req_amount] [src.singular_name]\s)"
- if (can_build)
- t1 += text("[] ", src, i, title)
- else
- t1 += text("[]", title)
- continue
- if (R.max_res_amount>1 && max_multiplier>1)
- max_multiplier = min(max_multiplier, round(R.max_res_amount/R.res_amount))
- t1 += " |"
- var/list/multipliers = list(5,10,25)
- for (var/n in multipliers)
- if (max_multiplier>=n)
- t1 += " [n*R.res_amount]x"
- if (!(max_multiplier in multipliers))
- t1 += " [max_multiplier*R.res_amount]x"
+
+ if (istype(E, /datum/stack_recipe_list))
+ var/datum/stack_recipe_list/srl = E
+ if (src.amount >= srl.req_amount)
+ t1 += "[srl.title] ([srl.req_amount] [src.singular_name]\s)"
+ else
+ t1 += "[srl.title] ([srl.req_amount] [src.singular_name]\s)
"
+
+ if (istype(E, /datum/stack_recipe))
+ var/datum/stack_recipe/R = E
+ var/max_multiplier = round(src.amount / R.req_amount)
+ var/title as text
+ var/can_build = 1
+ can_build = can_build && (max_multiplier>0)
+ /*
+ if (R.one_per_turf)
+ can_build = can_build && !(locate(R.result_type) in usr.loc)
+ if (R.on_floor)
+ can_build = can_build && istype(usr.loc, /turf/simulated/floor)
+ */
+ if (R.res_amount>1)
+ title+= "[R.res_amount]x [R.title]\s"
+ else
+ title+= "[R.title]"
+ title+= " ([R.req_amount] [src.singular_name]\s)"
+ if (can_build)
+ t1 += text("[title] ")
+ else
+ t1 += text("[]", title)
+ continue
+ if (R.max_res_amount>1 && max_multiplier>1)
+ max_multiplier = min(max_multiplier, round(R.max_res_amount/R.res_amount))
+ t1 += " |"
+ var/list/multipliers = list(5,10,25)
+ for (var/n in multipliers)
+ if (max_multiplier>=n)
+ t1 += " [n*R.res_amount]x"
+ if (!(max_multiplier in multipliers))
+ t1 += " [max_multiplier*R.res_amount]x"
t1 += ""
user << browse(t1, "window=stack")
@@ -87,10 +103,18 @@
..()
if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
return
+
+ if (href_list["sublist"] && !href_list["make"])
+ list_recipes(usr, text2num(href_list["sublist"]))
+
if (href_list["make"])
if (src.amount < 1) del(src) //Never should happen
- var/datum/stack_recipe/R = recipes[text2num(href_list["make"])]
+ var/list/recipes_list = recipes
+ if (href_list["sublist"])
+ var/datum/stack_recipe_list/srl = recipes_list[text2num(href_list["sublist"])]
+ recipes_list = srl.recipes
+ var/datum/stack_recipe/R = recipes_list[text2num(href_list["make"])]
var/multiplier = text2num(href_list["multiplier"])
if (!multiplier) multiplier = 1
if (src.amount < R.req_amount*multiplier)
@@ -222,4 +246,16 @@
src.max_res_amount = max_res_amount
src.time = time
src.one_per_turf = one_per_turf
- src.on_floor = on_floor
\ No newline at end of file
+ src.on_floor = on_floor
+
+/*
+ * Recipe list datum
+ */
+/datum/stack_recipe_list
+ var/title = "ERROR"
+ var/list/recipes = null
+ var/req_amount = 1
+ New(title, recipes, req_amount = 1)
+ src.title = title
+ src.recipes = recipes
+ src.req_amount = req_amount
\ No newline at end of file
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 9930d8d84fb..8052fe52806 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -6,278 +6,100 @@ obj/structure/door_assembly
anchored = 0
density = 1
var/state = 0
- var/mineral = null
- var/base_icon_state = "door_as_0"
- var/glass_base_icon_state = "door_as_g0"
+ var/base_icon_state = ""
+ var/base_name = "Airlock"
var/obj/item/weapon/airlock_electronics/electronics = null
- var/airlock_type = /obj/machinery/door/airlock //the type path of the airlock once completed
- var/glass_type = /obj/machinery/door/airlock/glass
- var/glass = null
+ var/airlock_type = "" //the type path of the airlock once completed
+ var/glass_type = "/glass"
+ var/glass = 0 // 0 = glass can be installed. -1 = glass can't be installed. 1 = glass is already installed. Text = mineral plating is installed instead.
var/created_name = null
New()
- base_icon_state = copytext(icon_state,1,lentext(icon_state))
-
- door_assembly_0
- name = "Airlock Assembly"
- icon_state = "door_as_1"
- airlock_type = /obj/machinery/door/airlock
- anchored = 1
- density = 1
- state = 1
- glass = 0
+ update_state()
door_assembly_com
- name = "Command Airlock Assembly"
- icon_state = "door_as_com1"
- glass_base_icon_state = "door_as_gcom"
- glass_type = /obj/machinery/door/airlock/glass_command
- airlock_type = /obj/machinery/door/airlock/command
- anchored = 1
- density = 1
- state = 1
- glass = 0
-
- glass
- glass = 1
- icon_state = "door_as_gcom1"
+ base_icon_state = "com"
+ base_name = "Command Airlock"
+ glass_type = "/glass_command"
+ airlock_type = "/command"
door_assembly_sec
- name = "Security Airlock Assembly"
- icon_state = "door_as_sec1"
- glass_base_icon_state = "door_as_gsec"
- glass_type = /obj/machinery/door/airlock/glass_security
- airlock_type = /obj/machinery/door/airlock/security
- anchored = 1
- density = 1
- state = 1
- glass = 0
-
- glass
- glass = 1
- icon_state = "door_as_gsec1"
+ base_icon_state = "sec"
+ base_name = "Security Airlock"
+ glass_type = "/glass_security"
+ airlock_type = "/security"
door_assembly_eng
- name = "Engineering Airlock Assembly"
- icon_state = "door_as_eng1"
- glass_base_icon_state = "door_as_geng"
- glass_type = /obj/machinery/door/airlock/glass_engineering
- airlock_type = /obj/machinery/door/airlock/engineering
- anchored = 1
- density = 1
- state = 1
- glass = 0
-
- glass
- glass = 1
- icon_state = "door_as_geng1"
+ base_icon_state = "eng"
+ base_name = "Engineering Airlock"
+ glass_type = "/glass_engineering"
+ airlock_type = "/engineering"
door_assembly_min
- name = "Mining Airlock Assembly"
- icon_state = "door_as_min1"
- glass_base_icon_state = "door_as_gmin"
- glass_type = /obj/machinery/door/airlock/glass_mining
- airlock_type = /obj/machinery/door/airlock/mining
- anchored = 1
- density = 1
- state = 1
- glass = 0
-
- glass
- glass = 1
- icon_state = "door_as_gmin1"
+ base_icon_state = "min"
+ base_name = "Mining Airlock"
+ glass_type = "/glass_mining"
+ airlock_type = "/mining"
door_assembly_atmo
- name = "Atmospherics Airlock Assembly"
- icon_state = "door_as_atmo1"
- glass_base_icon_state = "door_as_gatmo"
- glass_type = /obj/machinery/door/airlock/glass_atmos
- airlock_type = /obj/machinery/door/airlock/atmos
- anchored = 1
- density = 1
- state = 1
- glass = 0
-
- glass
- glass = 1
- icon_state = "door_as_gatmo1"
+ base_icon_state = "atmo"
+ base_name = "Atmospherics Airlock"
+ glass_type = "/glass_atmos"
+ airlock_type = "/atmos"
door_assembly_research
- name = "Research Airlock Assembly"
- icon_state = "door_as_res1"
- glass_base_icon_state = "door_as_gres"
- glass_type = /obj/machinery/door/airlock/glass_research
- airlock_type = /obj/machinery/door/airlock/research
- anchored = 1
- density = 1
- state = 1
- glass = 0
-
- glass
- glass = 1
- icon_state = "door_as_gres1"
+ base_icon_state = "res"
+ base_name = "Research Airlock"
+ glass_type = "/glass_research"
+ airlock_type = "/research"
door_assembly_science
- name = "Science Airlock Assembly"
- icon_state = "door_as_sci1"
- glass_base_icon_state = "door_as_gsci"
- glass_type = /obj/machinery/door/airlock/glass_science
- airlock_type = /obj/machinery/door/airlock/science
- anchored = 1
- density = 1
- state = 1
- glass = 0
-
- glass
- glass = 1
- icon_state = "door_as_gsci1"
+ base_icon_state = "sci"
+ base_name = "Science Airlock"
+ glass_type = "/glass_science"
+ airlock_type = "/science"
door_assembly_med
- name = "Medical Airlock Assembly"
- icon_state = "door_as_med1"
- airlock_type = /obj/machinery/door/airlock/medical
- anchored = 1
- density = 1
- state = 1
-
- glass
- mineral = "glass"
- icon_state = "door_as_gmed1"
+ base_icon_state = "med"
+ base_name = "Medical Airlock"
+ glass_type = "/glass_medical"
+ airlock_type = "/medical"
door_assembly_mai
- name = "Maintenance Airlock Assembly"
- icon_state = "door_as_mai1"
- airlock_type = /obj/machinery/door/airlock/maintenance
- anchored = 1
- density = 1
- state = 1
- glass = 0
+ base_icon_state = "mai"
+ base_name = "Maintenance Airlock"
+ airlock_type = "/maintenance"
+ glass = -1
door_assembly_ext
- name = "External Airlock Assembly"
- icon_state = "door_as_ext1"
- airlock_type = /obj/machinery/door/airlock/external
- anchored = 1
- density = 1
- state = 1
- glass = 0
+ base_icon_state = "ext"
+ base_name = "External Airlock"
+ airlock_type = "/external"
+ glass = -1
door_assembly_fre
- name = "Freezer Airlock Assembly"
- icon_state = "door_as_fre1"
- airlock_type = /obj/machinery/door/airlock/freezer
- anchored = 1
- density = 1
- state = 1
- glass = 0
+ base_icon_state = "fre"
+ base_name = "Freezer Airlock"
+ airlock_type = "/freezer"
+ glass = -1
door_assembly_hatch
- name = "Airtight Hatch Assembly"
- icon_state = "door_as_hatch1"
- airlock_type = /obj/machinery/door/airlock/hatch
- anchored = 1
- density = 1
- state = 1
- glass = 0
+ base_icon_state = "hatch"
+ base_name = "Airtight Hatch"
+ airlock_type = "/hatch"
+ glass = -1
door_assembly_mhatch
- name = "Maintenance Hatch Assembly"
- icon_state = "door_as_mhatch1"
- airlock_type = /obj/machinery/door/airlock/maintenance_hatch
- anchored = 1
- density = 1
- state = 1
- glass = 0
-
- door_assembly_glass
- name = "Glass Airlock Assembly"
- icon_state = "door_as_g1"
- airlock_type = /obj/machinery/door/airlock/glass
- anchored = 1
- density = 1
- state = 1
- mineral = "glass"
-
- door_assembly_gold
- name = "Gold Airlock Assembly"
- icon_state = "door_as_gold1"
- airlock_type = /obj/machinery/door/airlock/gold
- anchored = 1
- density = 1
- state = 1
- mineral = "gold"
-
- door_assembly_silver
- name = "Silver Airlock Assembly"
- icon_state = "door_as_silver1"
- airlock_type = /obj/machinery/door/airlock/silver
- anchored = 1
- density = 1
- state = 1
- mineral = "silver"
-
- door_assembly_diamond
- name = "Diamond Airlock Assembly"
- icon_state = "door_as_diamond1"
- airlock_type = /obj/machinery/door/airlock/diamond
- anchored = 1
- density = 1
- state = 1
- mineral = "diamond"
-
- door_assembly_uranium
- name = "Uranium Airlock Assembly"
- icon_state = "door_as_uranium1"
- airlock_type = /obj/machinery/door/airlock/uranium
- anchored = 1
- density = 1
- state = 1
- mineral = "uranium"
-
- door_assembly_plasma
- name = "Plasma Airlock Assembly"
- icon_state = "door_as_plasma1"
- airlock_type = /obj/machinery/door/airlock/plasma
- anchored = 1
- density = 1
- state = 1
- mineral = "plasma"
-
- door_assembly_clown
- name = "Bananium Airlock Assembly"
- icon_state = "door_as_clown1"
- airlock_type = /obj/machinery/door/airlock/clown
- anchored = 1
- density = 1
- state = 1
- mineral = "clown"
-
- door_assembly_sandstone
- name = "Sandstone Airlock Assembly"
- icon_state = "door_as_sandstone1"
- airlock_type = /obj/machinery/door/airlock/sandstone
- anchored = 1
- density = 1
- state = 1
- mineral = "sandstone"
-
- door_assembly_sandstone
- name = "Sandstone Airlock Assembly"
- icon_state = "door_as_sandstone1"
- airlock_type = /obj/machinery/door/airlock/sandstone
- anchored = 1
- density = 1
- state = 1
- mineral = "sandstone"
+ base_icon_state = "mhatch"
+ base_name = "Maintenance Hatch"
+ airlock_type = "/maintenance_hatch"
+ glass = -1
door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly
- name = "High Tech Security Assembly"
- icon_state = "door_as_highsec1"
- airlock_type = /obj/machinery/door/airlock/highsecurity
- anchored = 1
- density = 1
- state = 1
- glass = 0
+ base_icon_state = "highsec"
+ base_name = "High Security Airlock"
+ airlock_type = "/highsecurity"
+ glass = -1
/obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/pen))
@@ -287,46 +109,47 @@ obj/structure/door_assembly
created_name = t
return
- if(istype(W, /obj/item/weapon/weldingtool) && !anchored )
+ if(istype(W, /obj/item/weapon/weldingtool) && ( (istext(glass)) || (glass == 1) || (!anchored) ))
var/obj/item/weapon/weldingtool/WT = W
- if(WT.remove_fuel(0,user))
- user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.")
+ if (WT.remove_fuel(0, user))
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
-
- if(do_after(user, 40))
- if(!src || !WT.isOn()) return
- user << "\blue You dissasembled the airlock assembly!"
- new /obj/item/stack/sheet/metal(get_turf(src), 4)
- if (mineral)
- if (mineral == "glass")
- new /obj/item/stack/sheet/rglass(get_turf(src))
- else
- var/M = text2path("/obj/item/stack/sheet/mineral/[mineral]")
- new M(get_turf(src))
- new M(get_turf(src))
- del(src)
+ if(istext(glass))
+ user.visible_message("[user] welds the [glass] plating off the airlock assembly.", "You start to weld the [glass] plating off the airlock assembly.")
+ if(do_after(user, 40))
+ if(!src || !WT.isOn()) return
+ user << "\blue You welded the [glass] plating off!"
+ var/M = text2path("/obj/item/stack/sheet/mineral/[glass]")
+ new M(src.loc, 2)
+ glass = 0
+ else if(glass == 1)
+ user.visible_message("[user] welds the glass panel out of the airlock assembly.", "You start to weld the glass panel out of the airlock assembly.")
+ if(do_after(user, 40))
+ if(!src || !WT.isOn()) return
+ user << "\blue You welded the glass panel out!"
+ new /obj/item/stack/sheet/rglass(src.loc)
+ glass = 0
+ else if(!anchored)
+ user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.")
+ if(do_after(user, 40))
+ if(!src || !WT.isOn()) return
+ user << "\blue You dissasembled the airlock assembly!"
+ new /obj/item/stack/sheet/metal(src.loc, 4)
+ del (src)
else
- user << "\blue You need more welding fuel to dissassemble the airlock assembly."
+ user << "\blue You need more welding fuel."
return
- else if(istype(W, /obj/item/weapon/wrench) && !anchored )
+ else if(istype(W, /obj/item/weapon/wrench) && state == 0)
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
- user.visible_message("[user] secures the airlock assembly to the floor.", "You start to secure the airlock assembly to the floor.")
+ if(anchored)
+ user.visible_message("[user] unsecures the airlock assembly from the floor.", "You start to unsecure the airlock assembly from the floor.")
+ else
+ user.visible_message("[user] secures the airlock assembly to the floor.", "You start to secure the airlock assembly to the floor.")
if(do_after(user, 40))
if(!src) return
- user << "\blue You secured the airlock assembly!"
- src.name = "Secured Airlock Assembly"
- src.anchored = 1
-
- else if(istype(W, /obj/item/weapon/wrench) && anchored )
- playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
- user.visible_message("[user] unsecures the airlock assembly from the floor.", "You start to unsecure the airlock assembly from the floor.")
- if(do_after(user, 40))
- if(!src) return
- user << "\blue You unsecured the airlock assembly!"
- src.name = "Airlock Assembly"
- src.anchored = 0
+ user << "\blue You [anchored? "un" : ""]secured the airlock assembly!"
+ anchored = !anchored
else if(istype(W, /obj/item/weapon/cable_coil) && state == 0 && anchored )
var/obj/item/weapon/cable_coil/coil = W
@@ -336,7 +159,6 @@ obj/structure/door_assembly
coil.use(1)
src.state = 1
user << "\blue You wire the Airlock!"
- src.name = "Wired Airlock Assembly"
else if(istype(W, /obj/item/weapon/wirecutters) && state == 1 )
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
@@ -345,9 +167,8 @@ obj/structure/door_assembly
if(do_after(user, 40))
if(!src) return
user << "\blue You cut the airlock wires.!"
- new/obj/item/weapon/cable_coil(get_turf(user), 1)
+ new/obj/item/weapon/cable_coil(src.loc, 1)
src.state = 0
- src.name = "Secured Airlock Assembly"
else if(istype(W, /obj/item/weapon/airlock_electronics) && state == 1 && W:icon_state != "door_electronics_smoked")
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
@@ -364,8 +185,6 @@ obj/structure/door_assembly
else
W.loc = src.loc
- //del(W)
-
else if(istype(W, /obj/item/weapon/crowbar) && state == 2 )
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to install electronics into the airlock assembly.")
@@ -382,32 +201,28 @@ obj/structure/door_assembly
ae = electronics
electronics = null
ae.loc = src.loc
- else if(istype(W, /obj/item/stack/sheet) && !mineral)
- var/obj/item/stack/sheet/G = W
- if(G)
- if(G.amount>=1)
- if(G.type == /obj/item/stack/sheet/rglass)
+
+ else if(istype(W, /obj/item/stack/sheet) && !glass)
+ var/obj/item/stack/sheet/S = W
+ if (S)
+ if (S.amount>=1)
+ if(istype(S, /obj/item/stack/sheet/rglass))
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
- user.visible_message("[user] adds [G.name] to the airlock assembly.", "You start to install [G.name] into the airlock assembly.")
+ user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.")
if(do_after(user, 40))
user << "\blue You installed reinforced glass windows into the airlock assembly!"
- G.use(1)
- src.mineral = "glass"
- src.name = "Near finished Window Airlock Assembly"
- src.airlock_type = /obj/machinery/door/airlock/glass
- src.base_icon_state = "door_as_g" //this will be applied to the icon_state with the correct state number at the proc's end.
- else if(istype(G, /obj/item/stack/sheet/mineral))
- var/M = G.sheettype
- if(G.amount>=2)
+ S.use(1)
+ glass = 1
+ else if(istype(S, /obj/item/stack/sheet/mineral) && S.sheettype)
+ var/M = S.sheettype
+ if(S.amount>=2)
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
- user.visible_message("[user] adds [G.name] to the airlock assembly.", "You start to install [G.name] into the airlock assembly.")
+ user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.")
if(do_after(user, 40))
user << "\blue You installed [M] plating into the airlock assembly!"
- G.use(2)
- src.mineral = "[M]"
- src.name = "Near finished [M] Airlock Assembly"
- src.airlock_type = text2path ("/obj/machinery/door/airlock/[M]")
- src.base_icon_state = "door_as_[M]"
+ S.use(2)
+ glass = "[M]"
+
else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 )
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
user << "\blue Now finishing the airlock."
@@ -415,11 +230,15 @@ obj/structure/door_assembly
if(do_after(user, 40))
if(!src) return
user << "\blue You finish the airlock!"
- var/obj/machinery/door/airlock/door
- if (mineral)
- airlock_type = text2path("/obj/machinery/door/airlock/[mineral]")
- door = new src.airlock_type( src.loc )
- //door.req_access = src.req_access
+ var/path
+ if(istext(glass))
+ path = text2path("/obj/machinery/door/airlock/[glass]")
+ else if (glass == 1)
+ path = text2path("/obj/machinery/door/airlock[glass_type]")
+ else
+ path = text2path("/obj/machinery/door/airlock[airlock_type]")
+ var/obj/machinery/door/airlock/door = new path(src.loc)
+ door.assembly_type = type
door.electronics = src.electronics
if(src.electronics.one_access)
door.req_access = null
@@ -428,11 +247,23 @@ obj/structure/door_assembly
door.req_access = src.electronics.conf_access
if(created_name)
door.name = created_name
+ else
+ door.name = "[istext(glass) ? "[glass] airlock" : base_name]"
src.electronics.loc = door
del(src)
else
..()
- icon_state = "[base_icon_state][state]"
- //This updates the icon_state. They are named as "door_as1_eng" where the 1 in that example
- //represents what state it's in. So the most generic algorithm for the correct updating of
- //this is simply to change the number.
\ No newline at end of file
+ update_state()
+
+/obj/structure/door_assembly/proc/update_state()
+ icon_state = "door_as_[glass == 1 ? "g" : ""][istext(glass) ? glass : base_icon_state][state]"
+ name = ""
+ switch (state)
+ if(0)
+ if (anchored)
+ name = "Secured "
+ if(1)
+ name = "Wired "
+ if(2)
+ name = "Near Finished "
+ name += "[glass == 1 ? "Window " : ""][istext(glass) ? "[glass] Airlock" : base_name] Assembly"
\ No newline at end of file
diff --git a/html/changelog.html b/html/changelog.html
index bdc195a8628..93e16139fb9 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -58,22 +58,34 @@ Stuff which is in development and not yet visible to players or just code relate
should be listed in the changelog upon commit though. Thanks. -->
-
-
June 23, 2013
-
faux updated:
-
- - There has been a complete medbay renovation spearheaded by Vetinarix. http://baystation12.net/forums/viewtopic.php?f=20&t=7847 <-- Please put any commentary good or bad, here.
- - Some maintenance doors within RnD and Medbay have had their accesses changed. Maintenance doors in the joint areas (leading to the research shuttle, virology, and xenobiology) are now zero access. Which means anyone in those joints can enter the maintenance tunnels. This was done to add additional evacuation locations during radiation storms. Additional maintenance doors were added to the tunnels in these areas to prevent docs and scientists from running about.
- - Starboard emergency storage isn't gone now, it's simply located in the escape wing.
- - An engineering training room has been added to engineering. This location was previously where surgery was located. If you are new to engineering or need to brush up on your skills, please use this area for testing.
-
-
June 22nd 2013
+
23.06.2013
+
Segrain updated:
+
+ - Airlocks of various models can be constructed again.
+
+
+
+
+
June 23, 2013
+
faux updated:
+
+ - There has been a complete medbay renovation spearheaded by Vetinarix. http://baystation12.net/forums/viewtopic.php?f=20&t=7847 <-- Please put any commentary good or bad, here.
+ - Some maintenance doors within RnD and Medbay have had their accesses changed. Maintenance doors in the joint areas (leading to the research shuttle, virology, and xenobiology) are now zero access. Which means anyone in those joints can enter the maintenance tunnels. This was done to add additional evacuation locations during radiation storms. Additional maintenance doors were added to the tunnels in these areas to prevent docs and scientists from running about.
+ - Starboard emergency storage isn't gone now, it's simply located in the escape wing.
+ - An engineering training room has been added to engineering. This location was previously where surgery was located. If you are new to engineering or need to brush up on your skills, please use this area for testing.
+
+
+
+
+
June 22nd 2013
Cael_Aislinn updated:
- The xenoarchaeology depth scanner will now tell you what energy field is required to safely extract a find.
- Excavation picks will now dig faster, and xenoarchaeology as a whole should be easier to do.
+
+
21.06.2013
Jupotter updated:
@@ -81,7 +93,6 @@ should be listed in the changelog upon commit though. Thanks. -->
-
18.06.2013
Segrain updated:
diff --git a/icons/obj/doors/door_assembly.dmi b/icons/obj/doors/door_assembly.dmi
index 691f53a76f3..3cc3b44b4a3 100644
Binary files a/icons/obj/doors/door_assembly.dmi and b/icons/obj/doors/door_assembly.dmi differ