Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into findnreplace

# Conflicts:
#	code/game/machinery/recharger.dm
#	code/game/objects/items/devices/autopsy.dm
#	code/game/objects/items/devices/modkit.dm
#	code/game/objects/structures/lattice.dm
This commit is contained in:
Markolie
2017-04-14 18:15:12 +02:00
280 changed files with 2179 additions and 1512 deletions
+2 -1
View File
@@ -19,8 +19,9 @@
var/new_frequency = sanitize_frequency(rand(PUBLIC_LOW_FREQ, PUBLIC_HIGH_FREQ))
aSignal.set_frequency(new_frequency)
poi_list |= src
/obj/effect/anomaly/Destroy()
QDEL_NULL(aSignal)
poi_list.Remove(src)
return ..()
@@ -1,9 +1,8 @@
/obj/effect/decal/cleanable
var/list/random_icon_states = list()
var/targeted_by = null // Used so cleanbots can't claim a mess.
var/noscoop = 0 //if it has this, don't let it be scooped up
var/noclear = 0 //if it has this, don't delete it when its' scooped up
/obj/effect/decal/cleanable/proc/can_bloodcrawl_in()
return FALSE
+1 -3
View File
@@ -36,9 +36,7 @@
to_chat(user, "This is a [generation]\th generation [name]!")
/obj/structure/glowshroom/Destroy()
if(myseed)
qdel(myseed)
myseed = null
QDEL_NULL(myseed)
return ..()
/obj/structure/glowshroom/New(loc, obj/item/seeds/newseed, mutate_stats)
@@ -28,15 +28,13 @@
name = "probably a wall"
result = list(
/turf/simulated/wall = 9,
/obj/structure/falsewall = 1
)
/obj/structure/falsewall = 1)
/obj/effect/spawner/random_barrier/floor_probably
name = "probably a floor"
result = list(
/turf/simulated/floor/plasteel = 3,
/turf/simulated/wall = 1
)
/turf/simulated/wall = 1)
/obj/effect/spawner/random_barrier/obstruction
name = "obstruction"
@@ -44,12 +42,24 @@
/turf/simulated/wall = 1,
/obj/structure/falsewall = 1,
/obj/structure/barricade/wooden = 1,
/obj/machinery/door/airlock/welded = 1
)
/obj/machinery/door/airlock/welded = 1)
/obj/effect/spawner/random_barrier/possibly_welded_airlock
/obj/effect/spawner/random_barrier/possibly_welded_airlock // these have no access restrictions, so for internal maintenance only
name = "possibly welded airlock"
result = list(
/obj/machinery/door/airlock = 3,
/obj/machinery/door/airlock/welded = 1
)
/obj/machinery/door/airlock/welded = 1)
/obj/effect/spawner/random_spawners/grille_often
name = "grille often"
result = list(
/obj/structure/grille = 8,
/obj/structure/grille/broken = 4,
/turf/simulated/floor/plating = 2)
/obj/effect/spawner/random_spawners/grille_maybe
name = "grille maybe"
result = list(
/obj/structure/grille = 2,
/obj/structure/grille/broken = 2,
/turf/simulated/floor/plating = 5)
@@ -0,0 +1,110 @@
/obj/effect/spawner/random_spawners
name = "random spawners"
icon = 'icons/mob/screen_gen.dmi'
icon_state = "x2"
color = "#00FF00"
var/list/result = list(
/turf/simulated/floor/plasteel = 1,
/turf/simulated/floor/plating = 1,
/obj/effect/decal/cleanable/blood/splatter = 1,
/obj/effect/decal/cleanable/blood/oil = 1,
/obj/effect/decal/cleanable/fungus = 1)
// This needs to come before the initialization wave because
// the thing it creates might need to be initialized too
/obj/effect/spawner/random_spawners/New()
. = ..()
var/turf/T = get_turf(src)
if(!T)
log_runtime(EXCEPTION("Spawner placed in nullspace!"), src)
return
var/thing_to_place = pickweight(result)
if(ispath(thing_to_place, /turf))
T.ChangeTurf(thing_to_place)
else
new thing_to_place(T)
qdel(src)
/obj/effect/spawner/random_spawners/blood_maybe
name = "blood maybe"
result = list(
/turf/simulated/floor/plating = 20,
/obj/effect/decal/cleanable/blood/splatter = 1)
/obj/effect/spawner/random_spawners/blood_often
name = "blood often"
result = list(
/turf/simulated/floor/plating = 5,
/obj/effect/decal/cleanable/blood/splatter = 1)
/obj/effect/spawner/random_spawners/oil_maybe
name = "oil maybe"
result = list(
/turf/simulated/floor/plating = 20,
/obj/effect/decal/cleanable/blood/oil = 1)
/obj/effect/spawner/random_spawners/oil_maybe
name = "oil often"
result = list(
/turf/simulated/floor/plating = 5,
/obj/effect/decal/cleanable/blood/oil = 1)
/obj/effect/spawner/random_spawners/wall_rusted_probably
name = "rusted wall probably"
result = list(
/turf/simulated/wall = 2,
/turf/simulated/wall/rust = 7)
/obj/effect/spawner/random_spawners/wall_rusted_maybe
name = "rusted wall maybe"
result = list(
/turf/simulated/wall = 7,
/turf/simulated/wall/rust = 1)
/obj/effect/spawner/random_spawners/cobweb_left_frequent
name = "cobweb left frequent"
result = list(
/turf/simulated/floor/plating = 1,
/obj/effect/decal/cleanable/cobweb = 1)
/obj/effect/spawner/random_spawners/cobweb_right_frequent
name = "cobweb right frequent"
result = list(
/turf/simulated/floor/plating = 1,
/obj/effect/decal/cleanable/cobweb2 = 1)
/obj/effect/spawner/random_spawners/cobweb_left_rare
name = "cobweb left rare"
result = list(
/turf/simulated/floor/plating = 10,
/obj/effect/decal/cleanable/cobweb = 1)
/obj/effect/spawner/random_spawners/cobweb_right_rare
name = "cobweb right rare"
result = list(
/turf/simulated/floor/plating = 10,
/obj/effect/decal/cleanable/cobweb2 = 1)
/obj/effect/spawner/random_spawners/dirt_frequent
name = "dirt frequent"
result = list(
/turf/simulated/floor/plating = 1,
/obj/effect/decal/cleanable/dirt = 1)
/obj/effect/spawner/random_spawners/dirt_rare
name = "dirt rare"
result = list(
/turf/simulated/floor/plating = 10,
/obj/effect/decal/cleanable/dirt = 1)
/obj/effect/spawner/random_spawners/fungus_maybe
name = "rusted wall maybe"
result = list(
/turf/simulated/wall = 7,
/obj/effect/decal/cleanable/fungus = 1)
/obj/effect/spawner/random_spawners/fungus_probably
name = "rusted wall maybe"
result = list(
/turf/simulated/wall = 1,
/obj/effect/decal/cleanable/fungus = 7)
+9 -2
View File
@@ -6,6 +6,11 @@
anchored = 1
density = 0
var/health = 15
var/master_commander = null
/obj/structure/spider/Destroy()
master_commander = null
return ..()
//similar to weeds, but only barfed out by nurses manually
/obj/structure/spider/ex_act(severity)
@@ -78,7 +83,6 @@
var/amount_grown = 0
var/player_spiders = 0
var/faction = list()
var/master_commander = null
/obj/structure/spider/eggcluster/New()
pixel_x = rand(3,-3)
@@ -110,7 +114,6 @@
var/travelling_in_vent = 0
var/player_spiders = 0
var/faction = list()
var/master_commander = null
var/selecting_player = 0
/obj/structure/spider/spiderling/New()
@@ -118,6 +121,10 @@
pixel_y = rand(6,-6)
processing_objects.Add(src)
/obj/structure/spider/spiderling/Destroy()
entry_vent = null
return ..()
/obj/structure/spider/spiderling/Bump(atom/user)
if(istype(user, /obj/structure/table))
src.loc = user.loc
+1 -3
View File
@@ -19,9 +19,7 @@
ID.access = get_region_accesses(region_access)
/obj/item/weapon/door_remote/Destroy()
if(ID)
qdel(ID)
ID = null
QDEL_NULL(ID)
return ..()
/obj/item/weapon/door_remote/attack_self(mob/user)
+5
View File
@@ -8,6 +8,11 @@
var/mob/owner = null // Carp doesn't attack owner, set when using in hand
var/owned = 1 // Boolean, no owner to begin with
/obj/item/toy/carpplushie/dehy_carp/Destroy()
owner = null
return ..()
// Attack self
/obj/item/toy/carpplushie/dehy_carp/attack_self(mob/user as mob)
src.add_fingerprint(user) // Anyone can add their fingerprints to it with this
+5 -10
View File
@@ -66,12 +66,8 @@
if(O.trace_chemicals[V] > 0 && !chemtraces.Find(V))
chemtraces += V
/obj/item/weapon/autopsy_scanner/verb/print_data()
set name = "Print Data"
set category = "Object"
set src in oview(1)
if(usr.incapacitated())
/obj/item/weapon/autopsy_scanner/attack_self(mob/user)
if(!wdata.len && !chemtraces.len)
return
var/scan_data = ""
@@ -142,18 +138,17 @@
for(var/chemID in chemtraces)
scan_data += chemID
scan_data += "<br>"
usr.visible_message("<span class='warning'>[src] rattles and prints out a sheet of paper.</span>")
user.visible_message("<span class='warning'>[src] rattles and prints out a sheet of paper.</span>")
playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1)
sleep(10)
var/obj/item/weapon/paper/P = new(usr.loc)
var/obj/item/weapon/paper/P = new(user.loc)
P.name = "Autopsy Data ([target_name])"
P.info = "<tt>[scan_data]</tt>"
P.overlays += "paper_words"
usr.put_in_hands(P)
user.put_in_hands(P)
/obj/item/weapon/autopsy_scanner/attack(mob/living/carbon/human/M, mob/living/carbon/user)
if(!istype(M))
+1 -1
View File
@@ -152,7 +152,7 @@
if(M.stat == CONSCIOUS)
M.mind_initialize() //give them a mind datum if they don't have one.
var/resisted
if(!isloyal(M))
if(!ismindshielded(M))
if(user.mind in ticker.mode.head_revolutionaries)
if(ticker.mode.add_revolutionary(M.mind))
times_used -- //Flashes less likely to burn out for headrevs when used for conversion
+1 -2
View File
@@ -17,8 +17,7 @@
song.instrumentExt = "ogg"
/obj/item/device/guitar/Destroy()
qdel(song)
song = null
QDEL_NULL(song)
return ..()
/obj/item/device/guitar/attack_self(mob/user as mob)
@@ -35,9 +35,7 @@
pointer_icon_state = pick("red_laser","green_laser","blue_laser","purple_laser")
/obj/item/device/laser_pointer/Destroy()
if(diode)
qdel(diode)
diode = null
QDEL_NULL(diode)
return ..()
/obj/item/device/laser_pointer/upgraded/New()
-87
View File
@@ -1,87 +0,0 @@
#define MODKIT_HELMET 1
#define MODKIT_SUIT 2
#define MODKIT_FULL 3
/obj/item/device/modkit
name = "hardsuit modification kit"
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user."
icon_state = "modkit"
var/parts = MODKIT_FULL
var/target_species = "Human"
var/list/permitted_types = list(
/obj/item/clothing/head/helmet/space/hardsuit,
/obj/item/clothing/suit/space/hardsuit
)
/obj/item/device/modkit/afterattack(obj/item/O, mob/user as mob, proximity)
if(!proximity)
return
if(!target_species)
return //it shouldn't be null, okay?
if(!parts)
to_chat(user, "<span class='warning'>This kit has no parts for this modification left.</span>")
user.unEquip(src)
qdel(src)
return
var/allowed = 0
for(var/permitted_type in permitted_types)
if(istype(O, permitted_type))
allowed = 1
var/obj/item/clothing/I = O
if(!istype(I) || !allowed)
to_chat(user, "<span class='notice'>[src] is unable to modify that.</span>")
return
var/excluding = ("exclude" in I.species_restricted)
var/in_list = (target_species in I.species_restricted)
if(excluding ^ in_list)
to_chat(user, "<span class='notice'>[I] is already modified.</span>")
return
if(!isturf(O.loc))
to_chat(user, "<span class='warning'>[O] must be safely placed on the ground for modification.</span>")
return
playsound(user.loc, O.usesound, 100, 1)
user.visible_message("<span class='warning'>[user] opens \the [src] and modifies \the [O].</span>","<span class='warning'>You open \the [src] and modify \the [O].</span>")
I.refit_for_species(target_species)
if(istype(I, /obj/item/clothing/head/helmet))
parts &= ~MODKIT_HELMET
if(istype(I, /obj/item/clothing/suit))
parts &= ~MODKIT_SUIT
if(!parts)
user.unEquip(src)
qdel(src)
/obj/item/device/modkit/examine(mob/user)
..(user)
to_chat(user, "It looks as though it modifies hardsuits to fit [target_species] users.")
/obj/item/device/modkit/tajaran
name = "Tajaran hardsuit modification kit"
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user. This one looks like it's meant for Tajaran."
target_species = "Tajaran"
/obj/item/device/modkit/unathi
name = "Unathi hardsuit modification kit"
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Unathi."
target_species = "Unathi"
/obj/item/device/modkit/skrell
name = "Skrell hardsuit modification kit"
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Skrell."
target_species = "Skrell"
/obj/item/device/modkit/vox
name = "Vox hardsuit modification kit"
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Vox."
target_species = "Vox"
+5 -2
View File
@@ -32,6 +32,9 @@
// Syndicate device disguised as a multitool; it will turn red when an AI camera is nearby.
/obj/item/device/multitool/Destroy()
buffer = null
return ..()
/obj/item/device/multitool/ai_detect
var/track_cooldown = 0
@@ -56,7 +59,7 @@
multitool_detect()
icon_state = "[initial(icon_state)][detect_state]"
track_cooldown = world.time + track_delay
/obj/item/device/multitool/ai_detect/proc/multitool_detect()
var/turf/our_turf = get_turf(src)
for(var/mob/living/silicon/ai/AI in ai_list)
@@ -76,7 +79,7 @@
if(get_dist(our_turf, detect_turf) < rangewarning)
detect_state = PROXIMITY_NEAR
break
/obj/item/device/multitool/ai_detect/admin
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors. Has a strange tag that says 'Grief in Safety'" //What else should I say for a meme item?
track_delay = 5
+2 -4
View File
@@ -12,7 +12,7 @@
var/looking_for_personality = 0
var/mob/living/silicon/pai/pai
var/list/faction = list("neutral") // The factions the pAI will inherit from the card
/obj/item/device/paicard/syndicate
name = "syndicate personal AI device"
faction = list("syndicate")
@@ -33,9 +33,7 @@
pai.ghostize()
qdel(pai)
pai = null
if(radio)
qdel(radio)
radio = null
QDEL_NULL(radio)
return ..()
/obj/item/device/paicard/attack_self(mob/user)
+7 -5
View File
@@ -13,7 +13,7 @@
materials = list(MAT_METAL=750)
origin_tech = "powerstorage=3;syndicate=5"
var/drain_rate = 1600000 // amount of power to drain per tick
var/apc_drain_rate = 5000 // Max. amount drained from single APC. In Watts.
var/apc_drain_rate = 50 // Max. amount drained from single APC. In Watts.
var/dissipation_rate = 20000 // Passive dissipation of drained power. In Watts.
var/power_drained = 0 // Amount of power drained.
var/max_power = 1e10 // Detonation point.
@@ -27,6 +27,8 @@
/obj/item/device/powersink/Destroy()
processing_objects.Remove(src)
processing_power_items.Remove(src)
PN = null
attached = null
return ..()
/obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user)
@@ -110,10 +112,10 @@
if(istype(T.master, /obj/machinery/power/apc))
var/obj/machinery/power/apc/A = T.master
if(A.operating && A.cell)
var/cur_charge = A.cell.charge / CELLRATE
var/drain_val = min(apc_drain_rate, cur_charge)
A.cell.use(drain_val * CELLRATE)
drained += drain_val
A.cell.charge = max(0, A.cell.charge - apc_drain_rate)
drained += apc_drain_rate
if(A.charging == 2) // If the cell was full
A.charging = 1 // It's no longer full
power_drained += drained
return 1
@@ -32,12 +32,8 @@
recalculateChannels(1)
/obj/item/device/radio/headset/Destroy()
if(keyslot1)
qdel(keyslot1)
if(keyslot2)
qdel(keyslot2)
keyslot1 = null
keyslot2 = null
QDEL_NULL(keyslot1)
QDEL_NULL(keyslot2)
return ..()
/obj/item/device/radio/headset/list_channels(var/mob/user)
@@ -63,7 +59,7 @@
return RADIO_CONNECTION_FAIL
return ..()
/obj/item/device/radio/headset/is_listening()
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
@@ -71,7 +67,7 @@
return ..()
else if(isanimal(loc) || isAI(loc))
return ..()
return FALSE
/obj/item/device/radio/headset/alt
+8 -10
View File
@@ -30,7 +30,6 @@ var/global/list/default_medbay_channels = list(
var/frequency = PUB_FREQ //common chat
var/traitor_frequency = 0 //tune to frequency to unlock traitor supplies
var/canhear_range = 3 // the range which mobs can hear this radio from
var/obj/item/device/radio/patch_link = null
var/datum/wires/radio/wires = null
var/b_stat = 0
var/broadcasting = 0
@@ -54,14 +53,14 @@ var/global/list/default_medbay_channels = list(
var/list/internal_channels
/obj/item/device/radio
var/datum/radio_frequency/radio_connection
var/list/datum/radio_frequency/secure_radio_connections = new
proc/set_frequency(new_frequency)
radio_controller.remove_object(src, frequency)
frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
/obj/item/device/radio/proc/set_frequency(new_frequency)
radio_controller.remove_object(src, frequency)
frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
/obj/item/device/radio/New()
@@ -74,14 +73,13 @@ var/global/list/default_medbay_channels = list(
global_radios |= src
/obj/item/device/radio/Destroy()
qdel(wires)
wires = null
QDEL_NULL(wires)
if(radio_controller)
radio_controller.remove_object(src, frequency)
for(var/ch_name in channels)
radio_controller.remove_object(src, radiochannels[ch_name])
patch_link = null
global_radios -= src
follow_target = null
return ..()
@@ -271,7 +269,7 @@ var/global/list/default_medbay_channels = list(
/mob/living/automatedannouncer/Destroy()
if(lifetime_timer)
deltimer(lifetime_timer)
..()
return ..()
/mob/living/automatedannouncer/proc/autocleanup()
log_runtime(EXCEPTION("An announcer somehow managed to outlive the radio! Deleting!"), src, list("Message: '[message]'"))
@@ -12,8 +12,7 @@
crew_monitor = new(src)
/obj/item/device/sensor_device/Destroy()
qdel(crew_monitor)
crew_monitor = null
QDEL_NULL(crew_monitor)
return ..()
/obj/item/device/sensor_device/attack_self(mob/user as mob)
@@ -21,9 +21,7 @@
update_icon()
/obj/item/device/taperecorder/Destroy()
if(mytape)
qdel(mytape)
mytape = null
QDEL_NULL(mytape)
return ..()
/obj/item/device/taperecorder/examine(mob/user)
@@ -13,15 +13,9 @@
origin_tech = "materials=1;engineering=1"
/obj/item/device/transfer_valve/Destroy()
if(tank_one)
qdel(tank_one)
tank_one = null
if(tank_two)
qdel(tank_two)
tank_two = null
if(attached_device)
qdel(attached_device)
attached_device = null
QDEL_NULL(tank_one)
QDEL_NULL(tank_two)
QDEL_NULL(attached_device)
attacher = null
return ..()
+1 -2
View File
@@ -18,8 +18,7 @@
song.instrumentExt = "ogg"
/obj/item/device/violin/Destroy()
qdel(song)
song = null
QDEL_NULL(song)
return ..()
/obj/item/device/violin/initialize()
+1 -3
View File
@@ -12,9 +12,7 @@
var/datum/gas_mixture/air_contents = null
/obj/item/latexballon/Destroy()
if(air_contents)
qdel(air_contents)
air_contents = null
QDEL_NULL(air_contents)
return ..()
/obj/item/latexballon/proc/blow(obj/item/weapon/tank/tank, mob/user)
+1 -2
View File
@@ -59,8 +59,7 @@ RCD
return
/obj/item/weapon/rcd/Destroy()
qdel(spark_system)
spark_system = null
QDEL_NULL(spark_system)
rcd_list -= src
return ..()
+1 -3
View File
@@ -62,9 +62,7 @@
to_chat(user, "<span class='info'>It contains [loaded.amount]/[max_amount] cables.</span>")
/obj/item/weapon/twohanded/rcl/Destroy()
if(loaded)
qdel(loaded)
loaded = null
QDEL_NULL(loaded)
last = null
active = 0
return ..()
+12 -2
View File
@@ -46,8 +46,7 @@ LIGHTERS ARE IN LIGHTERS.DM
reagents.set_reacting(FALSE) // so it doesn't react until you light it
/obj/item/clothing/mask/cigarette/Destroy()
if(reagents)
qdel(reagents)
QDEL_NULL(reagents)
processing_objects -= src
return ..()
@@ -94,6 +93,17 @@ LIGHTERS ARE IN LIGHTERS.DM
else if(istype(W, /obj/item/device/assembly/igniter))
light("<span class='notice'>[user] fiddles with [W], and manages to light their [name].</span>")
else if(istype(W, /obj/item/weapon/gun/magic/wand/fireball))
var/obj/item/weapon/gun/magic/wand/fireball/F = W
if(F.charges)
if(prob(50) || user.mind.assigned_role == "Wizard")
light("<span class='notice'>Holy shit, did [user] just manage to light their [name] with [W], with only moderate eyebrow singing?</span>")
else
to_chat(user, "<span class='warning'>Unsure which end of the wand is which, [user] fails to light [name] with [W].</span>")
explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2)
F.charges--
//can't think of any other way to update the overlays :<
user.update_inv_wear_mask()
user.update_inv_l_hand()
+2 -6
View File
@@ -172,12 +172,8 @@
if(on)
var/M = get(paddles, /mob)
remove_paddles(M)
if(paddles)
qdel(paddles)
paddles = null
if(bcell)
qdel(bcell)
bcell = null
QDEL_NULL(paddles)
QDEL_NULL(bcell)
return ..()
/obj/item/weapon/defibrillator/proc/deductcharge(var/chrgdeductamt)
@@ -5,7 +5,7 @@
icon_state = "dnainjector"
item_state = "dnainjector"
var/block = 0
var/datum/dna2/record/buf=null
var/datum/dna2/record/buf = null
throw_speed = 3
throw_range = 5
w_class = 1
@@ -26,6 +26,10 @@
buf.dna.ResetSE()
SetValue(value)
/obj/item/weapon/dnainjector/Destroy()
QDEL_NULL(buf)
return ..()
/obj/item/weapon/dnainjector/proc/GetRealBlock(var/selblock)
if(selblock==0)
return block
@@ -18,10 +18,9 @@
..()
/obj/item/weapon/grenade/plastic/Destroy()
qdel(nadeassembly)
nadeassembly = null
QDEL_NULL(nadeassembly)
target = null
..()
return ..()
/obj/item/weapon/grenade/plastic/attackby(obj/item/I, mob/user, params)
if(!nadeassembly && istype(I, /obj/item/device/assembly_holder))
@@ -25,15 +25,10 @@
/obj/item/weapon/flamethrower/Destroy()
if(weldtool)
qdel(weldtool)
weldtool = null
if(igniter)
qdel(igniter)
igniter = null
if(ptank)
qdel(ptank)
ptank = null
QDEL_NULL(weldtool)
QDEL_NULL(igniter)
QDEL_NULL(ptank)
previousturf = null
return ..()
@@ -13,6 +13,10 @@
var/improvised = 0
var/garrote_time
/obj/item/weapon/twohanded/garrote/Destroy()
strangling = null
return ..()
/obj/item/weapon/twohanded/garrote/update_icon()
if(strangling) // If we're strangling someone we want our icon to stay wielded
icon_state = "garrot_unwrap"
@@ -26,6 +26,12 @@
payload_name += " " // formatting, ignore me
update_icon()
/obj/item/weapon/grenade/chem_grenade/Destroy()
QDEL_NULL(nadeassembly)
for(var/thing in beakers)
qdel(thing)
beakers.Cut()
return ..()
/obj/item/weapon/grenade/chem_grenade/examine(mob/user)
..(user)
@@ -13,6 +13,12 @@
var/list/signs = list()
var/max_signs = 20
/obj/item/weapon/holosign_creator/Destroy()
for(var/sign in signs)
qdel(sign)
signs.Cut()
return ..()
/obj/item/weapon/holosign_creator/afterattack(atom/target, mob/user, flag)
if(flag)
var/turf/T = get_turf(target)
@@ -592,7 +592,7 @@
to_chat(missionary, "<span class='warning'>Your faith is strong, but their mind is already slaved to someone else's ideals. Perhaps an inquisition would reveal more...</span>")
faith -= 25 //same faith cost as losing sight of them mid-conversion, but did you just find someone who can lead you to a fellow traitor?
return
if(isloyal(target))
if(ismindshielded(target))
if(prob(20)) //loyalty implants typically overpower this, but you CAN get lucky and convert still (20% chance of success)
faith -= 125 //yes, this puts it negative. it's gonna take longer to recharge if you manage to convert a one of these people to balance the new power you gained through them
to_chat(missionary, "<span class='notice'>Through sheer willpower, you overcome their closed mind and rally [target] to your cause! You may need a bit longer than usual before your faith is fully recharged, and they won't remain loyal to you for long ...</span>")
@@ -0,0 +1,46 @@
/obj/item/weapon/implant/abductor
name = "recall implant"
desc = "Returns you to the mothership."
icon = 'icons/obj/abductor.dmi'
icon_state = "implant"
activated = 1
origin_tech = "materials=2;biotech=7;magnets=4;bluespace=4;abductor=5"
var/obj/machinery/abductor/pad/home
var/cooldown = 30
var/total_cooldown = 30
/obj/item/weapon/implant/abductor/activate()
if(cooldown == total_cooldown)
home.Retrieve(imp_in,1)
cooldown = 0
processing_objects.Add(src)
else
to_chat(imp_in, "<span class='warning'>You must wait [(total_cooldown - cooldown)*2] seconds to use [src] again!</span>")
/obj/item/weapon/implant/abductor/process()
if(cooldown < total_cooldown)
cooldown++
if(cooldown == total_cooldown)
processing_objects.Remove(src)
/obj/item/weapon/implant/abductor/implant(mob/source, mob/user)
if(..())
var/obj/machinery/abductor/console/console
if(ishuman(source))
var/mob/living/carbon/human/H = source
if(H.get_species() == "Abductor")
console = get_team_console(H.mind.abductor.team)
home = console.pad
if(!home)
console = get_team_console(pick(1, 2, 3, 4))
home = console.pad
return 1
/obj/item/weapon/implant/abductor/proc/get_team_console(var/team)
var/obj/machinery/abductor/console/console
for(var/obj/machinery/abductor/console/c in abductor_equipment)
if(c.team == team)
console = c
break
return console
@@ -1,10 +1,10 @@
/obj/item/weapon/implant/loyalty
/obj/item/weapon/implant/mindshield
name = "mindshield implant"
desc = "Stops people messing with your mind."
origin_tech = "materials=2;biotech=4;programming=4"
activated = 0
/obj/item/weapon/implant/loyalty/get_data()
/obj/item/weapon/implant/mindshield/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Nanotrasen Employee Management Implant<BR>
<b>Life:</b> Ten years.<BR>
@@ -17,7 +17,7 @@
return dat
/obj/item/weapon/implant/loyalty/implant(mob/target)
/obj/item/weapon/implant/mindshield/implant(mob/target)
if(..())
if(target.mind in ticker.mode.head_revolutionaries || is_shadow_or_thrall(target))
target.visible_message("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel the corporate tendrils of Nanotrasen try to invade your mind!</span>")
@@ -33,7 +33,7 @@
return 1
return 0
/obj/item/weapon/implant/loyalty/removed(mob/target, var/silent = 0)
/obj/item/weapon/implant/mindshield/removed(mob/target, var/silent = 0)
if(..())
if(target.stat != DEAD && !silent)
to_chat(target, "<span class='boldnotice'>You feel a sense of liberation as Nanotrasen's grip on your mind fades away.</span>")
@@ -41,19 +41,19 @@
return 0
/obj/item/weapon/implanter/loyalty
/obj/item/weapon/implanter/mindshield
name = "implanter (mindshield)"
/obj/item/weapon/implanter/loyalty/New()
imp = new /obj/item/weapon/implant/loyalty(src)
/obj/item/weapon/implanter/mindshield/New()
imp = new /obj/item/weapon/implant/mindshield(src)
..()
update_icon()
/obj/item/weapon/implantcase/loyalty
/obj/item/weapon/implantcase/mindshield
name = "implant case - 'mindshield'"
desc = "A glass case containing a mindshield implant."
/obj/item/weapon/implantcase/loyalty/New()
imp = new /obj/item/weapon/implant/loyalty(src)
/obj/item/weapon/implantcase/mindshield/New()
imp = new /obj/item/weapon/implant/mindshield(src)
..()
@@ -38,7 +38,7 @@
removed(M)
qdel(src)
return -1
if(isloyal(H))
if(ismindshielded(H))
H.visible_message("<span class='warning'>[H] seems to resist the implant!</span>", "<span class='warning'>You feel a strange sensation in your head that quickly dissipates.</span>")
removed(M)
qdel(src)
@@ -11,7 +11,7 @@
var/ready = 1
var/malfunction = 0
var/list/obj/item/weapon/implant/loyalty/implant_list = list()
var/list/obj/item/weapon/implant/mindshield/implant_list = list()
var/max_implants = 5
var/injection_cooldown = 600
var/replenish_cooldown = 6000
@@ -122,9 +122,9 @@
if(!istype(M, /mob/living/carbon))
return
if(!implant_list.len) return
for(var/obj/item/weapon/implant/loyalty/imp in implant_list)
for(var/obj/item/weapon/implant/mindshield/imp in implant_list)
if(!imp) continue
if(istype(imp, /obj/item/weapon/implant/loyalty))
if(istype(imp, /obj/item/weapon/implant/mindshield))
M.visible_message("<span class='warning'>[M] has been implanted by the [src.name].</span>")
if(imp.implant(M))
@@ -135,7 +135,7 @@
/obj/machinery/implantchair/add_implants()
for(var/i=0, i<src.max_implants, i++)
var/obj/item/weapon/implant/loyalty/I = new /obj/item/weapon/implant/loyalty(src)
var/obj/item/weapon/implant/mindshield/I = new /obj/item/weapon/implant/mindshield(src)
implant_list += I
return
+2 -6
View File
@@ -27,12 +27,8 @@
icon_state = "[initial(icon_state)][armed]"
/obj/item/weapon/restraints/legcuffs/beartrap/Destroy()
if(IED)
qdel(IED)
IED = null
if(sig)
qdel(sig)
sig = null
QDEL_NULL(IED)
QDEL_NULL(sig)
return ..()
/obj/item/weapon/restraints/legcuffs/beartrap/suicide_act(mob/user)
@@ -109,7 +109,7 @@
if(R.cell)
var/obj/item/weapon/stock_parts/cell/C = R.cell
if(active && !(C.use(hitcost)))
attack_self()
attack_self(R)
to_chat(R, "<span class='notice'>It's out of charge!</span>")
return
..()
+1
View File
@@ -18,6 +18,7 @@
var/mopspeed = 30
/obj/item/weapon/mop/New()
..()
create_reagents(mopcap)
janitorial_equipment += src
@@ -17,9 +17,7 @@
var/pressureSetting = 1 //How powerful the cannon is - higher pressure = more gas but more powerful throws
/obj/item/weapon/pneumatic_cannon/Destroy()
if(tank)
qdel(tank)
tank = null
QDEL_NULL(tank)
for(var/obj/item/I in loadedItems)
qdel(I)
loadedItems.Cut()
+30 -25
View File
@@ -5,18 +5,17 @@
icon_state = "cell"
item_state = "cell"
origin_tech = "powerstorage=1"
force = 5.0
throwforce = 5.0
throw_speed = 3
force = 5
throwforce = 5
throw_speed = 2
throw_range = 5
w_class = 2
w_class = WEIGHT_CLASS_SMALL
var/charge = 0 // note %age conveted to actual charge in New
var/maxcharge = 10000
rating = 1
var/maxcharge = 1000
materials = list(MAT_METAL=700, MAT_GLASS=50)
var/rigged = 0 // true if rigged to explode
var/chargerate = 100 //how much power is given every tick in a recharger
var/minor_fault = 0 //If not 100% reliable, it will build up faults.
var/chargerate = 1000 //how much power is given every tick in a recharger
var/self_recharge = 0 //does it self recharge, over time, or not?
var/grown_battery = FALSE // If it's a grown that acts as a battery, add a wire overlay to it.
@@ -62,10 +61,9 @@
/obj/item/weapon/stock_parts/cell/crap
name = "\improper Nanotrasen brand rechargable AA battery"
desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT
origin_tech = null
maxcharge = 5000
rating = 2
maxcharge = 500
materials = list(MAT_GLASS=40)
rating = 2
/obj/item/weapon/stock_parts/cell/crap/empty/New()
..()
@@ -74,9 +72,9 @@
/obj/item/weapon/stock_parts/cell/secborg
name = "\improper Security borg rechargable D battery"
origin_tech = null
maxcharge = 6000 //6000 max charge / 1000 charge per shot = six shots
rating = 2.5
maxcharge = 600 //600 max charge / 100 charge per shot = six shots
materials = list(MAT_GLASS=40)
rating = 2.5
/obj/item/weapon/stock_parts/cell/secborg/empty/New()
..()
@@ -86,11 +84,18 @@
name = "high-capacity power cell"
origin_tech = "powerstorage=2"
icon_state = "hcell"
maxcharge = 15000
rating = 3
maxcharge = 10000
materials = list(MAT_GLASS=60)
rating = 3
chargerate = 1500
/obj/item/weapon/stock_parts/cell/high/plus
name = "high-capacity power cell+"
desc = "Where did these come from?"
icon_state = "h+cell"
maxcharge = 15000
chargerate = 2250
/obj/item/weapon/stock_parts/cell/high/empty/New()
..()
charge = 0
@@ -100,7 +105,7 @@
origin_tech = "powerstorage=5"
icon_state = "scell"
maxcharge = 20000
materials = list(MAT_GLASS=70)
materials = list(MAT_GLASS=300)
rating = 4
chargerate = 2000
@@ -113,8 +118,8 @@
origin_tech = "powerstorage=6"
icon_state = "hpcell"
maxcharge = 30000
materials = list(MAT_GLASS=400)
rating = 5
materials = list(MAT_GLASS=80)
chargerate = 3000
/obj/item/weapon/stock_parts/cell/hyper/empty/New()
@@ -126,7 +131,7 @@
origin_tech = "powerstorage=7"
icon_state = "bscell"
maxcharge = 40000
materials = list(MAT_GLASS=80)
materials = list(MAT_GLASS=600)
rating = 6
chargerate = 4000
@@ -139,8 +144,8 @@
icon_state = "icell"
origin_tech = null
maxcharge = 30000
materials = list(MAT_GLASS=1000)
rating = 6
materials = list(MAT_GLASS=80)
chargerate = 30000
/obj/item/weapon/stock_parts/cell/infinite/use()
@@ -153,7 +158,7 @@
icon_state = "potato"
origin_tech = "powerstorage=1;biotech=1"
charge = 100
maxcharge = 3000
maxcharge = 300
materials = list()
rating = 1
minor_fault = 1
@@ -170,17 +175,17 @@
/obj/item/weapon/stock_parts/cell/pulse //200 pulse shots
name = "pulse rifle power cell"
maxcharge = 400000
maxcharge = 40000
rating = 3
chargerate = 1500
/obj/item/weapon/stock_parts/cell/pulse/carbine
/obj/item/weapon/stock_parts/cell/pulse/carbine //25 pulse shots
name = "pulse carbine power cell"
maxcharge = 40000
maxcharge = 5000
/obj/item/weapon/stock_parts/cell/pulse/pistol
/obj/item/weapon/stock_parts/cell/pulse/pistol //10 pulse shots
name = "pulse pistol power cell"
maxcharge = 16000
maxcharge = 2000
/obj/item/weapon/stock_parts/cell/ninja
name = "spider-clan power cell"
@@ -192,7 +197,7 @@
/obj/item/weapon/stock_parts/cell/emproof
name = "\improper EMP-proof cell"
desc = "An EMP-proof cell."
maxcharge = 5000
maxcharge = 500
rating = 2
/obj/item/weapon/stock_parts/cell/emproof/empty/New()
+1 -3
View File
@@ -17,9 +17,7 @@
/obj/item/weapon/melee/powerfist/Destroy()
if(tank)
qdel(tank)
tank = null
QDEL_NULL(tank)
return ..()
/obj/item/weapon/melee/powerfist/examine(mob/user)
@@ -186,7 +186,7 @@
/obj/item/weapon/storage/fancy/cigarettes/Destroy()
qdel(reagents)
QDEL_NULL(reagents)
return ..()
@@ -80,16 +80,16 @@
max_combined_w_class = 4 //The sum of the w_classes of all the items in this storage item.
storage_slots = 1
/obj/item/weapon/storage/lockbox/loyalty
/obj/item/weapon/storage/lockbox/mindshield
name = "Lockbox (Mindshield Implants)"
req_access = list(access_security)
/obj/item/weapon/storage/lockbox/loyalty/New()
/obj/item/weapon/storage/lockbox/mindshield/New()
..()
new /obj/item/weapon/implantcase/loyalty(src)
new /obj/item/weapon/implantcase/loyalty(src)
new /obj/item/weapon/implantcase/loyalty(src)
new /obj/item/weapon/implanter/loyalty(src)
new /obj/item/weapon/implantcase/mindshield(src)
new /obj/item/weapon/implantcase/mindshield(src)
new /obj/item/weapon/implantcase/mindshield(src)
new /obj/item/weapon/implanter/mindshield(src)
/obj/item/weapon/storage/lockbox/clusterbang
name = "lockbox (clusterbang)"
@@ -454,8 +454,8 @@
for(var/obj/O in contents)
O.mouse_opacity = initial(O.mouse_opacity)
qdel(boxes)
qdel(closer)
QDEL_NULL(boxes)
QDEL_NULL(closer)
return ..()
/obj/item/weapon/storage/emp_act(severity)
+14 -15
View File
@@ -2,6 +2,7 @@
name = "stunbaton"
desc = "A stun baton for incapacitating people with."
icon_state = "stunbaton"
var/base_icon = "stunbaton"
item_state = "baton"
slot_flags = SLOT_BELT
force = 10
@@ -12,7 +13,7 @@
var/stunforce = 7
var/status = 0
var/obj/item/weapon/stock_parts/cell/high/bcell = null
var/hitcost = 1500
var/hitcost = 1000
/obj/item/weapon/melee/baton/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.</span>")
@@ -24,9 +25,7 @@
return
/obj/item/weapon/melee/baton/Destroy()
if(bcell)
qdel(bcell)
bcell = null
QDEL_NULL(bcell)
return ..()
/obj/item/weapon/melee/baton/loaded/New() //this one starts with a cell pre-installed.
@@ -48,11 +47,11 @@
/obj/item/weapon/melee/baton/update_icon()
if(status)
icon_state = "[initial(name)]_active"
icon_state = "[base_icon]_active"
else if(!bcell)
icon_state = "[initial(name)]_nocell"
icon_state = "[base_icon]_nocell"
else
icon_state = "[initial(name)]"
icon_state = "[base_icon]"
/obj/item/weapon/melee/baton/examine(mob/user)
..(user)
@@ -184,28 +183,28 @@
return 1
..()
//secborg stun baton module
/obj/item/weapon/melee/baton/loaded/robot
hitcost = 1000
//Makeshift stun baton. Replacement for stun gloves.
/obj/item/weapon/melee/baton/cattleprod
name = "stunprod"
desc = "An improvised stun baton."
icon_state = "stunprod_nocell"
base_icon = "stunprod"
item_state = "prod"
w_class = 3
force = 3
throwforce = 5
stunforce = 5
hitcost = 3750
hitcost = 2000
slot_flags = SLOT_BACK
var/obj/item/device/assembly/igniter/sparkler = 0
var/obj/item/device/assembly/igniter/sparkler = null
/obj/item/weapon/melee/baton/cattleprod/New()
..()
sparkler = new (src)
sparkler = new(src)
/obj/item/weapon/melee/baton/cattleprod/Destroy()
QDEL_NULL(sparkler)
return ..()
/obj/item/weapon/melee/baton/cattleprod/baton_stun()
if(sparkler.activate())
@@ -19,8 +19,7 @@
ion_trail.set_up(src)
/obj/item/weapon/tank/jetpack/Destroy()
qdel(ion_trail)
ion_trail = null
QDEL_NULL(ion_trail)
return ..()
/obj/item/weapon/tank/jetpack/ui_action_click(mob/user, actiontype)
@@ -82,7 +81,7 @@
var/datum/gas_mixture/removed = air_contents.remove(num)
if(removed.total_moles() < 0.005)
turn_off()
turn_off()
return 0
var/turf/T = get_turf(user)
@@ -33,9 +33,7 @@
return
/obj/item/weapon/tank/Destroy()
if(air_contents)
qdel(air_contents)
air_contents = null
QDEL_NULL(air_contents)
processing_objects.Remove(src)
+2 -1
View File
@@ -2,6 +2,7 @@
name = "teleprod"
desc = "A prod with a bluespace crystal on the end. The crystal doesn't look too fun to touch."
icon_state = "teleprod_nocell"
base_icon = "teleprod"
item_state = "teleprod"
origin_tech = "combat=2;bluespace=4;materials=3"
@@ -15,4 +16,4 @@
deductcharge(hitcost)
do_teleport(user, get_turf(user), 50)//honk honk
else if(iscarbon(M) && !M.anchored)
do_teleport(M, get_turf(M), 15)
do_teleport(M, get_turf(M), 15)
+3
View File
@@ -19,6 +19,9 @@
burntime = 15
var/obj/item/weapon/canvas/painting = null
/obj/structure/easel/Destroy()
QDEL_NULL(painting)
return ..()
//Adding canvases
/obj/structure/easel/attackby(var/obj/item/I, var/mob/user, params)
@@ -112,7 +112,7 @@
new /obj/item/clothing/head/HoS(src)
new /obj/item/clothing/head/HoS/beret(src)
new /obj/item/clothing/glasses/hud/security/sunglasses(src)
new /obj/item/weapon/storage/lockbox/loyalty(src)
new /obj/item/weapon/storage/lockbox/mindshield(src)
new /obj/item/weapon/storage/box/flashbangs(src)
new /obj/item/clothing/mask/gas/sechailer/hos(src)
new /obj/item/weapon/shield/riot/tele(src)
+6 -2
View File
@@ -22,6 +22,11 @@ var/global/list/captain_display_cases = list()
var/obj/item/device/assembly/prox_sensor/sensor = null
var/state = DISPLAYCASE_FRAME_CIRCUIT
/obj/structure/displaycase_frame/Destroy()
QDEL_NULL(circuit)
QDEL_NULL(sensor)
return ..()
/obj/structure/displaycase_frame/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
var/pstate = state
var/turf/T = get_turf(src)
@@ -116,8 +121,7 @@ var/global/list/captain_display_cases = list()
/obj/structure/displaycase/Destroy()
dump()
qdel(circuit)
circuit = null
QDEL_NULL(circuit)
return ..()
/obj/structure/displaycase/captains_laser/Destroy()
@@ -17,6 +17,10 @@
/obj/structure/door_assembly/New()
update_state()
/obj/structure/door_assembly/Destroy()
QDEL_NULL(electronics)
return ..()
/obj/structure/door_assembly/door_assembly_com
base_icon_state = "com"
base_name = "Command Airlock"
+11
View File
@@ -14,6 +14,17 @@
var/obj/item/weapon/storage/toolbox/emergency/myredtoolbox = null
var/obj/item/taperoll/engineering/myengitape = null
/obj/structure/engineeringcart/Destroy()
QDEL_NULL(myglass)
QDEL_NULL(mymetal)
QDEL_NULL(myplasteel)
QDEL_NULL(myflashlight)
QDEL_NULL(mybluetoolbox)
QDEL_NULL(myyellowtoolbox)
QDEL_NULL(myredtoolbox)
QDEL_NULL(myengitape)
return ..()
/obj/structure/engineeringcart/proc/put_in_cart(obj/item/I, mob/user)
user.drop_item()
I.loc = src
@@ -8,6 +8,9 @@
var/obj/item/weapon/extinguisher/has_extinguisher = new/obj/item/weapon/extinguisher
var/opened = 0
/obj/structure/extinguisher_cabinet/Destroy()
QDEL_NULL(has_extinguisher)
return ..()
/obj/structure/extinguisher_cabinet/attackby(obj/item/O, mob/user, params)
if(isrobot(user) || isalien(user))
+5 -1
View File
@@ -19,12 +19,16 @@
/obj/structure/janitorialcart/New()
..()
create_reagents(100)
janitorial_equipment += src
/obj/structure/janitorialcart/Destroy()
janitorial_equipment -= src
QDEL_NULL(mybag)
QDEL_NULL(mymop)
QDEL_NULL(myspray)
QDEL_NULL(myreplacer)
return ..()
/obj/structure/janitorialcart/proc/wet_mop(obj/item/weapon/mop, mob/user)
+1 -1
View File
@@ -76,7 +76,7 @@
return attack_hand(user)
/obj/structure/ladder/dive_point/buoy
name = "diving point bouy"
name = "diving point buoy"
desc = "A buoy marking the location of an underwater dive area."
icon = 'icons/misc/beach.dmi'
icon_state = "buoy"
+3 -5
View File
@@ -50,7 +50,6 @@
return
/obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob, params)
if(istype(C, /obj/item/stack/tile/plasteel) || istype(C, /obj/item/stack/rods))
var/turf/T = get_turf(src)
T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead
@@ -58,11 +57,10 @@
if(istype(C, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = C
if(WT.remove_fuel(0, user))
to_chat(user, "<span class='notice'>Slicing lattice joints ...</span>")
new /obj/item/stack/rods(src.loc)
qdel(src)
to_chat(user, "<span class='notice'>Slicing lattice joints...</span>")
new /obj/item/stack/rods(src.loc)
qdel(src)
return
/obj/structure/lattice/proc/updateOverlays()
//if(!(istype(src.loc, /turf/space)))
@@ -8,6 +8,7 @@
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
/obj/structure/mopbucket/New()
..()
create_reagents(100)
janitorial_equipment += src
+4 -8
View File
@@ -160,9 +160,7 @@
return
/obj/structure/morgue/Destroy()
if(connected)
qdel(connected)
connected = null
QDEL_NULL(connected)
return ..()
/obj/structure/morgue/container_resist(var/mob/living/L)
@@ -405,9 +403,7 @@
return
/obj/structure/crematorium/Destroy()
if(connected)
qdel(connected)
connected = null
QDEL_NULL(connected)
return ..()
/obj/structure/crematorium/container_resist(var/mob/living/L)
@@ -471,7 +467,7 @@
connected.connected = null
connected = null
return ..()
// Crematorium switch
/obj/machinery/crema_switch
desc = "Burn baby burn!"
@@ -484,7 +480,7 @@
var/area/area = null
var/otherarea = null
var/id = 1
/obj/machinery/crema_switch/attack_ghost(mob/user)
if(user.can_advanced_admin_interact())
return attack_hand(user)
+1 -2
View File
@@ -281,8 +281,7 @@
icon_state = "piano"
/obj/structure/piano/Destroy()
qdel(song)
song = null
QDEL_NULL(song)
return ..()
/obj/structure/piano/initialize()
+38 -35
View File
@@ -8,45 +8,48 @@
flags = CONDUCT
var/obj/item/target/pinned_target // the current pinned target
Move()
..()
// Move the pinned target along with the stake
if(pinned_target in view(3, src))
pinned_target.loc = loc
/obj/structure/target_stake/Destroy()
QDEL_NULL(pinned_target)
return ..()
else // Sanity check: if the pinned target can't be found in immediate view
pinned_target = null
density = 1
/obj/structure/target_stake/Move()
..()
// Move the pinned target along with the stake
if(pinned_target in view(3, src))
pinned_target.loc = loc
attackby(obj/item/W as obj, mob/user as mob, params)
// Putting objects on the stake. Most importantly, targets
if(pinned_target)
return // get rid of that pinned target first!
else // Sanity check: if the pinned target can't be found in immediate view
pinned_target = null
density = 1
if(istype(W, /obj/item/target))
density = 0
W.density = 1
user.drop_item(src)
W.loc = loc
W.layer = 3.1
pinned_target = W
to_chat(user, "You slide the target into the stake.")
return
/obj/structure/target_stake/attackby(obj/item/W, mob/user, params)
// Putting objects on the stake. Most importantly, targets
if(pinned_target)
return // get rid of that pinned target first!
attack_hand(mob/user as mob)
// taking pinned targets off!
if(pinned_target)
density = 1
pinned_target.density = 0
pinned_target.layer = OBJ_LAYER
if(istype(W, /obj/item/target))
density = 0
W.density = 1
user.drop_item(src)
W.loc = loc
W.layer = 3.1
pinned_target = W
to_chat(user, "You slide the target into the stake.")
pinned_target.loc = user.loc
if(ishuman(user))
if(!user.get_active_hand())
user.put_in_hands(pinned_target)
to_chat(user, "You take the target out of the stake.")
else
pinned_target.loc = get_turf(user)
/obj/structure/target_stake/attack_hand(mob/user)
// taking pinned targets off!
if(pinned_target)
density = 1
pinned_target.density = 0
pinned_target.layer = OBJ_LAYER
pinned_target.loc = user.loc
if(ishuman(user))
if(!user.get_active_hand())
user.put_in_hands(pinned_target)
to_chat(user, "You take the target out of the stake.")
else
pinned_target.loc = get_turf(user)
to_chat(user, "You take the target out of the stake.")
pinned_target = null
pinned_target = null
@@ -14,9 +14,13 @@
/obj/structure/toilet/New()
..()
open = round(rand(0, 1))
update_icon()
/obj/structure/toilet/Destroy()
swirlie = null
return ..()
/obj/structure/toilet/attack_hand(mob/living/user)
if(swirlie)
@@ -34,6 +34,7 @@ obj/structure/windoor_assembly/New(dir=NORTH)
obj/structure/windoor_assembly/Destroy()
density = 0
QDEL_NULL(electronics)
air_update_turf(1)
return ..()