diff --git a/baystation12.dme b/baystation12.dme index acba0a7b7f9..4b84b15aa88 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -79,6 +79,7 @@ #include "code\controllers\_DynamicAreaLighting_TG.dm" #include "code\controllers\configuration.dm" #include "code\controllers\failsafe.dm" +#include "code\controllers\garbage.dm" #include "code\controllers\lighting_controller.dm" #include "code\controllers\master_controller.dm" #include "code\controllers\shuttle_controller.dm" diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm index f4aa409c45d..4b54a943773 100644 --- a/code/ATMOSPHERICS/components/portables_connector.dm +++ b/code/ATMOSPHERICS/components/portables_connector.dm @@ -154,4 +154,4 @@ "\blue You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe(loc, make_from=src) - del(src) + qdel(src) diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 330e39481bf..2573366b222 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -90,6 +90,9 @@ if(welded) return 0 + // New GC does this sometimes + if(!loc) return + var/datum/gas_mixture/environment = loc.return_air() var/environment_pressure = environment.return_pressure() diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index ea32b9432ff..917d165a125 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -107,6 +107,8 @@ //broadcast_status() if(!on) return 0 + // New GC does this sometimes + if(!loc) return var/datum/gas_mixture/environment = loc.return_air() diff --git a/code/ATMOSPHERICS/datum_pipe_network.dm b/code/ATMOSPHERICS/datum_pipe_network.dm index bff2d0ee5ee..5e731cd8d62 100644 --- a/code/ATMOSPHERICS/datum_pipe_network.dm +++ b/code/ATMOSPHERICS/datum_pipe_network.dm @@ -30,7 +30,7 @@ datum/pipe_network //Notes: Assuming that members will add themselves to appropriate roster in network_expand() if(!start_normal) - del(src) + qdel(src) start_normal.network_expand(src, reference) @@ -39,7 +39,7 @@ datum/pipe_network if((normal_members.len>0)||(line_members.len>0)) pipe_networks += src else - del(src) + qdel(src) proc/merge(datum/pipe_network/giver) if(giver==src) return 0 diff --git a/code/ATMOSPHERICS/he_pipes.dm b/code/ATMOSPHERICS/he_pipes.dm index 259b70b633f..a14fb1e1289 100644 --- a/code/ATMOSPHERICS/he_pipes.dm +++ b/code/ATMOSPHERICS/he_pipes.dm @@ -94,7 +94,7 @@ var/have_node2 = node2?1:0 icon_state = "exposed[have_node1][have_node2]" if(!node1&&!node2) - del(src) + qdel(src) /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/initialize() for(var/obj/machinery/atmospherics/target in get_step(src,initialize_directions)) diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index d2ca131f4cb..e6736b466f5 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -164,7 +164,7 @@ obj/machinery/atmospherics/pipe var/datum/effect/effect/system/harmless_smoke_spread/smoke = new smoke.set_up(1,0, src.loc, 0) smoke.start() - del(src) + qdel(src) proc/normalize_dir() if(dir==3) @@ -202,7 +202,7 @@ obj/machinery/atmospherics/pipe else if(!node1&&!node2) - del(src) //TODO: silent deleting looks weird + qdel(src) //TODO: silent deleting looks weird var/have_node1 = node1?1:0 var/have_node2 = node2?1:0 icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]" @@ -540,7 +540,6 @@ obj/machinery/atmospherics/pipe dir = SOUTH initialize_directions = SOUTH - var/build_killswitch = 1 var/obj/machinery/atmospherics/node1 @@ -740,7 +739,7 @@ obj/machinery/atmospherics/pipe icon_state = "manifold_[connected]_[unconnected]" if(!connected) - del(src) + qdel(src) return @@ -998,7 +997,7 @@ obj/machinery/atmospherics/pipe overlays += new/image(con,dir=8) if(!node1 && !node2 && !node3 && !node4) - del(src) + qdel(src) return initialize() @@ -1228,4 +1227,4 @@ obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/u if (meter.target == src) new /obj/item/pipe_meter(T) del(meter) - del(src) + qdel(src) diff --git a/code/controllers/garbage.dm b/code/controllers/garbage.dm new file mode 100644 index 00000000000..6ef53e355eb --- /dev/null +++ b/code/controllers/garbage.dm @@ -0,0 +1,70 @@ + +#define GC_COLLECTIONS_PER_TICK 100 +var/global/datum/controller/garbage_collector/garbage +var/global/list/uncollectable_vars=list( + "alpha", + "bestF", + "bounds", + "bound_height", + "bound_width", + "ckey", + "color", + "contents", + "gender", + "key", + //"loc", + "locs", + "luminosity", + "parent", + "parent_type", + "step_size", + "glide_size", + "step_x", + "step_y", + "step_z", + "tag", + "type", + "vars", + "verbs", + "x", + "y", + "z", +) +/datum/controller/garbage_collector + var/list/queue=list() + var/waiting=0 + var/turf/trashbin=null + + New() + trashbin=locate(0,0,CENTCOMM_Z) + + proc/AddTrash(var/atom/movable/A) + if(!A) + return + A.loc=trashbin + queue.Add(A) + waiting++ + + proc/Pop() + var/atom/movable/A = queue[1] + if(!A) return + if(!istype(A,/atom/movable)) + testing("GC given a [A.type].") + del(A) + return + for(var/vname in A.vars) + if(vname in uncollectable_vars) + continue + //testing("Unsetting [vname] in [A.type]!") + A.vars[vname]=null + A.loc=null + queue.Remove(A) + + proc/process() + for(var/i=0;iThe barricade is blown apart!") - del(src) + qdel(src) return if(2.0) src.health -= 25 @@ -105,7 +105,7 @@ for reference: new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) - del(src) + qdel(src) return meteorhit() @@ -269,4 +269,4 @@ for reference: explosion(src.loc,-1,-1,0) if(src) - del(src) \ No newline at end of file + qdel(src) \ No newline at end of file diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index a7295736afa..035dbf742fa 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -172,10 +172,10 @@ /obj/machinery/door/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) if(2.0) if(prob(25)) - del(src) + qdel(src) if(3.0) if(prob(80)) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 5442248986a..fe24dcd79aa 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -160,13 +160,13 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) if(2.0) if (prob(50)) - del(src) + qdel(src) if(3.0) if (prob(5)) - del(src) + qdel(src) return /obj/machinery/hologram/blob_act() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 89a380f1cb3..0a3bd75000d 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -140,15 +140,15 @@ Class Procs: /obj/machinery/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(50)) - del(src) + qdel(src) return if(3.0) if (prob(25)) - del(src) + qdel(src) return else return diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 2833c0fa580..7b91b95eb14 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -152,12 +152,12 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co /obj/machinery/newscaster/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) src.isbroken=1 if(prob(50)) - del(src) + qdel(src) else src.update_icon() //can't place it above the return and outside the if-else. or we might get runtimes of null.update_icon() if(prob(50)) goes in. return diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 8592bc6ce97..262bdacb995 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -406,7 +406,7 @@ Status: []
"}, /obj/machinery/porta_turret/ex_act(severity) if(severity >= 3) // turret dies if an explosion touches it! - del(src) + qdel(src) else src.die() @@ -418,7 +418,7 @@ Status: []
"}, invisibility=0 src.spark_system.start() // creates some sparks because they look cool src.density=1 - del(cover) // deletes the cover - no need on keeping it there! + qdel(cover) // deletes the cover - no need on keeping it there! diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 826fafcf1b6..a0b2b20ebee 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -92,13 +92,13 @@ switch(severity) if(1.0) if (prob(75)) - del(src) + qdel(src) if(2.0) if (prob(50)) - del(src) + qdel(src) if(3.0) if (prob(25)) - del(src) + qdel(src) return /obj/machinery/shield/emp_act(severity) @@ -164,7 +164,7 @@ /obj/machinery/shieldgen/Del() for(var/obj/machinery/shield/shield_tile in deployed_shields) - del(shield_tile) + qdel(shield_tile) ..() diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index b23ea160cb2..ec282f5096f 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -78,12 +78,12 @@ if(1.0) if(prob(50)) src.dump_everything() //So suits dont survive all the time - del(src) + qdel(src) return if(2.0) if(prob(50)) src.dump_everything() - del(src) + qdel(src) return else return diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm index d0bcdbb3bef..ee400989874 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -301,7 +301,7 @@ sleep(3) flick("explosion", src) spawn(13) - del(src) + qdel(src) /obj/machinery/turretid name = "turret deactivation control" diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index ca01bfca19a..bed2f78b663 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -78,11 +78,11 @@ /obj/machinery/vending/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(50)) - del(src) + qdel(src) return if(3.0) if(prob(25)) diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index e9303f0c605..d1d9c8d0eba 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -23,7 +23,7 @@ /obj/effect/decal/mecha_wreckage/ex_act(severity) if(severity < 2) spawn - del src + qdel(src) return /obj/effect/decal/mecha_wreckage/bullet_act(var/obj/item/projectile/Proj) diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 60f392c57ea..21d39aec1b8 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -58,7 +58,7 @@ /obj/effect/alien/resin/proc/healthcheck() if(health <=0) density = 0 - del(src) + qdel(src) return /obj/effect/alien/resin/bullet_act(var/obj/item/projectile/Proj) @@ -255,13 +255,13 @@ Alien plants should do something if theres a lot of poison /obj/effect/alien/weeds/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) if(2.0) if (prob(50)) - del(src) + qdel(src) if(3.0) if (prob(5)) - del(src) + qdel(src) return /obj/effect/alien/weeds/attackby(var/obj/item/weapon/W, var/mob/user) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index df8ce5328c6..f046ab3a867 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -1005,7 +1005,7 @@ steam.start() -- spawns the effect ex_act(severity) - del(src) + qdel(src) blob_act() del(src) diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index f7f4cd8b482..bf799d43e04 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -143,15 +143,15 @@ /obj/effect/glowshroom/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(50)) - del(src) + qdel(src) return if(3.0) if (prob(5)) - del(src) + qdel(src) return else return diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index a8fb8912331..84914a5cf48 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -11,13 +11,13 @@ /obj/effect/spider/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) if(2.0) if (prob(50)) - del(src) + qdel(src) if(3.0) if (prob(5)) - del(src) + qdel(src) return /obj/effect/spider/attackby(var/obj/item/weapon/W, var/mob/user) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 2f2c3a5dbd0..6eb4c0bafed 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -46,15 +46,15 @@ /obj/item/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(50)) - del(src) + qdel(src) return if(3.0) if (prob(5)) - del(src) + qdel(src) return else return diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index 6e1c608cb2f..0a5bb26ad83 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -30,10 +30,10 @@ burst() switch(severity) if (1) - del(src) + qdel(src) if (2) if (prob(50)) - del(src) + qdel(src) /obj/item/latexballon/bullet_act() burst() diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 594c95b6c80..59d70343d76 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -8,11 +8,11 @@ obj/structure/blob_act() obj/structure/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if(prob(50)) - del(src) + qdel(src) return if(3.0) return diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index f49433d6afc..8f44cdc4cce 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -141,19 +141,19 @@ for(var/atom/movable/A as mob|obj in src)//pulls everything out of the locker and hits it with an explosion A.loc = src.loc A.ex_act(severity++) - del(src) + qdel(src) if(2) if(prob(50)) for (var/atom/movable/A as mob|obj in src) A.loc = src.loc A.ex_act(severity++) - del(src) + qdel(src) if(3) if(prob(5)) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc A.ex_act(severity++) - del(src) + qdel(src) /obj/structure/closet/bullet_act(var/obj/item/projectile/Proj) health -= Proj.damage diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 861d4f614ac..8170bfae2ab 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -99,17 +99,17 @@ if(1.0) for(var/obj/O in src.contents) del(O) - del(src) + qdel(src) return if(2.0) for(var/obj/O in src.contents) if(prob(50)) del(O) - del(src) + qdel(src) return if(3.0) if (prob(50)) - del(src) + qdel(src) return else return @@ -448,4 +448,4 @@ // new /obj/item/weapon/weedspray(src) // new /obj/item/weapon/pestspray(src) // new /obj/item/weapon/pestspray(src) -// new /obj/item/weapon/pestspray(src) \ No newline at end of file +// new /obj/item/weapon/pestspray(src) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 11712a7f4c2..b05a91facfa 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -38,7 +38,7 @@ new /obj/item/weapon/shard( src.loc ) if (occupant) dump() - del(src) + qdel(src) if (2) if (prob(50)) src.health -= 15 diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index bde37f03f78..3b91708adaa 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -184,19 +184,19 @@ ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(30)) var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) new remains(loc) - del(src) + qdel(src) return if(3.0) if (prob(5)) var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) new remains(loc) - del(src) + qdel(src) return else return @@ -245,17 +245,17 @@ ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(30)) new /obj/effect/decal/remains/human(loc) - del(src) + qdel(src) return if(3.0) if (prob(5)) new /obj/effect/decal/remains/human(loc) - del(src) + qdel(src) return else return \ No newline at end of file diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index b6c1017a67f..d75b227d72f 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -40,13 +40,13 @@ /obj/structure/grille/ex_act(severity) - del(src) + qdel(src) /obj/structure/grille/blob_act() - del(src) + qdel(src) /obj/structure/grille/meteorhit(var/obj/M) - del(src) + qdel(src) /obj/structure/grille/Bumped(atom/user) diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm index f75833dcad5..467cac7b6c8 100644 --- a/code/game/objects/structures/lamarr_cage.dm +++ b/code/game/objects/structures/lamarr_cage.dm @@ -15,7 +15,7 @@ if (1) new /obj/item/weapon/shard( src.loc ) Break() - del(src) + qdel(src) if (2) if (prob(50)) src.health -= 15 @@ -37,13 +37,13 @@ if (prob(75)) new /obj/item/weapon/shard( src.loc ) Break() - del(src) + qdel(src) /obj/structure/lamarr/meteorhit(obj/O as obj) new /obj/item/weapon/shard( src.loc ) Break() - del(src) + qdel(src) /obj/structure/lamarr/proc/healthcheck() diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 5ecdcf39bbd..dff4bfe5388 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -39,10 +39,10 @@ /obj/structure/lattice/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) - del(src) + qdel(src) return if(3.0) return diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 04b3bdc19c5..e86703a437d 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -138,7 +138,7 @@ var/ore = text2path("/obj/item/stack/sheet/mineral/[mineralType]") for(var/i = 3, i <= oreAmount, i++) new ore(get_turf(src)) - del(src) + qdel(src) ex_act(severity = 1) switch(severity) diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index c2ee938e6cf..b27f8853904 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -32,13 +32,13 @@ /obj/structure/mopbucket/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(50)) - del(src) + qdel(src) return if(3.0) if (prob(5)) - del(src) + qdel(src) return diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 1b4c3b2ef90..991c4bb873f 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -48,21 +48,21 @@ for(var/atom/movable/A as mob|obj in src) A.loc = src.loc ex_act(severity) - del(src) + qdel(src) return if(2.0) if (prob(50)) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc ex_act(severity) - del(src) + qdel(src) return if(3.0) if (prob(5)) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc ex_act(severity) - del(src) + qdel(src) return return @@ -213,21 +213,21 @@ for(var/atom/movable/A as mob|obj in src) A.loc = src.loc ex_act(severity) - del(src) + qdel(src) return if(2.0) if (prob(50)) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc ex_act(severity) - del(src) + qdel(src) return if(3.0) if (prob(5)) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc ex_act(severity) - del(src) + qdel(src) return return diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 88d63a5a6f1..fa2ab6782c6 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -8,19 +8,19 @@ /obj/structure/sign/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) - del(src) + qdel(src) return if(3.0) - del(src) + qdel(src) return else return /obj/structure/sign/blob_act() - del(src) + qdel(src) return /obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction @@ -228,4 +228,4 @@ /obj/structure/sign/directions/evac name = "\improper Escape Arm" desc = "A direction sign, pointing out which way escape shuttle dock is." - icon_state = "direction_evac" \ No newline at end of file + icon_state = "direction_evac" diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm index a068af11938..78320f38581 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -10,15 +10,15 @@ /obj/structure/stool/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(50)) - del(src) + qdel(src) return if(3.0) if (prob(5)) - del(src) + qdel(src) return return diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 28f5dbfdf49..1305f77aa59 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -64,8 +64,7 @@ /obj/structure/table/proc/destroy() new parts(loc) density = 0 - del(src) - + qdel(src) /obj/structure/table/proc/check_contents(datum/table_recipe/TR) check_table() @@ -362,11 +361,11 @@ /obj/structure/table/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(50)) - del(src) + qdel(src) return if(3.0) if (prob(25)) @@ -793,14 +792,14 @@ /obj/structure/rack/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) if(2.0) - del(src) + qdel(src) if(prob(50)) new /obj/item/weapon/rack_parts(src.loc) if(3.0) if(prob(25)) - del(src) + qdel(src) new /obj/item/weapon/rack_parts(src.loc) /obj/structure/rack/blob_act() diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm index 86ecab5f7d7..f0b735be3c2 100644 --- a/code/game/objects/structures/transit_tubes.dm +++ b/code/game/objects/structures/transit_tubes.dm @@ -61,9 +61,10 @@ obj/structure/ex_act(severity) if(1.0) for(var/atom/movable/AM in contents) AM.loc = loc + // TODO: What the fuck are you doing AM.ex_act(severity++) - del(src) + qdel(src) return if(2.0) if(prob(50)) @@ -71,7 +72,7 @@ obj/structure/ex_act(severity) AM.loc = loc AM.ex_act(severity++) - del(src) + qdel(src) return if(3.0) return diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 63dd2f334e6..18982a66da6 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -64,13 +64,13 @@ var/list/mechtoys = list( /obj/structure/plasticflaps/ex_act(severity) switch(severity) if (1) - del(src) + qdel(src) if (2) if (prob(50)) - del(src) + qdel(src) if (3) if (prob(5)) - del(src) + qdel(src) /obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates name = "\improper Airtight plastic flaps" diff --git a/code/modules/events/tgevents/brand_intelligence.dm b/code/modules/events/tgevents/brand_intelligence.dm index 4c0c588f7e0..8eabc7a188e 100644 --- a/code/modules/events/tgevents/brand_intelligence.dm +++ b/code/modules/events/tgevents/brand_intelligence.dm @@ -25,7 +25,7 @@ originMachine.shut_up = 0 originMachine.shoot_inventory = 1 - scaling_factor = num_players() / 25 //Tweak this value to change the number of hostile machines. Lower value = more hostile machines. + scaling_factor = num_players() / 60 //Tweak this value to change the number of hostile machines. Lower value = more hostile machines. @@ -48,7 +48,7 @@ M.icon = upriser.icon M.icon_state = initial(upriser.icon_state) else - explosion(upriser.loc, -1, 1, 2, 4) + explosion(upriser.loc, 2, 4, 3, 5) del(upriser) kill() diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 7cf28475ad6..bb21795a55c 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -56,20 +56,20 @@ switch(severity) if(1.0) for(var/obj/item/weapon/book/b in contents) - del(b) - del(src) + qdel(b) + qdel(src) return if(2.0) for(var/obj/item/weapon/book/b in contents) if (prob(50)) b.loc = (get_turf(src)) - else del(b) - del(src) + else qdel(b) + qdel(src) return if(3.0) if (prob(50)) for(var/obj/item/weapon/book/b in contents) b.loc = (get_turf(src)) - del(src) + qdel(src) return else return diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index b9c08d58bd0..b767cae3fd5 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -109,7 +109,6 @@ var/list/artifact_spawn = list() // Runtime fix for geometry loading before cont else icon_state = "rock_[mineral.name]" - //Not even going to touch this pile of spaghetti attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -560,4 +559,4 @@ var/list/artifact_spawn = list() // Runtime fix for geometry loading before cont else if(istype(R.module_state_3,/obj/item/weapon/storage/bag/ore)) attackby(R.module_state_3,R) else - return \ No newline at end of file + return diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 9cbc4bb3bc2..7eeefca5fd0 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -52,7 +52,8 @@ brainmob.real_name = H.real_name brainmob.dna = H.dna brainmob.timeofhostdeath = H.timeofdeath - brainmob.mind.assigned_role = "Positronic Brain" + if(brainmob.mind) + brainmob.mind.assigned_role = "Positronic Brain" if(H.mind) H.mind.transfer_to(brainmob) brainmob << "\blue You feel slightly disoriented. That's normal when you're just a metal cube." diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index b7be410e4b1..09fa640080e 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -9,7 +9,7 @@ for(var/datum/organ/external/O in organs) //hardcoded to streamline things a bit total_brute += O.brute_dam total_burn += O.burn_dam - health = 100 - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute + health = 100 - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute - getBrainLoss() //TODO: fix husking if( ((100 - total_burn) < config.health_threshold_dead) && stat == DEAD) //100 only being used as the magic human max health number, feel free to change it if you add a var for it -- Urist ChangeToHusk() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 9e29b2a1c8a..1c6fe450f07 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -336,7 +336,7 @@ if(reagents.has_reagent("lexorin")) return if(M_NO_BREATH in mutations) return // No breath mutation means no breathing. if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return - if(species && (species.flags & NO_BREATHE || species.flags & IS_SYNTHETIC)) return + if(species && (species.flags & NO_BREATHE)) return var/datum/organ/internal/lungs/L = internal_organs["lungs"] L.process() @@ -929,6 +929,14 @@ proc/handle_chemicals_in_body() + if(reagents && !(species.flags & IS_SYNTHETIC)) //Synths don't process reagents. + var/alien = 0 //Not the best way to handle it, but neater than checking this for every single reagent proc. + if(species && species.name == "Diona") + alien = 1 + else if(species && species.name == "Vox") + alien = 2 + reagents.metabolize(src,alien) + if(reagents) reagents.metabolize(src) var/total_plasmaloss = 0 for(var/obj/item/I in src) @@ -1028,7 +1036,7 @@ if(species && species.flags & NO_INTORGANS) return - handle_trace_chems() + if(!(species.flags & IS_SYNTHETIC)) handle_trace_chems() var/datum/organ/internal/liver/liver = internal_organs["liver"] liver.process() diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 3409bd0458e..9a02bc0d0fa 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -840,7 +840,7 @@ proc/get_damage_icon_part(damage_state, body_part) /mob/living/carbon/human/proc/update_tail_showing(var/update_icons=1) overlays_standing[TAIL_LAYER] = null - if(species.tail && species.flags & HAS_TAIL) + if(species.tail && species.bodyflags & HAS_TAIL) if(!wear_suit || !(wear_suit.flags_inv & HIDEJUMPSUIT) && !istype(wear_suit, /obj/item/clothing/suit/space)) overlays_standing[TAIL_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_s") diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm index 8a37621e321..df36ee74cbf 100644 --- a/code/modules/mob/living/carbon/species.dm +++ b/code/modules/mob/living/carbon/species.dm @@ -52,7 +52,8 @@ for(var/datum/organ/external/E in H.organs) if(E.status & ORGAN_CUT_AWAY || E.status & ORGAN_DESTROYED) continue E.status |= ORGAN_ROBOT - + for(var/datum/organ/internal/I in H.internal_organs) + I.robotic = 2 return /datum/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns). @@ -77,8 +78,8 @@ primitive = /mob/living/carbon/monkey/unathi darksight = 3 - flags = HAS_LIPS | HAS_UNDERWEAR | HAS_TAIL - bodyflags = FEET_CLAWS + flags = HAS_LIPS | HAS_UNDERWEAR + bodyflags = FEET_CLAWS | HAS_TAIL cold_level_1 = 280 //Default 260 - Lower is better cold_level_2 = 220 //Default 200 @@ -108,8 +109,8 @@ primitive = /mob/living/carbon/monkey/tajara - flags = HAS_LIPS | HAS_UNDERWEAR | HAS_TAIL | CAN_BE_FAT - bodyflags = FEET_PADDED + flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT + bodyflags = FEET_PADDED | HAS_TAIL /datum/species/skrell name = "Skrell" diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index be03e96784e..2408942671e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -34,7 +34,7 @@ health = 100 stat = CONSCIOUS else - health = maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() - halloss + health = maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() - getBrainLoss() - halloss //This proc is used for mobs which are affected by pressure to calculate the amount of pressure that actually diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 8ec9fe86f64..20f08cf664c 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -497,7 +497,9 @@ This function completely restores a damaged organ to perfect condition. if(LOWER_TORSO) owner << "\red You are now sterile." if(HEAD) - if(owner.mutations & SKELETON) + if(owner.species.flags & IS_SYNTHETIC) + organ= new /obj/item/weapon/organ/head/posi(owner.loc, owner) + else if(owner.mutations & SKELETON) organ= new /obj/item/weapon/skeleton/head(owner.loc) else organ= new /obj/item/weapon/organ/head(owner.loc, owner) @@ -884,6 +886,9 @@ obj/item/weapon/organ/head var/mob/living/carbon/brain/brainmob var/brain_op_stage = 0 +/obj/item/weapon/organ/head/posi + name = "robotic head" + obj/item/weapon/organ/head/New(loc, mob/living/carbon/human/H) if(istype(H)) src.icon_state = H.gender == MALE? "head_m" : "head_f" @@ -976,11 +981,7 @@ obj/item/weapon/organ/head/attackby(obj/item/weapon/W as obj, mob/user as mob) else brainmob.LAssailant = user - var/mob/living/carbon/human/H - if(istype(brainmob,/mob/living/carbon/human)) - H = brainmob - - if(istype(H) && H.species && H.species.flags & IS_SYNTHETIC) + if(istype(src,/obj/item/weapon/organ/head/posi)) var/obj/item/device/mmi/posibrain/B = new(loc) B.transfer_identity(brainmob) else diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index ee28cb2d2ed..cb7816d8829 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -200,7 +200,7 @@ ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) if(2.0) if(prob(50)) del(src) @@ -217,7 +217,7 @@ blob_act() if(prob(50)) - del(src) + qdel(src) else if(toner > 0) new /obj/effect/decal/cleanable/oil(get_turf(src)) diff --git a/code/modules/power/antimatter/containment_jar.dm b/code/modules/power/antimatter/containment_jar.dm index 8cb372b0c1a..dd0e503bd47 100644 --- a/code/modules/power/antimatter/containment_jar.dm +++ b/code/modules/power/antimatter/containment_jar.dm @@ -20,13 +20,13 @@ if(1.0) explosion(get_turf(src), 1, 2, 3, 5)//Should likely be larger but this works fine for now I guess if(src) - del(src) + qdel(src) return if(2.0) if(prob((fuel/10)-stability)) explosion(get_turf(src), 1, 2, 3, 5) if(src) - del(src) + qdel(src) return stability -= 40 if(3.0) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index f0af273dcb6..bf0868f050d 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -440,7 +440,37 @@ if(!user) return src.add_fingerprint(user) - if(usr == user && opened) + //Synthetic human mob goes here. + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + if(H.species.flags & IS_SYNTHETIC && H.a_intent == "grab") + if(emagged || stat & BROKEN) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + H << "\red The APC power currents surge eratically, damaging your chassis!" + H.adjustFireLoss(10,0) + else if(src.cell && src.cell.charge > 0) + if(H.nutrition < 450) + + if(src.cell.charge >= 500) + H.nutrition += 50 + src.cell.charge -= 500 + else + H.nutrition += src.cell.charge/10 + src.cell.charge = 0 + + user << "\blue You slot your fingers into the APC interface and siphon off some of the stored charge for your own use." + if(src.cell.charge < 0) src.cell.charge = 0 + if(H.nutrition > 500) H.nutrition = 500 + + else + user << "\blue You are already fully charged." + else + user << "There is no charge to draw from that APC." + return + + if(usr == user && opened && (!issilicon(user))) if(cell) if(issilicon(user)) cell.loc=src.loc // Drop it, whoops. @@ -1045,7 +1075,7 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on) //set_broken() //now Del() do what we need if (cell) cell.ex_act(1.0) // more lags woohoo - del(src) + qdel(src) return if(2.0) if (prob(50)) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 7a9a87059ec..fe46ed9618b 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -179,16 +179,16 @@ /obj/structure/cable/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) if(2.0) if (prob(50)) new/obj/item/stack/cable_coil(src.loc, src.d1 ? 2 : 1, cable_color) - del(src) + qdel(src) if(3.0) if (prob(25)) new/obj/item/stack/cable_coil(src.loc, src.d1 ? 2 : 1, cable_color) - del(src) + qdel(src) return // the cable coil object, used for laying cable diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 79d6e0fad27..cc0e76f80b1 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -139,17 +139,17 @@ switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(50)) - del(src) + qdel(src) return if (prob(50)) corrupt() if(3.0) if (prob(25)) - del(src) + qdel(src) return if (prob(25)) corrupt() diff --git a/code/modules/power/engine.dm b/code/modules/power/engine.dm index 59227bf7cb9..c07e10ce150 100644 --- a/code/modules/power/engine.dm +++ b/code/modules/power/engine.dm @@ -22,12 +22,12 @@ switch(severity) if(1.0) ChangeTurf(/turf/space) - del(src) + qdel(src) return if(2.0) if (prob(50)) ChangeTurf(/turf/space) - del(src) + qdel(src) return else return diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 478240c0847..496be881ceb 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -580,7 +580,7 @@ /obj/machinery/light/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(75)) diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm index da4a32782bb..daaee3f31a3 100644 --- a/code/modules/power/singularity/particle_accelerator/particle.dm +++ b/code/modules/power/singularity/particle_accelerator/particle.dm @@ -67,7 +67,7 @@ /obj/effect/accelerated_particle/ex_act(severity) - del(src) + qdel(src) return diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 852d5f93ea9..ed441450ca8 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -137,15 +137,15 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin /obj/structure/particle_accelerator/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(50)) - del(src) + qdel(src) return if(3.0) if (prob(25)) - del(src) + qdel(src) return else return @@ -324,15 +324,15 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin /obj/machinery/particle_accelerator/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(50)) - del(src) + qdel(src) return if(3.0) if (prob(25)) - del(src) + qdel(src) return else return diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index a2b6f3500ea..181cc509cb5 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -62,7 +62,7 @@ var/global/list/uneatable = list( switch(severity) if(1.0) if(prob(25)) - del(src) + qdel(src) return else energy += 50 diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 3554a88981f..af00b7ff016 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -161,14 +161,14 @@ var/list/solars_list = list() /obj/machinery/power/solar/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) if(prob(15)) new /obj/item/weapon/shard( src.loc ) return if(2.0) if (prob(25)) new /obj/item/weapon/shard( src.loc ) - del(src) + qdel(src) return if (prob(50)) broken() @@ -516,7 +516,7 @@ var/list/solars_list = list() switch(severity) if(1.0) //SN src = null - del(src) + qdel(src) return if(2.0) if (prob(50)) diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 24ef7856d5c..3b998d42c78 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -83,11 +83,11 @@ /obj/machinery/chem_dispenser/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(50)) - del(src) + qdel(src) return /obj/machinery/chem_dispenser/blob_act() @@ -294,19 +294,19 @@ /obj/machinery/chem_master/ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(50)) - del(src) + qdel(src) return /obj/machinery/chem_master/blob_act() if (prob(50)) - del(src) + qdel(src) /obj/machinery/chem_master/meteorhit() - del(src) + qdel(src) return /obj/machinery/chem_master/power_change() diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index b816af44cb3..0fe13384aa3 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -338,11 +338,10 @@ datum on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - M.drowsyness = max(M.drowsyness-2*REM, 0) if(holder.has_reagent("toxin")) - holder.remove_reagent("toxin", 2*REM) + holder.remove_reagent("toxin", 1*REM) if(holder.has_reagent("stoxin")) - holder.remove_reagent("stoxin", 2*REM) + holder.remove_reagent("stoxin", 1*REM) if(holder.has_reagent("plasma")) holder.remove_reagent("plasma", 1*REM) if(holder.has_reagent("sacid")) @@ -350,17 +349,14 @@ datum if(holder.has_reagent("cyanide")) holder.remove_reagent("cyanide", 1*REM) if(holder.has_reagent("amatoxin")) - holder.remove_reagent("amatoxin", 2*REM) + holder.remove_reagent("amatoxin", 1*REM) if(holder.has_reagent("chloralhydrate")) - holder.remove_reagent("chloralhydrate", 5*REM) + holder.remove_reagent("chloralhydrate", 1*REM) if(holder.has_reagent("carpotoxin")) holder.remove_reagent("carpotoxin", 1*REM) if(holder.has_reagent("zombiepowder")) - holder.remove_reagent("zombiepowder", 0.5*REM) - if(holder.has_reagent("mindbreaker")) - holder.remove_reagent("mindbreaker", 2*REM) - M.hallucination = max(0, M.hallucination - 5*REM) - M.adjustToxLoss(-2*REM) + holder.remove_reagent("zombiepowder", 1*REM) + M.adjustToxLoss(-1.5*REM) ..() return @@ -370,12 +366,10 @@ datum description = "A Toxic chemical." reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 - custom_metabolism = 0.01 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - // Toxins are really weak, but without being treated, last very long. - M.adjustToxLoss(0.2) + M.adjustToxLoss(2) ..() return @@ -385,12 +379,10 @@ datum description = "Liquid plastic, do not eat." reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 - custom_metabolism = 0.01 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - // Toxins are really weak, but without being treated, last very long. - M.adjustToxLoss(0.2) + M.adjustToxLoss(2) ..() return @@ -401,7 +393,6 @@ datum description = "A highly toxic chemical." reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 - custom_metabolism = 0.4 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -410,6 +401,7 @@ datum M.sleeping += 1 ..() return + chefspecial // Quiet and lethal, needs atleast 4 units in the person before they'll die name = "Chef's Special" @@ -507,8 +499,6 @@ datum reagent_state = LIQUID color = "#E895CC" // rgb: 232, 149, 204 - custom_metabolism = 0.1 - on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom if(!data) data = 1 @@ -589,9 +579,9 @@ datum return holywater - name = "Holy Water" + name = "Water" id = "holywater" - description = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality." + description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen." reagent_state = LIQUID color = "#0064C8" // rgb: 0, 100, 200 @@ -741,12 +731,11 @@ datum description = "A chemical element." reagent_state = LIQUID color = "#484848" // rgb: 72, 72, 72 + custom_metabolism = 0.2 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - if(M.canmove && !M.restrained() && istype(M.loc, /turf/space)) - step(M, pick(cardinal)) - if(prob(5)) M.emote(pick("twitch","drool","moan")) + M.adjustBrainLoss(1) ..() return @@ -945,6 +934,7 @@ datum on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom M.adjustToxLoss(1*REM) + M.take_organ_damage(0, 1*REM) ..() return @@ -1044,10 +1034,11 @@ datum description = "Radium is an alkaline earth metal. It is extremely radioactive." reagent_state = SOLID color = "#C7C7C7" // rgb: 199,199,199 + custom_metabolism = 0.3 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - M.apply_effect(8*REM,IRRADIATE,0) + M.apply_effect(4*REM,IRRADIATE,0) // radium may increase your chances to cure a disease if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs var/mob/living/carbon/C = M @@ -1122,6 +1113,7 @@ datum description = "Might cause unpredictable mutations. Keep away from children." reagent_state = LIQUID color = "#13BC5E" // rgb: 19, 188, 94 + custom_metabolism = 0.3 reaction_mob(var/mob/M, var/method=TOUCH, var/volume) if(!..()) return @@ -1139,7 +1131,7 @@ datum on_mob_life(var/mob/living/M as mob) if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this. if(!M) M = holder.my_atom - M.apply_effect(4*REM,IRRADIATE,0) + M.apply_effect(2*REM,IRRADIATE,0) ..() return @@ -1236,7 +1228,7 @@ datum on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - M.apply_effect(1,IRRADIATE,0) + M.apply_effect(2,IRRADIATE,0) ..() return @@ -1341,7 +1333,7 @@ datum M.clean_blood() plantbgone - name = "Plant-B-Gone" + name = "Atrazine" id = "plantbgone" description = "A harmful toxic mixture to kill plantlife. Do not ingest!" reagent_state = LIQUID @@ -1349,7 +1341,7 @@ datum on_mob_life(var/mob/living/carbon/M) if(!M) M = holder.my_atom - M.adjustToxLoss(1.0) + M.adjustToxLoss(2) ..() return @@ -1399,7 +1391,7 @@ datum if(!M) M = holder.my_atom if(holder.has_reagent("inaprovaline")) holder.remove_reagent("inaprovaline", 2*REM) - M.adjustToxLoss(3*REM) + M.adjustToxLoss(2*REM) ..() return reaction_obj(var/obj/O, var/volume) @@ -1649,14 +1641,13 @@ datum ..() return - synaptizine name = "Synaptizine" id = "synaptizine" description = "Synaptizine is used to treat various diseases." reagent_state = LIQUID color = "#FF4040" // rgb: 255, 64, 64 - custom_metabolism = 0.01 + custom_metabolism = 0.05 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1682,7 +1673,7 @@ datum on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom M.jitteriness = max(M.jitteriness-5,0) - if(prob(80)) M.adjustBrainLoss(1*REM) + if(prob(80)) M.adjustBrainLoss(2*REM) if(prob(50)) M.drowsyness = max(M.drowsyness, 3) if(prob(10)) M.emote("drool") ..() @@ -1694,7 +1685,6 @@ datum description = "Hyronalin is a medicinal drug used to counter the effect of radiation poisoning." reagent_state = LIQUID color = "#74C365" // rgb: 116, 195, 101 - custom_metabolism = 0.05 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1708,7 +1698,6 @@ datum description = "Arithrazine is an unstable medication used for the most extreme cases of radiation poisoning." reagent_state = LIQUID color = "#BFFF00" // rgb: 191, 255, 0 - custom_metabolism = 0.05 on_mob_life(var/mob/living/M as mob) if(M.stat == 2.0) @@ -1716,7 +1705,7 @@ datum if(!M) M = holder.my_atom M.radiation = max(M.radiation-7*REM,0) M.adjustToxLoss(-1*REM) - if(prob(15)) + if(prob(33)) M.take_organ_damage(1, 0) ..() return @@ -1797,7 +1786,7 @@ datum description = "Hyperzine is a highly effective, long lasting, muscle stimulant." reagent_state = LIQUID color = "#CCFF00" // rgb: 204, 255, 0 - custom_metabolism = 0.03 + custom_metabolism = 0.05 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1816,9 +1805,9 @@ datum if(!M) M = holder.my_atom if(M.bodytemperature < 170) M.adjustCloneLoss(-1) - M.adjustOxyLoss(-1) - M.heal_organ_damage(1,1) - M.adjustToxLoss(-1) + M.adjustOxyLoss(-2) + M.heal_organ_damage(2,2) + M.adjustToxLoss(-2) ..() return @@ -1832,10 +1821,7 @@ datum on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom if(M.bodytemperature < 170) - M.adjustCloneLoss(-3) - M.adjustOxyLoss(-3) - M.heal_organ_damage(3,3) - M.adjustToxLoss(-3) + M.adjustCloneLoss(-4) ..() return @@ -1872,7 +1858,6 @@ datum description = "An all-purpose antiviral agent." reagent_state = LIQUID color = "#228B22" // rgb: 34, 139, 34 - custom_metabolism = 0.01 on_mob_life(var/mob/living/M as mob) ..() @@ -2382,10 +2367,9 @@ datum return amatoxin - name = "Amatoxin" + name = "Amanitin" id = "amatoxin" description = "A powerful poison derived from certain species of mushroom." - custom_metabolism = 0.1 color = "#792300" // rgb: 121, 35, 0 on_mob_life(var/mob/living/M as mob) @@ -2404,7 +2388,7 @@ datum to_remove = min(holder.get_reagent_amount("anti_toxin"),data) holder.remove_reagent("anti_toxin", to_remove, 0) data -= to_remove - M.adjustToxLoss(data) + M.adjustToxLoss((data-1)*rand(2,4)) ..() psilocybin @@ -2705,6 +2689,23 @@ datum data++ return + doctor_delight + name = "The Doctor's Delight" + id = "doctorsdelight" + description = "A gulp a day keeps the MediBot away. That's probably for the best." + reagent_state = LIQUID + nutriment_factor = 1 * FOOD_METABOLISM + color = "#664300" // rgb: 102, 67, 0 + + on_mob_life(var/mob/living/M as mob) + M:nutrition += nutriment_factor + holder.remove_reagent(src.id, FOOD_METABOLISM) + if(!M) M = holder.my_atom + if(M:getToxLoss() && prob(80)) M:adjustToxLoss(-1) + + ..() + return + berryjuice name = "Berry Juice" id = "berryjuice" @@ -3403,26 +3404,6 @@ datum reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 - doctor_delight - name = "The Doctor's Delight" - id = "doctorsdelight" - description = "A gulp a day keeps the MediBot away. That's probably for the best." - reagent_state = LIQUID - nutriment_factor = 1 * FOOD_METABOLISM - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - M:nutrition += nutriment_factor - holder.remove_reagent(src.id, FOOD_METABOLISM) - if(!M) M = holder.my_atom - if(M:getOxyLoss() && prob(50)) M:adjustOxyLoss(-2) - if(M:getBruteLoss() && prob(60)) M:heal_organ_damage(2,0) - if(M:getFireLoss() && prob(50)) M:heal_organ_damage(0,2) - if(M:getToxLoss() && prob(50)) M:adjustToxLoss(-2) - if(M.dizziness !=0) M.dizziness = max(0,M.dizziness-15) - if(M.confused !=0) M.confused = max(0,M.confused - 5) - ..() - return changelingsting name = "Changeling Sting" id = "changelingsting" diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 0db596c6ba4..27b41af7792 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -197,6 +197,13 @@ datum required_catalysts = list("plasma" = 5) result_amount = 2 + holy_water + name = "Holy Water" + id = "holywater" + result = "holywater" + required_reagents = list("water" = 1, "mercury" = 1, "wine" = 1) + result_amount = 3 + virus_food name = "Virus Food" id = "virusfood" @@ -699,8 +706,8 @@ datum name = "Plant-B-Gone" id = "plantbgone" result = "plantbgone" - required_reagents = list("toxin" = 1, "water" = 4) - result_amount = 5 + required_reagents = list("chlorine" = 1, "hydrogen" = 1, "nitrogen" = 1) + result_amount = 3 /////////////////////////////////////OLD SLIME CORE REACTIONS /////////////////////////////// @@ -1676,7 +1683,7 @@ datum name = "The Doctor's Delight" id = "doctordelight" result = "doctorsdelight" - required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1, "tricordrazine" = 1) + required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1) result_amount = 5 irish_cream diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index cf868d65de7..dfdde564357 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -277,8 +277,8 @@ g_amt = 0 w_class = 3.0 amount_per_transfer_from_this = 20 - possible_transfer_amounts = list(10,20,30,50,70) - volume = 70 + possible_transfer_amounts = list(5,10,15,25,30,50,80,100,120) + volume = 120 flags = FPRINT | OPENCONTAINER attackby(var/obj/D, mob/user as mob) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 8ec33df216d..d8836dd9bf7 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -10,7 +10,7 @@ icon_state = "hypo" amount_per_transfer_from_this = 5 volume = 30 - possible_transfer_amounts = null + possible_transfer_amounts = list(1,2,3,4,5,10,15,20,25,30) flags = FPRINT | TABLEPASS | OPENCONTAINER slot_flags = SLOT_BELT @@ -20,8 +20,7 @@ /obj/item/weapon/reagent_containers/hypospray/New() //comment this to make hypos start off empty ..() - reagents.add_reagent("doctorsdelight", 15) - reagents.add_reagent("dexalinp", 15) + reagents.add_reagent("tricordrazine", 30) return /obj/item/weapon/reagent_containers/hypospray/attack(mob/M as mob, mob/user as mob) @@ -64,8 +63,7 @@ /obj/item/weapon/reagent_containers/hypospray/autoinjector/New() ..() - reagents.remove_reagent("doctorsdelight", 15) - reagents.remove_reagent("dexalinp", 15) + reagents.remove_reagent("tricordrazine", 30) reagents.add_reagent("tramadol", 4) reagents.add_reagent("hyperzine", 1) update_icon() diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 56ae4eb9b4e..7e5525bdfec 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -46,17 +46,17 @@ ex_act(severity) switch(severity) if(1.0) - del(src) + qdel(src) return if(2.0) if (prob(50)) new /obj/effect/effect/water(src.loc) - del(src) + qdel(src) return if(3.0) if (prob(5)) new /obj/effect/effect/water(src.loc) - del(src) + qdel(src) return else return @@ -64,7 +64,7 @@ blob_act() if(prob(50)) new /obj/effect/effect/water(src.loc) - del(src) + qdel(src) diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm b/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm index 0030e31b21e..98bb7a1cd8b 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm @@ -338,10 +338,10 @@ var/list/valid_secondary_effect_types = list(\ /obj/machinery/artifact/ex_act(severity) switch(severity) - if(1.0) del src + if(1.0) qdel(src) if(2.0) if (prob(50)) - del src + qdel(src) else if(my_effect.trigger == TRIGGER_FORCE || my_effect.trigger == TRIGGER_HEAT) my_effect.ToggleActivate() diff --git a/code/modules/surgery/braincore.dm b/code/modules/surgery/braincore.dm index 01981860a99..e46190406ab 100644 --- a/code/modules/surgery/braincore.dm +++ b/code/modules/surgery/braincore.dm @@ -104,7 +104,7 @@ H = target var/obj/item/brain/B - if(istype(H) && H.species && H.species.flags & IS_SYNTHETIC) + if(H && H.species && H.species.flags & IS_SYNTHETIC) var/obj/item/device/mmi/posibrain/P = new(target.loc) P.transfer_identity(target) else diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index d61f917eaac..e40816458cd 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -30,12 +30,12 @@ if(allowed_species) for(var/species in allowed_species) - if(target.dna.mutantrace == species) + if(target.species.name == species) return 1 if(disallowed_species) for(var/species in disallowed_species) - if (target.dna.mutantrace == species) + if(target.species.name == species) return 0 return 1 diff --git a/code/setup.dm b/code/setup.dm index 353dc965166..52490849fdc 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -757,22 +757,22 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse #define HAS_SKIN_TONE 256 #define HAS_LIPS 512 #define HAS_UNDERWEAR 1024 -#define HAS_TAIL 2048 +#define IS_SYNTHETIC 2048 #define IS_PLANT 4096 #define CAN_BE_FAT 8192 #define HAS_CHITTIN 16384 #define NO_INTORGANS 32768 - +//Species Blood Flags #define BLOOD_GREEN 1 #define BLOOD_BLUE 2 #define BLOOD_SLIME 4 - +//Species Body Flags #define FEET_CLAWS 1 #define FEET_PADDED 2 #define FEET_NOSLIP 4 +#define HAS_TAIL 8 -#define IS_SYNTHETIC 8192 //Language flags. #define WHITELISTED 1 // Language is available if the speaker is whitelisted.