diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm index 0c6792aeaec..c4f9c5bbdc5 100644 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm +++ b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm @@ -239,9 +239,6 @@ overlays += image("icon" = 'belt_mirror.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) s_store.screen_loc = ui_sstore1 - if (h_store) - h_store.screen_loc = ui_hstore1 - if(client) hud_used.other_update() //Update the screenloc of the items on the 'other' inventory bar //to hide / show them. if (client) diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 06c6295f442..3fb9960be97 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -792,12 +792,21 @@ /obj/structure/stool/bed/chair/comfy/teal icon_state = "comfychair_teal" +/obj/structure/stool/bed/chair/office + anchored = 0 + /obj/structure/stool/bed/chair/comfy/black icon_state = "comfychair_black" /obj/structure/stool/bed/chair/comfy/lime icon_state = "comfychair_lime" +/obj/structure/stool/bed/chair/office/Move() + ..() + if(buckled_mob) + if(buckled_mob.buckled == src) + buckled_mob.loc = src.loc + buckled_mob.dir = src.dir /obj/structure/stool/bed/chair/office/light icon_state = "officechair_white" diff --git a/code/defines/obj/storage.dm b/code/defines/obj/storage.dm index be2e9bc8bda..e004018be81 100644 --- a/code/defines/obj/storage.dm +++ b/code/defines/obj/storage.dm @@ -129,8 +129,59 @@ desc = "It's a very robust satchel to wear on your back." icon_state = "satchel" +/obj/item/weapon/storage/backpack/satchel/withwallet New() ..() + new /obj/item/weapon/storage/wallet/random( src ) + +// Belt Bags/Satchels + +/obj/item/weapon/storage/backpack/satchel_norm + name = "satchel" + desc = "A trendy looking satchel." + icon_state = "satchel-norm" + +/obj/item/weapon/storage/backpack/satchel_eng + name = "industrial satchel" + desc = "A tough satchel with extra pockets." + icon_state = "satchel-eng" + +/obj/item/weapon/storage/backpack/satchel_med + name = "medical satchel" + desc = "A sterile satchel used in medical departments." + icon_state = "satchel-med" + +/obj/item/weapon/storage/backpack/satchel_vir + name = "virologist satchel" + desc = "A sterile satchel with virologist colours." + icon_state = "satchel-vir" + +/obj/item/weapon/storage/backpack/satchel_chem + name = "chemist satchel" + desc = "A sterile satchel with chemist colours." + icon_state = "satchel-chem" + +/obj/item/weapon/storage/backpack/satchel_gen + name = "geneticist satchel" + desc = "A sterile satchel with geneticist colours." + icon_state = "satchel-gen" + +/obj/item/weapon/storage/backpack/satchel_tox + name = "scientist satchel" + desc = "Useful for holding research materials." + icon_state = "satchel-tox" + +/obj/item/weapon/storage/backpack/satchel_sec + name = "security satchel" + desc = "A robust satchel for security related needs." + icon_state = "satchel-sec" + +/obj/item/weapon/storage/backpack/satchel_hyd + name = "hydroponics satchel" + desc = "A green satchel for plant related work." + icon_state = "satchel_hyd" + + /obj/item/weapon/storage/backpack/bandolier name = "bandolier" @@ -211,6 +262,7 @@ desc = "It can hold a few small and personal things." storage_slots = 4 icon_state = "wallet" + w_class = 2 can_hold = list( "/obj/item/weapon/spacecash", "/obj/item/weapon/card", @@ -615,50 +667,3 @@ R.amount = R.max_amount return - -// Belt Bags/Satchels - -/obj/item/weapon/storage/backpack/satchel_norm - name = "satchel" - desc = "A trendy looking satchel." - icon_state = "satchel-norm" - -/obj/item/weapon/storage/backpack/satchel_eng - name = "industrial satchel" - desc = "A tough satchel with extra pockets." - icon_state = "satchel-eng" - -/obj/item/weapon/storage/backpack/satchel_med - name = "medical satchel" - desc = "A sterile satchel used in medical departments." - icon_state = "satchel-med" - -/obj/item/weapon/storage/backpack/satchel_vir - name = "virologist satchel" - desc = "A sterile satchel with virologist colours." - icon_state = "satchel-vir" - -/obj/item/weapon/storage/backpack/satchel_chem - name = "chemist satchel" - desc = "A sterile satchel with chemist colours." - icon_state = "satchel-chem" - -/obj/item/weapon/storage/backpack/satchel_gen - name = "geneticist satchel" - desc = "A sterile satchel with geneticist colours." - icon_state = "satchel-gen" - -/obj/item/weapon/storage/backpack/satchel_tox - name = "scientist satchel" - desc = "Useful for holding research materials." - icon_state = "satchel-tox" - -/obj/item/weapon/storage/backpack/satchel_sec - name = "security satchel" - desc = "A robust satchel for security related needs." - icon_state = "satchel-sec" - -/obj/item/weapon/storage/backpack/satchel_hyd - name = "hydroponics satchel" - desc = "A green satchel for plant related work." - icon_state = "satchel_hyd" diff --git a/code/game/algorithm.dm b/code/game/algorithm.dm index f0c1a7f737a..0303b3f0301 100644 --- a/code/game/algorithm.dm +++ b/code/game/algorithm.dm @@ -67,7 +67,6 @@ proc/countJob(rank) slot_r_store = 16 slot_s_store = 17 slot_in_backpack = 18 - slot_h_store = 19 /mob/living/carbon/human/proc/equip_in_one_of_slots(obj/item/W, list/slots, del_on_fail = 1) for (var/slot in slots) @@ -86,9 +85,6 @@ proc/countJob(rank) if(slot == s_store && !src.wear_suit) del(W) return - if(slot == h_store && !src.head) - del(W) - return switch(slot) if(slot_back) if(!src.back) @@ -167,10 +163,6 @@ proc/countJob(rank) if(B.contents.len < B.storage_slots && W.w_class <= B.max_w_class) W.loc = B equipped = 1 - if(slot_h_store) - if(!src.h_store) - src.h_store = W - equipped = 1 if(equipped) W.layer = 20 diff --git a/code/game/hud.dm b/code/game/hud.dm index 4d60c7d50ac..17c3fa45745 100644 --- a/code/game/hud.dm +++ b/code/game/hud.dm @@ -11,10 +11,10 @@ #define ui_storage1 "SOUTH-1,4" #define ui_storage2 "SOUTH-1,5" #define ui_sstore1 "SOUTH+1,4" -#define ui_hstore1 "SOUTH+1,5" +#define ui_hstore1 "SOUTH+1,6" #define ui_resist "EAST+1,SOUTH-1" #define ui_gloves "SOUTH,5" -#define ui_glasses "SOUTH+1,6" +#define ui_glasses "SOUTH+1,5" #define ui_lear "SOUTH,7" #define ui_rear "SOUTH,6" #define ui_head "SOUTH+1,2" @@ -68,7 +68,6 @@ obj/hud/New(var/type = 0) if(mymob:r_ear) mymob:r_ear:screen_loc = ui_rear if(mymob:s_store) mymob:s_store:screen_loc = ui_sstore1 if(mymob:glasses) mymob:glasses:screen_loc = ui_glasses - if(mymob:h_store) mymob:h_store:screen_loc = ui_hstore1 else if(istype(mymob, /mob/living/carbon/human)) if(mymob:shoes) mymob:shoes:screen_loc = null @@ -77,7 +76,6 @@ obj/hud/New(var/type = 0) if(mymob:r_ear) mymob:r_ear:screen_loc = null if(mymob:s_store) mymob:s_store:screen_loc = null if(mymob:glasses) mymob:glasses:screen_loc = null - if(mymob:h_store) mymob:h_store:screen_loc = null /obj/hud/var/show_otherinventory = 1 diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 3bf370b7d56..37cf507093b 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -104,8 +104,6 @@ H.equip_if_possible(new /obj/item/device/detective_scanner(H), H.slot_in_backpack) H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/drinks/dflask(H.back), H.slot_in_backpack) H.equip_if_possible(new /obj/item/weapon/lighter/zippo(H), H.slot_l_store) -// H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/snacks/candy_corn(H), H.slot_h_store) -// No... just no. --SkyMarshal var/datum/organ/external/O = H.organs[pick(H.organs)] var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O) O.implant += L diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index d70d0259e5f..144e3d8ce93 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -195,10 +195,21 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. doortype = 17 glass = 1 + glass_research name = "Research Airlock" icon = 'doorsciglass.dmi' + opacity = 0 doortype = 20 + glass = 1 + + + glass_mining + name = "Maintenance Hatch" + icon = 'doorminingglass.dmi' + opacity = 0 + doortype = 22 + glass = 1 centcom name = "Airlock" @@ -419,7 +430,11 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. if(15) new/obj/structure/door_assembly/door_assembly_eng/glass( src.loc ) //issue 301 -mysthic 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( src.loc ) + if(22) new/obj/structure/door_assembly/door_assembly_min/glass( src.loc ) var/obj/item/weapon/airlock_electronics/ae if (!electronics) ae = new/obj/item/weapon/airlock_electronics( src.loc ) diff --git a/code/game/machinery/hydroponics.dm b/code/game/machinery/hydroponics.dm index 4d6d000091f..97fae51ebc6 100644 --- a/code/game/machinery/hydroponics.dm +++ b/code/game/machinery/hydroponics.dm @@ -1,5 +1,5 @@ /obj/machinery/hydroponics - name = "Hydroponics Tray" + name = "hydroponics tray" icon = 'hydroponics.dmi' icon_state = "hydrotray3" density = 1 @@ -404,7 +404,7 @@ obj/machinery/hydroponics/proc/mutateweed() // If the weeds gets the mutagent in src.updateicon() src.visible_message("\red The mutated weeds in [src] spawned a \blue [src.myseed.plantname]!") else - usr << "The few weeds in the tray seem to react, but only for a moment..." + usr << "The few weeds in the [src] seem to react, but only for a moment..." return @@ -441,7 +441,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) O.reagents.remove_reagent("water", b_amount) src.waterlevel += b_amount playsound(src.loc, 'slosh.ogg', 25, 1) - user << "You fill the tray with [b_amount] units of water." + user << "You fill the [src] with [b_amount] units of water." // Toxicity dilutation code. The more water you put in, the lesser the toxin concentration. src.toxic -= round(b_amount/4) @@ -449,7 +449,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) src.toxic = 0 else if(src.waterlevel >= 100) - user << "\red The hydroponics tray is already full." + user << "\red The [src] is already full." else user << "\red The bucket is not filled with water." src.updateicon() @@ -460,7 +460,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) src.nutrilevel = 10 src.yieldmod = myNut.yieldmod src.mutmod = myNut.mutmod - user << "You replace the nutrient solution in the tray" + user << "You replace the nutrient solution in the [src]." del(O) src.updateicon() @@ -661,7 +661,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) src.updateicon() else - user << "\red The tray already has seeds in it!" + user << "\red The [src] already has seeds in it!" else if (istype(O, /obj/item/device/analyzer/plant_analyzer)) if(src.planted && src.myseed) @@ -709,7 +709,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) else if (istype(O, /obj/item/weapon/minihoe)) // The minihoe //var/deweeding if(src.weedlevel > 0) - user.visible_message("\red [user] starts uprooting the weeds.", "\red You remove the weeds from the tray.") + user.visible_message("\red [user] starts uprooting the weeds.", "\red You remove the weeds from the [src].") src.weedlevel = 0 else user << "\red This plot is completely devoid of weeds. It doesn't need uprooting." @@ -723,7 +723,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) src.weedlevel = 0 if (src.toxic > 100 ) // Make sure it won't go overoboard src.toxic = 100 - user << "You apply the weedkiller solution into the tray" + user << "You apply the weedkiller solution into the [src]." playsound(src.loc, 'spray3.ogg', 50, 1, -6) del(O) src.updateicon() @@ -737,7 +737,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) src.pestlevel = 0 if (src.toxic > 100 ) // Make sure it won't go overoboard src.toxic = 100 - user << "You apply the pestkiller solution into the tray" + user << "You apply the pestkiller solution into the [src]." playsound(src.loc, 'spray3.ogg', 50, 1, -6) del(O) src.updateicon() @@ -754,22 +754,22 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) else if(src.dead) src.planted = 0 src.dead = 0 - usr << text("You remove the dead plant from the tray") + usr << text("You remove the dead plant from the [src].") del(src.myseed) src.updateicon() else if(src.planted && !src.dead) - usr << text("The hydroponics tray has \blue [src.myseed.plantname] \black planted") + usr << text("The [src] has \blue [src.myseed.plantname] \black planted.") if(src.health <= (src.myseed.endurance / 2)) usr << text("The plant looks unhealthy") else - usr << text("The hydroponics tray is empty") + usr << text("The [src] is empty.") usr << text("Water: [src.waterlevel]/100") usr << text("Nutrient: [src.nutrilevel]/10") if(src.weedlevel >= 5) // Visual aid for those blind - usr << text("The tray is filled with weeds!") + usr << text("The [src] is filled with weeds!") if(src.pestlevel >= 5) // Visual aid for those blind - usr << text("The tray is filled with tiny worms!") + usr << text("The [src] is filled with tiny worms!") usr << text ("") // Empty line for readability. /obj/item/seeds/proc/harvest(mob/user = usr) @@ -977,7 +977,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) harvest = 0 lastproduce = src.age if((yieldmod * myseed.yield) <= 0) - user << text("\red You fail to harvest anything useful") + user << text("\red You fail to harvest anything useful.") else user << text("You harvest from the [src.myseed.plantname]") if(myseed.oneharvest) diff --git a/code/game/objects/closets/secure/cargo.dm b/code/game/objects/closets/secure/cargo.dm index 85e59b83a4f..97b77c918ef 100644 --- a/code/game/objects/closets/secure/cargo.dm +++ b/code/game/objects/closets/secure/cargo.dm @@ -1,14 +1,12 @@ /obj/structure/closet/secure_closet/cargotech name = "Cargo Technician's Locker" req_access = list(access_cargo) - //icon_state = "secureeng1" - //icon_closed = "secureeng" - //icon_locked = "secureeng1" - //icon_opened = "toolclosetopen" - //icon_broken = "secureengbroken" - //icon_off = "secureengoff" - - //Needs proper sprites + icon_state = "securecargo1" + icon_closed = "securecargo" + icon_locked = "securecargo1" + icon_opened = "securecargoopen" + icon_broken = "securecargobroken" + icon_off = "securecargooff" New() ..() diff --git a/code/game/objects/closets/secure/personal.dm b/code/game/objects/closets/secure/personal.dm index c9f05e3a3e0..508a80cabb7 100644 --- a/code/game/objects/closets/secure/personal.dm +++ b/code/game/objects/closets/secure/personal.dm @@ -26,7 +26,7 @@ ..() spawn(4) contents = list() - new /obj/item/weapon/storage/backpack/satchel( src ) + new /obj/item/weapon/storage/backpack/satchel/withwallet( src ) new /obj/item/device/radio/headset( src ) return diff --git a/code/game/objects/closets/secure/security.dm b/code/game/objects/closets/secure/security.dm index 7cc627d870b..5d4d37c7e22 100644 --- a/code/game/objects/closets/secure/security.dm +++ b/code/game/objects/closets/secure/security.dm @@ -31,12 +31,12 @@ /obj/structure/closet/secure_closet/hop name = "Head of Personnel" req_access = list(access_hop) - icon_state = "capsecure1" - icon_closed = "capsecure" - icon_locked = "capsecure1" - icon_opened = "capsecureopen" - icon_broken = "capsecurebroken" - icon_off = "capsecureoff" + icon_state = "hopsecure1" + icon_closed = "hopsecure" + icon_locked = "hopsecure1" + icon_opened = "hopsecureopen" + icon_broken = "hopsecurebroken" + icon_off = "hopsecureoff" New() ..() diff --git a/code/game/objects/door_assembly.dm b/code/game/objects/door_assembly.dm index 67cf74849be..57f4d63ad65 100644 --- a/code/game/objects/door_assembly.dm +++ b/code/game/objects/door_assembly.dm @@ -72,12 +72,18 @@ obj/structure/door_assembly 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/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" + door_assembly_atmo name = "Atmospherics Airlock Assembly" icon_state = "door_as_atmo1" @@ -90,12 +96,18 @@ obj/structure/door_assembly 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/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" + door_assembly_med name = "Medical Airlock Assembly" icon_state = "door_as_med1" @@ -243,6 +255,8 @@ obj/structure/door_assembly del(src) else W.loc = src.loc + + //del(W) else if(istype(W, /obj/item/weapon/crowbar) && state == 2 ) playsound(src.loc, 'Crowbar.ogg', 100, 1) var/turf/T = get_turf(user) @@ -266,7 +280,7 @@ obj/structure/door_assembly if(do_after(user, 40)) if(G) if(G.amount>=1) - user << "\blue You installed glass windows into the airlock assembly!" + user << "\blue You installed glass windows the airlock assembly!" G.use(1) src.glass = 1 src.name = "Near finished Window Airlock Assembly" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index fbaf1ff3d6b..51a56b40af1 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -123,6 +123,7 @@ if (!safety) if (src.reagents.total_volume < 1) + usr << "\red the [src] is empty." return if (world.time < src.last_use + 20) @@ -134,6 +135,28 @@ var/direction = get_dir(src,target) + if(usr.buckled && isobj(usr.buckled) && !usr.buckled.anchored ) + spawn(0) + var/obj/B = usr.buckled + var/movementdirection = turn(direction,180) + B.Move(get_step(usr,movementdirection), movementdirection) + sleep(1) + B.Move(get_step(usr,movementdirection), movementdirection) + sleep(1) + B.Move(get_step(usr,movementdirection), movementdirection) + sleep(1) + B.Move(get_step(usr,movementdirection), movementdirection) + sleep(2) + B.Move(get_step(usr,movementdirection), movementdirection) + sleep(2) + B.Move(get_step(usr,movementdirection), movementdirection) + sleep(3) + B.Move(get_step(usr,movementdirection), movementdirection) + sleep(3) + B.Move(get_step(usr,movementdirection), movementdirection) + sleep(3) + B.Move(get_step(usr,movementdirection), movementdirection) + var/turf/T = get_turf(target) var/turf/T1 = get_step(T,turn(direction, 90)) var/turf/T2 = get_step(T,turn(direction, -90)) diff --git a/code/game/objects/stool.dm b/code/game/objects/stool.dm index 3a2bb3f1a18..26882cfba12 100644 --- a/code/game/objects/stool.dm +++ b/code/game/objects/stool.dm @@ -118,6 +118,8 @@ return /obj/structure/stool/bed/chair/New() + if(anchored) + src.verbs -= /atom/movable/verb/pull if(src.dir == NORTH) src.layer = FLY_LAYER ..() diff --git a/code/game/objects/storage/storage.dm b/code/game/objects/storage/storage.dm index f5fb5c38588..4cf94bd0670 100644 --- a/code/game/objects/storage/storage.dm +++ b/code/game/objects/storage/storage.dm @@ -207,6 +207,19 @@ /obj/item/weapon/storage/attack_hand(mob/user as mob) playsound(src.loc, "rustle", 50, 1, -5) + + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.l_store == src && !H.get_active_hand()) + H.put_in_hand(src) + H.l_store = null + return + if(H.r_store == src && !H.get_active_hand()) + H.put_in_hand(src) + H.r_store = null + return + + src.orient2hud(user) if (src.loc == user) if (user.s_active) user.s_active.close(user) @@ -216,7 +229,6 @@ for(var/mob/M in range(1)) if (M.s_active == src) src.close(M) - src.orient2hud(user) src.add_fingerprint(user) return diff --git a/code/game/objects/watercloset.dm b/code/game/objects/watercloset.dm index 3de05998d50..da6d46bdc0a 100644 --- a/code/game/objects/watercloset.dm +++ b/code/game/objects/watercloset.dm @@ -40,27 +40,94 @@ density = 0 anchored = 1 var/on = 0 - var/mist = 0 //needs a var so we can make it linger~ + var/obj/effect/mist/mymist = null + var/ismist = 0 //needs a var so we can make it linger~ //add heat controls? when emagged, you can freeze to death in it? -/obj/structure/shower/attack_hand() +/obj/effect/mist + name = "mist" + icon = 'watercloset.dmi' + icon_state = "mist" + layer = MOB_LAYER + 1 + mouse_opacity = 0 + +/obj/structure/shower/attack_hand(mob/M as mob) on = !on update_icon() + if(on && M.loc == loc) + wash(M) + +/obj/structure/shower/attackby(mob/M as mob) + attack_hand(M) /obj/structure/shower/update_icon() overlays = null + if(mymist) + del(mymist) + if(on) overlays += image('watercloset.dmi', src, "water", MOB_LAYER + 1, dir) - spawn(50) - if(src && on) - overlays += image('watercloset.dmi', src, "mist", MOB_LAYER + 1, dir) - mist = 1 - else if(mist) - overlays += image('watercloset.dmi', src, "mist", MOB_LAYER + 1, dir) - spawn(100) + if(!ismist) + spawn(50) + if(src && on) + ismist = 1 + mymist = new /obj/effect/mist(loc) + else + ismist = 1 + mymist = new /obj/effect/mist(loc) + else if(ismist) + ismist = 1 + mymist = new /obj/effect/mist(loc) + spawn(250) if(src && !on) - overlays = null + del(mymist) + ismist = 0 + +/obj/structure/shower/HasEntered(atom/movable/O as obj|mob) + ..() + wash(O) + +//Yes, showers are super powerful as far as washing goes. +/obj/structure/shower/proc/wash(atom/movable/O as obj|mob) + ..() + if(!on) return + + O.clean_blood() + + if(istype(O, /mob/living/carbon)) + var/mob/living/carbon/monkey = O //it's not necessarily a monkey, but >accurate varnames + if(monkey.r_hand) + monkey.r_hand.clean_blood() + if(monkey.l_hand) + monkey.l_hand.clean_blood() + if(monkey.wear_mask) + monkey.wear_mask.clean_blood() + + if(istype(O, /mob/living/carbon/human)) + var/mob/living/carbon/human/washer = O + if(washer.head) + washer.head.clean_blood() + if(washer.w_uniform) + washer.w_uniform.clean_blood() + if(washer.wear_suit) + washer.wear_suit.clean_blood() + if(washer.shoes) + washer.shoes.clean_blood() + if(washer.gloves) + washer.gloves.clean_blood() + if(washer.head) + washer.head.clean_blood() + + if(loc) + var/turf/tile = get_turf(loc) + loc.clean_blood() + for(var/obj/effect/rune/R in tile) + del(R) + for(var/obj/effect/decal/cleanable/R in tile) + del(R) + for(var/obj/effect/overlay/R in tile) + del(R) @@ -69,4 +136,121 @@ desc = "Rubber ducky you're so fine, you make bathtime lots of fuuun. Rubber ducky I'm awfully fooooond of yooooouuuu~" //thanks doohl icon = 'watercloset.dmi' icon_state = "rubberducky" - item_state = "rubberducky" \ No newline at end of file + item_state = "rubberducky" + + + +/obj/structure/sink + name = "sink" + icon = 'watercloset.dmi' + icon_state = "sink" + desc = "A sink used for washing one's hands and face." + anchored = 1 + var/busy = 0 //Something's being washed at the moment + +/obj/structure/sink/attack_hand(mob/M as mob) + if(isrobot(M) || isAI(M)) + return + + if(busy) + M << "\red Someone's already washing here." + return + + var/turf/location = M.loc + if(!isturf(location)) return + usr << "\blue You start washing your hands." + + busy = 1 + sleep(40) + busy = 0 + + if(M.loc != location) return //Person has moved away from the sink + + if(istype(M, /mob/living/carbon)) + var/mob/living/carbon/C = M + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/washer = C + if(washer.gloves) //if they have gloves + washer.gloves.clean_blood() //clean the gloves + else //and if they don't, + washer.clean_blood() //wash their hands (a mob being bloody means they are 'red handed') + else + C.clean_blood() //other things that can't wear gloves should just wash the mob. + for(var/mob/V in viewers(src, null)) + V.show_message(text("\blue [M] washes their hands using \the [src].")) + +/obj/structure/sink/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(busy) + user << "\red Someone's already washing here." + return + + if (istype(O, /obj/item/weapon/reagent_containers/glass/bucket)) + O:reagents.add_reagent("water", 70) + user.visible_message( \ + "\blue [user] fills the [O] using \the [src].", \ + "\blue You fill the [O] using \the [src].") + return + + if (istype(O, /obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks)) + O:reagents.add_reagent("water", 10) + user.visible_message( \ + "\blue [user] fills the [O] using \the [src].", \ + "\blue You fill the [O] using \the [src].") + return + else if (istype(O, /obj/item/weapon/melee/baton)) + var/obj/item/weapon/melee/baton/B = O + if (B.charges > 0 && B.status == 1) + flick("baton_active", src) + user.Stun(10) + user.stuttering = 10 + user.Weaken(10) + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + R.cell.charge -= 20 + else + B.charges-- + user.visible_message( \ + "[user] was stunned by his wet [O].", \ + "\red You have wet \the [O], it shocks you!") + return + + var/turf/location = user.loc + if(!isturf(location)) return + + var/obj/item/I = O + if(!I || !istype(I,/obj/item)) return + + usr << "\blue You start washing \the [I]." + + busy = 1 + sleep(40) + busy = 0 + + if(user.loc != location) return //User has moved + if(!I) return //Item's been destroyed while washing + if(user.get_active_hand() != I) return //Person has switched hands or the item in their hands + + O.clean_blood() + user.visible_message( \ + "\blue [user] washes \a [I] using \the [src].", \ + "\blue You wash \a [I] using \the [src].") + + +/obj/structure/sink/kitchen + name = "kitchen sink" + icon_state = "sink_alt" + + +/obj/structure/sink/puddle //splishy splashy ^_^ + name = "puddle" + icon_state = "puddle" + +/obj/structure/sink/puddle/attack_hand(mob/M as mob) + icon_state = "puddle-splash" + ..() + icon_state = "puddle" + +/obj/structure/sink/puddle/attackby(var/obj/item/O as obj, var/mob/user as mob) + icon_state = "puddle-splash" + ..() + icon_state = "puddle" \ No newline at end of file diff --git a/code/game/objects/window.dm b/code/game/objects/window.dm index a022f63f137..ee9871be0fc 100644 --- a/code/game/objects/window.dm +++ b/code/game/objects/window.dm @@ -79,6 +79,7 @@ src.health = max(0, src.health - tforce) if (src.health <= 7 && !reinf) src.anchored = 0 + update_nearby_icons() step(src, get_dir(AM, src)) if (src.health <= 0) new /obj/item/weapon/shard( src.loc ) @@ -201,22 +202,12 @@ usr << ( state==1? "You have unfastened the window from the frame." : "You have fastened the window to the frame." ) else if(reinf && state == 0) anchored = !anchored - - for(var/obj/structure/window/w in range(src,1)) - if (w.anchored) - w.relativewindow() - src.relativewindow() - + update_nearby_icons() playsound(src.loc, 'Screwdriver.ogg', 75, 1) user << (src.anchored ? "You have fastened the frame to the floor." : "You have unfastened the frame from the floor.") else if(!reinf) src.anchored = !( src.anchored ) - - for(var/obj/structure/window/w in range(src,1)) - if (w.anchored) - w.relativewindow() - src.relativewindow() - + update_nearby_icons() playsound(src.loc, 'Screwdriver.ogg', 75, 1) user << (src.anchored ? "You have fastened the window to the floor." : "You have unfastened the window.") else if(istype(W, /obj/item/weapon/crowbar) && reinf && state <=1) @@ -232,12 +223,7 @@ playsound(src.loc, 'Glasshit.ogg', 75, 1) if (src.health <= 7) src.anchored = 0 - - for(var/obj/structure/window/w in range(src,1)) - if (w.anchored) - w.relativewindow() - src.relativewindow() - + update_nearby_icons() step(src, get_dir(user, src)) if (src.health <= 0) if (src.dir == SOUTHWEST) @@ -328,10 +314,7 @@ icon_state = "window" update_nearby_tiles(need_rebuild=1) - relativewindow() - for(var/obj/structure/window/w in range(src,1)) - if (w.anchored) - w.relativewindow() + update_nearby_icons() return @@ -339,10 +322,11 @@ density = 0 update_nearby_tiles() - for(var/obj/structure/window/w in range(src,1)) - w.relativewindow() playsound(src, "shatter", 70, 1) + + update_nearby_icons() + ..() /obj/structure/window/Move() @@ -355,6 +339,7 @@ return +//This proc has to do with airgroups and atmos, it has nothing to do with smoothwindows, that's update_nearby_tiles(). /obj/structure/window/proc/update_nearby_tiles(need_rebuild) if(!air_master) return 0 @@ -378,30 +363,40 @@ return 1 - //checks if this window is full-tile one /obj/structure/window/proc/is_fulltile() - return (src.dir == SOUTHWEST || src.dir == SOUTHEAST || src.dir == NORTHWEST || src.dir == NORTHEAST) + if(dir in list(5,6,9,10)) + return 1 + return 0 + +//This proc is used to update the icons of nearby windows. It should not be confused with update_nearby_tiles(), which is an atmos proc! +/obj/structure/window/proc/update_nearby_icons() + src.update_icon() + for(var/direction in cardinal) + for(var/obj/structure/window/W in get_step(src,direction) ) + W.update_icon() //merges adjacent full-tile windows into one (blatant ripoff from game/smoothwall.dm) -/obj/structure/window/proc/relativewindow() +/obj/structure/window/update_icon() //A little cludge here, since I don't know how it will work with slim windows. Most likely VERY wrong. //this way it will only update full-tile ones - if (!is_fulltile()) - return - var/junction = 0 //will be used to determine from which side the window is connected to other windows - if (src.anchored) - for(var/obj/structure/window/W in orange(src,1)) - if (W.anchored && W.density && W.is_fulltile()) //Only counts anchored, not-destroyed fill-tile windows. - if (abs(src.x-W.x)-abs(src.y-W.y) ) //doesn't count windows, placed diagonally to src - junction |= get_dir(src,W) - if (istype(src,/obj/structure/window/basic)) - src.icon_state = "window[junction]" - else if (istype(src,/obj/structure/window/reinforced)) - if (istype(src,/obj/structure/window/reinforced/tinted)) + //This spawn is here so windows get properly updated when one gets deleted. + spawn(2) + if(!src) return + if (!is_fulltile()) + return + var/junction = 0 //will be used to determine from which side the window is connected to other windows + if (src.anchored) + for(var/obj/structure/window/W in orange(src,1)) + if (W.anchored && W.density && W.is_fulltile()) //Only counts anchored, not-destroyed fill-tile windows. + if (abs(src.x-W.x)-abs(src.y-W.y) ) //doesn't count windows, placed diagonally to src + junction |= get_dir(src,W) + if (opacity) src.icon_state = "twindow[junction]" else - src.icon_state = "rwindow[junction]" - - return + if (reinf) + src.icon_state = "rwindow[junction]" + else + src.icon_state = "window[junction]" + return diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm index f83b1d29539..aa59d4153d5 100644 --- a/code/modules/chemical/Chemistry-Reagents.dm +++ b/code/modules/chemical/Chemistry-Reagents.dm @@ -3279,6 +3279,12 @@ datum reagent_state = LIQUID color = "#2E6671" // rgb: 46, 102, 113 + driestmartini + name = "Driest Martini" + id = "driestmartini" + description = "Only for the experienced. You think you see sand floating in the glass." + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#2E6671" // rgb: 46, 102, 113 //ALCHOHOL end diff --git a/code/modules/chemical/Chemistry-Recipes.dm b/code/modules/chemical/Chemistry-Recipes.dm index 10914601d01..ad825ca068d 100644 --- a/code/modules/chemical/Chemistry-Recipes.dm +++ b/code/modules/chemical/Chemistry-Recipes.dm @@ -1012,7 +1012,6 @@ datum required_reagents = list("gin" = 2, "tonic" = 1) result_amount = 3 - cuba_libre name = "Cuba Libre" id = "cubalibre" @@ -1034,12 +1033,11 @@ datum required_reagents = list("vodka" = 2, "vermouth" = 1) result_amount = 3 - white_russian name = "White Russian" id = "whiterussian" result = "whiterussian" - required_reagents = list("vodka" = 3, "cream" = 1, "kahlua" = 1) + required_reagents = list("blackrussian" = 3, "cream" = 2) result_amount = 5 whiskey_cola @@ -1221,15 +1219,15 @@ datum name = "Singulo" id = "singulo" result = "singulo" - required_reagents = list("vodka" = 5, "radium" = 1, "acid" = 1, "wine" = 5) + required_reagents = list("vodka" = 5, "radium" = 1, "wine" = 5) result_amount = 10 -/* alliescocktail + alliescocktail name = "Allies Cocktail" id = "alliescocktail" result = "alliescocktail" - required_reagents = list("gin" = 1, "vermouth" = 1) - result_amount = 2*/ + required_reagents = list("martini" = 1, "vodka" = 1) + result_amount = 2 demonsblood name = "Demons Blood" @@ -1256,11 +1254,11 @@ datum name = "Barefoot" id = "barefoot" result = "barefoot" - required_reagents = list("vodka" = 1, "cream" = 1, "vermouth" = 1, "whiskey" = 1) - result_amount = 4 + required_reagents = list("berryjuice" = 1, "cream" = 1, "vermouth" = 1) + result_amount = 3 -////DRINKS THAT REQUIRE IMPROVED SPRITES BELOW:: -Agouri///// +////DRINKS THAT REQUIRED IMPROVED SPRITES BELOW:: -Agouri///// sbiten name = "Sbiten" @@ -1344,7 +1342,7 @@ datum name = "Aloe" id = "aloe" result = "aloe" - required_reagents = list("cream" = 1, "whiskey" = 1) + required_reagents = list("cream" = 1, "whiskey" = 1, "watermelonjuice" = 1) result_amount = 2 andalusia @@ -1372,15 +1370,15 @@ datum name = "Irish Car Bomb" id = "irishcarbomb" result = "irishcarbomb" - required_reagents = list("ale" = 1, "cream" = 1, "whiskey" = 1) - result_amount = 3 + required_reagents = list("ale" = 1, "irishcream" = 1) + result_amount = 2 syndicatebomb name = "Syndicate Bomb" id = "syndicatebomb" result = "syndicatebomb" - required_reagents = list("beer" = 1, "cola" = 1, "whiskey" = 1) - result_amount = 3 + required_reagents = list("beer" = 1, "whiskeycola" = 1) + result_amount = 2 erikasurprise name = "Erika Surprise" @@ -1389,7 +1387,6 @@ datum required_reagents = list("ale" = 1, "limejuice" = 1, "whiskey" = 1, "banana" = 1, "ice" = 1) result_amount = 5 - devilskiss name = "Devils Kiss" id = "devilskiss" @@ -1418,6 +1415,10 @@ datum required_reagents = list("nothing" = 1, "cream" = 1, "sugar" = 1) result_amount = 3 - - + driestmartini + name = "Driest Martini" + id = "driestmartini" + result = "driestmartini" + required_reagents = list("nothing" = 1, "gin" = 1) + result_amount = 2 diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index 59f7393eb73..77735e6ccc9 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -2310,7 +2310,7 @@ /obj/item/weapon/reagent_containers/glass/bottle/pacid name = "Polytrinic Acid Bottle" - desc = "A small bottle. Contains a small amount of Polytronic Acid" + desc = "A small bottle. Contains a small amount of Polytrinic Acid" icon = 'chemical.dmi' icon_state = "bottle17" New() @@ -3592,7 +3592,7 @@ desc = "Creepy time!" if("changelingsting") icon_state = "changelingsting" - name = "Changeling sting" + name = "Changeling Sting" desc = "A stingy drink." if("irishcarbomb") icon_state = "irishcarbomb" @@ -3606,6 +3606,10 @@ icon_state = "erikasurprise" name = "Erika Surprise" desc = "The surprise is, it's green!" + if("driestmartini") + icon_state = "driestmartini" + name = "Driest Martini" + desc = "Only for the experienced. You think you see sand floating in the glass." else icon_state ="glass_brown" name = "Glass of ..what?" diff --git a/code/modules/mob/living/carbon/human/hud.dm b/code/modules/mob/living/carbon/human/hud.dm index 281e451624f..34ef0189ccb 100644 --- a/code/modules/mob/living/carbon/human/hud.dm +++ b/code/modules/mob/living/carbon/human/hud.dm @@ -206,14 +206,6 @@ using.layer = 19 src.other += using - using = new src.h_type( src ) - using.name = "hat storage" - using.icon = ui_style - using.icon_state = "hair" - using.screen_loc = ui_hstore1 - using.layer = 19 - src.other += using - using = new src.h_type( src ) using.name = "resist" using.icon = ui_style diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 1d1651d2ac9..8216b01cfe6 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -39,7 +39,6 @@ var/obj/item/weapon/r_store = null var/obj/item/weapon/l_store = null var/obj/item/weapon/s_store = null - var/obj/item/weapon/h_store = null var/icon/stand_icon = null var/icon/lying_icon = null @@ -479,15 +478,6 @@ glasses = null else if (W == head) var/obj/item/prev_head = W - W = h_store - if (W) - u_equip(W) - if (client) - client.screen -= W - if (W) - W.loc = loc - W.dropped(src) - W.layer = initial(W.layer) head = null if(prev_head && (prev_head.flags & BLOCKHAIR)) // rebuild face @@ -522,8 +512,6 @@ l_store = null else if (W == s_store) s_store = null - else if (W == h_store) - h_store = null else if (W == back) back = null else if (W == handcuffed) @@ -754,22 +742,6 @@ u_equip(W) s_store = W - if("hat storage") - if (h_store) - if (emptyHand) - h_store.DblClick() - return - var/confirm - if (head) - if (istype(W, /obj/item/weapon/pen)) - confirm = 1 - if (istype(head) && is_type_in_list(W, head.allowed)) // NOTE: head is /obj/item/clothing/head/ and parer hat is not /obj/item/clothing/ and does not have "allowed" --rastaf0 - confirm = 1 - if (!confirm) return - else - u_equip(W) - h_store = W - update_clothing() return @@ -1085,9 +1057,6 @@ overlays += image("icon" = 'belt_mirror.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) s_store.screen_loc = ui_sstore1 - if (h_store) - h_store.screen_loc = ui_hstore1 - if(client) hud_used.other_update() //Update the screenloc of the items on the 'other' inventory bar //to hide / show them. if (client) @@ -1703,8 +1672,6 @@ message = text("\red [] is trying to take off \a [] from []'s body!", source, target.w_uniform, target) if("s_store") message = text("\red [] is trying to take off \a [] from []'s suit!", source, target.s_store, target) - if("h_store") - message = text("\red [] is trying to empty []'s hat!", source, target) if("pockets") target.attack_log += text("\[[time_stamp()]\] Has had their pockets emptied by [source.name] ([source.ckey])") source.attack_log += text("\[[time_stamp()]\] Attempted to empty [target.name]'s ([target.ckey]) pockets") @@ -2158,17 +2125,6 @@ It can still be worn/put on as normal. item.layer = 20 target.back = item item.loc = target - if("h_store") - if (target.h_store) - var/obj/item/W = target.h_store - target.u_equip(W) - if (target.client) - target.client.screen -= W - if (W) - W.loc = target.loc - W.dropped(target) - W.layer = initial(W.layer) - W.add_fingerprint(source) if("handcuff") if (target.handcuffed) var/obj/item/W = target.handcuffed @@ -2319,7 +2275,6 @@ It can still be worn/put on as normal.
[(handcuffed ? text("Handcuffed") : text("Not Handcuffed"))]
[(internal ? text("Remove Internal") : "")]
Empty Pockets -
Empty Hat
Refresh
Close
"} diff --git a/code/modules/mob/simple_animal/corgi.dm b/code/modules/mob/simple_animal/corgi.dm index a6e7e687a2f..2461e55f6e6 100644 --- a/code/modules/mob/simple_animal/corgi.dm +++ b/code/modules/mob/simple_animal/corgi.dm @@ -171,7 +171,8 @@ /obj/item/clothing/head/helmet/hardhat/white, /obj/item/weapon/bedsheet, /obj/item/clothing/head/helmet/space/santahat, - /obj/item/clothing/head/collectable/paper + /obj/item/clothing/head/collectable/paper, + /obj/item/clothing/head/cargosoft ) if( ! ( item_to_add.type in allowed_types ) ) @@ -183,7 +184,7 @@ src.inventory_head = item_to_add update_clothing() - //Various hats and items (worn on his head) change Ian's behaviour. His attributesare reset when a HAT is removed. + //Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a HAT is removed. switch(inventory_head && inventory_head.type) @@ -240,6 +241,10 @@ emote_hear = list("barks christmas songs", "yaps") desc = "He has a very shiny nose." src.sd_SetLuminosity(6) + if(/obj/item/clothing/head/cargosoft) + name = "Corgi Tech [real_name]" + speak = list("Needs a stamp!", "Request DENIED!", "Fill these out in triplicate!") + desc = "The reason your yellow gloves have chew-marks." if("back") if(inventory_back) diff --git a/html/changelog.html b/html/changelog.html index 675c3d72fc4..99f67eab052 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -47,6 +47,20 @@ 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. --> +
+

19 May 2012

+

TG updated:

+ +
+

17 May 2012

TG updated:

diff --git a/icons/mob/corgi_head.dmi b/icons/mob/corgi_head.dmi index 72a66aed989..105bdf47502 100644 Binary files a/icons/mob/corgi_head.dmi and b/icons/mob/corgi_head.dmi differ diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi index 3b6bcd8adc2..64b1c35e22d 100644 Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index a92ebe5488f..6b8eaf69893 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/doors/Dooratmo.dmi b/icons/obj/doors/Dooratmo.dmi index 55cff1c433d..787d1483d60 100644 Binary files a/icons/obj/doors/Dooratmo.dmi and b/icons/obj/doors/Dooratmo.dmi differ diff --git a/icons/obj/doors/Doormining.dmi b/icons/obj/doors/Doormining.dmi index e152c7782cd..6829029b164 100644 Binary files a/icons/obj/doors/Doormining.dmi and b/icons/obj/doors/Doormining.dmi differ diff --git a/icons/obj/doors/Doorminingglass.dmi b/icons/obj/doors/Doorminingglass.dmi new file mode 100644 index 00000000000..41d1ff24562 Binary files /dev/null and b/icons/obj/doors/Doorminingglass.dmi differ diff --git a/icons/obj/doors/door_assembly.dmi b/icons/obj/doors/door_assembly.dmi index af58305920a..dcb5a91adcd 100644 Binary files a/icons/obj/doors/door_assembly.dmi and b/icons/obj/doors/door_assembly.dmi differ diff --git a/icons/obj/doors/doorresearch.dmi b/icons/obj/doors/doorresearch.dmi index ac6c60d6e71..24771c4114c 100644 Binary files a/icons/obj/doors/doorresearch.dmi and b/icons/obj/doors/doorresearch.dmi differ diff --git a/icons/obj/doors/doorresearchglass.dmi b/icons/obj/doors/doorresearchglass.dmi new file mode 100644 index 00000000000..9bc2db4610c Binary files /dev/null and b/icons/obj/doors/doorresearchglass.dmi differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index 4fee2a243c3..11a133c079f 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index bb3e6d1c056..ce38d4553de 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi index 8077cfa5c37..6ca93940eb7 100644 Binary files a/icons/obj/watercloset.dmi and b/icons/obj/watercloset.dmi differ