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. -->
+