diff --git a/.travis.yml b/.travis.yml
index 3ae210183f..14676d7713 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,7 +4,7 @@ sudo: false
env:
BYOND_MAJOR="508"
- BYOND_MINOR="1287"
+ BYOND_MINOR="1293"
MACRO_COUNT=1234
cache:
diff --git a/code/game/antagonist/antagonist_objectives.dm b/code/game/antagonist/antagonist_objectives.dm
index 432c3f6bbe..404be5a0f7 100644
--- a/code/game/antagonist/antagonist_objectives.dm
+++ b/code/game/antagonist/antagonist_objectives.dm
@@ -8,7 +8,7 @@
/datum/antagonist/proc/create_objectives(var/datum/mind/player)
if(config.objectives_disabled)
return 0
- if(create_global_objectives())
+ if(create_global_objectives() || global_objectives.len)
player.objectives |= global_objectives
return 1
diff --git a/code/game/antagonist/antagonist_print.dm b/code/game/antagonist/antagonist_print.dm
index 76110e2b13..5cbce01a81 100644
--- a/code/game/antagonist/antagonist_print.dm
+++ b/code/game/antagonist/antagonist_print.dm
@@ -7,8 +7,8 @@
for(var/datum/mind/P in current_antagonists)
text += print_player_full(P)
text += get_special_objective_text(P)
- var/failed
if(!global_objectives.len && P.objectives && P.objectives.len)
+ var/failed
var/num = 1
for(var/datum/objective/O in P.objectives)
text += print_objective(O, num)
@@ -20,8 +20,6 @@
feedback_add_details(feedback_tag,"[O.type]|FAIL")
failed = 1
num++
-
- if(!config.objectives_disabled)
if(failed)
text += "
The [role_text] has failed."
else
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index a859f81932..6859b27632 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -39,6 +39,7 @@
. = ..()
if(reagents)
qdel(reagents)
+ reagents = null
for(var/atom/movable/AM in contents)
qdel(AM)
loc = null
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 7269f9dcfe..2f25c74e00 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -286,14 +286,13 @@ var/global/list/additional_antag_types = list()
/datum/game_mode/proc/declare_completion()
var/is_antag_mode = (antag_templates && antag_templates.len)
- if(!config.objectives_disabled)
- check_victory()
- if(is_antag_mode)
+ check_victory()
+ if(is_antag_mode)
+ sleep(10)
+ for(var/datum/antagonist/antag in antag_templates)
sleep(10)
- for(var/datum/antagonist/antag in antag_templates)
- sleep(10)
- antag.check_victory()
- antag.print_player_summary()
+ antag.check_victory()
+ antag.print_player_summary()
var/clients = 0
var/surviving_humans = 0
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 4e444a5ebc..a85ed010f9 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -100,10 +100,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
flags |= NOREACT // so it doesn't react until you light it
create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 15
-/obj/item/clothing/mask/smokable/Destroy()
- ..()
- qdel(reagents)
-
/obj/item/clothing/mask/smokable/process()
var/turf/location = get_turf(src)
smoketime--
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 081d1f7ba6..0ed8ad7b7b 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -146,11 +146,6 @@
new /obj/item/clothing/mask/smokable/cigarette(src)
create_reagents(15 * storage_slots)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one
-/obj/item/weapon/storage/fancy/cigarettes/Destroy()
- qdel(reagents)
- ..()
-
-
/obj/item/weapon/storage/fancy/cigarettes/update_icon()
icon_state = "[initial(icon_state)][contents.len]"
return
@@ -202,10 +197,6 @@
new /obj/item/clothing/mask/smokable/cigarette/cigar(src)
create_reagents(15 * storage_slots)
-/obj/item/weapon/storage/fancy/cigar/Destroy()
- qdel(reagents)
- ..()
-
/obj/item/weapon/storage/fancy/cigar/update_icon()
icon_state = "[initial(icon_state)][contents.len]"
return
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index 044143269e..523a83a080 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -197,7 +197,7 @@ var/list/mechtoys = list(
// Sell phoron and platinum
if(istype(A, /obj/item/stack))
- var/obj/item/stack/P
+ var/obj/item/stack/P = A
switch(P.get_material_name())
if("phoron") phoron_count += P.get_amount()
if("platinum") plat_count += P.get_amount()
diff --git a/code/modules/clothing/spacesuits/rig/modules/combat.dm b/code/modules/clothing/spacesuits/rig/modules/combat.dm
index fb588e790c..533a5d616e 100644
--- a/code/modules/clothing/spacesuits/rig/modules/combat.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/combat.dm
@@ -21,7 +21,7 @@
name = "mounted grenade launcher"
desc = "A shoulder-mounted micro-explosive dispenser."
selectable = 1
- icon_state = "grenadelauncher"
+ icon_state = "grenade"
interface_name = "integrated grenade launcher"
interface_desc = "Discharges loaded grenades against the wearer's location."
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 45c2cde53a..d0c07c8509 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -17,6 +17,9 @@
germ_level++
/mob/living/carbon/Destroy()
+ qdel(ingested)
+ qdel(touching)
+ // We don't qdel(bloodstr) because it's the same as qdel(reagents)
for(var/guts in internal_organs)
qdel(guts)
for(var/food in stomach_contents)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 6f434257f4..1159545a54 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -996,7 +996,7 @@
if(ROBOT_NOTIFICATION_NEW_MODULE) //New Module
connected_ai << "
NOTICE - [braintype] module change detected: [name] has loaded the [first_arg].
"
if(ROBOT_NOTIFICATION_MODULE_RESET)
- connected_ai << "
NOTICE - [braintype] module reset detected: [name] has unladed the [first_arg].
"
+ connected_ai << "
NOTICE - [braintype] module reset detected: [name] has unloaded the [first_arg].
"
if(ROBOT_NOTIFICATION_NEW_NAME) //New Name
if(first_arg != second_arg)
connected_ai << "
NOTICE - [braintype] reclassification detected: [first_arg] is now designated as [second_arg].
"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
index 41b78fbda4..302c6e6000 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
@@ -112,6 +112,19 @@
M.resistances += data
return
+// pure concentrated antibodies
+/datum/reagent/antibodies
+ data = list("antibodies"=list())
+ name = "Antibodies"
+ id = "antibodies"
+ reagent_state = LIQUID
+ color = "#0050F0"
+
+/datum/reagent/antibodies/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(src.data)
+ M.antibodies |= src.data["antibodies"]
+ ..()
+
#define WATER_LATENT_HEAT 19000 // How much heat is removed when applied to a hot turf, in J/unit (19000 makes 120 u of water roughly equivalent to 4L)
/datum/reagent/water
name = "Water"
@@ -145,7 +158,7 @@
environment.add_thermal_energy(-removed_heat)
if (prob(5))
T.visible_message("The water sizzles as it lands on \the [T]!")
-
+
else if(volume >= 10)
if(T.wet >= 1)
return
diff --git a/code/modules/spells/spellbook.dm b/code/modules/spells/spellbook.dm
index 69c60689ec..6f619e1cce 100644
--- a/code/modules/spells/spellbook.dm
+++ b/code/modules/spells/spellbook.dm
@@ -58,8 +58,6 @@
This spell opens nearby doors and does not require wizard garb.
Curse of the Horseman (15)
This spell will curse a person to wear an unremovable horse mask (it has glue on the inside) and speak like a horse. It does not require wizard garb.
- Flesh to Stone (60)
- This spell will curse a person to immediately turn into an unmoving statue. The effect will eventually wear off if the statue is not destroyed.
Remove Clothes Requirement Warning: this takes away 2 spell choices.