diff --git a/code/datums/material_container.dm b/code/datums/material_container.dm index 2fa223fd1c2..56750520095 100644 --- a/code/datums/material_container.dm +++ b/code/datums/material_container.dm @@ -71,7 +71,7 @@ S.use(amt) return amt -/datum/material_container/proc/insert_item(obj/item/I) +/datum/material_container/proc/insert_item(obj/item/I, multiplier = 1) if(!I) return 0 if(istype(I,/obj/item/stack)) @@ -81,7 +81,7 @@ if(!material_amount || !has_space(material_amount)) return 0 - insert_materials(I) + insert_materials(I, multiplier) return material_amount /datum/material_container/proc/insert_materials(obj/item/I, multiplier = 1) //for internal usage only diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 9e4b3da49d0..60e6cd9f6ed 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -14,9 +14,7 @@ var/const/SAFETY_COOLDOWN = 100 var/blood = 0 var/eat_dir = WEST var/amount_produced = 1 - var/probability_mod = 1 - var/extra_materials = 0 - var/list/blacklist = list(/obj/item/pipe, /obj/item/pipe_meter, /obj/structure/disposalconstruct, /obj/item/weapon/reagent_containers, /obj/item/weapon/paper, /obj/item/stack/, /obj/item/weapon/pen, /obj/item/weapon/storage/, /obj/item/clothing/mask/cigarette) // Don't allow us to grind things we can poop out at 200 a second for free. + var/datum/material_container/materials /obj/machinery/recycler/New() // On us @@ -25,25 +23,20 @@ var/const/SAFETY_COOLDOWN = 100 component_parts += new /obj/item/weapon/circuitboard/recycler(null) component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + materials = new /datum/material_container(src, list(MAT_METAL=1, MAT_GLASS=1, MAT_SILVER=1, MAT_GOLD=1, MAT_DIAMOND=1, MAT_URANIUM=1, MAT_BANANIUM=1)) RefreshParts() update_icon() /obj/machinery/recycler/RefreshParts() var/amt_made = 0 - var/prob_mod = 0 + var/mat_mod = 0 for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) - amt_made = 1 * B.rating + mat_mod = 2 * B.rating + mat_mod *= 50000 for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) - if(M.rating > 1) - prob_mod = 2 * M.rating - else - prob_mod = 1 * M.rating - if(M.rating >= 3) - extra_materials = 1 - else - extra_materials = 0 - probability_mod = prob_mod - amount_produced = amt_made + amt_made = 25 * M.rating //% of materials salvaged + materials.max_amount = mat_mod + amount_produced = min(100, amt_made) /obj/machinery/recycler/examine(mob/user) ..() @@ -121,36 +114,18 @@ var/const/SAFETY_COOLDOWN = 100 /obj/machinery/recycler/proc/recycle(obj/item/I, sound = 1) I.loc = src.loc - if(is_type_in_list(I, blacklist)) - qdel(I) - if(sound) - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + if(!istype(I)) return - qdel(I) - if(prob(15 + probability_mod)) - var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal(loc) - M.amount = amount_produced - if(prob(10 + probability_mod)) - var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(loc) - G.amount = amount_produced - if(prob(2 + probability_mod)) - var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel(loc) - P.amount = amount_produced - if(prob(1 + probability_mod)) - var/obj/item/stack/sheet/rglass/R = new /obj/item/stack/sheet/rglass(loc) - R.amount = amount_produced - if(extra_materials) - if(prob(3 + probability_mod)) - var/obj/item/stack/sheet/mineral/gold/GS = new /obj/item/stack/sheet/mineral/gold(loc) - GS.amount = amount_produced - if(prob(2 + probability_mod)) - var/obj/item/stack/sheet/mineral/silver/S = new /obj/item/stack/sheet/mineral/silver(loc) - S.amount = amount_produced - if(prob(1 + probability_mod)) - var/obj/item/stack/sheet/mineral/bananium/B = new /obj/item/stack/sheet/mineral/bananium(loc) - B.amount = amount_produced + if(sound) playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + var/material_amount = materials.can_insert(I) + if(!material_amount) + qdel(I) + return + materials.insert_item(I, multiplier = (amount_produced / 100)) + qdel(I) + materials.retrieve_all() /obj/machinery/recycler/proc/stop(mob/living/L) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 30d0d6eba8a..b3e70dc81f7 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -6,7 +6,6 @@ unacidable = 1 /obj/effect/landmark/New() - ..() tag = text("landmark*[]", name) invisibility = 101 @@ -63,7 +62,6 @@ xeno_spawn += loc qdel(src) return - return 1 /obj/effect/landmark/Destroy() @@ -81,11 +79,10 @@ tag = "start*[name]" invisibility = 101 start_landmarks_list += src - return 1 -/obj/effect/landmark/start/Destroy() - . = ..() - start_landmarks_list -= src + +/obj/effect/landmark/start/Destroy() start_landmarks_list -= src + return ..() //Costume spawner landmarks @@ -242,7 +239,11 @@ /obj/effect/landmark/start/depsec/New() ..() - department_security_spawns |= src + department_security_spawns += src + +/obj/effect/landmark/start/depsec/Destroy() + department_security_spawns -= src + return ..() /obj/effect/landmark/start/depsec/supply name = "supply_sec" diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index 672e2304bd9..13e3c807a58 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -48,9 +48,6 @@ if(expansion) qdel(expansion) expansion = null - qdel(src) -//Easier to just call del() than this nonsense -// ya no, del() takes 0.8ds to run on avg. this takes less than 0.01 get_cameras() for(var/cam_tag in bugged_cameras) var/obj/machinery/camera/camera = bugged_cameras[cam_tag] diff --git a/code/game/objects/items/weapons/RPD.dm b/code/game/objects/items/weapons/RPD.dm index ea570f4257e..c747d60f4b8 100644 --- a/code/game/objects/items/weapons/RPD.dm +++ b/code/game/objects/items/weapons/RPD.dm @@ -160,6 +160,11 @@ var/global/list/RPD_recipes=list( spark_system.set_up(5, 0, src) spark_system.attach(src) +/obj/item/weapon/pipe_dispenser/Destroy() + qdel(spark_system) + spark_system = null + return ..() + /obj/item/weapon/pipe_dispenser/attack_self(mob/user) show_menu(user) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index e8775daf133..f1e868a9055 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -231,20 +231,16 @@ switch(severity) if(1.0) qdel(src) - return if(2.0) if (prob(70)) var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) new remains(loc) qdel(src) - return if(3.0) if (prob(40)) var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) new remains(loc) qdel(src) - return - return /obj/structure/girder/displaced name = "displaced girder" @@ -264,20 +260,16 @@ switch(severity) if(1.0) qdel(src) - return if(2.0) if (prob(30)) var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) new remains(loc) qdel(src) - return if(3.0) if (prob(5)) var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) new remains(loc) qdel(src) - return - return //////////////////////////////////////////// cult girder ////////////////////////////////////////////// @@ -330,16 +322,11 @@ switch(severity) if(1.0) qdel(src) - return if(2.0) - if (prob(30)) + if(prob(30)) new /obj/effect/decal/remains/human(loc) qdel(src) - return if(3.0) - if (prob(5)) + if(prob(5)) new /obj/effect/decal/remains/human(loc) qdel(src) - return - else - return diff --git a/code/game/say.dm b/code/game/say.dm index 18565d25950..cd52c422ba2 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -62,7 +62,7 @@ var/list/freqtospan = list( /atom/movable/proc/compose_job(atom/movable/speaker, message_langs, raw_message, radio_freq) return "" -/atom/movable/proc/say_quote(input, list/spans) +/atom/movable/proc/say_quote(input, list/spans=list()) if(!input) return "says, \"...\"" //not the best solution, but it will stop a large number of runtimes. The cause is somewhere in the Tcomms code var/ending = copytext(input, length(input)) diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index a13dd4471d4..7e5916f80f3 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -25,13 +25,6 @@ var/const/WIRE_RADIO_RECEIVE = 8 //Allows Pulsed(1) to call Activate() var/const/WIRE_RADIO_PULSE = 16 //Allows Pulse(1) to send a radio message -/obj/item/device/assembly/Destroy() - qdel(connected) - connected = null - qdel(holder) - holder = null - return ..() - /obj/item/device/assembly/proc/holder_movement() //Called when the holder is moved return @@ -58,7 +51,7 @@ //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs /obj/item/device/assembly/proc/pulsed(radio = 0) - if(holder && (wires & WIRE_RECEIVE)) + if(wires & WIRE_RECEIVE) spawn(0) activate() if(radio && (wires & WIRE_RADIO_RECEIVE)) diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index 2fad7c26a58..fbda7e852a4 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -12,6 +12,11 @@ sparks.set_up(2, 0, src) sparks.attach(src) +/obj/item/device/assembly/igniter/Destroy() + qdel(sparks) + sparks = null + return ..() + /obj/item/device/assembly/igniter/activate() if(!..()) return 0//Cooldown check diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 955d80d3f0e..91bff3cb8e5 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -602,6 +602,17 @@ var/global/list/rockTurfEdgeCache icon_state = "asteroid_dug" return +/turf/simulated/floor/plating/asteroid/singularity_pull(S, current_size) + if(current_size == STAGE_THREE) + if(prob(30)) + gets_dug() + else if(current_size == STAGE_FOUR) + if(prob(50)) + gets_dug() + else if(current_size >= STAGE_FIVE) + if(prob(90)) + gets_dug() + /turf/proc/updateMineralOverlays() src.overlays.Cut() diff --git a/code/modules/mob/living/carbon/alien/larva/update_icons.dm b/code/modules/mob/living/carbon/alien/larva/update_icons.dm index dba2774866a..b12a2b766b6 100644 --- a/code/modules/mob/living/carbon/alien/larva/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/larva/update_icons.dm @@ -24,5 +24,5 @@ /mob/living/carbon/alien/larva/update_transform() //All this is handled in update_icons() return update_icons() -/mob/living/carbon/larva/update_inv_handcuffed() +/mob/living/carbon/alien/larva/update_inv_handcuffed() return \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 73c816d0902..ffd853680ce 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -139,7 +139,11 @@ if(connected_ai) connected_ai.connected_robots -= src qdel(wires) + qdel(module) wires = null + module = null + camera = null + cell = null return ..() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index c594fbfdfbb..3efbcc3baed 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -10,6 +10,12 @@ var/obj/item/emag = null var/list/storages = list() +/obj/item/weapon/robot_module/Destroy() + modules.Cut() + emag = null + storages.Cut() + return ..() + /obj/item/weapon/robot_module/emp_act(severity) if(modules) for(var/obj/O in modules) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 1a42c2e82f2..ad30be604bf 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -28,6 +28,11 @@ var/law_change_counter = 0 +/mob/living/silicon/Destroy() + radio = null + aicamera = null + return ..() + /mob/living/silicon/contents_explosion(severity, target) return diff --git a/config/admins.txt b/config/admins.txt index 789c36cc02d..852f58e02b9 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -32,7 +32,7 @@ korphaeron = Game Master nodrak = Game Master carnwennan = Game Master ikarrus = Game Master -cheridan = Admin Observer +cheridan = Game Master giacomand = Game Master rockdtben = Game Master sieve = Game Master diff --git a/icons/obj/assemblies.dmi b/icons/obj/assemblies.dmi index b2bbe321a2f..38e14d414c9 100644 Binary files a/icons/obj/assemblies.dmi and b/icons/obj/assemblies.dmi differ