Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into Ghommie-cit226
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/obj/structure/sign/barsign // All Signs are 64 by 32 pixels, they take two tiles
|
||||
/obj/structure/sign/barsign // All Signs are 64 by 64 pixels, though most of them are made to fit 64 x 32 and only take the two lowermost tiles.
|
||||
name = "Bar Sign"
|
||||
desc = "A bar sign with no writing on it."
|
||||
icon = 'icons/obj/barsigns.dmi'
|
||||
|
||||
@@ -495,7 +495,25 @@
|
||||
icon_state = "sofamiddle"
|
||||
icon = 'icons/obj/sofa.dmi'
|
||||
buildstackamount = 1
|
||||
item_chair = null
|
||||
var/mutable_appearance/armrest
|
||||
|
||||
/obj/structure/chair/sofa/Initialize()
|
||||
armrest = mutable_appearance(icon, "[icon_state]_armrest")
|
||||
return ..()
|
||||
|
||||
/obj/structure/chair/sofa/post_buckle_mob(mob/living/M)
|
||||
. = ..()
|
||||
update_armrest()
|
||||
|
||||
/obj/structure/chair/sofa/proc/update_armrest()
|
||||
if(has_buckled_mobs())
|
||||
add_overlay(armrest)
|
||||
else
|
||||
cut_overlay(armrest)
|
||||
|
||||
/obj/structure/chair/sofa/post_unbuckle_mob()
|
||||
. = ..()
|
||||
update_armrest()
|
||||
|
||||
/obj/structure/chair/sofa/left
|
||||
icon_state = "sofaend_left"
|
||||
@@ -504,4 +522,7 @@
|
||||
icon_state = "sofaend_right"
|
||||
|
||||
/obj/structure/chair/sofa/corner
|
||||
icon_state = "sofacorner"
|
||||
icon_state = "sofacorner"
|
||||
|
||||
/obj/structure/chair/sofa/corner/handle_layer() //only the armrest/back of this chair should cover the mob.
|
||||
return
|
||||
@@ -41,7 +41,7 @@ LINEN BINS
|
||||
return
|
||||
|
||||
/obj/item/bedsheet/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/wirecutters) || I.is_sharp())
|
||||
if(istype(I, /obj/item/wirecutters) || I.get_sharpness())
|
||||
var/obj/item/stack/sheet/cloth/C = new (get_turf(src), 3)
|
||||
transfer_fingerprints_to(C)
|
||||
C.add_fingerprint(user)
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon = 'icons/obj/closet.dmi'
|
||||
icon_state = "generic"
|
||||
density = TRUE
|
||||
layer = BELOW_OBJ_LAYER
|
||||
var/icon_door = null
|
||||
var/icon_door_override = FALSE //override to have open overlay use icon different to its base's
|
||||
var/secure = FALSE //secure locker or not, also used if overriding a non-secure locker with a secure door overlay to add fancy lights
|
||||
@@ -615,3 +614,6 @@
|
||||
user.resting = FALSE
|
||||
togglelock(user)
|
||||
T1.visible_message("<span class='warning'>[user] dives into [src]!</span>")
|
||||
|
||||
/obj/structure/closet/canReachInto(atom/user, atom/target, list/next, view_only, obj/item/tool)
|
||||
return ..() && opened
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
/obj/structure/closet/secure_closet/genpop
|
||||
desc = "It's a secure locker for inmates's personal belongings."
|
||||
var/default_desc = "It's a secure locker for the storage inmates's personal belongings during their time in prison."
|
||||
name = "prisoner closet"
|
||||
var/default_name = "prisoner closet"
|
||||
req_access = list(ACCESS_BRIG)
|
||||
var/obj/item/card/id/prisoner/registered_id = null
|
||||
icon_state = "prisoner"
|
||||
locked = FALSE
|
||||
anchored = TRUE
|
||||
opened = TRUE
|
||||
density = FALSE
|
||||
|
||||
/obj/structure/closet/secure_closet/genpop/attackby(obj/item/W, mob/user, params)
|
||||
if(!broken && locked && W == registered_id) //Prisoner opening
|
||||
handle_prisoner_id(user)
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/structure/closet/secure_closet/genpop/proc/handle_prisoner_id(mob/user)
|
||||
var/obj/item/card/id/prisoner/prisoner_id = null
|
||||
for(prisoner_id in user.held_items)
|
||||
if(prisoner_id != registered_id)
|
||||
prisoner_id = null
|
||||
else
|
||||
break
|
||||
|
||||
if(!prisoner_id)
|
||||
to_chat(user, "<span class='danger'>Access Denied.</span>")
|
||||
return FALSE
|
||||
|
||||
qdel(registered_id)
|
||||
registered_id = null
|
||||
locked = FALSE
|
||||
open(user)
|
||||
desc = "It's a secure locker for prisoner effects."
|
||||
to_chat(user, "<span class='notice'>You insert your prisoner id into \the [src] and it springs open!</span>")
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/structure/closet/secure_closet/genpop/proc/handle_edit_sentence(mob/user)
|
||||
var/prisoner_name = input(user, "Please input the name of the prisoner.", "Prisoner Name", registered_id.registered_name) as text|null
|
||||
if(prisoner_name == null | !user.Adjacent(src))
|
||||
return FALSE
|
||||
var/sentence_length = input(user, "Please input the length of their sentence in minutes (0 for perma).", "Sentence Length", registered_id.sentence) as num|null
|
||||
if(sentence_length == null | !user.Adjacent(src))
|
||||
return FALSE
|
||||
var/crimes = input(user, "Please input their crimes.", "Crimes", registered_id.crime) as text|null
|
||||
if(crimes == null | !user.Adjacent(src))
|
||||
return FALSE
|
||||
|
||||
registered_id.registered_name = prisoner_name
|
||||
var/filteredsentlength = text2num(sentence_length)
|
||||
registered_id.sentence = filteredsentlength ? (filteredsentlength MINUTES) + world.time : 0
|
||||
registered_id.crime = crimes
|
||||
registered_id.update_label(prisoner_name, registered_id.assignment)
|
||||
if(registered_id.sentence)
|
||||
START_PROCESSING(SSobj, registered_id)
|
||||
else
|
||||
STOP_PROCESSING(SSobj, registered_id)
|
||||
|
||||
name = "[default_name] ([prisoner_name])"
|
||||
desc = "[default_desc] It contains the personal effects of [prisoner_name]."
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/structure/closet/secure_closet/genpop/togglelock(mob/living/user)
|
||||
if(!allowed(user))
|
||||
return ..()
|
||||
|
||||
if(!broken && locked && registered_id != null)
|
||||
var/name = registered_id.registered_name
|
||||
var/result = alert(user, "This locker currently contains [name]'s personal belongings ","Locker In Use","Reset","Amend ID", "Open")
|
||||
if(!user.Adjacent(src))
|
||||
return
|
||||
if(result == "Reset")
|
||||
name = default_name
|
||||
desc = default_desc
|
||||
registered_id = null
|
||||
if(result == "Open" | result == "Reset")
|
||||
locked = FALSE
|
||||
open(user)
|
||||
if(result == "Amend ID")
|
||||
handle_edit_sentence(user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/closet/secure_closet/genpop/close(mob/living/user)
|
||||
if(registered_id != null)
|
||||
locked = TRUE
|
||||
return ..()
|
||||
|
||||
/obj/structure/closet/secure_closet/genpop/attack_hand(mob/user)
|
||||
if(user.lying && get_dist(src, user) > 0)
|
||||
return
|
||||
|
||||
if(!broken && registered_id != null && registered_id in user.held_items)
|
||||
handle_prisoner_id(user)
|
||||
return
|
||||
|
||||
if(!broken && opened && !locked && allowed(user) && !registered_id) //Genpop setup
|
||||
|
||||
registered_id = new /obj/item/card/id/prisoner/(src.contents)
|
||||
if(handle_edit_sentence(user))
|
||||
close(user)
|
||||
locked = TRUE
|
||||
update_icon()
|
||||
registered_id.forceMove(src.loc)
|
||||
new /obj/item/clothing/under/rank/prisoner(src.loc)
|
||||
else
|
||||
qdel(registered_id)
|
||||
registered_id = null
|
||||
|
||||
return
|
||||
|
||||
..()
|
||||
@@ -10,7 +10,7 @@
|
||||
new /obj/item/clothing/under/rank/chief_engineer(src)
|
||||
new /obj/item/clothing/under/rank/chief_engineer/skirt(src)
|
||||
new /obj/item/clothing/head/hardhat/white(src)
|
||||
new /obj/item/clothing/head/welding(src)
|
||||
new /obj/item/clothing/head/hardhat/weldhat/white(src)
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
new /obj/item/clothing/shoes/sneakers/brown(src)
|
||||
new /obj/item/tank/jetpack/suit(src)
|
||||
|
||||
@@ -236,7 +236,7 @@
|
||||
canSmoothWith = list(/obj/structure/falsewall/plasma, /turf/closed/wall/mineral/plasma)
|
||||
|
||||
/obj/structure/falsewall/plasma/attackby(obj/item/W, mob/user, params)
|
||||
if(W.is_hot() > 300)
|
||||
if(W.get_temperature() > 300)
|
||||
var/turf/T = get_turf(src)
|
||||
message_admins("Plasma falsewall ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
|
||||
log_game("Plasma falsewall ignited by [key_name(user)] in [AREACOORD(T)]")
|
||||
|
||||
@@ -300,18 +300,9 @@
|
||||
throw_speed = 2
|
||||
throw_range = 4
|
||||
|
||||
|
||||
/obj/item/twohanded/required/kirbyplants/equipped(mob/living/user)
|
||||
var/image/I = image(icon = 'icons/obj/flora/plants.dmi' , icon_state = src.icon_state, loc = user)
|
||||
I.copy_overlays(src)
|
||||
I.override = 1
|
||||
add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, "sneaking_mission", I)
|
||||
I.layer = ABOVE_MOB_LAYER
|
||||
..()
|
||||
|
||||
/obj/item/twohanded/required/kirbyplants/dropped(mob/living/user)
|
||||
..()
|
||||
user.remove_alt_appearance("sneaking_mission")
|
||||
/obj/item/twohanded/required/kirbyplants/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/tactical)
|
||||
|
||||
/obj/item/twohanded/required/kirbyplants/random
|
||||
icon = 'icons/obj/flora/_flora.dmi'
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
desc = "A large structural assembly made out of metal; It requires a layer of metal before it can be considered a wall."
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
layer = BELOW_OBJ_LAYER
|
||||
var/state = GIRDER_NORMAL
|
||||
var/girderpasschance = 20 // percentage chance that a projectile passes through the girder.
|
||||
var/can_displace = TRUE //If the girder can be moved around by wrenching it
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
opacity = TRUE
|
||||
layer = CLOSED_DOOR_LAYER
|
||||
|
||||
icon = 'icons/obj/doors/mineral_doors.dmi'
|
||||
icon_state = "metal"
|
||||
@@ -90,6 +91,7 @@
|
||||
flick("[initial_state]opening",src)
|
||||
sleep(10)
|
||||
density = FALSE
|
||||
layer = OPEN_DOOR_LAYER
|
||||
state = 1
|
||||
air_update_turf(1)
|
||||
update_icon()
|
||||
@@ -111,6 +113,7 @@
|
||||
density = TRUE
|
||||
set_opacity(TRUE)
|
||||
state = 0
|
||||
layer = initial(layer)
|
||||
air_update_turf(1)
|
||||
update_icon()
|
||||
isSwitchingStates = 0
|
||||
@@ -190,7 +193,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/mineral_door/transparent/plasma/attackby(obj/item/W, mob/user, params)
|
||||
if(W.is_hot())
|
||||
if(W.get_temperature())
|
||||
var/turf/T = get_turf(src)
|
||||
message_admins("Plasma mineral door ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
|
||||
log_game("Plasma mineral door ignited by [key_name(user)] in [AREACOORD(T)]")
|
||||
|
||||
@@ -133,9 +133,11 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an
|
||||
|
||||
/obj/structure/bodycontainer/proc/close()
|
||||
playsound(src, 'sound/effects/roll.ogg', 5, 1)
|
||||
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
|
||||
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
|
||||
for(var/atom/movable/AM in connected.loc)
|
||||
if(!AM.anchored || AM == connected)
|
||||
if(ismob(AM) && !isliving(AM))
|
||||
continue
|
||||
AM.forceMove(src)
|
||||
recursive_organ_check(src)
|
||||
update_icon()
|
||||
@@ -305,7 +307,7 @@ GLOBAL_LIST_EMPTY(crematoriums)
|
||||
/obj/structure/tray
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
density = TRUE
|
||||
layer = BELOW_OBJ_LAYER
|
||||
layer = TRAY_LAYER
|
||||
var/obj/structure/bodycontainer/connected = null
|
||||
anchored = TRUE
|
||||
pass_flags = LETPASSTHROW
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
desc = "A base for reflector assemblies."
|
||||
anchored = FALSE
|
||||
density = FALSE
|
||||
layer = BELOW_OBJ_LAYER
|
||||
var/deflector_icon_state
|
||||
var/image/deflector_overlay
|
||||
var/finished = FALSE
|
||||
|
||||
@@ -127,11 +127,11 @@
|
||||
..()
|
||||
|
||||
/obj/structure/statue/plasma/attackby(obj/item/W, mob/user, params)
|
||||
if(W.is_hot() > 300 && !QDELETED(src))//If the temperature of the object is over 300, then ignite
|
||||
if(W.get_temperature() > 300 && !QDELETED(src))//If the temperature of the object is over 300, then ignite
|
||||
var/turf/T = get_turf(src)
|
||||
message_admins("Plasma statue ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
|
||||
log_game("Plasma statue ignited by [key_name(user)] in [AREACOORD(T)]")
|
||||
ignite(W.is_hot())
|
||||
ignite(W.get_temperature())
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
animate_movement = FORWARD_STEPS
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
layer = BELOW_OBJ_LAYER
|
||||
var/moving = 0
|
||||
var/datum/gas_mixture/air_contents = new()
|
||||
|
||||
|
||||
@@ -65,6 +65,8 @@
|
||||
var/mob/M = AM
|
||||
if(M.mind in immune_minds)
|
||||
return
|
||||
if(M.anti_magic_check())
|
||||
flare()
|
||||
if(charges <= 0)
|
||||
return
|
||||
flare()
|
||||
|
||||
@@ -318,6 +318,7 @@
|
||||
|
||||
/obj/machinery/shower/proc/wash_obj(obj/O)
|
||||
. = SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
. = O.clean_blood()
|
||||
O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
if(isitem(O))
|
||||
var/obj/item/I = O
|
||||
@@ -328,8 +329,9 @@
|
||||
/obj/machinery/shower/proc/wash_turf()
|
||||
if(isturf(loc))
|
||||
var/turf/tile = loc
|
||||
SEND_SIGNAL(tile, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
tile.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
tile.clean_blood()
|
||||
SEND_SIGNAL(tile, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
for(var/obj/effect/E in tile)
|
||||
if(is_cleanable(E))
|
||||
qdel(E)
|
||||
@@ -381,7 +383,8 @@
|
||||
else if(H.w_uniform && wash_obj(H.w_uniform))
|
||||
H.update_inv_w_uniform()
|
||||
if(washgloves)
|
||||
SEND_SIGNAL(H, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
|
||||
H.clean_blood()
|
||||
SEND_SIGNAL(H, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
if(H.shoes && washshoes && wash_obj(H.shoes))
|
||||
H.update_inv_shoes()
|
||||
if(H.wear_mask && washmask && wash_obj(H.wear_mask))
|
||||
@@ -398,9 +401,11 @@
|
||||
else
|
||||
if(M.wear_mask && wash_obj(M.wear_mask))
|
||||
M.update_inv_wear_mask(0)
|
||||
SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
|
||||
M.clean_blood()
|
||||
SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
else
|
||||
SEND_SIGNAL(L, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
|
||||
L.clean_blood()
|
||||
SEND_SIGNAL(L, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
|
||||
/obj/machinery/shower/proc/contamination_cleanse(atom/movable/thing)
|
||||
var/datum/component/radioactive/healthy_green_glow = thing.GetComponent(/datum/component/radioactive)
|
||||
@@ -498,7 +503,8 @@
|
||||
H.regenerate_icons()
|
||||
user.drowsyness = max(user.drowsyness - rand(2,3), 0) //Washing your face wakes you up if you're falling asleep
|
||||
else
|
||||
SEND_SIGNAL(user, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
|
||||
SEND_SIGNAL(user, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
user.clean_blood()
|
||||
|
||||
/obj/structure/sink/attackby(obj/item/O, mob/living/user, params)
|
||||
if(busy)
|
||||
@@ -554,7 +560,8 @@
|
||||
busy = FALSE
|
||||
return 1
|
||||
busy = FALSE
|
||||
SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
|
||||
SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
O.clean_blood()
|
||||
O.acid_level = 0
|
||||
create_reagents(5)
|
||||
reagents.add_reagent(dispensedreagent, 5)
|
||||
@@ -675,4 +682,4 @@
|
||||
else
|
||||
playsound(loc, 'sound/weapons/tap.ogg', 50, 1)
|
||||
if(BURN)
|
||||
playsound(loc, 'sound/items/welder.ogg', 80, 1)
|
||||
playsound(loc, 'sound/items/welder.ogg', 80, 1)
|
||||
@@ -731,8 +731,8 @@
|
||||
|
||||
|
||||
/obj/structure/window/paperframe/attackby(obj/item/W, mob/user)
|
||||
if(W.is_hot())
|
||||
fire_act(W.is_hot())
|
||||
if(W.get_temperature())
|
||||
fire_act(W.get_temperature())
|
||||
return
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
return ..()
|
||||
|
||||
Reference in New Issue
Block a user