diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm
index 86573474e6..fbad2752ee 100644
--- a/code/datums/components/material_container.dm
+++ b/code/datums/components/material_container.dm
@@ -115,7 +115,7 @@
if(!(mat_container_flags & MATCONTAINER_SILENT))
to_chat(user, "[parent] won't accept [I]!")
return
- . = COMPONENT_NO_AFTERATTACK
+ . = COMPONENT_CANCEL_ATTACK_CHAIN
var/datum/callback/pc = precondition
if(pc && !pc.Invoke(user))
return
@@ -168,7 +168,7 @@
// It shouldn't be possible to add more matter than our max
ASSERT((total_amount + (matter_per_sheet * sheets_to_use)) <= max_amount)
-
+
// Use the amount of sheets from the stack
if(!S.use(sheets_to_use))
to_chat(user, "Something went wrong with your stack. Split it manually and try again.")
@@ -358,7 +358,7 @@
if(materials[M] < (sheet_amt * SHEET_MATERIAL_AMOUNT))
sheet_amt = round(materials[M] / SHEET_MATERIAL_AMOUNT)
- var/obj/item/stack/S = M.stack_type
+ var/obj/item/stack/S = M.stack_type
var/max_stack_size = initial(S.max_amount)
var/count = 0
diff --git a/code/modules/reagents/reagents/core.dm b/code/modules/reagents/reagents/core.dm
index 0cff5905d8..3eb3e06cfb 100644
--- a/code/modules/reagents/reagents/core.dm
+++ b/code/modules/reagents/reagents/core.dm
@@ -196,10 +196,13 @@
/datum/reagent/water/touch_obj(var/obj/O, var/amount)
..()
- if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/cube))
- var/obj/item/weapon/reagent_containers/food/snacks/cube/cube = O
+ if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube))
+ var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O
if(!cube.wrapped)
cube.Expand()
+ else if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/cube))
+ var/obj/item/weapon/reagent_containers/food/snacks/cube/cube = O
+ cube.Expand()
else
O.water_act(amount / 5)
diff --git a/code/modules/xenoarcheaology/effect.dm b/code/modules/xenoarcheaology/effect.dm
index 4ab7066b99..145bd3e258 100644
--- a/code/modules/xenoarcheaology/effect.dm
+++ b/code/modules/xenoarcheaology/effect.dm
@@ -10,6 +10,21 @@
var/artifact_id = ""
var/effect_type = 0
+ var/req_type = /atom/movable
+
+ var/image/active_effect
+ var/effect_icon = 'icons/effects/effects.dmi'
+ var/effect_state = "sparkles"
+ var/effect_color = "#ffffff"
+
+ // The last time the effect was toggled.
+ var/last_activation = 0
+
+/datum/artifact_effect/Destroy()
+ if(master)
+ master = null
+ ..()
+
/datum/artifact_effect/proc/get_master_holder() // Return the effectmaster's holder, if it is set to an effectmaster. Otherwise, master is the target object.
if(istype(master))
return master.holder
diff --git a/code/modules/xenoarcheaology/tools/artifact_harvester.dm b/code/modules/xenoarcheaology/tools/artifact_harvester.dm
index 948843c163..03f0fdb484 100644
--- a/code/modules/xenoarcheaology/tools/artifact_harvester.dm
+++ b/code/modules/xenoarcheaology/tools/artifact_harvester.dm
@@ -148,10 +148,12 @@
cur_artifact = analysed
//if both effects are active, we can't harvest either
- if(cur_artifact.my_effect && cur_artifact.my_effect.activated && cur_artifact.secondary_effect && cur_artifact.secondary_effect.activated)
+ var/list/active_effects = cur_artifact.artifact_master.get_active_effects()
+
+ if(active_effects.len > 1)
atom_say("Cannot harvest. Source is emitting conflicting energy signatures.")
return
- if(!cur_artifact.my_effect.activated && !(cur_artifact.secondary_effect && cur_artifact.secondary_effect.activated))
+ else if(!active_effects.len)
atom_say("Cannot harvest. No energy emitting from source.")
return
@@ -163,34 +165,24 @@
//
var/datum/artifact_effect/source_effect
+ var/datum/artifact_effect/active_effect = active_effects[1]
//if we already have charge in the battery, we can only recharge it from the source artifact
if(inserted_battery.stored_charge > 0)
var/battery_matches_primary_id = 0
- if(inserted_battery.battery_effect && inserted_battery.battery_effect.artifact_id == cur_artifact.my_effect.artifact_id)
+ if(inserted_battery.battery_effect && inserted_battery.battery_effect.artifact_id == cur_artifact.artifact_master.artifact_id)
battery_matches_primary_id = 1
- if(battery_matches_primary_id && cur_artifact.my_effect.activated)
+ if(battery_matches_primary_id && active_effect.activated)
//we're good to recharge the primary effect!
- source_effect = cur_artifact.my_effect
-
- var/battery_matches_secondary_id = 0
- if(inserted_battery.battery_effect && inserted_battery.battery_effect.artifact_id == cur_artifact.secondary_effect.artifact_id)
- battery_matches_secondary_id = 1
- if(battery_matches_secondary_id && cur_artifact.secondary_effect.activated)
- //we're good to recharge the secondary effect!
- source_effect = cur_artifact.secondary_effect
+ source_effect = active_effect
if(!source_effect)
atom_say("Cannot harvest. Battery is charged with a different energy signature.")
else
//we're good to charge either
- if(cur_artifact.my_effect.activated)
+ if(active_effect.activated)
//charge the primary effect
- source_effect = cur_artifact.my_effect
-
- else if(cur_artifact.secondary_effect.activated)
- //charge the secondary effect
- source_effect = cur_artifact.secondary_effect
+ source_effect = active_effect
if(source_effect)