Skip to content

Commit

Permalink
Reworks some TETH abnormalities (#1522)
Browse files Browse the repository at this point in the history
TETH rework

wraps up fairy long legs

adds fairy gentleman breach

cool so that no one will cry stuff

finishes the pr

prevents some weirdness

buffs hp

gift changes

Update code/modules/mob/living/simple_animal/abnormality/teth/fairy_gentleman.dm

Co-authored-by: [̸R̵e̵d̴a̴c̶t̸e̸d̴]̵ <[email protected]>

Fixes stuff

fixes a bug

changes names

Removes armortype, changes so that no one will cry from white to black damage

rebased and updated to reflect new resistance PR
  • Loading branch information
Coxswain-Navigator authored Oct 31, 2023
1 parent 730f213 commit 5da4951
Show file tree
Hide file tree
Showing 14 changed files with 396 additions and 49 deletions.
Binary file modified ModularTegustation/Teguicons/48x64.dmi
Binary file not shown.
Binary file modified ModularTegustation/Teguicons/96x64.dmi
Binary file not shown.
3 changes: 3 additions & 0 deletions code/game/objects/effects/temporary_visuals/miscellaneous.dm
Original file line number Diff line number Diff line change
Expand Up @@ -925,6 +925,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"
Expand Down
14 changes: 10 additions & 4 deletions code/modules/mob/living/carbon/human/ego_gifts.dm
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,7 @@
icon_state = "sorrow"
fortitude_bonus = 1
prudence_bonus = 3
slot = HAT
slot = HELMET

/datum/ego_gifts/sorority
name = "Sorority"
Expand Down Expand Up @@ -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"
Expand All @@ -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"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,31 @@
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
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

Expand All @@ -22,36 +36,162 @@
/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)

/datum/action/innate/abnormality_attack/toggle/FairyJump
name = "Toggle Jump"
button_icon_state = "generic_toggle0"
chosen_attack_num = 2
chosen_message = "<span class='colossus'>You won't jump anymore.</span>"
button_icon_toggle_activated = "generic_toggle1"
toggle_attack_num = 1
toggle_message = "<span class='colossus'>You will now jump with your next attack when possible.</span>"
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("<span class='notice'>[src] gives out some fairy wine.</span>")
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("<span class='notice'>[src] gives out some fairy wine.</span>")
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("<span class='notice'>You take a drink with the fairy gentleman. </span>")
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, "<span class='warning'>Yuck, some of it got in your mouth!</span>")
if(H.sanity_lost)
melee_damage_type = RED_DAMAGE
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("<span class='boldwarning'>[src] staggers around, exposing a weak point!</span>", "<span class='nicegreen'>You feel dizzy!</span>")
SLEEP_CHECK_DEATH(wait_time)
can_act = TRUE
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,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,
Expand Down Expand Up @@ -68,6 +68,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?")
Expand All @@ -82,19 +85,15 @@
to_chat(user, "<span class='notice'>There's no reason, the skies are clear.</span>")
return FALSE
if((work_type == "Take cover") && raining) //Uh oh, you goofed up
to_chat(user, "<span class='danger'>You take cover under the fairy's clover.</span>")
to_chat(user, "<span class='danger'>You decide to take cover under the fairy's clover.</span>")
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, "<span class='notice'>The rain is oddly reinvigorating.</span>")
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

Expand All @@ -106,22 +105,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("<span class='warning'>You feel a stinging pain in your chest, is that...blood?!</span>")
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("<span class='warning'>You feel a stinging pain in your chest, is that...blood?!</span>")
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)
Expand All @@ -130,3 +136,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, "<span class='nicegreen'>The rain is oddly reinvigorating.</span>")
H.adjustBruteLoss(-80)
QDEL_IN(src, 50)
Loading

0 comments on commit 5da4951

Please sign in to comment.