Game folder

This commit is contained in:
Poojawa
2018-09-11 04:06:45 -05:00
parent b6430559e9
commit 8b9ef1e400
270 changed files with 3120 additions and 2523 deletions
+3 -3
View File
@@ -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
+9 -2
View File
@@ -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
+10 -14
View File
@@ -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!
+1 -1
View File
@@ -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)
+3 -1
View File
@@ -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)
-3
View File
@@ -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
+3
View File
@@ -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>",
+2 -1
View File
@@ -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)
+3 -3
View File
@@ -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
+40 -7
View File
@@ -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)
+2
View File
@@ -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)
+9 -3
View File
@@ -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")
+4 -4
View File
@@ -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()
+4 -2
View File
@@ -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
+2 -10
View File
@@ -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
-4
View File
@@ -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."
+1 -2
View File
@@ -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
+1 -1
View File
@@ -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
+7 -9
View File
@@ -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()
..()
+35 -20
View File
@@ -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)
+1 -1
View File
@@ -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)