From 0882d41574c24a474cdd8a34c4b9fb7637e0337b Mon Sep 17 00:00:00 2001 From: Ricotez Date: Tue, 24 Sep 2013 21:31:39 +0200 Subject: [PATCH] Fixes and improvements to airlock painters. -Airlock painter can now be used on finished airlocks to change their paintjob. Keep away from the Clown. -Airlock painter description up to standards. It still shows the current ink level. -Fixed a bug with painting airlock assemblies where painted glass airlocks deconstructed to assemblies reconstructed to airlocks would lose their glass status. -Airlock painters now make a sound (effects/spray2.ogg) when used to paint an airlock. --- code/game/machinery/doors/airlock.dm | 80 +++++++++++++++- .../objects/items/weapons/airlock_painter.dm | 20 +++- code/game/objects/structures/door_assembly.dm | 95 ++++++------------- 3 files changed, 126 insertions(+), 69 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 57807b5d538..2faedd4053e 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -948,6 +948,11 @@ About the new airlock wires panel: else spawn(0) close(1) + else if(istype(C, /obj/item/weapon/airlock_painter)) + var/obj/item/weapon/airlock_painter/WT = C + if(WT.ink.charges) + src.change_paintjob(user) + WT.use() else ..() return @@ -1042,4 +1047,77 @@ About the new airlock wires panel: /obj/machinery/door/airlock/proc/autoclose() if(!density && !operating && !locked && !welded && autoclose) - close() \ No newline at end of file + close() + +/obj/machinery/door/airlock/proc/change_paintjob(user) + if(glass == 1) + //These airlocks have a glass version. + var optionlist = list("Default", "Engineering", "Atmospherics", "Security", "Command", "Medical", "Research", "Mining") + var paintjob = input(user, "Please select a paintjob for this airlock.") in optionlist + switch(paintjob) + if("Default") + icon = 'icons/obj/doors/Doorglass.dmi' + doortype = 7 + if("Engineering") + icon = 'icons/obj/doors/Doorengglass.dmi' + doortype = 15 + if("Atmospherics") + icon = 'icons/obj/doors/Dooratmoglass.dmi' + doortype = 23 + if("Security") + icon = 'icons/obj/doors/Doorsecglass.dmi' + doortype = 16 + if("Command") + icon = 'icons/obj/doors/Doorcomglass.dmi' + doortype = 14 + if("Medical") + icon = 'icons/obj/doors/Doormedglass.dmi' + doortype = 17 + if("Research") + icon = 'icons/obj/doors/Doorresearchglass.dmi' + doortype = 21 + heat_proof = 1 + if("Mining") + icon = 'icons/obj/doors/Doorminingglass.dmi' + doortype = 22 + else + //These airlocks have a regular version. + var optionlist = list("Default", "Engineering", "Atmospherics", "Security", "Command", "Medical", "Research", "Mining", "Maintenance", "External", "High Security") + var paintjob = input(user, "Please select a paintjob for this airlock.") in optionlist + switch(paintjob) + if("Default") + icon = 'icons/obj/doors/Doorint.dmi' + doortype = 0 + if("Engineering") + icon = 'icons/obj/doors/Dooreng.dmi' + doortype = 3 + if("Atmospherics") + icon = 'icons/obj/doors/Dooratmo.dmi' + doortype = 19 + if("Security") + icon = 'icons/obj/doors/Doorsec.dmi' + doortype = 2 + if("Command") + icon = 'icons/obj/doors/Doorcom.dmi' + doortype = 1 + if("Medical") + icon = 'icons/obj/doors/Doormed.dmi' + doortype = 4 + if("Research") + icon = 'icons/obj/doors/Doorresearch.dmi' + doortype = 20 + if("Mining") + icon = 'icons/obj/doors/Doormining.dmi' + doortype = 18 + if("Maintenance") + icon = 'icons/obj/doors/Doormaint.dmi' + doortype = 5 + if("External") + icon = 'icons/obj/doors/Doorext.dmi' + doortype = 6 + if("High Security") + icon = 'icons/obj/doors/hightechsecurity.dmi' + doortype = 33 + update_icon() + + diff --git a/code/game/objects/items/weapons/airlock_painter.dm b/code/game/objects/items/weapons/airlock_painter.dm index 12a902de928..14893cc6721 100644 --- a/code/game/objects/items/weapons/airlock_painter.dm +++ b/code/game/objects/items/weapons/airlock_painter.dm @@ -1,6 +1,6 @@ /obj/item/weapon/airlock_painter name = "airlock painter" - desc = "This device can change the paintjob of an airlock assembly." + desc = "An advanced autopainter preprogrammed with several paintjobs for airlocks. Use it on an airlock during or after construction to change the paintjob." icon = 'icons/obj/objects.dmi' icon_state = "paint sprayer" item_state = "paint sprayer" @@ -15,19 +15,20 @@ slot_flags = SLOT_BELT var/obj/item/device/toner/ink = null + //var/active = 0 New() ink = new /obj/item/device/toner(src) proc/use() - if(!ink || ink.charges < 1) + if(/*!active ||*/ !ink || ink.charges < 1) return 0 else ink.charges-- + playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1) return 1 examine() - set src in usr var/ink_level = "high" if(!ink || ink.charges < 1) ink_level = "empty" @@ -35,6 +36,17 @@ ink_level = "low" else if((ink.charges/ink.max_charges) > 1) //Over 100% (admin var edit) ink_level = "dangerously high" - usr << "\icon[src] [src.name] is a small but effective airlock painting tool. Its ink levels look [ink_level]." + ..() + //set src in usr + usr << "Its ink levels look [ink_level]." return + /* Commented out for now. Might remove the comments if people often make mistakes. + attack_self(mob/user) + if(active) + user << "You switch [src] off." + active = 0 + else + user << "You switch [src] on." + active = 1 + */ \ 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 bd488c7ec2f..8a94905dd6d 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -7,14 +7,13 @@ obj/structure/door_assembly density = 1 var/state = 0 var/mineral = null - var/typetext = null - var/icontext = null - var/base_icon_state = "door_as_0" - var/glass_base_icon_state = "door_as_g0" + var/typetext = "" + var/icontext = "" + var/base_icon_state = "door_as_" + var/glass_base_icon_state = "door_as_g" 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/created_name = null New() @@ -27,7 +26,6 @@ obj/structure/door_assembly anchored = 1 density = 1 state = 1 - glass = 0 door_assembly_com name = "Command Airlock Assembly" @@ -40,10 +38,9 @@ obj/structure/door_assembly anchored = 1 density = 1 state = 1 - glass = 0 glass - glass = 1 + mineral = "glass" icon_state = "door_as_gcom1" door_assembly_sec @@ -57,10 +54,9 @@ obj/structure/door_assembly anchored = 1 density = 1 state = 1 - glass = 0 glass - glass = 1 + mineral = "glass" icon_state = "door_as_gsec1" door_assembly_eng @@ -74,10 +70,9 @@ obj/structure/door_assembly anchored = 1 density = 1 state = 1 - glass = 0 glass - glass = 1 + mineral = "glass" icon_state = "door_as_geng1" door_assembly_min @@ -91,10 +86,9 @@ obj/structure/door_assembly anchored = 1 density = 1 state = 1 - glass = 0 glass - glass = 1 + mineral = "glass" icon_state = "door_as_gmin1" door_assembly_atmo @@ -108,10 +102,9 @@ obj/structure/door_assembly anchored = 1 density = 1 state = 1 - glass = 0 glass - glass = 1 + mineral = "glass" icon_state = "door_as_gatmo1" door_assembly_research @@ -125,10 +118,9 @@ obj/structure/door_assembly anchored = 1 density = 1 state = 1 - glass = 0 glass - glass = 1 + mineral = "glass" icon_state = "door_as_gres1" door_assembly_science @@ -142,10 +134,9 @@ obj/structure/door_assembly anchored = 1 density = 1 state = 1 - glass = 0 glass - glass = 1 + mineral = "glass" icon_state = "door_as_gsci1" door_assembly_med @@ -171,7 +162,6 @@ obj/structure/door_assembly anchored = 1 density = 1 state = 1 - glass = 0 door_assembly_ext name = "External Airlock Assembly" @@ -182,7 +172,6 @@ obj/structure/door_assembly anchored = 1 density = 1 state = 1 - glass = 0 door_assembly_fre name = "Freezer Airlock Assembly" @@ -193,7 +182,6 @@ obj/structure/door_assembly anchored = 1 density = 1 state = 1 - glass = 0 door_assembly_hatch name = "Airtight Hatch Assembly" @@ -204,7 +192,6 @@ obj/structure/door_assembly anchored = 1 density = 1 state = 1 - glass = 0 door_assembly_mhatch name = "Maintenance Hatch Assembly" @@ -215,7 +202,6 @@ obj/structure/door_assembly anchored = 1 density = 1 state = 1 - glass = 0 door_assembly_glass name = "Glass Airlock Assembly" @@ -299,7 +285,6 @@ obj/structure/door_assembly anchored = 1 density = 1 state = 1 - glass = 0 door_assembly_vault name = "Vault Door Assembly" @@ -310,7 +295,6 @@ obj/structure/door_assembly anchored = 1 density = 1 state = 1 - glass = 0 /obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/pen)) @@ -326,24 +310,12 @@ obj/structure/door_assembly //If your airlock has a glass version, add it to the list with glass versions. //Do NOT add your airlock to a list if it does not have a version for that list, // or you will get broken icons. - //If you do this properly, you can just add the typetext and icontext of your airlock - // to the big switch without having to make exceptions for glass airlocks, it will - // simply be unavailable if the painter is used on an airlock of the wrong type. - //If your airlock has both a regular and a glass version, remember to also add the - // icontext as exception in the part of the code that deals with turning a regular - // airlock into a glass airlock, else your airlock can't transition from regular to - // glass and will instead revert back to the white sprite. - // |- Ricotez var/obj/item/weapon/airlock_painter/WT = W if(WT.ink.charges) var/icontype var/optionlist - var/glasstext = "" - var/gicontext = "" if(src.mineral) if(src.mineral == "glass") - gicontext = "g" - glasstext = "glass_" //These airlocks have a glass version. optionlist = list("Default", "Engineering", "Atmospherics", "Security", "Command", "Medical", "Research", "Mining") else @@ -354,12 +326,10 @@ obj/structure/door_assembly optionlist = list("Default", "Engineering", "Atmospherics", "Security", "Command", "Medical", "Research", "Mining", "Maintenance", "External", "High Security") - icontype = input(user, "Please select a paintjob for this glass airlock.") in optionlist + icontype = input(user, "Please select a paintjob for this airlock.") in optionlist if(!in_range(src, usr) && src.loc != usr) return switch(icontype) if("Default") - if(src.mineral == "glass") - glasstext = "glass" typetext = "" icontext = "" if("Engineering") @@ -392,8 +362,10 @@ obj/structure/door_assembly if("High Security") typetext = "highsecurity" icontext = "highsec" - src.airlock_type = text2path("/obj/machinery/door/airlock/[glasstext][typetext]") - src.base_icon_state = "door_as_[gicontext][icontext]" + src.airlock_type = text2path("/obj/machinery/door/airlock/[typetext]") + src.glass_type = text2path("/obj/machinery/door/airlock/glass_[typetext]") + src.base_icon_state = "door_as_[icontext]" + src.glass_base_icon_state = "door_as_g[icontext]" user << "\blue You change the paintjob on the airlock assembly." WT.use() else @@ -507,14 +479,18 @@ obj/structure/door_assembly G.use(1) src.mineral = "glass" src.name = "Near finished Window Airlock Assembly" - if(icontext in list("eng", "atmo", "sec", "com", "med", "res", "min")) //Make sure this airlock actually has a glass version. - src.airlock_type = text2path("/obj/machinery/door/airlock/glass_[typetext]") + //This list contains the airlock paintjobs that have a glass version: + if(icontext in list("eng", "atmo", "sec", "com", "med", "res", "min")) + src.airlock_type = text2path("/obj/machinery/door/airlock/[typetext]") + src.glass_type = text2path("/obj/machinery/door/airlock/glass_[typetext]") else //This airlock is default or does not have a glass version, so we revert to the default glass airlock. |- Ricotez - src.airlock_type = /obj/machinery/door/airlock/glass + src.airlock_type = /obj/machinery/door/airlock + src.glass_type = /obj/machinery/door/airlock/glass typetext = "" icontext = "" - src.base_icon_state = "door_as_g[icontext]" //this will be applied to the icon_state with the correct state number at the proc's end. + src.base_icon_state = "door_as_[icontext]" + src.glass_base_icon_state = "door_as_g[icontext]" else if(istype(G, /obj/item/stack/sheet/mineral)) var/M = G.sheettype if(G.amount>=2) @@ -536,22 +512,10 @@ obj/structure/door_assembly if(!src) return user << "\blue You've finished the airlock." var/obj/machinery/door/airlock/door - //The below cluster of if-else-statements is a result of the differences between normal - // and mineral doors. |- Ricotez - if (mineral) - if(mineral == "glass") - if(!typetext) - airlock_type = /obj/machinery/door/airlock/glass - else - airlock_type = text2path("/obj/machinery/door/airlock/glass_[typetext]") - else - airlock_type = text2path("/obj/machinery/door/airlock/[mineral]") + if(mineral == "glass") + door = new src.glass_type( src.loc ) else - if(!typetext) - airlock_type = /obj/machinery/door/airlock - else - airlock_type = text2path("/obj/machinery/door/airlock/[typetext]") - door = new src.airlock_type( src.loc ) + door = new src.airlock_type( src.loc ) //door.req_access = src.req_access door.electronics = src.electronics door.req_access = src.electronics.conf_access @@ -561,7 +525,10 @@ obj/structure/door_assembly del(src) else ..() - icon_state = "[base_icon_state][state]" + if(mineral == "glass") + icon_state = "[glass_base_icon_state][state]" + 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