diff --git a/ModularTegustation/Teguicons/status_sprites.dmi b/ModularTegustation/Teguicons/status_sprites.dmi
index 9bfd855812af..9176097a48a2 100644
Binary files a/ModularTegustation/Teguicons/status_sprites.dmi and b/ModularTegustation/Teguicons/status_sprites.dmi differ
diff --git a/ModularTegustation/Teguicons/tegu_effects.dmi b/ModularTegustation/Teguicons/tegu_effects.dmi
index fac66aed1c56..1f0bf50f145c 100644
Binary files a/ModularTegustation/Teguicons/tegu_effects.dmi and b/ModularTegustation/Teguicons/tegu_effects.dmi differ
diff --git a/code/modules/mob/living/simple_animal/abnormality/aleph/melting_love.dm b/code/modules/mob/living/simple_animal/abnormality/aleph/melting_love.dm
index 12f170f0f0ec..27bb25984bb6 100644
--- a/code/modules/mob/living/simple_animal/abnormality/aleph/melting_love.dm
+++ b/code/modules/mob/living/simple_animal/abnormality/aleph/melting_love.dm
@@ -1,3 +1,4 @@
+#define STATUS_EFFECT_SLIMED /datum/status_effect/melty_slimed
/mob/living/simple_animal/hostile/abnormality/melting_love
name = "Melting Love"
desc = "A pink slime creature, resembling a female humanoid."
@@ -24,7 +25,7 @@
stat_attack = DEAD
minimum_distance = 0
ranged_cooldown_time = 5 SECONDS
- move_to_delay = 3.5
+ move_to_delay = 4
/* Works */
start_qliphoth = 3
can_breach = TRUE
@@ -48,11 +49,8 @@
abnormality_origin = ABNORMALITY_ORIGIN_LOBOTOMY
var/mob/living/carbon/human/gifted_human = null
- /// When FALSE - cannot attack or move
- var/can_act = TRUE
/// Amount of BLACK damage done to all enemies around main target on melee attack. Also includes original target
var/radius_damage = 30
-
var/sanityheal_cooldown = 15 SECONDS
var/sanityheal_cooldown_base = 15 SECONDS
@@ -83,9 +81,6 @@
return ..()
/mob/living/simple_animal/hostile/abnormality/melting_love/AttackingTarget()
- if(!can_act)
- return FALSE
-
// Convert
if(ishuman(target))
var/mob/living/carbon/human/H = target
@@ -103,6 +98,7 @@
// AOE attack
if(isliving(target))
+ new /obj/effect/gibspawner/generic/silent/melty_slime(get_turf(target))
for(var/turf/open/T in view(1, target))
var/obj/effect/temp_visual/small_smoke/halfsecond/S = new(T)
S.color = "#FF0081"
@@ -110,9 +106,21 @@
if(faction_check_mob(L))
continue
L.apply_damage(radius_damage, BLACK_DAMAGE, null, L.run_armor_check(null, BLACK_DAMAGE), spread_damage = TRUE)
+ L.apply_status_effect(STATUS_EFFECT_SLIMED)
return ..()
+/mob/living/simple_animal/hostile/abnormality/melting_love/Move()
+ . = ..()
+ var/turf/T = get_turf(src)
+ if(!isturf(T) || isspaceturf(T))
+ return
+ if(locate(/obj/effect/decal/cleanable/melty_slime) in T)
+ for(var/obj/effect/decal/cleanable/melty_slime/slime in T)
+ slime.Refresh()
+ return
+ new /obj/effect/decal/cleanable/melty_slime(T)
+
/* Slime Conversion */
/mob/living/simple_animal/hostile/abnormality/melting_love/proc/SlimeConvert(mob/living/carbon/human/H)
if(!istype(H))
@@ -125,7 +133,7 @@
/* Qliphoth things */
/mob/living/simple_animal/hostile/abnormality/melting_love/SuccessEffect(mob/living/carbon/human/user, work_type, pe)
. = ..()
- if(prob(33) && user == gifted_human && pe >= datum_reference?.max_boxes)
+ if(prob(33) && user == gifted_human)
datum_reference.qliphoth_change(1)
return
@@ -152,17 +160,28 @@
if(istype(gifted_human))
to_chat(gifted_human, span_userdanger("You feel like you are about to burst !"))
gifted_human.emote("scream")
- gifted_human.gib()
+ if(KillGifted())
+ UnregisterSignal(gifted_human, COMSIG_LIVING_DEATH)
+ UnregisterSignal(gifted_human, COMSIG_WORK_COMPLETED)
else
Empower()
- UnregisterSignal(gifted_human, COMSIG_LIVING_DEATH)
- UnregisterSignal(gifted_human, COMSIG_WORK_COMPLETED)
+
+/mob/living/simple_animal/hostile/abnormality/melting_love/proc/KillGifted()
+ var/mob/living/carbon/human/H = gifted_human
+ H.apply_damage(800, BLACK_DAMAGE, null, H.run_armor_check(null, BLACK_DAMAGE), spread_damage = TRUE)
+ if(!H || QDELETED(H))
+ return TRUE
+ if(H.stat == DEAD)
+ H.gib()
+ return TRUE
+ H.adjust_attribute_buff(TEMPERANCE_ATTRIBUTE, -30)
+ H.cut_overlay(mutable_appearance('icons/effects/32x64.dmi', "gift", -HALO_LAYER))
/* Gift */
/mob/living/simple_animal/hostile/abnormality/melting_love/PostWorkEffect(mob/living/carbon/human/user, work_type, pe)
if(GODMODE in user.status_flags)
return
- if(!gifted_human && istype(user) && work_type != ABNORMALITY_WORK_REPRESSION && user.stat != DEAD)
+ if(!gifted_human && istype(user) && work_type != ABNORMALITY_WORK_REPRESSION && user.stat != DEAD && (status_flags & GODMODE))
gifted_human = user
RegisterSignal(user, COMSIG_LIVING_DEATH, PROC_REF(GiftedDeath))
RegisterSignal(user, COMSIG_WORK_COMPLETED, PROC_REF(GiftedAnger))
@@ -245,7 +264,7 @@
melee_damage_upper = 25
rapid_melee = 2
speed = 2
- move_to_delay = 2.5
+ move_to_delay = 3
/* Sounds */
death_sound = 'sound/abnormalities/meltinglove/pawn_death.ogg'
attack_sound = 'sound/abnormalities/meltinglove/pawn_attack.ogg'
@@ -254,6 +273,7 @@
stat_attack = DEAD
del_on_death = TRUE
var/spawn_sound = 'sound/abnormalities/meltinglove/pawn_convert.ogg'
+ var/statuschance = 25
/mob/living/simple_animal/hostile/slime/Initialize()
. = ..()
@@ -276,6 +296,8 @@
var/mob/living/carbon/human/H = target
if(H.stat == DEAD || H.health <= HEALTH_THRESHOLD_DEAD)
return SlimeConvert(H)
+ if(prob(statuschance))
+ H.apply_status_effect(STATUS_EFFECT_SLIMED)
return ..()
/mob/living/simple_animal/hostile/slime/proc/SlimeConvert(mob/living/carbon/human/H)
@@ -301,3 +323,126 @@
melee_damage_lower = 35
melee_damage_upper = 40
spawn_sound = 'sound/abnormalities/meltinglove/pawn_big_convert.ogg'
+ statuschance = 75
+
+//Slime trails
+/obj/effect/decal/cleanable/melty_slime
+ name = "Slime"
+ desc = "It looks corrosive."
+ icon = 'ModularTegustation/Teguicons/tegu_effects.dmi'
+ icon_state = "melty_slime3"
+ random_icon_states = list("melty_slime3")
+ mergeable_decal = TRUE
+ var/duration = 30 SECONDS
+ var/state = 3
+ var/timer1
+ var/timer2
+ var/list/slime_types = list(
+ /mob/living/simple_animal/hostile/abnormality/melting_love,
+ /mob/living/simple_animal/hostile/slime/big,
+ /mob/living/simple_animal/hostile/slime
+ )
+
+/obj/effect/decal/cleanable/melty_slime/Initialize(mapload, list/datum/disease/diseases)
+ . = ..()
+ START_PROCESSING(SSobj, src)
+ duration += world.time
+ timer1 = addtimer(CALLBACK(src, PROC_REF(Reduce)), 10 SECONDS, TIMER_STOPPABLE)
+ timer2 = addtimer(CALLBACK(src, PROC_REF(Reduce)), 20 SECONDS, TIMER_STOPPABLE)
+
+/obj/effect/decal/cleanable/melty_slime/proc/Refresh()
+ icon_state = "melty_slime3"
+ duration = 30 SECONDS
+ if(timer1)
+ deltimer(timer1)
+ timer1 = null
+ if(timer2)
+ deltimer(timer2)
+ timer2 = null
+ timer1 = addtimer(CALLBACK(src, PROC_REF(Reduce)), 10 SECONDS, TIMER_STOPPABLE)
+ timer2 = addtimer(CALLBACK(src, PROC_REF(Reduce)), 20 SECONDS, TIMER_STOPPABLE)
+
+
+/obj/effect/decal/cleanable/melty_slime/proc/Reduce()
+ state -= 1
+ icon_state = "melty_slime[state]"
+ update_icon()
+
+/obj/effect/decal/cleanable/melty_slime/process(delta_time)
+ if(world.time > duration)
+ Remove()
+
+/obj/effect/decal/cleanable/melty_slime/proc/Remove()
+ STOP_PROCESSING(SSobj, src)
+ animate(src, time = (5 SECONDS), alpha = 0)
+ QDEL_IN(src, 5 SECONDS)
+
+/obj/effect/decal/cleanable/melty_slime/proc/streak(list/directions, mapload=FALSE)
+ set waitfor = FALSE
+ var/direction = pick(directions)
+ for(var/i in 0 to pick(0, 200; 1, 150; 2, 50; 3, 17; 50)) //the 3% chance of 50 steps is intentional and played for laughs.
+ if (!mapload)
+ sleep(2)
+ if(!step_to(src, get_step(src, direction), 0))
+ break
+
+/obj/effect/decal/cleanable/melty_slime/Crossed(atom/movable/AM)
+ . = ..()
+ if(!isliving(AM))
+ return FALSE
+ if(is_type_in_list(AM, slime_types, FALSE))
+ return
+ var/mob/living/L = AM
+ L.apply_status_effect(STATUS_EFFECT_SLIMED)
+
+/obj/effect/gibspawner/generic/silent/melty_slime
+ gibtypes = list(/obj/effect/decal/cleanable/melty_slime)
+ gibamounts = list(3)
+
+/obj/effect/gibspawner/generic/silent/melty_slime/Initialize()
+ if(!gibdirections.len)
+ gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH))
+ . = ..()
+ return
+
+/datum/status_effect/melty_slimed
+ id = "melty_slimed"
+ status_type = STATUS_EFFECT_REFRESH
+ alert_type = /atom/movable/screen/alert/status_effect/melty_slimed
+ duration = 10 SECONDS // Hits 5 times
+ tick_interval = 2 SECONDS
+
+/atom/movable/screen/alert/status_effect/melty_slimed
+ name = "Acidic Goo"
+ desc = "Slime is stuck to your skin, slowing you down and dealing BLACK damage!"
+ icon = 'ModularTegustation/Teguicons/status_sprites.dmi'
+ icon_state = "slimed"
+
+/datum/status_effect/melty_slimed/tick()
+ . = ..()
+ if(!isliving(owner))
+ return
+ var/mob/living/L = owner
+ L.apply_damage(10, BLACK_DAMAGE, null, L.run_armor_check(null, BLACK_DAMAGE), spread_damage = TRUE)
+ owner.playsound_local(owner, 'sound/effects/wounds/sizzle2.ogg', 25, TRUE)
+ if(!ishuman(L))
+ return
+ if((L.sanityhealth <= 0) || (L.health <= 0))
+ var/turf/T = get_turf(L)
+ new /mob/living/simple_animal/hostile/slime(T)
+ L.gib(TRUE, TRUE, TRUE)
+
+/datum/status_effect/melty_slimed/on_apply()
+ owner.add_movespeed_modifier(/datum/movespeed_modifier/slimed)
+ owner.playsound_local(owner, 'sound/abnormalities/meltinglove/ranged_hit.ogg', 50, TRUE)
+ return ..()
+
+/datum/status_effect/melty_slimed/on_remove()
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/slimed)
+ return ..()
+
+/datum/movespeed_modifier/slimed
+ multiplicative_slowdown = 1
+ variable = FALSE
+
+#undef STATUS_EFFECT_SLIMED
diff --git a/code/modules/paperwork/records/info/aleph.dm b/code/modules/paperwork/records/info/aleph.dm
index 265cdc32c3d9..2b5a1c353101 100644
--- a/code/modules/paperwork/records/info/aleph.dm
+++ b/code/modules/paperwork/records/info/aleph.dm
@@ -88,6 +88,7 @@
"When the work result was Normal, the Qliphoth Counter lowered with a normal probability.",
"Melting Love gave a lump of slime to the first employee (D-03-109-1) who performed any work other \than Repression with it. The lump healed D-03-109-1’s SP and improved their Temperance. However, further observation is needed to determine how the lump’s effects change according to the state of Melting Love.",
"When D-03-109-1 completed Repression Work, the Qliphoth Counter lowered.",
+ "When D-03-109-1 completed work on Melting Love, and the work result was Good, the Qliphoth Counter increased by 1 with a low probability.",
"The Qliphoth Counter dropped to 0 when D-03-109-1 died.",
"NOTICE: D-03-109-1 does not appear to carry any infectious agents.")
diff --git a/code/modules/projectiles/projectile/magic/abnormality.dm b/code/modules/projectiles/projectile/magic/abnormality.dm
index 518a52638006..d41c9652cf71 100644
--- a/code/modules/projectiles/projectile/magic/abnormality.dm
+++ b/code/modules/projectiles/projectile/magic/abnormality.dm
@@ -65,6 +65,7 @@
/obj/projectile/melting_blob/on_hit(target)
if(isliving(target))
+ new /obj/effect/gibspawner/generic/silent/melty_slime(get_turf(target))
var/mob/living/L = target
if(L.stat == DEAD && ishuman(L))
var/turf/T = get_turf(L)
@@ -74,8 +75,7 @@
return BULLET_ACT_HIT
if(!isbot(L))
L.visible_message("[L] is hit by [src], they seem to wither away!")
- for(var/i = 1 to 10)
- addtimer(CALLBACK(L, TYPE_PROC_REF(/mob/living, apply_damage), rand(4,6), BLACK_DAMAGE, null, L.run_armor_check(null, BLACK_DAMAGE)), 2 SECONDS * i)
+ L.apply_status_effect(/datum/status_effect/melty_slimed)
return BULLET_ACT_HIT
return ..()