Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions ModularTegustation/lc13_effects.dm
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,26 @@
animate(src, alpha = 100, time = 30)
addtimer(CALLBACK(src, PROC_REF(StartAnimation)),30)

// Abnormality work flavor text handler. Uses snowflake vars to handle spacing and such.
/obj/effect/overlay/workflavortext
name = "overlay"
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
alpha = 0
maptext_height = 64
maptext_width = 256
layer = UNDER_HUD_LAYER
plane = HUD_PLANE - 1
pixel_y = 128
pixel_x = -32

/obj/effect/overlay/workflavortext/Initialize()
. = ..()
animate(src, alpha = 255, time = 10)

/obj/effect/overlay/workflavortext/proc/FadeOut()
animate(src, alpha = 0, time = 10)
QDEL_IN(src, 12)

//Kikimora Graffiti
/obj/effect/decal/cleanable/crayon/cognito
name = "graffiti"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@
else
datum_reference.current.WorktickFailure(user)
total_boxes++
datum_reference.current.Worktick(user)
datum_reference.current.Worktick(user, total_boxes)
else
if(!CheckStatus(user)) // No punishment if the thing is already breached or any other issue is prevelant.
break
Expand Down
1 change: 1 addition & 0 deletions code/datums/abnormality/datum/abnormality.dm
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@
max_boxes = (threat_level * 4) + 6
if(threat_level >= 5)
max_boxes += 4
current.max_boxes = max_boxes // Prevents abnormalities from having 0 max_boxes at the mob level.
else
max_boxes = current.max_boxes
if(!current.success_boxes)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,9 +102,21 @@
var/list/grouped_abnos = list()
//Abnormaltiy portrait, updated on spawn if they have one.
var/portrait = "UNKNOWN"

/// Abnormality core icon and info
var/core_icon = ""
var/core_enabled = TRUE

/// Floating text object reference
var/obj/effect/overlay/workflavortext/flavor_text = null
var/work_start_lines = list("%PERSON started working on %ABNO...")
var/early_work_lines = list()
var/middle_work_line = list()
var/late_work_lines = list()
var/work_end_lines = list()
var/nextline_boxes = -1
var/boxes_divisor = -1

/// If an abnormality should not be possessed even if possessibles are enabled, mainly for admins.
var/do_not_possess = FALSE

Expand Down Expand Up @@ -279,14 +291,14 @@
return ..()

/mob/living/simple_animal/hostile/abnormality/proc/HarvestChem(obj/item/reagent_containers/C, mob/user)
visible_message(HarvestMessageProcess(harvest_phrase_third, user, C), HarvestMessageProcess(harvest_phrase, user, C))
visible_message(MessageProcess(harvest_phrase_third, user, C), MessageProcess(harvest_phrase, user, C))
if(chem_type)
C.reagents.add_reagent(chem_type, chem_yield)
else
C.reagents.add_reagent(pick(dummy_chems), chem_yield)
chem_cooldown_timer = world.time + chem_cooldown

/mob/living/simple_animal/hostile/abnormality/proc/HarvestMessageProcess(str, user, vessel) // Jacked from announcement_system.dm
/mob/living/simple_animal/hostile/abnormality/proc/MessageProcess(str, user, vessel) // Jacked from announcement_system.dm
str = replacetext(str, "%PERSON", "[user]")
str = replacetext(str, "%VESSEL", "[vessel]")
str = replacetext(str, "%ABNO", "[src]")
Expand Down Expand Up @@ -401,6 +413,9 @@ The variable's key needs to be non-numerical.*/
// Called by datum_reference when work is done
/mob/living/simple_animal/hostile/abnormality/proc/WorkComplete(mob/living/carbon/human/user, work_type, pe, work_time, canceled)
SHOULD_CALL_PARENT(TRUE)
if(flavor_text)
flavor_text.FadeOut()
flavor_text = null
if(pe >= datum_reference.success_boxes)
SuccessEffect(user, work_type, pe, work_time, canceled)
else if(pe >= datum_reference.neutral_boxes)
Expand Down Expand Up @@ -457,7 +472,10 @@ The variable's key needs to be non-numerical.*/
return TRUE

// Additional effect on each work tick, whether successful or not
/mob/living/simple_animal/hostile/abnormality/proc/Worktick(mob/living/carbon/human/user)
/mob/living/simple_animal/hostile/abnormality/proc/Worktick(mob/living/carbon/human/user, boxes)
if(boxes != nextline_boxes)
return
FlavorTextHandler(user, boxes, FALSE)
return

// Additional effect on each individual work tick success
Expand Down Expand Up @@ -485,6 +503,7 @@ The variable's key needs to be non-numerical.*/

// Dictates whereas this type of work can be performed at the moment or not
/mob/living/simple_animal/hostile/abnormality/proc/AttemptWork(mob/living/carbon/human/user, work_type)
FlavorTextHandler(user, null, TRUE)
return TRUE

// Overrides the normal work delay. Called in abnormality_work.dm each worktick.
Expand Down Expand Up @@ -630,6 +649,34 @@ The variable's key needs to be non-numerical.*/
return
return new /obj/effect/gibspawner/generic(drop_location(), src, get_static_viruses())

// This could be optimized. A LOT! Currently should be considered a draft.
/mob/living/simple_animal/hostile/abnormality/proc/FlavorTextHandler(mob/living/carbon/human/user, boxes, started = FALSE)
var/display_text
var/display_text_style = "font-family: 'Railway'; text-align: center; font-size:9pt;"
if(started)
if(flavor_text) // How do we have one? Get rid of it
flavor_text.FadeOut()
var/turf/target_turf = get_ranged_target_turf(src, SOUTHWEST, 1)
var/obj/effect/overlay/workflavortext/T = new(target_turf)
flavor_text = T
display_text = pick(work_start_lines)
boxes_divisor = (round(datum_reference.max_boxes * 0.15))
nextline_boxes = boxes_divisor
else if(boxes)
if(boxes == boxes_divisor)
display_text = pick(early_work_lines)
nextline_boxes = boxes_divisor * 2
if((boxes == boxes_divisor * 2) && middle_work_line)
display_text = pick(middle_work_line)
nextline_boxes = boxes_divisor * 3
if((boxes == (datum_reference.max_boxes - (boxes_divisor * 2))) && late_work_lines)
display_text = pick(late_work_lines)
nextline_boxes = (datum_reference.max_boxes - boxes_divisor)
if((boxes == datum_reference.max_boxes - boxes_divisor) && work_end_lines)
display_text = pick(work_end_lines)
flavor_text.maptext = "<span style=\"[display_text_style]\">[MessageProcess(display_text, user, "NULL")]</span><br>"
return TRUE

// Actions
/datum/action/innate/abnormality_attack
name = "Abnormality Attack"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@
You opened your eyes and looked again at the heart. <br>It remains in the air, floating towards a new beginning."),
)

work_start_lines = list("Often, some of our employees will be eager to throw themselves into %ABNO.")
middle_work_line = list("Our %ABNO was born in an abyss of despair and floats towards a new beginning.")

var/pulse_cooldown
var/pulse_cooldown_time = 8 SECONDS
var/pulse_damage = 30 // Scales with distance; Ideally, you shouldn't be able to outheal it with white V armor or less
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@
You're not ready to build the future."),
)

work_start_lines = list("%PERSON is (CENSORED) to (CENSORED).")
early_work_lines = list("%PERSON is feeling (CENSORED) from (CENSORED).")
late_work_lines = list("(CENSORED) is doing (CENSORED) and... Goodness, that's disgusting.")

var/can_act = TRUE
var/ability_damage = 50
var/ability_cooldown
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@
"I don't recognize them" = list(FALSE, "They're holding all the laughter of those who cannot be seen here. <br>The mounds begins to shamble, upon borrowed hands and feet, it has your scent now and it will never be satisfied."),
)

work_start_lines = list("%ABNO is searching for the smell of a body, carrying the smiles of many.")
middle_work_line = list("%ABNO waits for the oncoming smell of blood, holding all of the laughter of those who cannot be seen here.")

/// Is user performing work hurt at the beginning?
var/agent_hurt = FALSE
var/death_counter = 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,14 @@ GLOBAL_LIST_EMPTY(apostles)
"Why have you come?" = list(FALSE, "Thy question is empty, I cannot answer"),
)

work_start_lines = list("%PERSON, repented, enters the Containment Unit, following His divine light.", "\"What maketh thee hesitate? I work miracles here.\"")
early_work_lines = list("%ABNO looks like a fetus, but it seems as though He needs no nannying.",
"When the bell struck twelve, the facility was swallowed by a blinding light. It was the light of redemption for His disciples.")
middle_work_line = list("Only silence fills the air around %ABNO.", "%ABNO absorbs all light and sound which surrounds Him.")
late_work_lines = list("%ABNO came here to redeem you and lead the new world.", "%ABNO arrived from the end of the world, and He walks towards the beginning of the new world.")
work_end_lines = list("\"%PERSON, why art thou in fear? I shall not leave thee until I have completed my mission.\"",
"\"%PERSON, be not frightened. I am thy savior and I shall be with thee.\"", "\"I heard thy cries. Thy heart reached me. %PERSON, thou hath called me.\"")

var/holy_revival_cooldown
var/holy_revival_cooldown_base = 75 SECONDS
var/holy_revival_damage = 80 // Pale damage, scales with distance
Expand Down
12 changes: 12 additions & 0 deletions code/modules/mob/living/simple_animal/abnormality/he/funeral.dm
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,18 @@
A kaledioscope of butterflies follows you as you leave the containment unit."),
)

work_start_lines = list("Having someone to mourn for you after your death is a blessing.",
"Those who remain have no time to remember those who've died, all they can do is prepare for the next death.", "%ABNO gazes upon %PERSON in still silence.")
early_work_lines = list("%ABNO dreams. The curtain draws down on the ideal born in vain, but it is without an accompanying conclusion.",
"The huge coffin isn't nearly enough to substitute the hundreds of undug graves.", "%PERSON witnesses the funeral procession of the butterflies.",
"The burdensome fluttering wings come closer in a familiar yet strange way.")
middle_work_line = list("There are no flowers or trees in this place, so where do all these butterflies come from?",
"The employees cannot return to whence they came, and have no choice but to endlessly repeat the day.", "The funeral procession never ends; %PERSON continues to calmly mourn.",
"%PERSON thinks about the end of one's life.")
late_work_lines = list("Returning to whence one came in one piece is now a miracle that will never happen.", "Peaceful death in one's finest hour is an unexpected blessing.",
"In fact, most of the employees who've died here wanted to live as long as they could.")
work_end_lines = list("Some thought death would be a new beginning; however, there is nothing but the void after death.")

var/gun_cooldown
var/gun_cooldown_time = 4 SECONDS
var/gun_damage = 20
Expand Down
5 changes: 5 additions & 0 deletions code/modules/mob/living/simple_animal/abnormality/teth/MHz.dm
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@
"Forget" = list(FALSE, "But you can't forget. Not until you've atoned."),
)

work_start_lines = list("%PERSON feels the ominous pressure of the Containment Unit.")
early_work_lines = list("%PERSON can sense the twinge of sadness and rage that looms over the entire Containment Unit.")
middle_work_line = list("%PERSON can smell a fishy stench coming from somewhere.")
work_end_lines = list("%PERSON mistakenly thought there were sounds of people wailing from afar.")

var/reset_time = 4 MINUTES //Qliphoth resets after this time. To prevent bugs

/mob/living/simple_animal/hostile/abnormality/mhz/WorkChance(mob/living/carbon/human/user, chance)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@
"Because I don't have a knife" = list(FALSE, "You are lying. You know you can pull out that knife out from your pocket whenever you want."),
)

work_start_lines = list("%ABNO forever searches for someone to lift the curse.", "%ABNO is so appalled by its grotesque appearance, it repeatedly tries to kill itself.")
middle_work_line = list("However, the curse continues eternally, never broken.", "The curse has existed for centuries, inflicting agony upon many unfortunate victims.")
work_end_lines = list("Death is another form of joy brought by birth.")

var/injured = FALSE

//it needs to use PostSpawn or we can't get the datum of beauty
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,13 @@
"Did not grab a hand" = list(FALSE, "You looked away. <br>This is not the first time you ignore them. <br>It will be the same afterwards."),
)

work_start_lines = list("\"You know, after joining Lobotomy Corporation I really feel like I have my life back together.\"", "%PERSON can feel the sadness of %ABNO.",
"%PERSON's wrist aches when they look at %ABNO.")
middle_work_line = list("\"Depression is a disease of the mind. We are the first doctors who discovered how to be happy.\"", "%PERSON stares at the despair which floats in the bath.",
"%PERSON senses overwhelming despair and sadness.")
work_end_lines = list("\"Medicine to heal the body has developed at such a tremendous rate, meanwhile treatments for the mind lie stagnant.\"",
"%PERSON can see upcoming hardship and failure.", "%PERSON can see upcoming hardship and many ordeals in the future. No matter what they do, it will only result in failure.")

var/hands = 0
var/can_act = TRUE
var/special_attack_cooldown
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,14 @@
"Dont't put it on" = list(FALSE, "The armor waits for another reckless one."),
)

work_start_lines = list("Cowardly employees sense something ominous about %ABNO.", "Alone with the armor, %PERSON feels the Abnormality’s piercing gaze upon them. \
Of course, there is not a single living thing inside that armor.", "Rumor has it that passionate battle cries or shouts such as \"CHARGE!\" can be heard from the armor in the middle of the night.")
early_work_lines = list("Although it is slightly broken, this armor is in an unbelievably well-preserved state considering that it is an artifact forged hundreds of years ago.",
"Many past generals had possession of this armor. Nobody knows whether it was the war or the armor that took their lives.")
middle_work_line = list("The right arm of the suit is broken. After a light investigation, the conclusion was that the damage stemmed from the inside, not externally",
"%ABNO was forged hundreds of years ago. The craftsman that created this armor remains unidentified, but at the very least it is certain that he hated cowards.")
work_end_lines = list("The armor still awaits those who are reckless, and those who have given up on life.")

var/buff_icon = 'ModularTegustation/Teguicons/tegu_effects.dmi'
var/user_armored
var/numbermarked
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,11 @@
"Cut the rope" = list(FALSE, "\"You think I'm pathetic, huh? But is you people who are really pathetic. Because you get killed. By people like me.\""),
)

work_start_lines = list("%ABNO stands like a statue in the corner of the Containment Unit.", "At times, %ABNO murmurs while shaking.", "%ABNO may scream from time to time, but as he’s tied up, there probably isn’t any need to worry.")
early_work_lines = list("%PERSON senses despair.", "%PERSON smells the unbearable odor of despair.")
middle_work_line = list("Why is this place always so dark and cold?", "In the darkness, %ABNO’s brain slowly rotted.")
late_work_lines = list("Forsaken even by death, %ABNO shall remain confined here till the end of time.", "It was no longer rage, but a deeper and more twisted, maniacal abhorrence that found him.")

//Unique variable im defining for this abnormality. This is the timer for their during work emotes.
var/work_emote_cooldown = 0

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@
"Plug your ears" = list(FALSE, "You are not prepared yet. The song stopped when you plugged the ears."),
)

work_start_lines = list("The moment we enter %ABNO’s universe, then we will finally understand the secrets of the universe.",
"%ABNO and other employees who went crazy look like they are calling for something with their song.")
middle_work_line = list("%ABNO once told us, \"There are no coincidences in the universe.\"", "Employees shudder in fear when %ABNO tries to laugh.")
work_end_lines = list("Whatever their original purpose is, those tentacles inflict severe damage to human brain.", "%ABNO’s tentacles blur the line between human and alien dimension.")

var/song_cooldown
var/song_cooldown_time = 10 SECONDS
var/song_damage = 3 // Dealt 8 times
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@
"Call for security" = list(FALSE, "Something so beautiful had no right to exist in the City. You called for security and left in a hurry back to your grey workplace."),
)

work_start_lines = list("%ABNO watches %PERSON with its mysteriously luminous organ protruding out of the ground.")
early_work_lines = list("Not a single employee has seen %ABNO’s full form.")
late_work_lines = list("If %ABNO completely gets out of its Containment Unit, our corporation may collapse.")

var/can_act = TRUE
var/detect_range = 1
var/chop_cooldown
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,12 @@
"Nothing" = list(FALSE, "Your imagination must be going haywire due to the stress. <br>There's no way such an out-of-place thing could be there!"),
)

work_start_lines = list("%ABNO is a training dummy who sincerely believes he’s an employee of our facility.")
early_work_lines = list("It seems %ABNO likes people.")
middle_work_line = list("%ABNO circles around and around %PERSON, however %PERSON is completely absorbed in their work.")
late_work_lines = list("%ABNO is thinking about the center of the Earth.")
work_end_lines = list("%ABNO is very sad that %PERSON has to leave so soon. It seems that he wants to follow them.")

/mob/living/simple_animal/hostile/abnormality/training_rabbit/BreachEffect(mob/living/carbon/human/user, breach_type)
. = ..()
GiveTarget(user)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@
"Please, eat my dreams" = list(FALSE, "It's alright, dreams are harmless but unnecessary things. <br>So, just close your eyes and show me your most delectable dream..."),
)

work_start_lines = list("%ABNO is always asleep in the Containment Unit.")
early_work_lines = list("%ABNO's dream is sublime, showing everything.")
middle_work_line = list("%ABNO grants sweet dreams to all; but in reality, this sweetness is unreachable and chips away at the hope of the dreamer.")
work_end_lines = list("\"I always wanted to sleep. I just want to have a happy dream.\"")

var/punched = FALSE
var/pulse_damage = 15
var/ability_cooldown
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,13 @@
Gradually, my exipation was drawing to an end hectically."),
)

work_start_lines = list("The one who was born naked, shall return to the earth naked.", "%ABNO remembers the scorches inside.")
early_work_lines = list("Perchance we tried to make a human without a heart.", "Unwithering flowers violently blossom.")
middle_work_line = list("%PERSON wants to hibernate cozily in a bed of flowers.", "%PERSON is deeply impressed by the lavender that suffuses the Containment Unit.")
late_work_lines = list("Once bloomed and withered, %ABNO realized the meaning of resurrection; wherever it may head, its traces will remain, and all lives will gather with %ABNO.",
"A refreshing scent gushes out of %PERSON instead of metallic blood as they fall asleep, covered in flowers.")
work_end_lines = list("A flower blooms in everyone’s heart.")

/// Currently displayed petals. When value is at 3 - reset to 0 and perform attack
var/petals_current = 0
/// World time when petals_current will increase by 1
Expand Down
Loading
Loading