Skip to content

Commit

Permalink
Melting Love Update (#1926)
Browse files Browse the repository at this point in the history
Updates Melting Love

adds status stuff

more ML updates

tweaks

515 update

status effect update
  • Loading branch information
Coxswain-Navigator authored Feb 11, 2024
1 parent f41b3b7 commit 6f04bd2
Show file tree
Hide file tree
Showing 5 changed files with 161 additions and 15 deletions.
Binary file modified ModularTegustation/Teguicons/status_sprites.dmi
Binary file not shown.
Binary file modified ModularTegustation/Teguicons/tegu_effects.dmi
Binary file not shown.
171 changes: 158 additions & 13 deletions code/modules/mob/living/simple_animal/abnormality/aleph/melting_love.dm
Original file line number Diff line number Diff line change
@@ -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."
Expand All @@ -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
Expand All @@ -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

Expand Down Expand Up @@ -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
Expand All @@ -103,16 +98,29 @@

// 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"
for(var/mob/living/L in view(1, target))
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))
Expand All @@ -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

Expand All @@ -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))
Expand Down Expand Up @@ -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'
Expand All @@ -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()
. = ..()
Expand All @@ -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)
Expand All @@ -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
1 change: 1 addition & 0 deletions code/modules/paperwork/records/info/aleph.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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 <strong>does not</strong> appear to carry any infectious agents.")

Expand Down
4 changes: 2 additions & 2 deletions code/modules/projectiles/projectile/magic/abnormality.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -74,8 +75,7 @@
return BULLET_ACT_HIT
if(!isbot(L))
L.visible_message("<span class='warning'>[L] is hit by [src], they seem to wither away!</span>")
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 ..()

Expand Down

0 comments on commit 6f04bd2

Please sign in to comment.