diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index 4a67b7626d4..9278d0d5f80 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -90,7 +90,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
if(hijack_only)
if(!(locate(/datum/objective/hijack) in usr.mind.objectives))
- to_chat(usr, "The Syndicate lacks resources to provide you with this item.")
+ to_chat(usr, "The Syndicate will only issue this extremely dangerous item to agents assigned the Hijack objective.")
return
if(item)
@@ -929,6 +929,8 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
reference = "SB"
item = /obj/item/radio/beacon/syndicate/bomb
cost = 11
+ surplus = 0
+ cant_discount = TRUE
/datum/uplink_item/explosives/syndicate_minibomb
name = "Syndicate Minibomb"
@@ -978,13 +980,22 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
gamemodes = list(/datum/game_mode/nuclear)
surplus = 0
-/datum/uplink_item/explosives/atmosgrenades
- name = "Atmos Grenades"
- desc = "A box of two (2) grenades that wreak havoc with the atmosphere of the target area. Capable of engulfing a large area in lit plasma, or N2O. Deploy with extreme caution!"
- reference = "AGG"
- item = /obj/item/storage/box/syndie_kit/atmosgasgrenades
- cost = 11
+/datum/uplink_item/explosives/atmosn2ogrenades
+ name = "Knockout Gas Grenades"
+ desc = "A box of two (2) grenades that spread knockout gas over a large area. Equip internals before using one of these."
+ reference = "ANG"
+ item = /obj/item/storage/box/syndie_kit/atmosn2ogrenades
+ cost = 8
+
+/datum/uplink_item/explosives/atmosfiregrenades
+ name = "Plasma Fire Grenades"
+ desc = "A box of two (2) grenades that cause large plasma fires. Can be used to deny access to a large area. Most useful if you have an atmospherics hardsuit."
+ reference = "APG"
+ item = /obj/item/storage/box/syndie_kit/atmosfiregrenades
+ hijack_only = TRUE
+ cost = 12
surplus = 0
+ cant_discount = TRUE
/datum/uplink_item/explosives/emp
name = "EMP Grenades and Implanter Kit"
diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm
index 4d7167663a7..e6e9dfe4196 100644
--- a/code/game/gamemodes/blob/blobs/blob_mobs.dm
+++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm
@@ -67,15 +67,17 @@
/mob/living/simple_animal/hostile/blob/blobspore/Life(seconds, times_fired)
if(!is_zombie && isturf(src.loc))
- for(var/mob/living/carbon/human/H in oview(src,1)) //Only for corpse right next to/on same tile
- if(H.stat == DEAD)
+ for(var/mob/living/carbon/human/H in oview(src, 1)) //Only for corpse right next to/on same tile
+ if(H.stat == DEAD || (!H.check_death_method() && H.health <= HEALTH_THRESHOLD_DEAD))
Zombify(H)
break
..()
-/mob/living/simple_animal/hostile/blob/blobspore/proc/Zombify(var/mob/living/carbon/human/H)
+/mob/living/simple_animal/hostile/blob/blobspore/proc/Zombify(mob/living/carbon/human/H)
+ if(!H.check_death_method())
+ H.death()
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
- is_zombie = 1
+ is_zombie = TRUE
if(H.wear_suit)
var/obj/item/clothing/suit/armor/A = H.wear_suit
if(A.armor && A.armor["melee"])
@@ -89,14 +91,15 @@
icon = H.icon
speak_emote = list("groans")
icon_state = "zombie2_s"
- head_organ.h_style = null
+ if(head_organ)
+ head_organ.h_style = null
H.update_hair()
human_overlays = H.overlays
update_icons()
- H.loc = src
+ H.forceMove(src)
pressure_resistance = 20 //5 kPa difference required to push lowered
throw_pressure_limit = 30 //15 kPa difference required to throw lowered
- loc.visible_message("The corpse of [H.name] suddenly rises!")
+ visible_message("The corpse of [H.name] suddenly rises!")
/mob/living/simple_animal/hostile/blob/blobspore/death(gibbed)
// Only execute the below if we successfuly died
diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm
index f339be06b88..cee4d92008a 100644
--- a/code/game/gamemodes/miniantags/guardian/guardian.dm
+++ b/code/game/gamemodes/miniantags/guardian/guardian.dm
@@ -60,9 +60,9 @@
/mob/living/simple_animal/hostile/guardian/Life(seconds, times_fired) //Dies if the summoner dies
..()
if(summoner)
- if(summoner.stat == DEAD)
+ if(summoner.stat == DEAD || (!summoner.check_death_method() && summoner.health <= HEALTH_THRESHOLD_DEAD))
to_chat(src, "Your summoner has died!")
- visible_message("The [src] dies along with its user!")
+ visible_message("[src] dies along with its user!")
ghostize()
qdel(src)
snapback()
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 2715539d129..7ce515365ae 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -34,7 +34,7 @@
var/obj/effect/countdown/clonepod/countdown
- var/list/brine_types = list("corazone", "salbutamol", "epinephrine", "salglu_solution") //stops heart attacks, heart failure, shock, and keeps their O2 levels normal
+ var/list/brine_types = list("corazone", "perfluorodecalin", "epinephrine", "salglu_solution") //stops heart attacks, heart failure, shock, and keeps their O2 levels normal
var/list/missing_organs
var/organs_number = 0
@@ -341,7 +341,7 @@
check_brine()
//Also heal some oxyloss ourselves just in case!!
- occupant.adjustOxyLoss(-4)
+ occupant.adjustOxyLoss(-10)
use_power(7500) //This might need tweaking.
@@ -480,6 +480,10 @@
for(var/i in missing_organs)
qdel(i)
missing_organs.Cut()
+ occupant.SetLoseBreath(0) // Stop friggin' dying, gosh damn
+ occupant.setOxyLoss(0)
+ for(var/datum/disease/critical/crit in occupant.viruses)
+ crit.cure()
occupant.forceMove(T)
occupant.update_body()
domutcheck(occupant) //Waiting until they're out before possible notransform.
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index c134747cd41..acdbc1110f3 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -36,10 +36,13 @@
if(scanner.occupant && can_autoprocess())
scan_mob(scanner.occupant)
-
+
+ if(!LAZYLEN(records))
+ return
+
for(var/obj/machinery/clonepod/pod in pods)
if(!(pod.occupant || pod.mess) && (pod.efficiency > 5))
- for(var/datum/dna2/record/R in src.records)
+ for(var/datum/dna2/record/R in records)
if(!(pod.occupant || pod.mess))
if(pod.growclone(R))
records.Remove(R)
@@ -392,6 +395,12 @@
SSnanoui.update_uis(src)
return
+ for(var/obj/machinery/clonepod/pod in pods)
+ if(pod.occupant && pod.clonemind == subject.mind)
+ scantemp = "Subject already getting cloned."
+ SSnanoui.update_uis(src)
+ return
+
subject.dna.check_integrity()
var/datum/dna2/record/R = new /datum/dna2/record()
diff --git a/code/game/objects/effects/spawners/random_spawners.dm b/code/game/objects/effects/spawners/random_spawners.dm
index 18392256fb8..510e5b90380 100644
--- a/code/game/objects/effects/spawners/random_spawners.dm
+++ b/code/game/objects/effects/spawners/random_spawners.dm
@@ -279,7 +279,7 @@
/obj/item/clothing/glasses/thermal = 1,
/obj/item/chameleon = 1,
/obj/item/reagent_containers/hypospray/autoinjector/stimulants = 1,
- /obj/item/storage/box/syndie_kit/atmosgasgrenades = 1,
+ /obj/item/storage/box/syndie_kit/atmosn2ogrenades = 1,
/obj/item/grenade/plastic/x4 = 1)
diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm
index 5eb835e2940..e5bbeef7686 100644
--- a/code/game/objects/items/devices/uplinks.dm
+++ b/code/game/objects/items/devices/uplinks.dm
@@ -71,7 +71,10 @@ var/list/world_uplinks = list()
if(I.job && I.job.len)
if(!(I.job.Find(job)))
continue
- dat += "[I.name] ([I.cost])
"
+ dat += "[I.name] ([I.cost])"
+ if(I.hijack_only)
+ dat += " (HIJACK ONLY)"
+ dat += "
"
category_items++
dat += "Random Item (??)
"
@@ -94,7 +97,7 @@ var/list/world_uplinks = list()
if(I.job && I.job.len)
if(!(I.job.Find(job)))
continue
- nano[nano.len]["items"] += list(list("Name" = sanitize(I.name), "Description" = sanitize(I.description()),"Cost" = I.cost, "obj_path" = I.reference))
+ nano[nano.len]["items"] += list(list("Name" = sanitize(I.name), "Description" = sanitize(I.description()),"Cost" = I.cost, "hijack_only" = I.hijack_only, "obj_path" = I.reference))
reference[I.reference] = I
var/datum/nano_item_lists/result = new
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index cac42bfced7..c96271d6ddd 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -262,13 +262,24 @@
new /obj/item/spellbook/oneuse/mime/greaterwall(src)
new /obj/item/spellbook/oneuse/mime/fingergun(src)
-/obj/item/storage/box/syndie_kit/atmosgasgrenades
- name = "Atmos Grenades"
-/obj/item/storage/box/syndie_kit/atmosgasgrenades/New()
+/obj/item/storage/box/syndie_kit/atmosn2ogrenades
+ name = "Atmos N2O Grenades"
+
+/obj/item/storage/box/syndie_kit/atmosn2ogrenades/New()
+ ..()
+ new /obj/item/grenade/clusterbuster/n2o(src)
+ new /obj/item/grenade/clusterbuster/n2o(src)
+
+
+/obj/item/storage/box/syndie_kit/atmosfiregrenades
+ name = "Plasma Fire Grenades"
+
+/obj/item/storage/box/syndie_kit/atmosfiregrenades/New()
..()
new /obj/item/grenade/clusterbuster/plasma(src)
- new /obj/item/grenade/clusterbuster/n2o(src)
+ new /obj/item/grenade/clusterbuster/plasma(src)
+
/obj/item/storage/box/syndie_kit/missionary_set
name = "Missionary Starter Kit"
diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm
index 88adc9643ba..6f531f5c14c 100644
--- a/code/game/objects/structures/statues.dm
+++ b/code/game/objects/structures/statues.dm
@@ -256,18 +256,18 @@
/obj/structure/statue/diamond
hardness = 10
material_drop_type = /obj/item/stack/sheet/mineral/diamond
- desc = "This is a very expensive diamond statue"
+ desc = "This is a very expensive diamond statue."
/obj/structure/statue/diamond/captain
- name = "statue of THE captain."
+ name = "statue of THE captain"
icon_state = "cap"
/obj/structure/statue/diamond/ai1
- name = "statue of the AI hologram."
+ name = "statue of the AI hologram"
icon_state = "ai1"
/obj/structure/statue/diamond/ai2
- name = "statue of the AI core."
+ name = "statue of the AI core"
icon_state = "ai2"
/obj/structure/statue/bananium
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 03726353022..aa714f0d527 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -363,7 +363,7 @@
for(var/datum/data/record/R in data_core.security)
if(R.fields["id"] == E.fields["id"])
criminal = R.fields["criminal"]
- var/criminal_status = hasHUD(user, "read_only_security") ? "\[[criminal]\]" : "\[[criminal]\]"
+ var/criminal_status = hasHUD(user, "read_only_security") ? "\[[criminal]\]" : "\[[criminal]\]"
msg += "Criminal status: [criminal_status]\n"
msg += "Security records: \[View\] \[Add comment\]\n"
diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm
index f4808f46d53..13d85941a79 100644
--- a/code/modules/paperwork/faxmachine.dm
+++ b/code/modules/paperwork/faxmachine.dm
@@ -283,34 +283,25 @@ var/global/list/fax_blacklist = list()
use_power(200)
- var/obj/item/rcvdcopy
- if(istype(copyitem, /obj/item/paper))
- rcvdcopy = copy(copyitem)
- else if(istype(copyitem, /obj/item/photo))
- rcvdcopy = photocopy(copyitem)
- else if(istype(copyitem, /obj/item/paper_bundle))
- rcvdcopy = bundlecopy(copyitem)
- else
+ if(!(istype(copyitem, /obj/item/paper) || istype(copyitem, /obj/item/paper_bundle) || istype(copyitem, /obj/item/photo)))
visible_message("[src] beeps, \"Error transmitting message.\"")
return
- rcvdcopy.loc = null //hopefully this shouldn't cause trouble
-
var/datum/fax/admin/A = new /datum/fax/admin()
- A.name = rcvdcopy.name
+ A.name = copyitem.name
A.from_department = department
A.to_department = destination
A.origin = src
- A.message = rcvdcopy
+ A.message = copyitem
A.sent_by = sender
A.sent_at = world.time
//message badmins that a fax has arrived
switch(destination)
if("Central Command")
- message_admins(sender, "CENTCOM FAX", destination, rcvdcopy, "#006100")
+ message_admins(sender, "CENTCOM FAX", destination, copyitem, "#006100")
if("Syndicate")
- message_admins(sender, "SYNDICATE FAX", destination, rcvdcopy, "#DC143C")
+ message_admins(sender, "SYNDICATE FAX", destination, copyitem, "#DC143C")
for(var/obj/machinery/photocopier/faxmachine/F in allfaxes)
if(F.department == destination)
F.receivefax(copyitem)
diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm
index d2fb4eec567..6c22360face 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol.dm
@@ -765,7 +765,7 @@
/datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/M)
if(M.bodytemperature < 360)
M.bodytemperature = min(360, M.bodytemperature + (50 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055
- ..()
+ return ..()
/datum/reagent/consumable/ethanol/devilskiss
name = "Devils Kiss"
@@ -819,7 +819,7 @@
/datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/M)
if(M.bodytemperature > 270)
M.bodytemperature = max(270, M.bodytemperature - (20 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055
- ..()
+ return ..()
/datum/reagent/consumable/ethanol/grog
name = "Grog"
@@ -1178,7 +1178,7 @@
if(prob(25))
holder.remove_reagent(id, 15)
M.fakevomit()
- ..()
+ return ..()
/datum/reagent/consumable/ethanol/synthanol/reaction_mob(mob/living/M, method=TOUCH, volume)
if(M.isSynthetic())
diff --git a/code/modules/reagents/chemistry/reagents/drink_cold.dm b/code/modules/reagents/chemistry/reagents/drink_cold.dm
index 8e902f014f3..707aab07b54 100644
--- a/code/modules/reagents/chemistry/reagents/drink_cold.dm
+++ b/code/modules/reagents/chemistry/reagents/drink_cold.dm
@@ -42,7 +42,7 @@
/datum/reagent/consumable/drink/cold/ice/on_mob_life(mob/living/M)
M.bodytemperature = max(M.bodytemperature - 5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0)
- ..()
+ return ..()
/datum/reagent/consumable/drink/cold/space_cola
name = "Cola"
diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm
index 3f21593a44e..9b1aca91f8d 100644
--- a/code/modules/reagents/chemistry/reagents/food.dm
+++ b/code/modules/reagents/chemistry/reagents/food.dm
@@ -448,7 +448,7 @@
/datum/reagent/consumable/egg/on_mob_life(mob/living/M)
if(prob(3))
M.reagents.add_reagent("cholesterol", rand(1,2))
- ..()
+ return ..()
/datum/reagent/consumable/corn_starch
name = "Corn Starch"
@@ -643,9 +643,6 @@
color = "#684435"
taste_message = "burritos"
-/datum/reagent/consumable/beans/on_mob_life(mob/living/M)
- return ..()
-
/datum/reagent/consumable/bread
name = "Bread"
id = "bread"
diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm
index e69813cced9..dc273278d52 100644
--- a/code/modules/reagents/chemistry/reagents/medicine.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine.dm
@@ -5,6 +5,7 @@
/datum/reagent/medicine/on_mob_life(mob/living/M)
current_cycle++
holder.remove_reagent(id, (metabolization_rate / M.metabolism_efficiency) * M.digestion_ratio) //medicine reagents stay longer if you have a better metabolism
+ return STATUS_UPDATE_NONE
/datum/reagent/medicine/hydrocodone
name = "Hydrocodone"
@@ -526,6 +527,7 @@
taste_message = "a delightful numbing"
/datum/reagent/medicine/morphine/on_mob_life(mob/living/M)
+ var/update_flags = STATUS_UPDATE_NONE
M.AdjustJitter(-25)
switch(current_cycle)
if(1 to 15)
@@ -534,9 +536,9 @@
if(16 to 35)
M.Drowsy(20)
if(36 to INFINITY)
- M.Paralyse(15)
+ update_flags |= M.Paralyse(15, FALSE)
M.Drowsy(20)
- ..()
+ return ..() | update_flags
/datum/reagent/medicine/oculine
name = "Oculine"
@@ -753,7 +755,7 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
H.update_mutations()
- ..()
+ return ..()
/datum/reagent/medicine/antihol
name = "Antihol"
@@ -851,6 +853,7 @@
/datum/reagent/medicine/insulin/on_mob_life(mob/living/M)
M.reagents.remove_reagent("sugar", 5)
+ return ..()
/datum/reagent/medicine/teporone
name = "Teporone"
@@ -867,7 +870,7 @@
M.bodytemperature = max(310, M.bodytemperature - (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
else if(M.bodytemperature < 311)
M.bodytemperature = min(310, M.bodytemperature + (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
- ..()
+ return ..()
/datum/reagent/medicine/haloperidol
name = "Haloperidol"
@@ -910,6 +913,7 @@
taste_message = "sleepiness"
/datum/reagent/medicine/ether/on_mob_life(mob/living/M)
+ var/update_flags = STATUS_UPDATE_NONE
M.AdjustJitter(-25)
switch(current_cycle)
if(1 to 30)
@@ -918,9 +922,9 @@
if(31 to 40)
M.Drowsy(20)
if(41 to INFINITY)
- M.Paralyse(15)
+ update_flags |= M.Paralyse(15, FALSE)
M.Drowsy(20)
- ..()
+ return ..() | update_flags
/datum/reagent/medicine/syndicate_nanites //Used exclusively by Syndicate medical cyborgs
name = "Restorative Nanites"
diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm
index 9277ba33fd9..7d92080ae6b 100644
--- a/code/modules/reagents/chemistry/reagents/misc.dm
+++ b/code/modules/reagents/chemistry/reagents/misc.dm
@@ -162,7 +162,7 @@
if(!H.dna.species.exotic_blood && !(NO_BLOOD in H.dna.species.species_traits))
if(H.blood_volume < BLOOD_VOLUME_NORMAL)
H.blood_volume += 0.8
- ..()
+ return ..()
/datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, volume)
if(M.has_bane(BANE_IRON) && holder && holder.chem_temp < 150) //If the target is weak to cold iron, then poison them.
diff --git a/code/modules/reagents/chemistry/reagents/paradise_pop.dm b/code/modules/reagents/chemistry/reagents/paradise_pop.dm
index 204848e1fe9..2294088e54a 100644
--- a/code/modules/reagents/chemistry/reagents/paradise_pop.dm
+++ b/code/modules/reagents/chemistry/reagents/paradise_pop.dm
@@ -31,7 +31,7 @@
var/turf/simulated/T = get_turf(M)
goonchem_vortex(T, 1, 0)
to_chat(M, "You briefly feel super-massive, like a black hole. Probably just your imagination...")
- ..()
+ return ..()
//Berry Banned: This one is tasty and safe to drink, might have a low chance of healing a random damage type?
/datum/reagent/consumable/drink/berry_banned
diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm
index 76be206f35f..d337d2a421b 100644
--- a/code/modules/reagents/chemistry/reagents/toxins.dm
+++ b/code/modules/reagents/chemistry/reagents/toxins.dm
@@ -1156,12 +1156,16 @@
M.apply_effect(2, IRRADIATE, 0, negate_armor = 1)
if(!M.dna)
return
+ var/did_mutation = FALSE
if(prob(15))
randmutb(M)
+ did_mutation = TRUE
if(prob(3))
randmutg(M)
- domutcheck(M, null)
- M.UpdateAppearance()
+ did_mutation = TRUE
+ if(did_mutation)
+ domutcheck(M, null)
+ M.UpdateAppearance()
return ..()
/datum/reagent/ants
diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm
index 1a073eae598..cdc10bcbcc5 100644
--- a/code/modules/reagents/chemistry/recipes/toxins.dm
+++ b/code/modules/reagents/chemistry/recipes/toxins.dm
@@ -139,7 +139,7 @@
required_reagents = list("plasma" = 1, "silver" = 1, "blackpowder" = 1)
result_amount = 3
mix_message = "A jet of sparks flies from the mixture as it merges into a flickering slurry."
- min_temp = T0C + 130
+ min_temp = T0C + 50
mix_sound = null
/datum/chemical_reaction/teslium/on_reaction(datum/reagents/holder, created_volume)
diff --git a/html/changelog.html b/html/changelog.html
index a86cfa42a28..a4f7fd50102 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -56,14 +56,47 @@
-->