diff --git a/ModularTegustation/Teguicons/48x64.dmi b/ModularTegustation/Teguicons/48x64.dmi index 442de9bc3790..6435a7dc36f5 100644 Binary files a/ModularTegustation/Teguicons/48x64.dmi and b/ModularTegustation/Teguicons/48x64.dmi differ diff --git a/ModularTegustation/Teguicons/96x64.dmi b/ModularTegustation/Teguicons/96x64.dmi index 5d3e6cc4b8ab..4d91167ba1c5 100644 Binary files a/ModularTegustation/Teguicons/96x64.dmi and b/ModularTegustation/Teguicons/96x64.dmi differ diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index e820e66c72ba..d7ab15b84e9d 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -916,6 +916,9 @@ . = ..() animate(src, alpha = 0, time = 10) +/obj/effect/temp_visual/talisman/curse + icon_state = "curse_talisman" + /obj/effect/temp_visual/turn_book name = "scattered pages" icon_state = "turn_book" diff --git a/code/modules/mob/living/carbon/human/ego_gifts.dm b/code/modules/mob/living/carbon/human/ego_gifts.dm index 8a8973a29023..3b66453174fb 100644 --- a/code/modules/mob/living/carbon/human/ego_gifts.dm +++ b/code/modules/mob/living/carbon/human/ego_gifts.dm @@ -399,7 +399,7 @@ icon_state = "sorrow" fortitude_bonus = 1 prudence_bonus = 3 - slot = HAT + slot = HELMET /datum/ego_gifts/sorority name = "Sorority" @@ -448,9 +448,9 @@ /datum/ego_gifts/fourleaf_clover name = "Four-Leaf Clover" icon_state = "fourleaf_clover" - fortitude_bonus = -2 - prudence_bonus = 4 - slot = HAT + fortitude_bonus = 3 + prudence_bonus = 1 + slot = HELMET /datum/ego_gifts/patriot name = "Patriot" @@ -475,6 +475,12 @@ prudence_bonus = 4 slot = HAND_1 +/datum/ego_gifts/red_sheet + name = "Talisman Bundle" + icon_state = "red_sheet" + justice_bonus = 3 + slot = HELMET + /// All HE EGO Gifts /datum/ego_gifts/loggging name = "Logging" diff --git a/code/modules/mob/living/simple_animal/abnormality/teth/fairy_gentleman.dm b/code/modules/mob/living/simple_animal/abnormality/teth/fairy_gentleman.dm index a462e967bc01..e9b21b037920 100644 --- a/code/modules/mob/living/simple_animal/abnormality/teth/fairy_gentleman.dm +++ b/code/modules/mob/living/simple_animal/abnormality/teth/fairy_gentleman.dm @@ -3,17 +3,32 @@ desc = "A very wide humanoid with long arms made of green, dripping slime." icon = 'ModularTegustation/Teguicons/96x64.dmi' icon_state = "fairy_gentleman" - maxHealth = 600 - health = 600 + maxHealth = 900 + health = 900 + ranged = TRUE + rapid_melee = 1 + melee_queue_distance = 2 + move_to_delay = 5 + damage_coeff = list(BRUTE = 1, RED_DAMAGE = 0.7, WHITE_DAMAGE = 1.5, BLACK_DAMAGE = 1, PALE_DAMAGE = 2) + melee_damage_lower = 6 + melee_damage_upper = 12 + melee_damage_type = WHITE_DAMAGE //Low damage - makes you drunk on a hit + armortype = WHITE_DAMAGE + stat_attack = HARD_CRIT + attack_sound = 'sound/abnormalities/fairygentleman/ego_sloshing.ogg' + attack_verb_continuous = "slaps" + attack_verb_simple = "slap" + can_breach = TRUE threat_level = TETH_LEVEL + start_qliphoth = 1 work_chances = list( ABNORMALITY_WORK_INSTINCT = 60, ABNORMALITY_WORK_INSIGHT = 45, ABNORMALITY_WORK_ATTACHMENT = list(50, 50, 55, 55, 60), ABNORMALITY_WORK_REPRESSION = list(30, 25, 25, 20, 15) ) - pixel_x = -32 - base_pixel_x = -32 + pixel_x = -34 + base_pixel_x = -34 work_damage_amount = 8 work_damage_type = RED_DAMAGE @@ -22,36 +37,163 @@ /datum/ego_datum/armor/sloshing ) gift_type = /datum/ego_gifts/sloshing - gift_message = "This wine tastes quite well..." + gift_message = "This wine tastes quite good..." abnormality_origin = ABNORMALITY_ORIGIN_LIMBUS + var/can_act = TRUE + var/jump_cooldown = 0 + var/jump_cooldown_time = 8 SECONDS + var/jump_damage = 30 + var/jump_sound = 'sound/abnormalities/fairygentleman/jump.ogg' + var/jump_aoe = 1 + var/list/give_drink = list( "You quite an interesting one, Feel free to take this drink! It is on the house!", - "Aright, I think you deserve this drink! Drink as much as you can!", - "HA HA HA HA!!! That was quite funny of you, Feel free to take this drink from my hands.", - "Come on now, No need to worry about this drink. I made it so you can just relax...", - "*Burp* Oh, That was quite rude of me. Here is a drink as an apology for my behavior" + "Attaboy, I think you deserve this! Drink! Drink 'til you're half seas over!", + "HA HA HA HA!!! You can really talk an earful! Here, have one on me!", + "Come on now, no need to worry. Try some of this giggle water, it's the bee's knees!", + "Plum outta luck for eatery, I’ve already had all the food. Would ya care for a drink?" ) var/list/disappointed = list( - "Really now? I don't think this will help any of us if you continue like this.", - "Okay, This is not funny, What did I do to you? I just offer drinks to people unlike the other ones.", - "This is quite sad, This is how you treat me after giving you all of you my finest drinks?", - "Come on now, Please try a bit better. Don't you want a free drink from me?", - "Hm... Let me just ask you this. Are you okay? What happend which caused you to work like this?" + "Pipe down, pinko. I don't think this will help any of us if you continue like this.", + "Come on now, what did I ever do to you? A little hootch never hurt nobody.", + "This is how you treat me after giving you all of you my finest drinks?", + "I have to go see a man about a dog.", + "Are you okay? A big shot like yourself has no need to hold back." + ) + + var/list/angry = list( + "I'll wring you out!", + "Come on, I'm taking you for a ride!", + "This is all I got!", + "I'll be havin' this!", + "Scram!" ) +//Action Buttons + attack_action_types = list(/datum/action/innate/abnormality_attack/toggle/FairyJump_Toggle) + +/datum/action/innate/abnormality_attack/toggle/FairyJump_Toggle + name = "Toggle Jump" + button_icon_state = "generic_toggle0" + chosen_attack_num = 2 + chosen_message = "You won't jump anymore." + button_icon_toggle_activated = "generic_toggle1" + toggle_attack_num = 1 + toggle_message = "You will now jump with your next attack when possible." + button_icon_toggle_deactivated = "generic_toggle0" + +//Work mechanics /mob/living/simple_animal/hostile/abnormality/fairy_gentleman/SuccessEffect(mob/living/carbon/human/user, work_type, pe) - var/turf/dispense_turf = get_step(src, pick(1,2,4,5,6,8,9,10)) - new/obj/item/reagent_containers/food/drinks/fairywine(dispense_turf) - visible_message("[src] gives out some fairy wine.") - say(pick(give_drink)) + if(pe >= 11) // Almost perfect work + var/turf/dispense_turf = get_step(src, pick(1,2,4,5,6,8,9,10)) + new/obj/item/reagent_containers/food/drinks/fairywine(dispense_turf) + visible_message("[src] gives out some fairy wine.") + say(pick(give_drink)) return /mob/living/simple_animal/hostile/abnormality/fairy_gentleman/PostWorkEffect(mob/living/carbon/human/user, work_type, pe, work_time) if(work_type == ABNORMALITY_WORK_INSTINCT) user.reagents.add_reagent(/datum/reagent/consumable/ethanol/fairywine, 10) visible_message("You take a drink with the fairy gentleman. ") - say("Quite a lot of thanks for sharing this drink with me. Not many people often want to share this drink with me.") + say("Ha! Easy on the good stuff, hot shot!") return -/mob/living/simple_animal/hostile/abnormality/fairy_gentleman/FailureEffect(mob/living/carbon/human/user, work_type, pe) +/mob/living/simple_animal/hostile/abnormality/fairy_gentleman/NeutralEffect(mob/living/carbon/human/user, work_type, pe) say(pick(disappointed)) + +/mob/living/simple_animal/hostile/abnormality/fairy_gentleman/FailureEffect(mob/living/carbon/human/user, work_type, pe) + datum_reference.qliphoth_change(-1) + return + +//Breach Mechanics +/mob/living/simple_animal/hostile/abnormality/fairy_gentleman/BreachEffect(mob/living/carbon/human/user) //he flies + . = ..() + AddComponent(/datum/component/knockback, 1, FALSE, TRUE) + say(pick(angry)) + is_flying_animal = TRUE + ADD_TRAIT(src, TRAIT_MOVE_FLYING, INNATE_TRAIT) + +/mob/living/simple_animal/hostile/abnormality/fairy_gentleman/AttackingTarget() + if(!can_act) + return + melee_damage_type = WHITE_DAMAGE + if(jump_cooldown <= world.time && prob(10) && !client) + FairyJump(target) + return + if(!ishuman(target)) + return ..() + var/mob/living/carbon/human/H = target + H.drunkenness += 5 + to_chat(H, "Yuck, some of it got in your mouth!") + if(H.sanity_lost) + melee_damage_type = RED_DAMAGE + return ..() + return ..() + + +/mob/living/simple_animal/hostile/abnormality/fairy_gentleman/Move() + if(!can_act) + return FALSE + return ..() + +/mob/living/simple_animal/hostile/abnormality/fairy_gentleman/OpenFire() + if(!can_act) + return FALSE + if(client) + if(chosen_attack != 1) + return + FairyJump(target) + return + + var/dist = get_dist(target, src) + if(jump_cooldown <= world.time) + var/chance_to_jump = 25 + if(dist > 3) + chance_to_jump = 100 + if(prob(chance_to_jump)) + FairyJump(target) + return + +// Attacks +/mob/living/simple_animal/hostile/abnormality/fairy_gentleman/proc/FairyJump(mob/living/target) + if(!istype(target) || !can_act) + return + var/dist = get_dist(target, src) + if(dist > 1 && jump_cooldown < world.time) + say(pick(angry)) + jump_cooldown = world.time + jump_cooldown_time + can_act = FALSE + SLEEP_CHECK_DEATH(0.25 SECONDS) + animate(src, alpha = 1, pixel_z = 16, time = 0.1 SECONDS) + src.pixel_z = 16 + playsound(src, 'sound/abnormalities/ichthys/jump.ogg', 50, FALSE, 4) + var/turf/target_turf = get_turf(target) + SLEEP_CHECK_DEATH(1 SECONDS) + forceMove(target_turf) //look out, someone is rushing you! + playsound(src, jump_sound, 50, FALSE, 4) + animate(src, alpha = 255, pixel_z = -16, time = 0.1 SECONDS) + src.pixel_z = 0 + SLEEP_CHECK_DEATH(0.1 SECONDS) + var/target_drunk + for(var/turf/T in view(jump_aoe, src)) + var/obj/effect/temp_visual/small_smoke/halfsecond/FX = new(T) + FX.color = "#b52e19" + for(var/mob/living/L in T) + if(faction_check_mob(L)) + continue + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(H.drunkenness > 50) // easter egg - being drunk makes you stagger him + target_drunk = TRUE + jump_damage = 0 + else + jump_damage = initial(jump_damage) + L.apply_damage(jump_damage, BLACK_DAMAGE, null, L.run_armor_check(null, WHITE_DAMAGE), spread_damage = TRUE) + if(L.health < 0) + L.gib() + var/wait_time = 0.5 SECONDS + if(target_drunk) + wait_time += 3.5 SECONDS + visible_message("[src] staggers around, exposing a weak point!", "You feel dizzy!") + SLEEP_CHECK_DEATH(wait_time) + can_act = TRUE diff --git a/code/modules/mob/living/simple_animal/abnormality/teth/fairy_long_legs.dm b/code/modules/mob/living/simple_animal/abnormality/teth/fairy_long_legs.dm index 4313ac83f6ca..1ae0e4daadc2 100644 --- a/code/modules/mob/living/simple_animal/abnormality/teth/fairy_long_legs.dm +++ b/code/modules/mob/living/simple_animal/abnormality/teth/fairy_long_legs.dm @@ -39,7 +39,7 @@ var/finishing = FALSE //cant move/attack when it's TRUE var/work_count = 0 var/raining = FALSE - var/covering = 0 //stores the agent's choice: 0 - disabled/1- taking cover/2- refused cover + var/ignored = 0 //stores the agent's choice: 0 - disabled/1- refused cover ego_list = list( /datum/ego_datum/weapon/fourleaf_clover, @@ -69,6 +69,9 @@ work_count++ if(work_count < 3) return + if(!raining && (IsContained(src))) + for(var/turf/open/O in view(3, src)) + new /obj/effect/rainy_effect(O) say("Oh dear, i'd advise against being hit by this rain.") //tries to trick people into getting cover sleep(1 SECONDS) say("Care to join me under my umbrella?") @@ -83,19 +86,15 @@ to_chat(user, "There's no reason, the skies are clear.") return FALSE if((work_type == "Take cover") && raining) //Uh oh, you goofed up - to_chat(user, "You take cover under the fairy's clover.") + to_chat(user, "You decide to take cover under the fairy's clover.") work_count = 0 - covering = 1 //user is taking cover + Execute(user) return FALSE if((work_type != "Take cover") && raining) - if (covering == 1) //if you already chose to take cover - say ("What do you say, it's so cozy under this umbrella, isn't it?") - raining = FALSE - return TRUE - to_chat(user, "The rain is oddly reinvigorating.") - user.adjustBruteLoss(-80) //The rain actually heals you, lying bastard... + for(var/obj/effect/rainy_effect/rain in range(3, src)) + rain.End(TRUE) //The rain actually heals you, lying bastard... work_count = 0 - covering = 2 //[[FAIRY-LONG-LEGS WILL REMEMBER THIS]] + ignored = TRUE raining = FALSE return TRUE @@ -107,22 +106,29 @@ /mob/living/simple_animal/hostile/abnormality/fairy_longlegs/PostWorkEffect(mob/living/carbon/human/user, work_type, pe, work_time) if(get_attribute_level(user, FORTITUDE_ATTRIBUTE) < 40) datum_reference.qliphoth_change(-2) - if (covering == 2) //refused his offer to take cover + if (ignored) //refused his offer to take cover say("Tch, this damn rain robs me of my food all the time.") - covering = 0 + ignored = FALSE datum_reference.qliphoth_change(-2) - if (covering == 1) //taking cover under the clover with the long legs (bad idea!) - covering = 0 - user.visible_message("You feel a stinging pain in your chest, is that...blood?!") - playsound(get_turf(src), 'sound/abnormalities/fairy_longlegs/attack.ogg', 50, 1) - user.apply_damage(80, RED_DAMAGE, null, user.run_armor_check(null, RED_DAMAGE), spread_damage = TRUE) - return +/mob/living/simple_animal/hostile/abnormality/fairy_longlegs/proc/Execute(mob/living/carbon/human/user) + user.Stun(3 SECONDS) + step_towards(user, src) + sleep(0.5 SECONDS) + step_towards(user, src) + sleep(1.5 SECONDS) + user.visible_message("You feel a stinging pain in your chest, is that...blood?!") + playsound(get_turf(src), 'sound/abnormalities/fairy_longlegs/attack.ogg', 50, 1) + user.apply_damage(100, RED_DAMAGE, null, user.run_armor_check(null, RED_DAMAGE), spread_damage = TRUE) + for(var/obj/effect/rainy_effect/rain in range(3, src)) + rain.End(FALSE) + +//Breach Stuff /mob/living/simple_animal/hostile/abnormality/fairy_longlegs/AttackingTarget() if(finishing) return FALSE if(!istype(target, /mob/living/carbon/human)) - return + return ..() finishing = TRUE icon_state = "fairy_longlegs_healing" playsound(get_turf(src), 'sound/abnormalities/fairy_longlegs/heal.ogg', 50, 1) @@ -131,3 +137,26 @@ SLEEP_CHECK_DEATH(15) icon_state = "fairy_longlegs" finishing = FALSE + +/mob/living/simple_animal/hostile/abnormality/fairy_longlegs/BreachEffect(mob/living/carbon/human/user) + . = ..() + if(raining) + for(var/obj/effect/rainy_effect/rain in range(3, src)) + rain.End(TRUE) + +//Misc. Objects +/obj/effect/rainy_effect + name = "rain" + desc = "It's pouring." + icon = 'icons/effects/weather_effects.dmi' + icon_state = "acid_rain" + layer = POINT_LAYER //want this high but not above warnings + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + anchored = TRUE + +/obj/effect/rainy_effect/proc/End(healing) + if(healing) + for(var/mob/living/carbon/human/H in get_turf(src)) + to_chat(H, "The rain is oddly reinvigorating.") + H.adjustBruteLoss(-80) + QDEL_IN(src, 50) diff --git a/code/modules/mob/living/simple_animal/abnormality/teth/so_that_no_cry.dm b/code/modules/mob/living/simple_animal/abnormality/teth/so_that_no_cry.dm index 487f2a734af7..a060b22c9244 100644 --- a/code/modules/mob/living/simple_animal/abnormality/teth/so_that_no_cry.dm +++ b/code/modules/mob/living/simple_animal/abnormality/teth/so_that_no_cry.dm @@ -5,9 +5,23 @@ desc = "An abnormality taking the form of a wooden doll, various strange paper talismans are attached to it's body." icon = 'ModularTegustation/Teguicons/48x64.dmi' icon_state = "so_that_no_cry" - maxHealth = 800 - health = 800 + icon_living = "so_that_no_cry" + maxHealth = 1200 //High health, can be stunned. + health = 1200 + rapid_melee = 2 + move_to_delay = 3 + damage_coeff = list(BRUTE = 1, RED_DAMAGE = 1.5, WHITE_DAMAGE = 1, BLACK_DAMAGE = 1, PALE_DAMAGE = 2) + melee_damage_lower = 6 + melee_damage_upper = 12 + melee_damage_type = BLACK_DAMAGE + armortype = BLACK_DAMAGE + stat_attack = HARD_CRIT + attack_sound = 'sound/abnormalities/so_that_no_cry/attack.ogg' + attack_verb_continuous = "smacks" + attack_verb_simple = "smack" + can_breach = TRUE threat_level = TETH_LEVEL + start_qliphoth = 1 work_chances = list( ABNORMALITY_WORK_INSTINCT = 30, ABNORMALITY_WORK_INSIGHT = list(45, 50, 55, 55, 55), @@ -23,20 +37,31 @@ /datum/ego_datum/weapon/red_sheet, /datum/ego_datum/armor/red_sheet ) + gift_type = /datum/ego_gifts/red_sheet abnormality_origin = ABNORMALITY_ORIGIN_LIMBUS + var/can_act = TRUE + /// When this reaches 400 - begins reflecting damage + var/damage_taken = 0 + var/damage_reflection = FALSE + var/talismans = 0 + +//Work Mechanics /mob/living/simple_animal/hostile/abnormality/so_that_no_cry/proc/Apply_Talisman(mob/living/carbon/human/user) var/datum/status_effect/stacking/curse_talisman/C = user.has_status_effect(/datum/status_effect/stacking/curse_talisman) var/datum/status_effect/stacking/talisman/G = user.has_status_effect(/datum/status_effect/stacking/talisman) playsound(src, 'sound/abnormalities/so_that_no_cry/talisman.ogg', 100, 1) if (!C)//cant take talismans if cursed already if(!G)//applying the buff for the first time (it lasts for four minutes) + new /obj/effect/temp_visual/talisman(get_turf(user)) user.apply_status_effect(STATUS_EFFECT_TALISMAN) to_chat(user, "A talisman quietly dettaches from the abnormality and sticks to you.") else//if the employee already has the buff, add a stack and refresh to_chat(user, "Another talisman sticks to you.") if (G.stacks == 5) playsound(src, 'sound/abnormalities/so_that_no_cry/curse_talisman.ogg', 100, 1) + else + new /obj/effect/temp_visual/talisman(get_turf(user)) G.add_stacks(1) G.refresh() return @@ -50,12 +75,154 @@ return /mob/living/simple_animal/hostile/abnormality/so_that_no_cry/PostWorkEffect(mob/living/carbon/human/user, work_type, pe, work_time) + var/datum/status_effect/stacking/curse_talisman/G = user.has_status_effect(/datum/status_effect/stacking/curse_talisman) + if(G) + to_chat(user, "The abnormality gets up and starts moving - and you can't move a muscle!") + user.Stun(50) + datum_reference.qliphoth_change(-1) + return if(work_type == ABNORMALITY_WORK_INSTINCT) Remove_Talisman(user) if(work_type == ABNORMALITY_WORK_INSIGHT) Apply_Talisman(user) return +//Breach Mechanics +// All damage reflection stuff is down here +/mob/living/simple_animal/hostile/abnormality/so_that_no_cry/proc/ReflectDamage(mob/living/attacker, attack_type = RED_DAMAGE, damage) + if(damage < 1) + return + if(!damage_reflection) + return + var/turf/jump_turf = get_step(attacker, pick(GLOB.alldirs)) + if(jump_turf.is_blocked_turf(exclude_mobs = TRUE)) + jump_turf = get_turf(attacker) + forceMove(jump_turf) + playsound(src, 'sound/abnormalities/so_that_no_cry/counter.ogg', min(15 + damage, 100), TRUE, 4) + attacker.visible_message("[src] hits [attacker] with a barrage of punches!", "[src] counters your attack!") + do_attack_animation(attacker) + attacker.apply_damage(damage, attack_type, null, attacker.getarmor(null, attack_type)) + new /obj/effect/temp_visual/revenant(get_turf(attacker)) + +/mob/living/simple_animal/hostile/abnormality/so_that_no_cry/Move() + if(!can_act) + return FALSE + return ..() + +/mob/living/simple_animal/hostile/abnormality/so_that_no_cry/attack_hand(mob/living/carbon/human/M) + ..() + if(!.) + return + if(damage_reflection && M.a_intent == INTENT_HARM) + ReflectDamage(M, M?.dna?.species?.attack_type, M?.dna?.species?.punchdamagehigh) + if(ishuman(M)) + TryAttachTalisman(M) + +/mob/living/simple_animal/hostile/abnormality/so_that_no_cry/attack_paw(mob/living/carbon/human/M) + ..() + if(damage_reflection && M.a_intent != INTENT_HELP) + ReflectDamage(M, M?.dna?.species?.attack_type, 5) + if(ishuman(M)) + TryAttachTalisman(M) + +/mob/living/simple_animal/hostile/abnormality/so_that_no_cry/attack_animal(mob/living/simple_animal/M) + . = ..() + if(!damage_reflection) + return + if(.) + var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) + if(damage > 0) + ReflectDamage(M, M.melee_damage_type, damage) + +/mob/living/simple_animal/hostile/abnormality/so_that_no_cry/bullet_act(obj/projectile/Proj, def_zone, piercing_hit = FALSE) + ..() + if(damage_reflection && Proj.firer) + if(get_dist(Proj.firer, src) < 5) + ReflectDamage(Proj.firer, Proj.damage_type, Proj.damage) + +/mob/living/simple_animal/hostile/abnormality/so_that_no_cry/attackby(obj/item/I, mob/living/user, params) + ..() + if(ishuman(user)) + TryAttachTalisman(user) + if(!damage_reflection) + return + var/damage = I.force + if(ishuman(user)) + damage *= 1 + (get_attribute_level(user, JUSTICE_ATTRIBUTE)/100) + ReflectDamage(user, I.damtype, damage) + +//Reflect Code +/mob/living/simple_animal/hostile/abnormality/so_that_no_cry/adjustHealth(amount, updating_health = TRUE, forced = FALSE) + . = ..() + if(. > 0) + damage_taken += . + if(health < 0) + damage_reflection = FALSE + return + if(!can_act) + return + if(damage_taken > 400 && !damage_reflection) + StartReflecting() + +/mob/living/simple_animal/hostile/abnormality/so_that_no_cry/proc/StartReflecting() + can_act = FALSE + damage_reflection = TRUE + damage_taken = 0 + playsound(src, 'sound/abnormalities/so_that_no_cry/prepare.ogg', 50, TRUE, 7) + visible_message("A talisman is attached to [src]!") + talismans += 1 + if(talismans > 10) + TalismanStun() + move_to_delay = initial(move_to_delay) + return + new /obj/effect/temp_visual/talisman(get_turf(src)) + move_to_delay = (3 + (talismans / 10)) + UpdateSpeed() + +/mob/living/simple_animal/hostile/abnormality/so_that_no_cry/proc/TalismanStun() + if(!can_act) + return + can_act = FALSE + new /obj/effect/temp_visual/talisman/curse(get_turf(src)) + var/stun_duration = talismans * 5 + icon_state = "so_that_no_cry_stunned" + visible_message("[src] freezes entirely as a talisman is attached to its body!") + SLEEP_CHECK_DEATH(stun_duration) + icon_state = "so_that_no_cry" + can_act = TRUE + talismans = 0 + //** STATUS EFFECTS **// //TALISMAN /datum/status_effect/stacking/talisman //Justice increasing talismans @@ -86,6 +253,7 @@ var/mob/living/carbon/human/H = owner safe_removal = TRUE H.apply_status_effect(STATUS_EFFECT_CURSETALISMAN) + new /obj/effect/temp_visual/talisman/curse(get_turf(H)) var/datum/status_effect/stacking/curse_talisman/G = H.has_status_effect(/datum/status_effect/stacking/curse_talisman) G.add_stacks(5) return ..() diff --git a/code/modules/paperwork/records/info/teth.dm b/code/modules/paperwork/records/info/teth.dm index 1e78a5f39a38..389304792621 100644 --- a/code/modules/paperwork/records/info/teth.dm +++ b/code/modules/paperwork/records/info/teth.dm @@ -263,9 +263,10 @@ abno_type = /mob/living/simple_animal/hostile/abnormality/fairy_gentleman abno_code = "F-01-161" abno_info = list( - "After getting a good result with the Fairy Gentleman, He gives the employee a bottle of what he calls “Fairy Wine.”", + "After generating 11 or more PE boxes with the Fairy Gentleman, he gives the employee a bottle of what he calls “Fairy Wine.”", "Drinking the “Fairy Wine” increase the prudence of the agent who drinks it and then heals their sanity. However, drinking this wine also will make the user become drunk incredibly quickly. Employees who drank too much fairy wine felt better after taking a special chemical using a sleeper.", - "Doing instinct work with the Fairy Gentleman will also cause the agent to take a drink with the Gentleman.") + "When the work result was Bad, the Qliphoth Counter lowered.", + "Performing instinct work with the Fairy Gentleman will also cause the agent to take a drink with the Gentleman.") //Fairy-Long-Legs /obj/item/paper/fluff/info/teth/fairy_longlegs @@ -289,7 +290,8 @@ "Employee's reported to feel stronger when the yellow talismans attached to them, feeling a increase in their movement speed and attack power.", "After a few minutes passed, the talisman's color changed from yellow to purple, taking another talisman seemed to prevent this from temporarily ocurring for the same window of time.", "If too many yellow talismans attached to the employee, they also became purple talismans.", - "Purple talismans seem to sap the strength from whomever they are attached, reducing their movement speed and attack power. The talismans slowly vanished after several minutes.") + "Purple talismans seem to sap the strength from whomever they are attached, reducing their movement speed and attack power. The talismans slowly vanished after several minutes.", + "After completing work with purple talismans, the Qliphoth Counter lowered.") //Red Blooded American /obj/item/paper/fluff/info/teth/redblooded diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 0919c67102dc..df54d48fd888 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/clothing/ego_gear/ego_gifts.dmi b/icons/mob/clothing/ego_gear/ego_gifts.dmi index 376976ab087c..e5cca5c11034 100644 Binary files a/icons/mob/clothing/ego_gear/ego_gifts.dmi and b/icons/mob/clothing/ego_gear/ego_gifts.dmi differ diff --git a/sound/abnormalities/fairygentleman/jump.ogg b/sound/abnormalities/fairygentleman/jump.ogg new file mode 100644 index 000000000000..a8b310927df8 Binary files /dev/null and b/sound/abnormalities/fairygentleman/jump.ogg differ diff --git a/sound/abnormalities/so_that_no_cry/attack.ogg b/sound/abnormalities/so_that_no_cry/attack.ogg new file mode 100644 index 000000000000..40e9ea370833 Binary files /dev/null and b/sound/abnormalities/so_that_no_cry/attack.ogg differ diff --git a/sound/abnormalities/so_that_no_cry/counter.ogg b/sound/abnormalities/so_that_no_cry/counter.ogg new file mode 100644 index 000000000000..bfc5793a5c94 Binary files /dev/null and b/sound/abnormalities/so_that_no_cry/counter.ogg differ diff --git a/sound/abnormalities/so_that_no_cry/prepare.ogg b/sound/abnormalities/so_that_no_cry/prepare.ogg new file mode 100644 index 000000000000..5d57d150719c Binary files /dev/null and b/sound/abnormalities/so_that_no_cry/prepare.ogg differ