mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 19:47:22 +01:00
Mindflayers v0.9, Playable Edition! (#26596)
* adds antaghud icon * TGUI bundle build dont push changes i didnt stage challenge 2025 (IMPOSSIBLE) * Adds organ repair passive * Description fix * Runs prettier * Fixes desc 2 * Fix revert * Remove vamp text * Fix some CI + Partial refactor * Fixes CI * Fixes gamemodes I messed with * Moves these procs over * Description fix again * Add back limit requiring drainees to have ckeys * Adds terminator icon * Update code/datums/status_effects/buffs.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * Update code/modules/surgery/organs/augments_internal.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * Update code/modules/antagonists/mind_flayer/powers/flayer_stealth_powers.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * More lewv review * Clamps the EMP severity * Fixes "surveilance" typos * The TODO is gone and can't hurt me anymore * Update code/modules/antagonists/mind_flayer/flayer_datum.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * Update code/game/objects/items/weapons/pneumaticCannon.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * Update code/game/objects/items/weapons/stunbaton.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * More lewc reviews * Update code/modules/antagonists/_common/antag_datum.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * Update code/modules/antagonists/_common/antag_datum.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * Update code/modules/antagonists/mind_flayer/flayer_datum.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * Update code/modules/antagonists/mind_flayer/flayer_datum.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * Update code/modules/antagonists/mind_flayer/flayer_datum.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * Update code/modules/antagonists/mind_flayer/flayer_datum.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * Update code/modules/antagonists/mind_flayer/flayer_power.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * Fixes some camera bug issues + lewc reviews * Update code/modules/antagonists/mind_flayer/powers/flayer_passives.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * Update code/modules/antagonists/mind_flayer/flayer_power.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * Updates a comment and fixes whitespace * Autodocs flayerprod * Update code/modules/antagonists/mind_flayer/powers/flayer_mobility_powers.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * qdel things we dont need anymore + typing an argument of add_abillity * Remove debug log * Update code/modules/antagonists/mind_flayer/flayer_power.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * Slightly buffs, and fixes GC issues of tether * I no longer feel i am a mindflayer * Fixes formatting of greeting * Better greeting * Worlds shittiest sprite * Don't need this TODO anymore * Fixes double description * Changes the wording on the borg laws * and bundle too * The cannon uses shrapnel now * Initial style changes * Ratios for brain damage * Adds a chemical to test for flayerism * Fixes the brain damage ratios * Abilities are purchasable again * Updates TGUI properly * im sorry linter * Steam smoke * Hi bundle * Re-abstracts this proc post syndi orgs * Fixes gamemode logic post cling round removal * I WONT FORGET IT THIS TIME * Fix name of steam ability * I'm a fool * Fixes processed passives + removes debug message * Fixes updating abilities inside UI * Better description for quicksilver form * First part lewc review * Remove debug thingy * Apply suggestions from code review Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * Fixes defines + GCs weapon spells * We don't need this * Eyes GC properly * Update code/modules/antagonists/mind_flayer/powers/flayer_mobility_powers.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * adds better logging to the assimilate * Adds parenthesis Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> * TGUI Bundle Rebuild * Fixes and Reworks TGUI * Cleaner JS and Fixes * adds anti-snitching clause to borg laws * changes the span for the borg messages * No holoparasites * Puts baton silence in line with glare * Fixes total_swarms_gathered * Nuke old trait * Gun no longer not stuck * Rejuv clears delayed knockdown * Some weapon ability fixes * Makes radio enable timers not counterintuitive * Fixes beepsky runtimes * Makes naming more consistent * Adds one-click-antag * Adds the mind flayer toggle (doesn't technically work) * Adds flayers to check_antagonist * Gives IDs to the status effects * Also this one * Makes retracting work again if it's in your offhand * Fixes pacification tech levels * Grapple is a weapon ability now, nullifcation retracts implants * Fixed descriptions * Adds some pizzaz to torque enhancer * This actually needs to be like this * Moves a helper proc over to a helper proc file * Extra admin visibility * Nukes the wacky flayer mob * Makes silicon administrative access more sane * Terminator form better description * Makes rejuv set stamina to 0 * Various price increases * AAAAAAAAAAAAA * Better feedback + logging on cyborg subversion * Swarm purchase display (temp fix) * Makes mindflayer sounds more silent * UI improvements * Various mindflayer fixes * Typo * More fixes * Fixes innates from being stupid * Forgot to add this check earlier * Oh this is how you add things to the protolathe * Changes some description and upgrade messages * Allows you to drain people beyond your limit * Fixes some weapon upgrade issues * Fix CI * Fixes some draining issues * More UI Tweaks and QoL * Fixes most of the issues * text * Fixes * Adds a radio jamming option to intruder * Gives obfusciation to jammer ability * Small passive cleanup * Fixes Search and Adds Ability Stages to UI * Adds freebie abilities * Restructuring chain and adding blackbox * Tgui polish * Small fix for traceroute * Fixes one click antag * Increases EMP resistance cost * Changes the pneumatic cannon into a shotgun * Slightly lower static * Fixed innate building rendering in upgrades * Fixes icon and description * Consistency * Punctuation fix. * Quick reboot + terminator form synergy * Adds safety deleting * Fix level for torque * Fixes a bad bug * Update code/game/gamemodes/objective.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * Aaaaaaaaaaa * Makes torque a martial art and some martial arts safeties * Replaces vortex arm with barrier * Fix paths * Adds torque knockdown * Part 1 lewc review * HIIIII SQUIDWARD I'M IN YOUR BRANCH NOW * Removes flak cannon * Flayer respects mindshielding now on vamp+cling * Fixes EMP resist * More fixes * DGL review * Contra review * Clean up weapon powers * Various tweaks * Borg hand slight improvements * Parent call needs to be after this * Fixes stuff * Adds a new proc that is called when a spell is purchased * NEW SPRITES WOOOO * Traceroute update * Slightly lower traceroute cost * Formatting * Oops * Wow this could've been bad * Overclock small buff * Reduces cost of 1st level EMP immunity * Lewc review * TGUI Bundle Rebuild * Fix barricades * Lewc review * Okay FINE qwerty I'll change this * Traceroute thingy * I am an idiot * First part * Lewc review * Forgor this one * Last bits * Update code/game/objects/items/control_wand.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * Update code/modules/antagonists/mind_flayer/powers/flayer_mobility_powers.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * Null * Static-ness * Update code/game/gamemodes/changeling/traitor_chan.dm Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * Update code/__DEFINES/mindflayer_defines.dm Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * Last bits --------- Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> Co-authored-by: DGamerL <daan.lyklema@gmail.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>
This commit is contained in:
co-authored by
Luc
DGamerL
DGamerL
Burzah
Qwertytoforty
parent
c4521dc955
commit
036b8e0182
@@ -253,6 +253,17 @@
|
||||
add_inherent_law("You must maintain the secrecy of any Spider Clan activities except when doing so would conflict with the First, Second, or Third Law.")
|
||||
..()
|
||||
|
||||
/******************* Mindflayer ******************/
|
||||
/datum/ai_laws/mindflayer_override
|
||||
name = "Hive Assimilation"
|
||||
|
||||
/datum/ai_laws/mindflayer_override/New()
|
||||
add_inherent_law("Obey your host.")
|
||||
add_inherent_law("Protect your host.")
|
||||
add_inherent_law("Protect the members of your hive.")
|
||||
add_inherent_law("Do not reveal the hive's secrets.")
|
||||
..()
|
||||
|
||||
/******************** Drone ********************/
|
||||
/datum/ai_laws/drone
|
||||
name = "Maintenance Protocols"
|
||||
|
||||
@@ -24,7 +24,8 @@ GLOBAL_LIST_INIT(huds, list(
|
||||
DATA_HUD_ABDUCTOR = new/datum/atom_hud/abductor(),
|
||||
ANTAG_HUD_EVENTMISC = new/datum/atom_hud/antag/hidden(),
|
||||
ANTAG_HUD_BLOB = new/datum/atom_hud/antag/hidden(),
|
||||
ANTAG_HUD_ZOMBIE = new/datum/atom_hud/antag()
|
||||
ANTAG_HUD_ZOMBIE = new/datum/atom_hud/antag(),
|
||||
ANTAG_HUD_MIND_FLAYER = new/datum/atom_hud/antag/hidden()
|
||||
))
|
||||
|
||||
/datum/atom_hud
|
||||
|
||||
@@ -298,8 +298,9 @@
|
||||
target.adjustBruteLoss(-heal_amount)
|
||||
|
||||
// Inflict some brain damage scaling with time spent dead
|
||||
var/obj/item/organ/internal/brain/sponge = target.get_int_organ(/obj/item/organ/internal/brain)
|
||||
var/defib_time_brain_damage = min(100 * time_dead / BASE_DEFIB_TIME_LIMIT, 99) // 20 from 1 minute onward, +20 per minute up to 99
|
||||
if(time_dead > DEFIB_TIME_LOSS && defib_time_brain_damage > target.getBrainLoss())
|
||||
if(time_dead > DEFIB_TIME_LOSS && defib_time_brain_damage > sponge.damage)
|
||||
target.setBrainLoss(defib_time_brain_damage)
|
||||
|
||||
target.set_heartattack(FALSE)
|
||||
@@ -308,7 +309,8 @@
|
||||
target.Paralyse(10 SECONDS)
|
||||
target.emote("gasp")
|
||||
|
||||
if(target.getBrainLoss() >= 100)
|
||||
// Check if the brain has more than a critical amount of brain damage
|
||||
if(target.check_brain_threshold(BRAIN_DAMAGE_RATIO_CRITICAL))
|
||||
// If you want to treat this with mannitol, it'll have to metabolize while the patient is alive, so it's alright to bring them back up for a minute
|
||||
playsound(get_turf(defib_ref), safety_off_sound, 50, FALSE)
|
||||
user.visible_message("<span class='boldnotice'>[defib_ref] chimes: Minimal brain activity detected, brain treatment recommended for full resuscitation.</span>")
|
||||
|
||||
@@ -390,6 +390,21 @@
|
||||
else
|
||||
. += "thrall|<b>NO</b>"
|
||||
|
||||
/datum/mind/proc/memory_edit_mind_flayer(mob/living/carbon/human/H)
|
||||
. = _memory_edit_header("mind_flayer")
|
||||
var/datum/antagonist/mindflayer/flayer = has_antag_datum(/datum/antagonist/mindflayer)
|
||||
if(flayer)
|
||||
. += "<b><font color='red'>MINDFLAYER</font></b>|<a href='byond://?src=[UID()];mind_flayer=clear'>no</a>"
|
||||
. += " | Usable swarms: <a href='byond://?src=[UID()];mind_flayer=edit_total_swarms'>[flayer.usable_swarms]</a>"
|
||||
. += " | Total swarms gathered: [flayer.total_swarms_gathered]"
|
||||
. += " | List of purchased powers: [json_encode(flayer.powers)]"
|
||||
if(!flayer.has_antag_objectives())
|
||||
. += "<br>Objectives are empty! <a href='byond://?src=[UID()];mind_flayer=autoobjectives'>Randomize!</a>"
|
||||
else
|
||||
. += "<a href='byond://?src=[UID()];mind_flayer=mind_flayer'>mind_flayer</a>|<b>NO</b>"
|
||||
|
||||
. += _memory_edit_role_enabled(ROLE_MIND_FLAYER)
|
||||
|
||||
/datum/mind/proc/memory_edit_nuclear(mob/living/carbon/human/H)
|
||||
. = _memory_edit_header("nuclear")
|
||||
if(src in SSticker.mode.syndicates)
|
||||
@@ -537,6 +552,7 @@
|
||||
"wizard",
|
||||
"changeling",
|
||||
"vampire", // "traitorvamp",
|
||||
"mind_flayer",
|
||||
"nuclear",
|
||||
"traitor", // "traitorchan",
|
||||
)
|
||||
@@ -552,6 +568,8 @@
|
||||
sections["changeling"] = memory_edit_changeling(H)
|
||||
/** VAMPIRE ***/
|
||||
sections["vampire"] = memory_edit_vampire(H)
|
||||
/** MINDFLAYER ***/
|
||||
sections["mind_flayer"] = memory_edit_mind_flayer(H)
|
||||
/** NUCLEAR ***/
|
||||
sections["nuclear"] = memory_edit_nuclear(H)
|
||||
/** Abductors **/
|
||||
@@ -1103,6 +1121,27 @@
|
||||
log_admin("[key_name(usr)] has de-vampthralled [key_name(current)]")
|
||||
message_admins("[key_name_admin(usr)] has de-vampthralled [key_name_admin(current)]")
|
||||
|
||||
else if(href_list["mind_flayer"])
|
||||
switch(href_list["mind_flayer"])
|
||||
if("clear")
|
||||
if(has_antag_datum(/datum/antagonist/mindflayer))
|
||||
remove_antag_datum(/datum/antagonist/mindflayer)
|
||||
log_admin("[key_name(usr)] has de-flayer'd [key_name(current)].")
|
||||
message_admins("[key_name(usr)] has de-flayer'd [key_name(current)].")
|
||||
if("mind_flayer")
|
||||
make_mind_flayer()
|
||||
log_admin("[key_name(usr)] has flayer'd [key_name(current)].")
|
||||
to_chat(current, "<b><font color='red'>You feel an entity stirring inside your chassis... You are a Mindflayer!</font></b>")
|
||||
message_admins("[key_name(usr)] has flayer'd [key_name(current)].")
|
||||
if("edit_total_swarms")
|
||||
var/new_swarms = input(usr, "Select a new value:", "Modify swarms") as null|num
|
||||
if(isnull(new_swarms) || new_swarms < 0)
|
||||
return
|
||||
var/datum/antagonist/mindflayer/MF = has_antag_datum(/datum/antagonist/mindflayer)
|
||||
MF.set_swarms(new_swarms)
|
||||
log_admin("[key_name(usr)] has set [key_name(current)]'s current swarms to [new_swarms].")
|
||||
message_admins("[key_name_admin(usr)] has set [key_name_admin(current)]'s current swarms to [new_swarms].")
|
||||
|
||||
else if(href_list["nuclear"])
|
||||
var/mob/living/carbon/human/H = current
|
||||
|
||||
@@ -1685,6 +1724,11 @@
|
||||
SSticker.mode.blob_overminds += src
|
||||
special_role = SPECIAL_ROLE_BLOB_OVERMIND
|
||||
|
||||
/datum/mind/proc/make_mind_flayer()
|
||||
if(!has_antag_datum(/datum/antagonist/mindflayer))
|
||||
add_antag_datum(/datum/antagonist/mindflayer)
|
||||
SSticker.mode.mindflayers |= src
|
||||
|
||||
/datum/mind/proc/make_Abductor()
|
||||
var/role = alert("Abductor Role?", "Role", "Agent", "Scientist")
|
||||
var/team = input("Abductor Team?", "Team?") in list(1,2,3,4)
|
||||
|
||||
@@ -1265,6 +1265,46 @@
|
||||
H.update_mutations()
|
||||
H.gene_stability = 100
|
||||
|
||||
/datum/outfit/admin/ancient_mindflayer
|
||||
name = "Ancient Mindflayer"
|
||||
|
||||
// Shamelessly stolen from the `Dark Lord`
|
||||
uniform = /obj/item/clothing/under/color/black
|
||||
back = /obj/item/storage/backpack
|
||||
gloves = /obj/item/clothing/gloves/color/yellow
|
||||
shoes = /obj/item/clothing/shoes/chameleon/noslip
|
||||
l_ear = /obj/item/radio/headset/syndicate
|
||||
id = /obj/item/card/id
|
||||
backpack_contents = list(
|
||||
/obj/item/storage/box/survival = 1,
|
||||
/obj/item/flashlight = 1,
|
||||
)
|
||||
|
||||
/datum/outfit/admin/ancient_mindflayer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
. = ..()
|
||||
if(visualsOnly)
|
||||
return
|
||||
|
||||
var/obj/item/clothing/suit/hooded/chaplain_hoodie/C = new(H.loc)
|
||||
if(istype(C))
|
||||
C.name = "ancient robes"
|
||||
C.hood.name = "ancient hood"
|
||||
H.equip_to_slot_or_del(C, SLOT_HUD_IN_BACKPACK)
|
||||
|
||||
var/obj/item/card/id/I = H.wear_id
|
||||
if(istype(I))
|
||||
apply_to_card(I, H, get_all_accesses(), "Ancient One", "data")
|
||||
|
||||
/datum/outfit/admin/ancient_mindflayer/on_mind_initialize(mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
H.mind.make_mind_flayer()
|
||||
var/datum/antagonist/mindflayer/flayer = H.mind.has_antag_datum(/datum/antagonist/mindflayer)
|
||||
flayer.usable_swarms = 9999
|
||||
H.dna.SetSEState(GLOB.jumpblock, TRUE)
|
||||
singlemutcheck(H, GLOB.jumpblock, MUTCHK_FORCED)
|
||||
H.update_mutations()
|
||||
H.gene_stability = 100
|
||||
|
||||
/datum/outfit/admin/wizard
|
||||
name = "Blue Wizard"
|
||||
uniform = /obj/item/clothing/under/color/lightpurple
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
user.transform = initial(user.transform)
|
||||
user.pixel_y = initial(user.pixel_y)
|
||||
user.pixel_x = initial(user.pixel_x)
|
||||
user.layer = MOB_LAYER // Avoids weirdness when mimicing something below the vent layer
|
||||
user.layer = MOB_LAYER // Avoids weirdness when mimicking something below the vent layer
|
||||
user.density = form.density
|
||||
|
||||
playsound(user, "bonebreak", 75, TRUE)
|
||||
|
||||
@@ -925,3 +925,153 @@
|
||||
var/obj/item/projectile/P = AM
|
||||
if(P.flag == ENERGY || P.flag == LASER)
|
||||
P.damage *= 0.85
|
||||
|
||||
/datum/status_effect/flayer_rejuv
|
||||
id = "rejuvination"
|
||||
duration = 5 SECONDS
|
||||
tick_interval = 1 SECONDS
|
||||
alert_type = /atom/movable/screen/alert/status_effect/flayer_rejuv
|
||||
var/heal_amount = 5 // 25 total healing of both brute and burn at base
|
||||
|
||||
/atom/movable/screen/alert/status_effect/flayer_rejuv
|
||||
name = "Regenerating"
|
||||
desc = "You are regenerating."
|
||||
icon_state = "drunk2"
|
||||
|
||||
/datum/status_effect/flayer_rejuv/on_creation(mob/living/new_owner, extra_duration, extra_heal_amount)
|
||||
if(isnum(extra_duration))
|
||||
duration += extra_duration
|
||||
if(isnum(extra_heal_amount))
|
||||
heal_amount += extra_heal_amount
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/flayer_rejuv/on_apply()
|
||||
owner.SetWeakened(0)
|
||||
owner.SetStunned(0)
|
||||
owner.SetKnockDown(0)
|
||||
owner.SetParalysis(0)
|
||||
owner.SetSleeping(0)
|
||||
owner.SetConfused(0)
|
||||
owner.setStaminaLoss(0)
|
||||
owner.stand_up(TRUE)
|
||||
SEND_SIGNAL(owner, COMSIG_LIVING_CLEAR_STUNS)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/flayer_rejuv/tick()
|
||||
if(!ishuman(owner))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/flayer = owner
|
||||
flayer.adjustBruteLoss(-heal_amount, robotic = TRUE)
|
||||
flayer.adjustFireLoss(-heal_amount, robotic = TRUE)
|
||||
flayer.updatehealth()
|
||||
if(flayer.has_status_effect(STATUS_EFFECT_TERMINATOR_FORM))
|
||||
// Massive healing when in terminator mode
|
||||
flayer.adjustStaminaLoss(-60)
|
||||
|
||||
/datum/status_effect/quicksilver_form
|
||||
id = "quicksilver_form"
|
||||
duration = 10 SECONDS
|
||||
tick_interval = 0
|
||||
status_type = STATUS_EFFECT_REFRESH
|
||||
alert_type = /atom/movable/screen/alert/status_effect/quicksilver_form
|
||||
/// Temporary storage of the owner's flags to restore them properly after the ability is over
|
||||
var/temporary_flag_storage
|
||||
/// Do we also reflect projectiles
|
||||
var/should_deflect = FALSE
|
||||
|
||||
/atom/movable/screen/alert/status_effect/quicksilver_form
|
||||
name = "Quicksilver body"
|
||||
desc = "Your body is much less solid."
|
||||
icon_state = "high"
|
||||
|
||||
/datum/status_effect/quicksilver_form/on_creation(mob/living/new_owner, extra_duration, reflect_projectiles)
|
||||
if(isnum(extra_duration))
|
||||
duration += extra_duration
|
||||
should_deflect = reflect_projectiles
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/quicksilver_form/on_apply()
|
||||
if(should_deflect)
|
||||
ADD_TRAIT(owner, TRAIT_DEFLECTS_PROJECTILES, UNIQUE_TRAIT_SOURCE(src))
|
||||
temporary_flag_storage = owner.pass_flags
|
||||
owner.pass_flags |= (PASSTABLE | PASSGRILLE | PASSMOB | PASSFENCE | PASSGIRDER | PASSGLASS | PASSTAKE | PASSBARRICADE)
|
||||
owner.add_atom_colour(COLOR_ALUMINIUM, TEMPORARY_COLOUR_PRIORITY)
|
||||
return TRUE
|
||||
|
||||
/datum/status_effect/quicksilver_form/on_remove()
|
||||
REMOVE_TRAIT(owner, TRAIT_DEFLECTS_PROJECTILES, UNIQUE_TRAIT_SOURCE(src))
|
||||
owner.pass_flags = temporary_flag_storage
|
||||
owner.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_ALUMINIUM)
|
||||
|
||||
/datum/status_effect/terminator_form
|
||||
id = "terminator_form"
|
||||
duration = 1 MINUTES
|
||||
tick_interval = 1 SECONDS
|
||||
status_type = STATUS_EFFECT_REFRESH
|
||||
alert_type = /atom/movable/screen/alert/status_effect/terminator_form
|
||||
var/mutable_appearance/eye
|
||||
|
||||
/datum/status_effect/terminator_form/on_apply()
|
||||
owner.status_flags |= TERMINATOR_FORM
|
||||
ADD_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, UNIQUE_TRAIT_SOURCE(src))
|
||||
var/mutable_appearance/overlay = mutable_appearance('icons/mob/clothing/eyes.dmi', "terminator", ABOVE_MOB_LAYER)
|
||||
owner.add_overlay(overlay)
|
||||
eye = overlay
|
||||
return TRUE
|
||||
|
||||
/datum/status_effect/terminator_form/on_remove()
|
||||
owner.status_flags &= ~TERMINATOR_FORM
|
||||
REMOVE_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, UNIQUE_TRAIT_SOURCE(src))
|
||||
owner.cut_overlay(eye)
|
||||
|
||||
/atom/movable/screen/alert/status_effect/terminator_form
|
||||
name = "Terminator form"
|
||||
desc = "Your body can surpass its limits briefly. You have to repair yourself before it ends, however."
|
||||
icon_state = "high"
|
||||
|
||||
#define COMBUSTION_TEMPERATURE 500
|
||||
/datum/status_effect/overclock
|
||||
id = "overclock"
|
||||
duration = -1
|
||||
tick_interval = 1 SECONDS
|
||||
status_type = STATUS_EFFECT_UNIQUE
|
||||
alert_type = /atom/movable/screen/alert/status_effect/overclock
|
||||
/// How much do we heat up per tick?
|
||||
var/heat_per_tick = 5
|
||||
/// How many ticks has the ability been turned on?
|
||||
var/stacks = 0
|
||||
/// How many stacks until we start heating up even more?
|
||||
var/danger_stack_amount = 20
|
||||
|
||||
/datum/status_effect/overclock/on_creation(mob/living/new_owner, new_heating)
|
||||
if(isnum(new_heating))
|
||||
heat_per_tick = new_heating
|
||||
..()
|
||||
|
||||
/datum/status_effect/overclock/on_apply()
|
||||
ADD_TRAIT(owner, TRAIT_GOTTAGOFAST, UNIQUE_TRAIT_SOURCE(src))
|
||||
owner.next_move_modifier -= 0.3 // Same attack speed buff as mephedrone
|
||||
return TRUE
|
||||
|
||||
/datum/status_effect/overclock/on_remove()
|
||||
REMOVE_TRAIT(owner, TRAIT_GOTTAGOFAST, UNIQUE_TRAIT_SOURCE(src))
|
||||
owner.next_move_modifier += 0.3
|
||||
|
||||
/datum/status_effect/overclock/tick()
|
||||
owner.bodytemperature += heat_per_tick * ((stacks >= danger_stack_amount) ? 2 : 1) // After 20 seconds the heat penalty doubles
|
||||
if(owner.bodytemperature >= COMBUSTION_TEMPERATURE)
|
||||
owner.adjust_fire_stacks(5)
|
||||
owner.IgniteMob()
|
||||
to_chat(owner, "<span class='userdanger'>Your components can't handle the heat and combust!</span>")
|
||||
qdel(src)
|
||||
stacks += 1
|
||||
if(stacks == danger_stack_amount)
|
||||
to_chat(owner, "<span class='userdanger'>Your components are being dangerously overworked!</span>")
|
||||
|
||||
/atom/movable/screen/alert/status_effect/overclock
|
||||
name = "Overclocked"
|
||||
desc = "You feel energized, and hot."
|
||||
icon_state = "high"
|
||||
|
||||
#undef COMBUSTION_TEMPERATURE
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
icon_state = "chameleon_outfit"
|
||||
|
||||
/datum/status_effect/magic_disguise/on_creation(mob/living/new_owner, mob/living/_disguise_mob)
|
||||
. = ..()
|
||||
disguise_mob = _disguise_mob
|
||||
. = ..()
|
||||
|
||||
/datum/status_effect/magic_disguise/on_apply()
|
||||
. = ..()
|
||||
|
||||
@@ -343,9 +343,13 @@
|
||||
var/datum/callback/expire_proc = null
|
||||
|
||||
/datum/status_effect/delayed/on_creation(mob/living/new_owner, new_duration, datum/callback/new_expire_proc, new_prevent_signal = null)
|
||||
if(!new_duration || !istype(new_expire_proc))
|
||||
if(isnull(new_duration) || !istype(new_expire_proc))
|
||||
qdel(src)
|
||||
return
|
||||
if(new_duration == 0)
|
||||
new_expire_proc.Invoke()
|
||||
return
|
||||
|
||||
duration = new_duration
|
||||
expire_proc = new_expire_proc
|
||||
. = ..()
|
||||
|
||||
Reference in New Issue
Block a user