Game folder
This commit is contained in:
@@ -64,9 +64,9 @@
|
||||
CanAtmosPass = ATMOS_PASS_DENSITY
|
||||
|
||||
|
||||
/obj/structure/alien/resin/New(location)
|
||||
..()
|
||||
air_update_turf(1)
|
||||
/obj/structure/alien/resin/Initialize(mapload)
|
||||
. = ..()
|
||||
air_update_turf(TRUE)
|
||||
|
||||
/obj/structure/alien/resin/Move()
|
||||
var/turf/T = loc
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
max_integrity = 60
|
||||
var/obj/item/canvas/painting = null
|
||||
|
||||
|
||||
//Adding canvases
|
||||
/obj/structure/easel/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/canvas))
|
||||
@@ -66,6 +65,15 @@ GLOBAL_LIST_INIT(globalBlankCanvases, new(AMT_OF_CANVASES))
|
||||
icon_state = "23x23"
|
||||
whichGlobalBackup = 4
|
||||
|
||||
//HEY YOU
|
||||
//ARE YOU READING THE CODE FOR CANVASES?
|
||||
//ARE YOU AWARE THEY CRASH HALF THE SERVER WHEN SOMEONE DRAWS ON THEM...
|
||||
//...AND NOBODY CAN FIGURE OUT WHY?
|
||||
//THEN GO ON BRAVE TRAVELER
|
||||
//TRY TO FIX THEM AND REMOVE THIS CODE
|
||||
/obj/item/canvas/Initialize()
|
||||
..()
|
||||
return INITIALIZE_HINT_QDEL //Delete on creation
|
||||
|
||||
//Find the right size blank canvas
|
||||
/obj/item/canvas/proc/getGlobalBackup()
|
||||
@@ -124,5 +132,4 @@ GLOBAL_LIST_INIT(globalBlankCanvases, new(AMT_OF_CANVASES))
|
||||
user.visible_message("<span class='notice'>[user] cleans the canvas.</span>","<span class='notice'>You clean the canvas.</span>")
|
||||
|
||||
|
||||
|
||||
#undef AMT_OF_CANVASES
|
||||
|
||||
@@ -9,10 +9,6 @@
|
||||
armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
|
||||
buildable_sign = 0
|
||||
var/list/barsigns=list()
|
||||
var/list/hiddensigns
|
||||
var/emagged = FALSE
|
||||
var/state = 0
|
||||
var/prev_sign = ""
|
||||
var/panel_open = FALSE
|
||||
|
||||
/obj/structure/sign/barsign/Initialize()
|
||||
@@ -39,7 +35,7 @@
|
||||
|
||||
/obj/structure/sign/barsign/obj_break(damage_flag)
|
||||
if(!broken && !(flags_1 & NODECONSTRUCT_1))
|
||||
broken = 1
|
||||
broken = TRUE
|
||||
|
||||
/obj/structure/sign/barsign/deconstruct(disassembled = TRUE)
|
||||
new /obj/item/stack/sheet/metal (loc, 2)
|
||||
@@ -66,7 +62,7 @@
|
||||
if (broken)
|
||||
to_chat(user, "<span class ='danger'>The controls seem unresponsive.</span>")
|
||||
return
|
||||
pick_sign()
|
||||
pick_sign(user)
|
||||
|
||||
/obj/structure/sign/barsign/attackby(obj/item/I, mob/user)
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
@@ -79,7 +75,7 @@
|
||||
panel_open = TRUE
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You close the maintenance panel.</span>")
|
||||
if(!broken && !emagged)
|
||||
if(!broken && !(obj_flags & EMAGGED))
|
||||
set_sign(pick(barsigns))
|
||||
else if(obj_flags & EMAGGED)
|
||||
set_sign(new /datum/barsign/hiddensigns/syndibarsign)
|
||||
@@ -98,7 +94,7 @@
|
||||
|
||||
if(C.use(2))
|
||||
to_chat(user, "<span class='notice'>You replace the burnt wiring.</span>")
|
||||
broken = 0
|
||||
broken = FALSE
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need at least two lengths of cable!</span>")
|
||||
else
|
||||
@@ -110,13 +106,13 @@
|
||||
if(. & EMP_PROTECT_SELF)
|
||||
return
|
||||
set_sign(new /datum/barsign/hiddensigns/empbarsign)
|
||||
broken = 1
|
||||
broken = TRUE
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/structure/sign/barsign/emag_act(mob/user)
|
||||
if(broken || emagged)
|
||||
if(broken || (obj_flags & EMAGGED))
|
||||
to_chat(user, "<span class='warning'>Nothing interesting happens!</span>")
|
||||
return
|
||||
obj_flags |= EMAGGED
|
||||
@@ -126,8 +122,8 @@
|
||||
req_access = list(ACCESS_SYNDICATE)
|
||||
|
||||
|
||||
/obj/structure/sign/barsign/proc/pick_sign()
|
||||
var/picked_name = input("Available Signage", "Bar Sign") as null|anything in barsigns
|
||||
/obj/structure/sign/barsign/proc/pick_sign(mob/user)
|
||||
var/picked_name = input(user, "Available Signage", "Bar Sign", name) as null|anything in barsigns
|
||||
if(!picked_name)
|
||||
return
|
||||
set_sign(picked_name)
|
||||
@@ -142,7 +138,7 @@
|
||||
var/name = "Name"
|
||||
var/icon = "Icon"
|
||||
var/desc = "desc"
|
||||
var/hidden = 0
|
||||
var/hidden = FALSE
|
||||
|
||||
|
||||
//Anything below this is where all the specific signs are. If people want to add more signs, add them below.
|
||||
@@ -299,7 +295,7 @@
|
||||
desc = "A cafe popular among moths and moffs. Once shut down for a week after the bartender used mothballs to protect her spare uniforms."
|
||||
|
||||
/datum/barsign/hiddensigns
|
||||
hidden = 1
|
||||
hidden = TRUE
|
||||
|
||||
|
||||
//Hidden signs list below this point
|
||||
|
||||
@@ -127,6 +127,7 @@
|
||||
deploy_roller(user, user.loc)
|
||||
|
||||
/obj/item/roller/afterattack(obj/target, mob/user , proximity)
|
||||
. = ..()
|
||||
if(!proximity)
|
||||
return
|
||||
if(isopenturf(target))
|
||||
|
||||
@@ -192,11 +192,20 @@
|
||||
/obj/structure/chair/comfy/lime
|
||||
color = rgb(255,251,0)
|
||||
|
||||
/obj/structure/chair/comfy/shuttle
|
||||
name = "shuttle seat"
|
||||
desc = "A comfortable, secure seat. It has a more sturdy looking buckling system, for smoother flights."
|
||||
icon_state = "shuttle_chair"
|
||||
|
||||
/obj/structure/chair/comfy/shuttle/GetArmrest()
|
||||
return mutable_appearance('icons/obj/chairs.dmi', "shuttle_chair_armrest")
|
||||
|
||||
/obj/structure/chair/office
|
||||
anchored = FALSE
|
||||
buildstackamount = 5
|
||||
item_chair = null
|
||||
|
||||
|
||||
/obj/structure/chair/office/Moved()
|
||||
. = ..()
|
||||
if(has_gravity())
|
||||
@@ -307,7 +316,7 @@
|
||||
return 0
|
||||
|
||||
/obj/item/chair/afterattack(atom/target, mob/living/carbon/user, proximity)
|
||||
..()
|
||||
. = ..()
|
||||
if(!proximity)
|
||||
return
|
||||
if(prob(break_chance))
|
||||
@@ -409,10 +418,3 @@
|
||||
. = ..()
|
||||
if(has_gravity())
|
||||
playsound(src, 'sound/machines/clockcult/integration_cog_install.ogg', 50, TRUE)
|
||||
|
||||
/obj/structure/chair/shuttle
|
||||
name = "shuttle seat"
|
||||
desc = "A comfortable, secure seat. It has a more sturdy looking buckling system, for smoother flights."
|
||||
icon = 'goon/icons/obj/chairs.dmi'
|
||||
icon_state = "shuttle_chair" //thanks gannets!
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ LINEN BINS
|
||||
..()
|
||||
|
||||
/obj/item/bedsheet/attack_self(mob/user)
|
||||
if((loc != user) && !Adjacent(user))
|
||||
if(!user.CanReach(src)) //No telekenetic grabbing.
|
||||
return
|
||||
if(!user.dropItemToGround(src))
|
||||
return
|
||||
|
||||
@@ -33,14 +33,15 @@
|
||||
var/material_drop_amount = 2
|
||||
var/delivery_icon = "deliverycloset" //which icon to use when packagewrapped. null to be unwrappable.
|
||||
var/anchorable = TRUE
|
||||
var/icon_welded = "welded"
|
||||
|
||||
|
||||
/obj/structure/closet/Initialize(mapload)
|
||||
if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents
|
||||
addtimer(CALLBACK(src, .proc/take_contents), 0)
|
||||
. = ..()
|
||||
update_icon()
|
||||
PopulateContents()
|
||||
if(mapload && !opened)
|
||||
take_contents()
|
||||
|
||||
//USE THIS TO FILL IT, NOT INITIALIZE OR NEW
|
||||
/obj/structure/closet/proc/PopulateContents()
|
||||
@@ -59,7 +60,7 @@
|
||||
else
|
||||
add_overlay("[icon_state]_door")
|
||||
if(welded)
|
||||
add_overlay("welded")
|
||||
add_overlay(icon_welded)
|
||||
if(secure && !broken)
|
||||
if(locked)
|
||||
add_overlay("locked")
|
||||
@@ -73,7 +74,7 @@
|
||||
else
|
||||
add_overlay("[icon_state]_open")
|
||||
|
||||
/obj/structure/closet/examine(mob/user)
|
||||
/obj/structure/closet/examine(mob/living/user)
|
||||
..()
|
||||
if(welded)
|
||||
to_chat(user, "<span class='notice'>It's welded shut.</span>")
|
||||
@@ -83,6 +84,8 @@
|
||||
to_chat(user, "<span class='notice'>The parts are <b>welded</b> together.</span>")
|
||||
else if(secure && !opened)
|
||||
to_chat(user, "<span class='notice'>Alt-click to [locked ? "unlock" : "lock"].</span>")
|
||||
if(user.has_trait(TRAIT_SKITTISH))
|
||||
to_chat(user, "<span class='notice'>Ctrl-Shift-click [src] to jump inside.</span>")
|
||||
|
||||
/obj/structure/closet/CanPass(atom/movable/mover, turf/target)
|
||||
if(wall_mounted)
|
||||
@@ -167,8 +170,6 @@
|
||||
var/obj/item/I = AM
|
||||
if (I.item_flags & NODROP)
|
||||
return
|
||||
else if(istype(AM, /obj/effect))
|
||||
return
|
||||
else if(!allow_objects && !istype(AM, /obj/effect/dummy/chameleon))
|
||||
return
|
||||
if(!allow_dense && AM.density)
|
||||
@@ -249,6 +250,7 @@
|
||||
if(opened)
|
||||
return
|
||||
welded = !welded
|
||||
after_weld(welded)
|
||||
user.visible_message("<span class='notice'>[user] [welded ? "welds shut" : "unwelded"] \the [src].</span>",
|
||||
"<span class='notice'>You [welded ? "weld" : "unwelded"] \the [src] with \the [W].</span>",
|
||||
"<span class='italics'>You hear welding.</span>")
|
||||
@@ -267,6 +269,9 @@
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/obj/structure/closet/proc/after_weld(weld_state)
|
||||
return
|
||||
|
||||
/obj/structure/closet/MouseDrop_T(atom/movable/O, mob/living/user)
|
||||
if(!istype(O) || O.anchored || istype(O, /obj/screen))
|
||||
return
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
delivery_icon = "deliverybox"
|
||||
anchorable = FALSE
|
||||
var/move_speed_multiplier = 1
|
||||
var/use_mob_movespeed = FALSE
|
||||
var/move_delay = FALSE
|
||||
var/egged = 0
|
||||
|
||||
@@ -23,7 +22,7 @@
|
||||
return
|
||||
move_delay = TRUE
|
||||
if(step(src, direction))
|
||||
addtimer(CALLBACK(src, .proc/ResetMoveDelay), (use_mob_movespeed ? user.movement_delay() : CONFIG_GET(number/walk_delay)) * move_speed_multiplier)
|
||||
addtimer(CALLBACK(src, .proc/ResetMoveDelay), CONFIG_GET(number/movedelay/walk_delay) * move_speed_multiplier)
|
||||
else
|
||||
ResetMoveDelay()
|
||||
|
||||
|
||||
@@ -20,3 +20,4 @@
|
||||
new /obj/item/door_remote/quartermaster(src)
|
||||
new /obj/item/circuitboard/machine/techfab/department/cargo(src)
|
||||
new /obj/item/storage/photo_album/QM(src)
|
||||
new /obj/item/circuitboard/machine/ore_silo(src)
|
||||
|
||||
@@ -66,8 +66,8 @@
|
||||
addtimer(CALLBACK(src, .proc/sparks), 30)//if bluespace, then 3 seconds after opening, make some sparks and delete
|
||||
|
||||
/obj/structure/closet/supplypod/proc/sparks()//sparks cant be called from addtimer
|
||||
do_sparks(5, TRUE, src)
|
||||
qdel(src)//no need for QDEL_IN if we already have a timer
|
||||
do_sparks(5, TRUE, src)
|
||||
qdel(src)//no need for QDEL_IN if we already have a timer
|
||||
|
||||
/obj/structure/closet/supplypod/Destroy()//make some sparks b4 deletion
|
||||
QDEL_NULL(SupplyOrder)
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
desc = "It's a burial receptacle for the dearly departed."
|
||||
icon_state = "coffin"
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 70
|
||||
max_integrity = 70
|
||||
material_drop = /obj/item/stack/sheet/mineral/wood
|
||||
material_drop_amount = 5
|
||||
|
||||
|
||||
@@ -23,9 +23,10 @@
|
||||
add_overlay("securecrateg")
|
||||
|
||||
/obj/structure/closet/crate/secure/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1)
|
||||
if(prob(tamperproof))
|
||||
if(prob(tamperproof) && damage_amount >= DAMAGE_PRECISION)
|
||||
boom()
|
||||
..()
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
/obj/structure/closet/crate/secure/proc/boom(mob/user)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
/obj/structure/displaycase/Initialize()
|
||||
. = ..()
|
||||
if(start_showpieces.len && !start_showpiece_type)
|
||||
if(start_showpieces.len && !start_showpiece_type)
|
||||
var/list/showpiece_entry = pick(start_showpieces)
|
||||
if (showpiece_entry && showpiece_entry["type"])
|
||||
start_showpiece_type = showpiece_entry["type"]
|
||||
@@ -164,6 +164,7 @@
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if (showpiece && (broken || open))
|
||||
to_chat(user, "<span class='notice'>You deactivate the hover field built into the case.</span>")
|
||||
log_combat(user, src, "deactivates the hover field of")
|
||||
dump()
|
||||
src.add_fingerprint(user)
|
||||
update_icon()
|
||||
@@ -173,6 +174,7 @@
|
||||
if (!Adjacent(user))
|
||||
return
|
||||
user.visible_message("<span class='danger'>[user] kicks the display case.</span>", null, null, COMBAT_MESSAGE_RANGE)
|
||||
log_combat(user, src, "kicks")
|
||||
user.do_attack_animation(src, ATTACK_EFFECT_KICK)
|
||||
take_damage(2)
|
||||
|
||||
|
||||
@@ -237,6 +237,7 @@
|
||||
else
|
||||
door = new airlock_type( loc )
|
||||
door.setDir(dir)
|
||||
door.unres_sides = electronics.unres_sides
|
||||
//door.req_access = req_access
|
||||
door.electronics = electronics
|
||||
door.heat_proof = heat_proof_finished
|
||||
@@ -250,6 +251,7 @@
|
||||
door.name = base_name
|
||||
door.previous_airlock = previous_assembly
|
||||
electronics.forceMove(door)
|
||||
door.update_icon()
|
||||
qdel(src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
stored_extinguisher = I
|
||||
to_chat(user, "<span class='notice'>You place [I] in [src].</span>")
|
||||
update_icon()
|
||||
return TRUE
|
||||
else
|
||||
toggle_cabinet(user)
|
||||
else if(user.a_intent != INTENT_HARM)
|
||||
|
||||
@@ -38,11 +38,6 @@
|
||||
. = ..()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_MEDIUM_INSULATION)
|
||||
|
||||
/obj/structure/falsewall/Destroy()
|
||||
density = FALSE
|
||||
air_update_turf(1)
|
||||
return ..()
|
||||
|
||||
/obj/structure/falsewall/ratvar_act()
|
||||
new /obj/structure/falsewall/brass(loc)
|
||||
qdel(src)
|
||||
|
||||
@@ -294,9 +294,6 @@
|
||||
throw_speed = 2
|
||||
throw_range = 4
|
||||
|
||||
/obj/item/twohanded/required/kirbyplants/Initialize()
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, /datum.proc/AddComponent, /datum/component/beauty, 750), 0)
|
||||
|
||||
/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)
|
||||
|
||||
@@ -477,7 +477,8 @@
|
||||
mob_species = /datum/species/human
|
||||
flavour_text = "<span class='big bold'>You are a security officer working for Nanotrasen,</span><b> stationed onboard a state of the art research station. You vaguely recall rushing into a \
|
||||
cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
|
||||
your eyes, everything seems rusted and broken, a dark feeling sweels in your gut as you climb out of your pod.</b>"
|
||||
your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
|
||||
Work as a team with your fellow survivors and do not abandon them.</b>"
|
||||
uniform = /obj/item/clothing/under/rank/security
|
||||
shoes = /obj/item/clothing/shoes/jackboots
|
||||
id = /obj/item/card/id/away/old/sec
|
||||
@@ -501,7 +502,8 @@
|
||||
mob_species = /datum/species/human
|
||||
flavour_text = "<span class='big bold'>You are an engineer working for Nanotrasen,</span><b> stationed onboard a state of the art research station. You vaguely recall rushing into a \
|
||||
cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
|
||||
your eyes, everything seems rusted and broken, a dark feeling sweels in your gut as you climb out of your pod.</b>"
|
||||
your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
|
||||
Work as a team with your fellow survivors and do not abandon them.</b>"
|
||||
uniform = /obj/item/clothing/under/rank/engineer
|
||||
shoes = /obj/item/clothing/shoes/workboots
|
||||
id = /obj/item/card/id/away/old/eng
|
||||
@@ -525,7 +527,8 @@
|
||||
mob_species = /datum/species/human
|
||||
flavour_text = "<span class='big bold'>You are a scientist working for Nanotrasen,</span><b> stationed onboard a state of the art research station. You vaguely recall rushing into a \
|
||||
cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
|
||||
your eyes, everything seems rusted and broken, a dark feeling sweels in your gut as you climb out of your pod.</b>"
|
||||
your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
|
||||
Work as a team with your fellow survivors and do not abandon them.</b>"
|
||||
uniform = /obj/item/clothing/under/rank/scientist
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
id = /obj/item/card/id/away/old/sci
|
||||
|
||||
@@ -210,6 +210,9 @@
|
||||
|
||||
// Screwdriver behavior for girders
|
||||
/obj/structure/girder/screwdriver_act(mob/user, obj/item/tool)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
. = FALSE
|
||||
if(state == GIRDER_DISPLACED)
|
||||
user.visible_message("<span class='warning'>[user] disassembles the girder.</span>",
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
new /obj/structure/grille/ratvar(src.loc)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/grille/CollidedWith(atom/movable/AM)
|
||||
/obj/structure/grille/Bumped(atom/movable/AM)
|
||||
if(!ismob(AM))
|
||||
return
|
||||
var/mob/M = AM
|
||||
@@ -109,6 +109,7 @@
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.do_attack_animation(src, ATTACK_EFFECT_KICK)
|
||||
user.visible_message("<span class='warning'>[user] hits [src].</span>", null, null, COMBAT_MESSAGE_RANGE)
|
||||
log_combat(user, src, "hit")
|
||||
if(!shock(user, 70))
|
||||
take_damage(rand(5,10), BRUTE, "melee", 1)
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
playsound(src, 'sound/weapons/bladeslice.ogg', 100, 1)
|
||||
if (blade_sharpness >= GUILLOTINE_DECAP_MIN_SHARP || head.brute_dam >= 100)
|
||||
head.dismember()
|
||||
add_logs(user, H, "beheaded", src)
|
||||
log_combat(user, H, "beheaded", src)
|
||||
H.regenerate_icons()
|
||||
unbuckle_all_mobs()
|
||||
kill_count += 1
|
||||
@@ -144,7 +144,7 @@
|
||||
delay_offset++
|
||||
else
|
||||
H.apply_damage(15 * blade_sharpness, BRUTE, head)
|
||||
add_logs(user, H, "dropped the blade on", src, " non-fatally")
|
||||
log_combat(user, H, "dropped the blade on", src, " non-fatally")
|
||||
H.emote("scream")
|
||||
|
||||
if (blade_sharpness > 1)
|
||||
@@ -246,7 +246,7 @@
|
||||
if (do_after(user, GUILLOTINE_WRENCH_DELAY, target = src))
|
||||
current_action = 0
|
||||
default_unfasten_wrench(user, I, 0)
|
||||
dir = SOUTH
|
||||
setDir(SOUTH)
|
||||
return TRUE
|
||||
else
|
||||
current_action = 0
|
||||
|
||||
@@ -83,11 +83,6 @@
|
||||
. = ..()
|
||||
air_update_turf(TRUE)
|
||||
|
||||
/obj/structure/holosign/barrier/atmos/Destroy()
|
||||
var/turf/T = get_turf(src)
|
||||
. = ..()
|
||||
T.air_update_turf(TRUE)
|
||||
|
||||
/obj/structure/holosign/barrier/cyborg
|
||||
name = "Energy Field"
|
||||
desc = "A fragile energy field that blocks movement. Excels at blocking lethal projectiles."
|
||||
@@ -102,6 +97,44 @@
|
||||
if(istype(P, /obj/item/projectile/beam/disabler))
|
||||
take_damage(5, BRUTE, "melee", 1) //Disablers aren't harmful.
|
||||
|
||||
/obj/structure/holosign/barrier/medical
|
||||
name = "\improper PENLITE holobarrier"
|
||||
desc = "A holobarrier that uses biometrics to detect human viruses. Denies passing to personnel with easily-detected, malicious viruses. Good for quarantines."
|
||||
icon_state = "holo_medical"
|
||||
alpha = 125 //lazy :)
|
||||
layer = ABOVE_MOB_LAYER
|
||||
var/force_allaccess = FALSE
|
||||
var/buzzcd = 0
|
||||
|
||||
/obj/structure/holosign/barrier/medical/examine(mob/user)
|
||||
..()
|
||||
to_chat(user,"<span class='notice'>The biometric scanners are <b>[force_allaccess ? "off" : "on"]</b>.</span>")
|
||||
|
||||
/obj/structure/holosign/barrier/medical/CanPass(atom/movable/mover, turf/target)
|
||||
icon_state = "holo_medical"
|
||||
if(force_allaccess)
|
||||
return TRUE
|
||||
if(ishuman(mover))
|
||||
var/mob/living/carbon/human/sickboi = mover
|
||||
var/threat = sickboi.check_virus()
|
||||
switch(threat)
|
||||
if(DISEASE_SEVERITY_MINOR, DISEASE_SEVERITY_MEDIUM, DISEASE_SEVERITY_HARMFUL, DISEASE_SEVERITY_DANGEROUS, DISEASE_SEVERITY_BIOHAZARD)
|
||||
if(buzzcd < world.time)
|
||||
playsound(get_turf(src),'sound/machines/buzz-sigh.ogg',65,1,4)
|
||||
buzzcd = (world.time + 60)
|
||||
icon_state = "holo_medical-deny"
|
||||
return FALSE
|
||||
else
|
||||
return TRUE //nice or benign diseases!
|
||||
return TRUE
|
||||
|
||||
/obj/structure/holosign/barrier/medical/attack_hand(mob/living/user)
|
||||
if(CanPass(user) && user.a_intent == INTENT_HELP)
|
||||
force_allaccess = !force_allaccess
|
||||
to_chat(user, "<span class='warning'>You [force_allaccess ? "deactivate" : "activate"] the biometric scanners.</span>") //warning spans because you can make the station sick!
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/holosign/barrier/cyborg/hacked
|
||||
name = "Charged Energy Field"
|
||||
desc = "A powerful energy field that blocks movement. Energy arcs off it."
|
||||
@@ -125,7 +158,7 @@
|
||||
shockcd = TRUE
|
||||
addtimer(CALLBACK(src, .proc/cooldown), 5)
|
||||
|
||||
/obj/structure/holosign/barrier/cyborg/hacked/CollidedWith(atom/movable/AM)
|
||||
/obj/structure/holosign/barrier/cyborg/hacked/Bumped(atom/movable/AM)
|
||||
if(shockcd)
|
||||
return
|
||||
|
||||
@@ -135,4 +168,4 @@
|
||||
var/mob/living/M = AM
|
||||
M.electrocute_act(15,"Energy Barrier", safety=1)
|
||||
shockcd = TRUE
|
||||
addtimer(CALLBACK(src, .proc/cooldown), 5)
|
||||
addtimer(CALLBACK(src, .proc/cooldown), 5)
|
||||
@@ -162,4 +162,6 @@
|
||||
add_overlay("cart_replacer")
|
||||
if(signs)
|
||||
add_overlay("cart_sign[signs]")
|
||||
if(reagents.total_volume > 0)
|
||||
add_overlay("cart_water")
|
||||
|
||||
|
||||
@@ -208,7 +208,7 @@
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/gun_control/afterattack(atom/targeted_atom, mob/user, flag, params)
|
||||
..()
|
||||
. = ..()
|
||||
var/obj/machinery/manned_turret/E = user.buckled
|
||||
E.calculated_projectile_vars = calculate_projectile_angle_and_pixel_offsets(user, params)
|
||||
E.direction_track(user, targeted_atom)
|
||||
|
||||
@@ -30,17 +30,12 @@
|
||||
/obj/structure/mineral_door/ComponentInitialize()
|
||||
AddComponent(/datum/component/rad_insulation, RAD_MEDIUM_INSULATION)
|
||||
|
||||
/obj/structure/mineral_door/Destroy()
|
||||
density = FALSE
|
||||
air_update_turf(1)
|
||||
return ..()
|
||||
|
||||
/obj/structure/mineral_door/Move()
|
||||
var/turf/T = loc
|
||||
. = ..()
|
||||
move_update_air(T)
|
||||
|
||||
/obj/structure/mineral_door/CollidedWith(atom/movable/AM)
|
||||
/obj/structure/mineral_door/Bumped(atom/movable/AM)
|
||||
..()
|
||||
if(!state)
|
||||
return TryToSwitchState(AM)
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
|
||||
|
||||
|
||||
/obj/structure/mopbucket/New()
|
||||
/obj/structure/mopbucket/Initialize()
|
||||
. = ..()
|
||||
create_reagents(100)
|
||||
..()
|
||||
|
||||
/obj/structure/mopbucket/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/mop))
|
||||
@@ -20,5 +20,11 @@
|
||||
reagents.trans_to(I, 5)
|
||||
to_chat(user, "<span class='notice'>You wet [I] in [src].</span>")
|
||||
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
|
||||
update_icon()
|
||||
else
|
||||
return ..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/mopbucket/update_icon()
|
||||
cut_overlays()
|
||||
if(reagents.total_volume > 0)
|
||||
add_overlay("mopbucket_water")
|
||||
@@ -123,7 +123,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an
|
||||
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
|
||||
playsound(src, 'sound/effects/roll.ogg', 5, 1)
|
||||
var/turf/T = get_step(src, dir)
|
||||
connected.dir=dir
|
||||
connected.setDir(dir)
|
||||
for(var/atom/movable/AM in src)
|
||||
AM.forceMove(T)
|
||||
update_icon()
|
||||
@@ -256,10 +256,10 @@ GLOBAL_LIST_EMPTY(crematoriums)
|
||||
if (M.stat != DEAD)
|
||||
M.emote("scream")
|
||||
if(user)
|
||||
user.log_message("Cremated <b>[key_name(M)]</b>", INDIVIDUAL_ATTACK_LOG)
|
||||
log_attack("[key_name(user)] cremated [key_name(M)]")
|
||||
log_combat(user, M, "cremated")
|
||||
else
|
||||
log_attack("UNKNOWN cremated [key_name(M)]")
|
||||
M.log_message("was cremated", LOG_ATTACK)
|
||||
|
||||
M.death(1)
|
||||
if(M) //some animals get automatically deleted on death.
|
||||
M.ghostize()
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
to_chat(user, "<span class='notice'>[src] are no longer <i>screwed</i> to the floor, and the flaps can be <b>cut</b> apart.</span>")
|
||||
|
||||
/obj/structure/plasticflaps/screwdriver_act(mob/living/user, obj/item/W)
|
||||
if(..())
|
||||
return TRUE
|
||||
add_fingerprint(user)
|
||||
var/action = anchored ? "unscrews [src] from" : "screws [src] to"
|
||||
var/uraction = anchored ? "unscrew [src] from " : "screw [src] to"
|
||||
@@ -95,8 +97,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/plasticflaps/Initialize()
|
||||
. = ..()
|
||||
air_update_turf(TRUE)
|
||||
. = ..()
|
||||
air_update_turf(TRUE)
|
||||
|
||||
/obj/structure/plasticflaps/Destroy()
|
||||
var/atom/oldloc = loc
|
||||
|
||||
@@ -13,6 +13,7 @@ FLOOR SAFES
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT
|
||||
var/open = FALSE //is the safe open?
|
||||
var/tumbler_1_pos //the tumbler position- from 0 to 72
|
||||
var/tumbler_1_open //the tumbler position to open at- 0 to 72
|
||||
@@ -23,7 +24,6 @@ FLOOR SAFES
|
||||
var/maxspace = 24 //the maximum combined w_class of stuff in the safe
|
||||
var/explosion_count = 0 //Tough, but breakable
|
||||
|
||||
|
||||
/obj/structure/safe/New()
|
||||
..()
|
||||
tumbler_1_pos = rand(0, 71)
|
||||
@@ -61,32 +61,25 @@ FLOOR SAFES
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
|
||||
/obj/structure/safe/proc/decrement(num)
|
||||
num -= 1
|
||||
if(num < 0)
|
||||
num = 71
|
||||
return num
|
||||
|
||||
|
||||
/obj/structure/safe/proc/increment(num)
|
||||
num += 1
|
||||
if(num > 71)
|
||||
num = 0
|
||||
return num
|
||||
|
||||
|
||||
/obj/structure/safe/update_icon()
|
||||
if(open)
|
||||
icon_state = "[initial(icon_state)]-open"
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
|
||||
/obj/structure/safe/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
/obj/structure/safe/ui_interact(mob/user)
|
||||
user.set_machine(src)
|
||||
var/dat = "<center>"
|
||||
dat += "<a href='?src=[REF(src)];open=1'>[open ? "Close" : "Open"] [src]</a> | <a href='?src=[REF(src)];decrement=1'>-</a> [dial] <a href='?src=[REF(src)];increment=1'>+</a>"
|
||||
@@ -98,7 +91,6 @@ FLOOR SAFES
|
||||
dat += "</table></center>"
|
||||
user << browse("<html><head><title>[name]</title></head><body>[dat]</body></html>", "window=safe;size=350x300")
|
||||
|
||||
|
||||
/obj/structure/safe/Topic(href, href_list)
|
||||
if(!ishuman(usr))
|
||||
return
|
||||
|
||||
@@ -11,10 +11,6 @@
|
||||
anchored = TRUE
|
||||
var/deconstruction_state = SHOWCASE_CONSTRUCTED
|
||||
|
||||
/obj/structure/showcase/Initialize()
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, /datum.proc/AddComponent, /datum/component/beauty, 750), 0)
|
||||
|
||||
/obj/structure/showcase/fakeid
|
||||
name = "\improper CentCom identification console"
|
||||
desc = "You can use this to change ID's."
|
||||
|
||||
@@ -103,6 +103,7 @@
|
||||
var/sign_path = /obj/structure/sign/basic //the type of sign that will be created when placed on a turf
|
||||
|
||||
/obj/item/sign_backing/afterattack(atom/target, mob/user, proximity)
|
||||
. = ..()
|
||||
if(isturf(target) && proximity)
|
||||
var/turf/T = target
|
||||
user.visible_message("<span class='notice'>[user] fastens [src] to [T].</span>", \
|
||||
@@ -111,8 +112,6 @@
|
||||
var/obj/structure/sign/S = new sign_path(T)
|
||||
S.setDir(dir)
|
||||
qdel(src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/sign_backing/Move(atom/new_loc, direct = 0)
|
||||
// pulling, throwing, or conveying a sign backing does not rotate it
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
planchette = input("Choose the letter.", "Seance!") as null|anything in list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")
|
||||
if(!planchette || !Adjacent(M) || next_use > world.time)
|
||||
return
|
||||
add_logs(M, src, "picked a letter on", " which was \"[planchette]\".")
|
||||
M.log_message("picked a letter on [src], which was \"[planchette]\".")
|
||||
next_use = world.time + rand(30,50)
|
||||
lastuser = M.ckey
|
||||
//blind message is the same because not everyone brings night vision to seances
|
||||
|
||||
@@ -11,10 +11,6 @@
|
||||
CanAtmosPass = ATMOS_PASS_DENSITY
|
||||
|
||||
|
||||
/obj/structure/statue/Initialize()
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, /datum.proc/AddComponent, /datum/component/beauty, 1250), 0)
|
||||
|
||||
/obj/structure/statue/attackby(obj/item/W, mob/living/user, params)
|
||||
add_fingerprint(user)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
@@ -77,7 +73,7 @@
|
||||
radiate()
|
||||
return ..()
|
||||
|
||||
/obj/structure/statue/uranium/CollidedWith(atom/movable/AM)
|
||||
/obj/structure/statue/uranium/Bumped(atom/movable/AM)
|
||||
radiate()
|
||||
..()
|
||||
|
||||
@@ -117,8 +113,7 @@
|
||||
|
||||
/obj/structure/statue/plasma/bullet_act(obj/item/projectile/Proj)
|
||||
var/burn = FALSE
|
||||
if(!(Proj.nodamage) && Proj.damage_type == BURN)
|
||||
PlasmaBurn(2500)
|
||||
if(!(Proj.nodamage) && Proj.damage_type == BURN && !QDELETED(src))
|
||||
burn = TRUE
|
||||
if(burn)
|
||||
var/turf/T = get_turf(src)
|
||||
@@ -128,10 +123,11 @@
|
||||
else
|
||||
message_admins("Plasma statue ignited by [Proj]. No known firer, in [ADMIN_VERBOSEJMP(T)]")
|
||||
log_game("Plasma statue ignited by [Proj] in [AREACOORD(T)]. No known firer.")
|
||||
PlasmaBurn(2500)
|
||||
..()
|
||||
|
||||
/obj/structure/statue/plasma/attackby(obj/item/W, mob/user, params)
|
||||
if(W.is_hot() > 300)//If the temperature of the object is over 300, then ignite
|
||||
if(W.is_hot() > 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)]")
|
||||
@@ -140,6 +136,8 @@
|
||||
return ..()
|
||||
|
||||
/obj/structure/statue/plasma/proc/PlasmaBurn(exposed_temperature)
|
||||
if(QDELETED(src))
|
||||
return
|
||||
atmos_spawn_air("plasma=[oreAmount*10];TEMP=[exposed_temperature]")
|
||||
deconstruct(FALSE)
|
||||
|
||||
@@ -232,7 +230,7 @@
|
||||
name = "statue of a clown"
|
||||
icon_state = "clown"
|
||||
|
||||
/obj/structure/statue/bananium/CollidedWith(atom/movable/AM)
|
||||
/obj/structure/statue/bananium/Bumped(atom/movable/AM)
|
||||
honk()
|
||||
..()
|
||||
|
||||
|
||||
@@ -60,24 +60,31 @@
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/structure/table/attack_hand(mob/living/user)
|
||||
if(Adjacent(user) && user.pulling && isliving(user.pulling))
|
||||
var/mob/living/pushed_mob = user.pulling
|
||||
if(pushed_mob.buckled)
|
||||
to_chat(user, "<span class='warning'>[pushed_mob] is buckled to [pushed_mob.buckled]!</span>")
|
||||
return
|
||||
if(user.a_intent == INTENT_GRAB)
|
||||
if(user.grab_state < GRAB_AGGRESSIVE)
|
||||
to_chat(user, "<span class='warning'>You need a better grip to do that!</span>")
|
||||
if(Adjacent(user) && user.pulling)
|
||||
if(isliving(user.pulling))
|
||||
var/mob/living/pushed_mob = user.pulling
|
||||
if(pushed_mob.buckled)
|
||||
to_chat(user, "<span class='warning'>[pushed_mob] is buckled to [pushed_mob.buckled]!</span>")
|
||||
return
|
||||
tablepush(user, pushed_mob)
|
||||
if(user.a_intent == INTENT_HELP)
|
||||
pushed_mob.visible_message("<span class='notice'>[user] begins to place [pushed_mob] onto [src]...</span>", \
|
||||
"<span class='userdanger'>[user] begins to place [pushed_mob] onto [src]...</span>")
|
||||
if(do_after(user, 35, target = pushed_mob))
|
||||
tableplace(user, pushed_mob)
|
||||
else
|
||||
return
|
||||
user.stop_pulling()
|
||||
if(user.a_intent == INTENT_GRAB)
|
||||
if(user.grab_state < GRAB_AGGRESSIVE)
|
||||
to_chat(user, "<span class='warning'>You need a better grip to do that!</span>")
|
||||
return
|
||||
tablepush(user, pushed_mob)
|
||||
if(user.a_intent == INTENT_HELP)
|
||||
pushed_mob.visible_message("<span class='notice'>[user] begins to place [pushed_mob] onto [src]...</span>", \
|
||||
"<span class='userdanger'>[user] begins to place [pushed_mob] onto [src]...</span>")
|
||||
if(do_after(user, 35, target = pushed_mob))
|
||||
tableplace(user, pushed_mob)
|
||||
else
|
||||
return
|
||||
user.stop_pulling()
|
||||
else if(user.pulling.pass_flags & PASSTABLE)
|
||||
user.Move_Pulled(src)
|
||||
if (user.pulling.loc == loc)
|
||||
user.visible_message("<span class='notice'>[user] places [user.pulling] onto [src].</span>",
|
||||
"<span class='notice'>You place [user.pulling] onto [src].</span>")
|
||||
user.stop_pulling()
|
||||
return ..()
|
||||
|
||||
/obj/structure/table/attack_tk()
|
||||
@@ -105,14 +112,22 @@
|
||||
pushed_mob.update_canmove()
|
||||
pushed_mob.visible_message("<span class='notice'>[user] places [pushed_mob] onto [src].</span>", \
|
||||
"<span class='notice'>[user] places [pushed_mob] onto [src].</span>")
|
||||
add_logs(user, pushed_mob, "placed")
|
||||
log_combat(user, pushed_mob, "placed")
|
||||
|
||||
/obj/structure/table/proc/tablepush(mob/living/user, mob/living/pushed_mob)
|
||||
pushed_mob.forceMove(src.loc)
|
||||
var/added_passtable = FALSE
|
||||
if(!pushed_mob.pass_flags & PASSTABLE)
|
||||
added_passtable = TRUE
|
||||
pushed_mob.pass_flags |= PASSTABLE
|
||||
pushed_mob.Move(src.loc)
|
||||
if(added_passtable)
|
||||
pushed_mob.pass_flags &= ~PASSTABLE
|
||||
if(pushed_mob.loc != loc) //Something prevented the tabling
|
||||
return
|
||||
pushed_mob.Knockdown(40)
|
||||
pushed_mob.visible_message("<span class='danger'>[user] pushes [pushed_mob] onto [src].</span>", \
|
||||
"<span class='userdanger'>[user] pushes [pushed_mob] onto [src].</span>")
|
||||
add_logs(user, pushed_mob, "pushed")
|
||||
log_combat(user, pushed_mob, "pushed")
|
||||
if(!ishuman(pushed_mob))
|
||||
return
|
||||
var/mob/living/carbon/human/H = pushed_mob
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
/obj/structure/transit_tube/station/should_stop_pod(pod, from_dir)
|
||||
return 1
|
||||
|
||||
/obj/structure/transit_tube/station/CollidedWith(atom/movable/AM)
|
||||
/obj/structure/transit_tube/station/Bumped(atom/movable/AM)
|
||||
if(!pod_moving && open_status == STATION_TUBE_OPEN && ismob(AM) && AM.dir == boarding_dir)
|
||||
for(var/obj/structure/transit_tube_pod/pod in loc)
|
||||
if(!pod.moving)
|
||||
@@ -75,7 +75,7 @@
|
||||
if(do_after(user, 15, target = src))
|
||||
if(open_status == STATION_TUBE_OPEN && GM && user.grab_state >= GRAB_AGGRESSIVE && user.pulling == GM && !GM.buckled && !GM.has_buckled_mobs())
|
||||
GM.Knockdown(100)
|
||||
src.CollidedWith(GM)
|
||||
src.Bumped(GM)
|
||||
break
|
||||
else
|
||||
for(var/obj/structure/transit_tube_pod/pod in loc)
|
||||
|
||||
@@ -181,6 +181,8 @@
|
||||
return ..()
|
||||
|
||||
/obj/structure/urinal/screwdriver_act(mob/living/user, obj/item/I)
|
||||
if(..())
|
||||
return TRUE
|
||||
to_chat(user, "<span class='notice'>You start to [exposed ? "screw the cap back into place" : "unscrew the cap to the drain protector"]...</span>")
|
||||
playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
|
||||
if(I.use_tool(src, user, 20))
|
||||
@@ -238,6 +240,7 @@
|
||||
update_icon()
|
||||
add_fingerprint(M)
|
||||
if(on)
|
||||
START_PROCESSING(SSmachines, src)
|
||||
soundloop.start()
|
||||
wash_turf()
|
||||
for(var/atom/movable/G in loc)
|
||||
@@ -418,6 +421,8 @@
|
||||
else if(isobj(AM))
|
||||
wash_obj(AM)
|
||||
contamination_cleanse(AM)
|
||||
else
|
||||
return PROCESS_KILL
|
||||
|
||||
/obj/machinery/shower/deconstruct(disassembled = TRUE)
|
||||
new /obj/item/stack/sheet/metal (loc, 3)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
/obj/structure/windoor_assembly/New(loc, set_dir)
|
||||
..()
|
||||
if(set_dir)
|
||||
dir = set_dir
|
||||
setDir(set_dir)
|
||||
ini_dir = dir
|
||||
air_update_turf(1)
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
return FALSE
|
||||
return 1
|
||||
|
||||
/obj/structure/window/CheckExit(atom/movable/O as mob|obj, target)
|
||||
/obj/structure/window/CheckExit(atom/movable/O, turf/target)
|
||||
if(istype(O) && (O.pass_flags & PASSGLASS))
|
||||
return 1
|
||||
if(get_dir(O.loc, target) == dir)
|
||||
|
||||
Reference in New Issue
Block a user