mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-29 23:17:02 +01:00
Initial commit
This commit is contained in:
@@ -240,10 +240,10 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
var/geneticpoints = 10
|
||||
var/purchasedpowers = list()
|
||||
var/mimicing = ""
|
||||
var/canrespec = 0
|
||||
var/canrespec = FALSE //set to TRUE in absorb.dm
|
||||
var/changeling_speak = 0
|
||||
var/datum/dna/chosen_dna
|
||||
var/obj/effect/proc_holder/changeling/sting/chosen_sting
|
||||
var/datum/action/changeling/sting/chosen_sting
|
||||
var/regenerating = FALSE
|
||||
|
||||
/datum/changeling/New(gender=FEMALE)
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
* TODO: combine atleast some of the functionality with /proc_holder/spell
|
||||
*/
|
||||
|
||||
/obj/effect/proc_holder/changeling
|
||||
panel = "Changeling"
|
||||
/datum/action/changeling
|
||||
name = "Prototype Sting"
|
||||
desc = "" // Fluff
|
||||
var/helptext = "" // Details
|
||||
@@ -16,20 +15,26 @@
|
||||
var/genetic_damage = 0 // genetic damage caused by using the sting. Nothing to do with cloneloss.
|
||||
var/max_genetic_damage = 100 // hard counter for spamming abilities. Not used/balanced much yet.
|
||||
var/always_keep = 0 // important for abilities like regenerate that screw you if you lose them.
|
||||
var/needs_button = TRUE // for passive abilities like hivemind that dont need a button
|
||||
var/active = FALSE // used by a few powers that toggle
|
||||
|
||||
/obj/effect/proc_holder/changeling/proc/on_purchase(var/mob/user)
|
||||
return
|
||||
/*
|
||||
changeling code now relies on on_purchase to grant powers.
|
||||
if you override it, MAKE SURE you call parent or it will not be usable
|
||||
the same goes for Remove(). if you override Remove(), call parent or else your power wont be removed on respec
|
||||
*/
|
||||
|
||||
/obj/effect/proc_holder/changeling/proc/on_refund(mob/user)
|
||||
return
|
||||
/datum/action/changeling/proc/on_purchase(var/mob/user)
|
||||
if(needs_button)
|
||||
Grant(user)
|
||||
|
||||
/obj/effect/proc_holder/changeling/Click()
|
||||
/datum/action/changeling/Trigger()
|
||||
var/mob/user = usr
|
||||
if(!user || !user.mind || !user.mind.changeling)
|
||||
return
|
||||
try_to_sting(user)
|
||||
|
||||
/obj/effect/proc_holder/changeling/proc/try_to_sting(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/proc/try_to_sting(var/mob/user, var/mob/target)
|
||||
if(!user.mind || !user.mind.changeling)
|
||||
return
|
||||
if(!can_sting(user, target))
|
||||
@@ -39,18 +44,18 @@
|
||||
sting_feedback(user, target)
|
||||
take_chemical_cost(c)
|
||||
|
||||
/obj/effect/proc_holder/changeling/proc/sting_action(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/proc/sting_action(var/mob/user, var/mob/target)
|
||||
return 0
|
||||
|
||||
/obj/effect/proc_holder/changeling/proc/sting_feedback(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/proc/sting_feedback(var/mob/user, var/mob/target)
|
||||
return 0
|
||||
|
||||
/obj/effect/proc_holder/changeling/proc/take_chemical_cost(var/datum/changeling/changeling)
|
||||
/datum/action/changeling/proc/take_chemical_cost(var/datum/changeling/changeling)
|
||||
changeling.chem_charges -= chemical_cost
|
||||
changeling.geneticdamage += genetic_damage
|
||||
|
||||
//Fairly important to remember to return 1 on success >.<
|
||||
/obj/effect/proc_holder/changeling/proc/can_sting(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/proc/can_sting(var/mob/user, var/mob/target)
|
||||
if(!ishuman(user)) //typecast everything from mob to carbon from this point onwards
|
||||
return 0
|
||||
if(req_human && (!ishuman(user) || issmall(user)))
|
||||
@@ -75,7 +80,7 @@
|
||||
return 1
|
||||
|
||||
//used in /mob/Stat()
|
||||
/obj/effect/proc_holder/changeling/proc/can_be_used_by(var/mob/user)
|
||||
/datum/action/changeling/proc/can_be_used_by(var/mob/user)
|
||||
if(!ishuman(user))
|
||||
return 0
|
||||
if(req_human && !ishuman(user))
|
||||
@@ -83,10 +88,10 @@
|
||||
return 1
|
||||
|
||||
// Transform the target to the chosen dna. Used in transform.dm and tiny_prick.dm (handy for changes since it's the same thing done twice)
|
||||
/obj/effect/proc_holder/changeling/proc/transform_dna(var/mob/living/carbon/human/H, var/datum/dna/D)
|
||||
/datum/action/changeling/proc/transform_dna(var/mob/living/carbon/human/H, var/datum/dna/D)
|
||||
if(!D)
|
||||
return
|
||||
|
||||
|
||||
H.set_species(D.species.type, retain_damage = TRUE)
|
||||
H.dna = D.Clone()
|
||||
H.real_name = D.real_name
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
var/list/sting_paths
|
||||
// totally stolen from the new player panel. YAYY
|
||||
|
||||
/obj/effect/proc_holder/changeling/evolution_menu
|
||||
/datum/action/changeling/evolution_menu
|
||||
name = "-Evolution Menu-" //Dashes are so it's listed before all the other abilities.
|
||||
desc = "Choose our method of subjugation."
|
||||
dna_cost = 0
|
||||
|
||||
/obj/effect/proc_holder/changeling/evolution_menu/Click()
|
||||
/datum/action/changeling/evolution_menu/Trigger()
|
||||
if(!usr || !usr.mind || !usr.mind.changeling)
|
||||
return
|
||||
var/datum/changeling/changeling = usr.mind.changeling
|
||||
|
||||
if(!sting_paths)
|
||||
sting_paths = init_subtypes(/obj/effect/proc_holder/changeling)
|
||||
sting_paths = init_subtypes(/datum/action/changeling)
|
||||
|
||||
var/dat = create_menu(changeling)
|
||||
usr << browse(dat, "window=powers;size=600x700")//900x480
|
||||
|
||||
|
||||
/obj/effect/proc_holder/changeling/evolution_menu/proc/create_menu(var/datum/changeling/changeling)
|
||||
/datum/action/changeling/evolution_menu/proc/create_menu(var/datum/changeling/changeling)
|
||||
var/dat
|
||||
dat +="<html><head><title>Changeling Evolution Menu</title></head>"
|
||||
|
||||
@@ -230,7 +230,7 @@ var/list/sting_paths
|
||||
<table width='560' align='center' cellspacing='0' cellpadding='5' id='maintable_data'>"}
|
||||
|
||||
var/i = 1
|
||||
for(var/obj/effect/proc_holder/changeling/cling_power in sting_paths)
|
||||
for(var/datum/action/changeling/cling_power in sting_paths)
|
||||
|
||||
if(cling_power.dna_cost <= 0) //Let's skip the crap we start with. Keeps the evolution menu uncluttered.
|
||||
continue
|
||||
@@ -283,7 +283,7 @@ var/list/sting_paths
|
||||
return dat
|
||||
|
||||
|
||||
/obj/effect/proc_holder/changeling/evolution_menu/Topic(href, href_list)
|
||||
/datum/action/changeling/evolution_menu/Topic(href, href_list)
|
||||
..()
|
||||
if(!(iscarbon(usr) && usr.mind && usr.mind.changeling))
|
||||
return
|
||||
@@ -298,11 +298,11 @@ var/list/sting_paths
|
||||
|
||||
/datum/changeling/proc/purchasePower(var/mob/living/carbon/user, var/sting_name)
|
||||
|
||||
var/obj/effect/proc_holder/changeling/thepower = null
|
||||
var/datum/action/changeling/thepower = null
|
||||
|
||||
if(!sting_paths)
|
||||
sting_paths = init_subtypes(/obj/effect/proc_holder/changeling)
|
||||
for(var/obj/effect/proc_holder/changeling/cling_sting in sting_paths)
|
||||
sting_paths = init_subtypes(/datum/action/changeling)
|
||||
for(var/datum/action/changeling/cling_sting in sting_paths)
|
||||
if(cling_sting.name == sting_name)
|
||||
thepower = cling_sting
|
||||
|
||||
@@ -357,7 +357,7 @@ var/list/sting_paths
|
||||
if(!mind.changeling)
|
||||
mind.changeling = new /datum/changeling(gender)
|
||||
if(!sting_paths)
|
||||
sting_paths = init_subtypes(/obj/effect/proc_holder/changeling)
|
||||
sting_paths = init_subtypes(/datum/action/changeling)
|
||||
if(mind.changeling.purchasedpowers)
|
||||
remove_changeling_powers(1)
|
||||
|
||||
@@ -367,8 +367,8 @@ var/list/sting_paths
|
||||
mind.changeling.absorbed_languages |= language
|
||||
|
||||
// purchase free powers.
|
||||
for(var/obj/effect/proc_holder/changeling/path in sting_paths)
|
||||
//var/obj/effect/proc_holder/changeling/S = new path()
|
||||
for(var/datum/action/changeling/path in sting_paths)
|
||||
//var/datum/action/changeling/S = new path()
|
||||
if(!path.dna_cost)
|
||||
if(!mind.changeling.has_sting(path))
|
||||
mind.changeling.purchasedpowers += path
|
||||
@@ -406,18 +406,18 @@ var/list/sting_paths
|
||||
digitalcamo = 0
|
||||
mind.changeling.changeling_speak = 0
|
||||
mind.changeling.reset()
|
||||
for(var/obj/effect/proc_holder/changeling/p in mind.changeling.purchasedpowers)
|
||||
for(var/datum/action/changeling/p in mind.changeling.purchasedpowers)
|
||||
if((p.dna_cost == 0 && keep_free_powers) || p.always_keep)
|
||||
continue
|
||||
mind.changeling.purchasedpowers -= p
|
||||
p.on_refund(src)
|
||||
p.Remove(src)
|
||||
remove_language("Changeling")
|
||||
if(hud_used)
|
||||
hud_used.lingstingdisplay.icon_state = null
|
||||
hud_used.lingstingdisplay.invisibility = 101
|
||||
|
||||
/datum/changeling/proc/has_sting(obj/effect/proc_holder/changeling/power)
|
||||
for(var/obj/effect/proc_holder/changeling/P in purchasedpowers)
|
||||
/datum/changeling/proc/has_sting(datum/action/power)
|
||||
for(var/datum/action/P in purchasedpowers)
|
||||
if(power.name == P.name)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/obj/effect/proc_holder/changeling/absorbDNA
|
||||
/datum/action/changeling/absorbDNA
|
||||
name = "Absorb DNA"
|
||||
desc = "Absorb the DNA of our victim."
|
||||
desc = "Absorb the DNA of our victim. Requires us to strangle them."
|
||||
chemical_cost = 0
|
||||
dna_cost = 0
|
||||
req_human = 1
|
||||
max_genetic_damage = 100
|
||||
|
||||
/obj/effect/proc_holder/changeling/absorbDNA/can_sting(var/mob/living/carbon/user)
|
||||
/datum/action/changeling/absorbDNA/can_sting(mob/living/carbon/user)
|
||||
if(!..())
|
||||
return
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
var/mob/living/carbon/target = G.affecting
|
||||
return changeling.can_absorb_dna(user,target)
|
||||
|
||||
/obj/effect/proc_holder/changeling/absorbDNA/sting_action(var/mob/user)
|
||||
/datum/action/changeling/absorbDNA/sting_action(var/mob/user)
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
var/obj/item/grab/G = user.get_active_hand()
|
||||
var/mob/living/carbon/human/target = G.affecting
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
//Augmented Eyesight: Gives you thermal and night vision - bye bye, flashlights. Also, high DNA cost because of how powerful it is.
|
||||
//Possible todo: make a custom message for directing a penlight/flashlight at the eyes - not sure what would display though.
|
||||
|
||||
/obj/effect/proc_holder/changeling/augmented_eyesight
|
||||
/datum/action/changeling/augmented_eyesight
|
||||
name = "Augmented Eyesight"
|
||||
desc = "Creates heat receptors in our eyes and dramatically increases light sensing ability."
|
||||
helptext = "Grants us thermal vision or flash protection. We will become a lot more vulnerable to flash-based devices while thermal vision is active."
|
||||
chemical_cost = 0
|
||||
dna_cost = 2 //Would be 1 without thermal vision
|
||||
|
||||
/obj/effect/proc_holder/changeling/augmented_eyesight/sting_action(mob/living/carbon/human/user)
|
||||
/datum/action/changeling/augmented_eyesight/sting_action(mob/living/carbon/human/user)
|
||||
if(!istype(user))
|
||||
return
|
||||
if(user.get_int_organ(/obj/item/organ/internal/cyberimp/eyes/thermals/ling))
|
||||
@@ -22,15 +22,12 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/effect/proc_holder/changeling/augmented_eyesight/on_refund(mob/user)
|
||||
/datum/action/changeling/augmented_eyesight/Remove(mob/user)
|
||||
var/obj/item/organ/internal/cyberimp/eyes/O = user.get_organ_slot("eye_ling")
|
||||
if(O)
|
||||
O.remove(user)
|
||||
qdel(O)
|
||||
|
||||
|
||||
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/shield/ling
|
||||
name = "protective membranes"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/changeling/biodegrade
|
||||
/datum/action/changeling/biodegrade
|
||||
name = "Biodegrade"
|
||||
desc = "Dissolves restraints or other objects preventing free movement."
|
||||
helptext = "This is obvious to nearby people, and can destroy standard restraints and closets."
|
||||
@@ -6,7 +6,7 @@
|
||||
dna_cost = 2
|
||||
req_human = 1
|
||||
|
||||
/obj/effect/proc_holder/changeling/biodegrade/sting_action(mob/living/carbon/human/user)
|
||||
/datum/action/changeling/biodegrade/sting_action(mob/living/carbon/human/user)
|
||||
var/used = FALSE // only one form of shackles removed per use
|
||||
if(!user.restrained() && !istype(user.loc, /obj/structure/closet) && !istype(user.loc, /obj/structure/spider/cocoon))
|
||||
to_chat(user, "<span class='warning'>We are already free!</span>")
|
||||
@@ -53,21 +53,21 @@
|
||||
feedback_add_details("changeling_powers","BD")
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/changeling/biodegrade/proc/dissolve_handcuffs(mob/living/carbon/human/user, obj/O)
|
||||
/datum/action/changeling/biodegrade/proc/dissolve_handcuffs(mob/living/carbon/human/user, obj/O)
|
||||
if(O && user.handcuffed == O)
|
||||
user.unEquip(O)
|
||||
O.visible_message("<span class='warning'>[O] dissolves into a puddle of sizzling goop.</span>")
|
||||
O.forceMove(get_turf(user))
|
||||
qdel(O)
|
||||
|
||||
/obj/effect/proc_holder/changeling/biodegrade/proc/dissolve_straightjacket(mob/living/carbon/human/user, obj/S)
|
||||
/datum/action/changeling/biodegrade/proc/dissolve_straightjacket(mob/living/carbon/human/user, obj/S)
|
||||
if(S && user.wear_suit == S)
|
||||
user.unEquip(S)
|
||||
S.visible_message("<span class='warning'>[S] dissolves into a puddle of sizzling goop.</span>")
|
||||
S.forceMove(get_turf(user))
|
||||
qdel(S)
|
||||
|
||||
/obj/effect/proc_holder/changeling/biodegrade/proc/open_closet(mob/living/carbon/human/user, obj/structure/closet/C)
|
||||
/datum/action/changeling/biodegrade/proc/open_closet(mob/living/carbon/human/user, obj/structure/closet/C)
|
||||
if(C && user.loc == C)
|
||||
C.visible_message("<span class='warning'>[C]'s door breaks and opens!</span>")
|
||||
C.welded = FALSE
|
||||
@@ -76,7 +76,7 @@
|
||||
C.open()
|
||||
to_chat(user, "<span class='warning'>We open the container restraining us!</span>")
|
||||
|
||||
/obj/effect/proc_holder/changeling/biodegrade/proc/dissolve_cocoon(mob/living/carbon/human/user, obj/structure/spider/cocoon/C)
|
||||
/datum/action/changeling/biodegrade/proc/dissolve_cocoon(mob/living/carbon/human/user, obj/structure/spider/cocoon/C)
|
||||
if(C && user.loc == C)
|
||||
qdel(C) //The cocoon's destroy will move the changeling outside of it without interference
|
||||
to_chat(user, "<span class='warning'>We dissolve the cocoon!</span>")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/changeling/chameleon_skin
|
||||
/datum/action/changeling/chameleon_skin
|
||||
name = "Chameleon Skin"
|
||||
desc = "Our skin pigmentation rapidly changes to suit our current environment."
|
||||
helptext = "Allows us to become invisible after a few seconds of standing still. Can be toggled on and off."
|
||||
@@ -6,7 +6,7 @@
|
||||
chemical_cost = 25
|
||||
req_human = 1
|
||||
|
||||
/obj/effect/proc_holder/changeling/chameleon_skin/sting_action(mob/user)
|
||||
/datum/action/changeling/chameleon_skin/sting_action(mob/user)
|
||||
var/mob/living/carbon/human/H = user //SHOULD always be human, because req_human = 1
|
||||
if(!istype(H)) // req_human could be done in can_sting stuff.
|
||||
return
|
||||
@@ -20,8 +20,9 @@
|
||||
feedback_add_details("changeling_powers","CS")
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/changeling/chameleon_skin/on_refund(mob/user)
|
||||
/datum/action/changeling/chameleon_skin/Remove(mob/user)
|
||||
var/mob/living/carbon/C = user
|
||||
if(C.dna.GetSEState(CHAMELEONBLOCK))
|
||||
C.dna.SetSEState(CHAMELEONBLOCK, 0)
|
||||
genemutcheck(C, CHAMELEONBLOCK, null, MUTCHK_FORCED)
|
||||
..()
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/obj/effect/proc_holder/changeling/digitalcamo
|
||||
/datum/action/changeling/digitalcamo
|
||||
name = "Digital Camouflage"
|
||||
desc = "By evolving the ability to distort our form and proprotions, we defeat common altgorithms used to detect lifeforms on cameras."
|
||||
helptext = "We cannot be tracked by camera while using this skill. However, humans looking at us will find us... uncanny."
|
||||
dna_cost = 1
|
||||
|
||||
//Prevents AIs tracking you but makes you easily detectable to the human-eye.
|
||||
/obj/effect/proc_holder/changeling/digitalcamo/sting_action(var/mob/user)
|
||||
/datum/action/changeling/digitalcamo/sting_action(var/mob/user)
|
||||
|
||||
if(user.digitalcamo)
|
||||
to_chat(user, "<span class='notice'>We return to normal.</span>")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/changeling/epinephrine
|
||||
/datum/action/changeling/epinephrine
|
||||
name = "Epinephrine Overdose"
|
||||
desc = "We evolve additional sacs of adrenaline throughout our body."
|
||||
helptext = "Removes all stuns instantly and adds a short-term reduction in further stuns. Can be used while unconscious. Continued use poisons the body."
|
||||
@@ -8,7 +8,7 @@
|
||||
req_stat = UNCONSCIOUS
|
||||
|
||||
//Recover from stuns.
|
||||
/obj/effect/proc_holder/changeling/epinephrine/sting_action(var/mob/living/user)
|
||||
/datum/action/changeling/epinephrine/sting_action(var/mob/living/user)
|
||||
|
||||
if(user.lying)
|
||||
to_chat(user, "<span class='notice'>We arise.</span>")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/changeling/fakedeath
|
||||
/datum/action/changeling/fakedeath
|
||||
name = "Regenerative Stasis"
|
||||
desc = "We fall into a stasis, allowing us to regenerate."
|
||||
chemical_cost = 15
|
||||
@@ -8,7 +8,7 @@
|
||||
max_genetic_damage = 100
|
||||
|
||||
//Fake our own death and fully heal. You will appear to be dead but regenerate fully after a short delay.
|
||||
/obj/effect/proc_holder/changeling/fakedeath/sting_action(var/mob/living/user)
|
||||
/datum/action/changeling/fakedeath/sting_action(var/mob/living/user)
|
||||
|
||||
to_chat(user, "<span class='notice'>We begin our stasis, preparing energy to arise once more.</span>")
|
||||
if(user.stat != DEAD)
|
||||
@@ -26,12 +26,13 @@
|
||||
feedback_add_details("changeling_powers","FD")
|
||||
return 1
|
||||
|
||||
/obj/effect/proc_holder/changeling/fakedeath/proc/ready_to_regenerate(mob/user)
|
||||
/datum/action/changeling/fakedeath/proc/ready_to_regenerate(mob/user)
|
||||
if(user && user.mind && user.mind.changeling && user.mind.changeling.purchasedpowers)
|
||||
to_chat(user, "<span class='notice'>We are ready to regenerate.</span>")
|
||||
user.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/revive(null)
|
||||
var/datum/action/changeling/revive/R = new
|
||||
R.Grant(user)
|
||||
|
||||
/obj/effect/proc_holder/changeling/fakedeath/can_sting(var/mob/user)
|
||||
/datum/action/changeling/fakedeath/can_sting(var/mob/user)
|
||||
if(user.status_flags & FAKEDEATH)
|
||||
to_chat(user, "<span class='warning'>We are already regenerating.</span>")
|
||||
return
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/changeling/fleshmend
|
||||
/datum/action/changeling/fleshmend
|
||||
name = "Fleshmend"
|
||||
desc = "Our flesh rapidly regenerates, healing our wounds."
|
||||
helptext = "Heals a moderate amount of damage over a short period of time. Can be used while unconscious."
|
||||
@@ -11,20 +11,20 @@
|
||||
// divided by healing_ticks to get heal/tick
|
||||
var/total_healing = 100
|
||||
|
||||
/obj/effect/proc_holder/changeling/fleshmend/New()
|
||||
/datum/action/changeling/fleshmend/New()
|
||||
..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/effect/proc_holder/changeling/fleshmend/Destroy()
|
||||
/datum/action/changeling/fleshmend/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/proc_holder/changeling/fleshmend/process()
|
||||
/datum/action/changeling/fleshmend/process()
|
||||
if(recent_uses > 1)
|
||||
recent_uses = max(1, recent_uses - (1 / healing_ticks))
|
||||
|
||||
//Starts healing you every second for 10 seconds. Can be used whilst unconscious.
|
||||
/obj/effect/proc_holder/changeling/fleshmend/sting_action(var/mob/living/user)
|
||||
/datum/action/changeling/fleshmend/sting_action(var/mob/living/user)
|
||||
to_chat(user, "<span class='notice'>We begin to heal rapidly.</span>")
|
||||
if(recent_uses > 1)
|
||||
to_chat(user, "<span class='warning'>Our healing's effectiveness is reduced \
|
||||
@@ -35,7 +35,7 @@
|
||||
feedback_add_details("changeling_powers","RR")
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/changeling/fleshmend/proc/fleshmend(mob/living/user)
|
||||
/datum/action/changeling/fleshmend/proc/fleshmend(mob/living/user)
|
||||
|
||||
// The healing itself - doesn't heal toxin damage
|
||||
// (that's anatomic panacea) and the effectiveness decreases with
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/changeling/headcrab
|
||||
/datum/action/changeling/headcrab
|
||||
name = "Last Resort"
|
||||
desc = "We sacrifice our current body in a moment of need, placing us in control of a vessel."
|
||||
helptext = "We will be placed in control of a small, fragile creature. We may attack a corpse like this to plant an egg which will slowly mature into a new form for us."
|
||||
@@ -6,12 +6,12 @@
|
||||
dna_cost = 1
|
||||
req_human = 1
|
||||
|
||||
/obj/effect/proc_holder/changeling/headcrab/try_to_sting(mob/user, mob/target)
|
||||
/datum/action/changeling/headcrab/try_to_sting(mob/user, mob/target)
|
||||
if(alert("Are you sure you wish to do this? This action cannot be undone.",,"Yes","No")=="No")
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/effect/proc_holder/changeling/headcrab/sting_action(mob/user)
|
||||
/datum/action/changeling/headcrab/sting_action(mob/user)
|
||||
var/datum/mind/M = user.mind
|
||||
var/list/organs = user.get_organs_zone("head", 1)
|
||||
|
||||
|
||||
@@ -1,34 +1,36 @@
|
||||
//HIVEMIND COMMUNICATION (:g)
|
||||
/obj/effect/proc_holder/changeling/hivemind_comms
|
||||
/datum/action/changeling/hivemind_comms
|
||||
name = "Hivemind Communication"
|
||||
desc = "We tune our senses to the airwaves to allow us to discreetly communicate and exchange DNA with other changelings."
|
||||
helptext = "We will be able to talk with other changelings with :g. Exchanged DNA do not count towards absorb objectives."
|
||||
dna_cost = 0
|
||||
chemical_cost = -1
|
||||
needs_button = FALSE
|
||||
|
||||
/obj/effect/proc_holder/changeling/hivemind_comms/on_purchase(var/mob/user)
|
||||
/datum/action/changeling/hivemind_comms/on_purchase(var/mob/user)
|
||||
..()
|
||||
var/datum/changeling/changeling=user.mind.changeling
|
||||
changeling.changeling_speak = 1
|
||||
to_chat(user, "<i><font color=#800080>Use say \":g message\" to communicate with the other changelings.</font></i>")
|
||||
var/obj/effect/proc_holder/changeling/hivemind_upload/S1 = new
|
||||
var/datum/action/changeling/hivemind_upload/S1 = new
|
||||
if(!changeling.has_sting(S1))
|
||||
changeling.purchasedpowers+=S1
|
||||
var/obj/effect/proc_holder/changeling/hivemind_download/S2 = new
|
||||
var/datum/action/changeling/hivemind_download/S2 = new
|
||||
if(!changeling.has_sting(S2))
|
||||
S2.Grant(user)
|
||||
changeling.purchasedpowers+=S2
|
||||
return
|
||||
|
||||
// HIVE MIND UPLOAD/DOWNLOAD DNA
|
||||
var/list/datum/dna/hivemind_bank = list()
|
||||
|
||||
/obj/effect/proc_holder/changeling/hivemind_upload
|
||||
/datum/action/changeling/hivemind_upload
|
||||
name = "Hive Channel DNA"
|
||||
desc = "Allows us to channel DNA in the airwaves to allow other changelings to absorb it."
|
||||
chemical_cost = 10
|
||||
dna_cost = -1
|
||||
|
||||
/obj/effect/proc_holder/changeling/hivemind_upload/sting_action(var/mob/user)
|
||||
/datum/action/changeling/hivemind_upload/sting_action(var/mob/user)
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
var/list/names = list()
|
||||
for(var/datum/dna/DNA in (changeling.absorbed_dna+changeling.protected_dna))
|
||||
@@ -52,13 +54,13 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
feedback_add_details("changeling_powers","HU")
|
||||
return 1
|
||||
|
||||
/obj/effect/proc_holder/changeling/hivemind_download
|
||||
/datum/action/changeling/hivemind_download
|
||||
name = "Hive Absorb DNA"
|
||||
desc = "Allows us to absorb DNA that has been channeled to the airwaves. Does not count towards absorb objectives."
|
||||
chemical_cost = 10
|
||||
dna_cost = -1
|
||||
|
||||
/obj/effect/proc_holder/changeling/hivemind_download/can_sting(var/mob/living/carbon/user)
|
||||
/datum/action/changeling/hivemind_download/can_sting(var/mob/living/carbon/user)
|
||||
if(!..())
|
||||
return
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
@@ -67,7 +69,7 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
return
|
||||
return 1
|
||||
|
||||
/obj/effect/proc_holder/changeling/hivemind_download/sting_action(var/mob/user)
|
||||
/datum/action/changeling/hivemind_download/sting_action(var/mob/user)
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
var/list/names = list()
|
||||
for(var/datum/dna/DNA in hivemind_bank)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/changeling/humanform
|
||||
/datum/action/changeling/humanform
|
||||
name = "Human form"
|
||||
desc = "We change into a human."
|
||||
chemical_cost = 5
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
|
||||
//Transform into a human.
|
||||
/obj/effect/proc_holder/changeling/humanform/sting_action(var/mob/living/carbon/human/user)
|
||||
/datum/action/changeling/humanform/sting_action(var/mob/living/carbon/human/user)
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
var/list/names = list()
|
||||
for(var/datum/dna/DNA in (changeling.absorbed_dna+changeling.protected_dna))
|
||||
@@ -38,7 +38,7 @@
|
||||
user.UpdateAppearance()
|
||||
|
||||
changeling.purchasedpowers -= src
|
||||
//O.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/lesserform(null)
|
||||
//O.mind.changeling.purchasedpowers += new /datum/action/changeling/lesserform(null)
|
||||
feedback_add_details("changeling_powers","LFT")
|
||||
return 1
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/changeling/lesserform
|
||||
/datum/action/changeling/lesserform
|
||||
name = "Lesser form"
|
||||
desc = "We debase ourselves and become lesser. We become a monkey."
|
||||
chemical_cost = 5
|
||||
@@ -7,7 +7,7 @@
|
||||
req_human = 1
|
||||
|
||||
//Transform into a monkey.
|
||||
/obj/effect/proc_holder/changeling/lesserform/sting_action(var/mob/living/carbon/human/user)
|
||||
/datum/action/changeling/lesserform/sting_action(var/mob/living/carbon/human/user)
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
if(!user)
|
||||
return 0
|
||||
@@ -25,6 +25,6 @@
|
||||
changeling.geneticdamage = 30
|
||||
to_chat(H, "<span class='warning'>Our genes cry out!</span>")
|
||||
H.monkeyize()
|
||||
changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
|
||||
changeling.purchasedpowers += new /datum/action/changeling/humanform(null)
|
||||
feedback_add_details("changeling_powers","LF")
|
||||
return 1
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/changeling/linglink
|
||||
/datum/action/changeling/linglink
|
||||
name = "Hivemind Link"
|
||||
desc = "Link your victim's mind into the hivemind for personal interrogation"
|
||||
chemical_cost = 0
|
||||
@@ -6,7 +6,7 @@
|
||||
req_human = 1
|
||||
max_genetic_damage = 100
|
||||
|
||||
/obj/effect/proc_holder/changeling/linglink/can_sting(mob/living/carbon/user)
|
||||
/datum/action/changeling/linglink/can_sting(mob/living/carbon/user)
|
||||
if(!..())
|
||||
return
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
@@ -34,7 +34,7 @@
|
||||
return
|
||||
return changeling.can_absorb_dna(user,target)
|
||||
|
||||
/obj/effect/proc_holder/changeling/linglink/sting_action(mob/user)
|
||||
/datum/action/changeling/linglink/sting_action(mob/user)
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
var/obj/item/grab/G = user.get_active_hand()
|
||||
var/mob/living/carbon/target = G.affecting
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/changeling/mimicvoice
|
||||
/datum/action/changeling/mimicvoice
|
||||
name = "Mimic Voice"
|
||||
desc = "We shape our vocal glands to sound like a desired voice."
|
||||
helptext = "Will turn your voice into the name that you enter. We must constantly expend chemicals to maintain our form like this."
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
|
||||
// Fake Voice
|
||||
/obj/effect/proc_holder/changeling/mimicvoice/sting_action(var/mob/user)
|
||||
/datum/action/changeling/mimicvoice/sting_action(var/mob/user)
|
||||
var/datum/changeling/changeling=user.mind.changeling
|
||||
if(changeling.mimicing)
|
||||
changeling.mimicing = ""
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
|
||||
//Parent to shields and blades because muh copypasted code.
|
||||
/obj/effect/proc_holder/changeling/weapon
|
||||
/datum/action/changeling/weapon
|
||||
name = "Organic Weapon"
|
||||
desc = "Go tell a coder if you see this"
|
||||
helptext = "Yell at coderbus"
|
||||
@@ -21,7 +21,7 @@
|
||||
var/weapon_type
|
||||
var/weapon_name_simple
|
||||
|
||||
/obj/effect/proc_holder/changeling/weapon/try_to_sting(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/weapon/try_to_sting(var/mob/user, var/mob/target)
|
||||
if(istype(user.l_hand, weapon_type)) //Not the nicest way to do it, but eh
|
||||
qdel(user.l_hand)
|
||||
if(!silent)
|
||||
@@ -36,7 +36,7 @@
|
||||
return
|
||||
..(user, target)
|
||||
|
||||
/obj/effect/proc_holder/changeling/weapon/sting_action(var/mob/user)
|
||||
/datum/action/changeling/weapon/sting_action(var/mob/user)
|
||||
if(!user.drop_item())
|
||||
to_chat(user, "The [user.get_active_hand()] is stuck to your hand, you cannot grow a [weapon_name_simple] over it!")
|
||||
return
|
||||
@@ -45,7 +45,7 @@
|
||||
return W
|
||||
|
||||
//Parent to space suits and armor.
|
||||
/obj/effect/proc_holder/changeling/suit
|
||||
/datum/action/changeling/suit
|
||||
name = "Organic Suit"
|
||||
desc = "Go tell a coder if you see this"
|
||||
helptext = "Yell at coderbus"
|
||||
@@ -60,7 +60,7 @@
|
||||
var/recharge_slowdown = 0
|
||||
var/blood_on_castoff = 0
|
||||
|
||||
/obj/effect/proc_holder/changeling/suit/try_to_sting(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/suit/try_to_sting(var/mob/user, var/mob/target)
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
if(!ishuman(user) || !changeling)
|
||||
return
|
||||
@@ -84,7 +84,7 @@
|
||||
return
|
||||
..(H, target)
|
||||
|
||||
/obj/effect/proc_holder/changeling/suit/sting_action(var/mob/living/carbon/human/user)
|
||||
/datum/action/changeling/suit/sting_action(var/mob/living/carbon/human/user)
|
||||
if(!user.unEquip(user.wear_suit))
|
||||
to_chat(user, "\the [user.wear_suit] is stuck to your body, you cannot grow a [suit_name_simple] over it!")
|
||||
return
|
||||
@@ -107,7 +107,7 @@
|
||||
/***************************************\
|
||||
|***************ARM BLADE***************|
|
||||
\***************************************/
|
||||
/obj/effect/proc_holder/changeling/weapon/arm_blade
|
||||
/datum/action/changeling/weapon/arm_blade
|
||||
name = "Arm Blade"
|
||||
desc = "We reform one of our arms into a deadly blade."
|
||||
helptext = "Cannot be used while in lesser form."
|
||||
@@ -177,7 +177,7 @@
|
||||
|***********COMBAT TENTACLES*************|
|
||||
\***************************************/
|
||||
|
||||
/obj/effect/proc_holder/changeling/weapon/tentacle
|
||||
/datum/action/changeling/weapon/tentacle
|
||||
name = "Tentacle"
|
||||
desc = "We ready a tentacle to grab items or victims with."
|
||||
helptext = "We can use it once to retrieve a distant item. If used on living creatures, the effect depends on the intent: \
|
||||
@@ -350,7 +350,7 @@
|
||||
/***************************************\
|
||||
|****************SHIELD*****************|
|
||||
\***************************************/
|
||||
/obj/effect/proc_holder/changeling/weapon/shield
|
||||
/datum/action/changeling/weapon/shield
|
||||
name = "Organic Shield"
|
||||
desc = "We reform one of our arms into a hard shield."
|
||||
helptext = "Organic tissue cannot resist damage forever, the shield will break after it is hit too much. The more genomes we absorb, the stronger it is. Cannot be used while in lesser form."
|
||||
@@ -363,7 +363,7 @@
|
||||
weapon_type = /obj/item/shield/changeling
|
||||
weapon_name_simple = "shield"
|
||||
|
||||
/obj/effect/proc_holder/changeling/weapon/shield/sting_action(var/mob/user)
|
||||
/datum/action/changeling/weapon/shield/sting_action(var/mob/user)
|
||||
var/datum/changeling/changeling = user.mind.changeling //So we can read the absorbedcount.
|
||||
if(!changeling)
|
||||
return
|
||||
@@ -404,7 +404,7 @@
|
||||
/***************************************\
|
||||
|*********SPACE SUIT + HELMET***********|
|
||||
\***************************************/
|
||||
/obj/effect/proc_holder/changeling/suit/organic_space_suit
|
||||
/datum/action/changeling/suit/organic_space_suit
|
||||
name = "Organic Space Suit"
|
||||
desc = "We grow an organic suit to protect ourselves from space exposure."
|
||||
helptext = "We must constantly repair our form to make it space-proof, reducing chemical production while we are protected. Retreating the suit damages our genomes. Cannot be used in lesser form."
|
||||
@@ -451,7 +451,7 @@
|
||||
/***************************************\
|
||||
|*****************ARMOR*****************|
|
||||
\***************************************/
|
||||
/obj/effect/proc_holder/changeling/suit/armor
|
||||
/datum/action/changeling/suit/armor
|
||||
name = "Chitinous Armor"
|
||||
desc = "We turn our skin into tough chitin to protect us from damage."
|
||||
helptext = "Upkeep of the armor requires a low expenditure of chemicals. The armor is strong against brute force, but does not provide much protection from lasers. Retreating the armor damages our genomes. Cannot be used in lesser form."
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/changeling/panacea
|
||||
/datum/action/changeling/panacea
|
||||
name = "Anatomic Panacea"
|
||||
desc = "Expels impurifications from our form; curing diseases, removing parasites, sobering us, purging toxins and radiation, and resetting our genetic code completely."
|
||||
helptext = "Can be used while unconscious."
|
||||
@@ -7,7 +7,7 @@
|
||||
req_stat = UNCONSCIOUS
|
||||
|
||||
//Heals the things that the other regenerative abilities don't.
|
||||
/obj/effect/proc_holder/changeling/panacea/sting_action(var/mob/user)
|
||||
/datum/action/changeling/panacea/sting_action(var/mob/user)
|
||||
|
||||
to_chat(user, "<span class='notice'>We cleanse impurities from our form.</span>")
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/obj/effect/proc_holder/changeling/revive
|
||||
/datum/action/changeling/revive
|
||||
name = "Regenerate"
|
||||
desc = "We regenerate, healing all damage from our form."
|
||||
req_stat = DEAD
|
||||
always_keep = 1
|
||||
|
||||
//Revive from regenerative stasis
|
||||
/obj/effect/proc_holder/changeling/revive/sting_action(var/mob/living/carbon/user)
|
||||
/datum/action/changeling/revive/sting_action(var/mob/living/carbon/user)
|
||||
user.setToxLoss(0, FALSE)
|
||||
user.setOxyLoss(0, FALSE)
|
||||
user.setCloneLoss(0, FALSE)
|
||||
@@ -62,7 +62,7 @@
|
||||
user.regenerate_icons()
|
||||
|
||||
user.update_revive() //Handle waking up the changeling after the regenerative stasis has completed.
|
||||
user.mind.changeling.purchasedpowers -= src
|
||||
src.Remove(user)
|
||||
user.med_hud_set_status()
|
||||
user.med_hud_set_health()
|
||||
feedback_add_details("changeling_powers","CR")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/changeling/resonant_shriek
|
||||
/datum/action/changeling/resonant_shriek
|
||||
name = "Resonant Shriek"
|
||||
desc = "Our lungs and vocal chords shift, allowing us to briefly emit a noise that deafens and confuses the weak-minded."
|
||||
helptext = "Emits a high-frequency sound that confuses and deafens humans, blows out nearby lights and overloads cyborg sensors."
|
||||
@@ -7,7 +7,7 @@
|
||||
req_human = 1
|
||||
|
||||
//A flashy ability, good for crowd control and sewing chaos.
|
||||
/obj/effect/proc_holder/changeling/resonant_shriek/sting_action(var/mob/user)
|
||||
/datum/action/changeling/resonant_shriek/sting_action(var/mob/user)
|
||||
for(var/mob/living/M in get_mobs_in_view(4, user))
|
||||
if(iscarbon(M))
|
||||
if(!M.mind || !M.mind.changeling)
|
||||
@@ -28,14 +28,14 @@
|
||||
feedback_add_details("changeling_powers","RS")
|
||||
return 1
|
||||
|
||||
/obj/effect/proc_holder/changeling/dissonant_shriek
|
||||
/datum/action/changeling/dissonant_shriek
|
||||
name = "Dissonant Shriek"
|
||||
desc = "We shift our vocal cords to release a high-frequency sound that overloads nearby electronics."
|
||||
chemical_cost = 30
|
||||
dna_cost = 1
|
||||
|
||||
//A flashy ability, good for crowd control and sewing chaos.
|
||||
/obj/effect/proc_holder/changeling/dissonant_shriek/sting_action(var/mob/user)
|
||||
/datum/action/changeling/dissonant_shriek/sting_action(var/mob/user)
|
||||
for(var/obj/machinery/light/L in range(5, usr))
|
||||
L.on = 1
|
||||
L.broken()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/changeling/spiders
|
||||
/datum/action/changeling/spiders
|
||||
name = "Spread Infestation"
|
||||
desc = "Our form divides, creating arachnids which will grow into deadly beasts."
|
||||
helptext = "The spiders are thoughtless creatures, and may attack their creators when fully grown. Requires at least 5 DNA absorptions."
|
||||
@@ -7,7 +7,7 @@
|
||||
req_dna = 5
|
||||
|
||||
//Makes some spiderlings. Good for setting traps and causing general trouble.
|
||||
/obj/effect/proc_holder/changeling/spiders/sting_action(var/mob/user)
|
||||
/datum/action/changeling/spiders/sting_action(var/mob/user)
|
||||
for(var/i=0, i<2, i++)
|
||||
var/obj/structure/spider/spiderling/S = new(user.loc)
|
||||
S.grow_as = /mob/living/simple_animal/hostile/poison/giant_spider/hunter
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//Strained Muscles: Temporary speed boost at the cost of rapid damage
|
||||
//Limited because of hardsuits and such; ideally, used for a quick getaway
|
||||
|
||||
/obj/effect/proc_holder/changeling/strained_muscles
|
||||
/datum/action/changeling/strained_muscles
|
||||
name = "Strained Muscles"
|
||||
desc = "We evolve the ability to reduce the acid buildup in our muscles, allowing us to move much faster."
|
||||
helptext = "The strain will make us tired, and we will rapidly become fatigued. Standard weight restrictions, like hardsuits, still apply. Cannot be used in lesser form."
|
||||
@@ -11,7 +11,7 @@
|
||||
var/stacks = 0 //Increments every 5 seconds; damage increases over time
|
||||
var/enabled = 0 //Whether or not you are a hedgehog
|
||||
|
||||
/obj/effect/proc_holder/changeling/strained_muscles/sting_action(var/mob/living/carbon/user)
|
||||
/datum/action/changeling/strained_muscles/sting_action(var/mob/living/carbon/user)
|
||||
enabled = !enabled
|
||||
if(enabled)
|
||||
to_chat(user, "<span class='notice'>Our muscles tense and strengthen.</span>")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/changeling/swap_form
|
||||
/datum/action/changeling/swap_form
|
||||
name = "Swap Forms"
|
||||
desc = "We force ourselves into the body of another form, pushing their consciousness into the form we left behind."
|
||||
helptext = "We will bring all our abilities with us, but we will lose our old form DNA in exchange for the new one. The process will seem suspicious to any observers."
|
||||
@@ -6,7 +6,7 @@
|
||||
dna_cost = 1
|
||||
req_human = 1 //Monkeys can't grab
|
||||
|
||||
/obj/effect/proc_holder/changeling/swap_form/can_sting(var/mob/living/carbon/user)
|
||||
/datum/action/changeling/swap_form/can_sting(var/mob/living/carbon/user)
|
||||
if(!..())
|
||||
return
|
||||
var/obj/item/grab/G = user.get_active_hand()
|
||||
@@ -23,7 +23,7 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/effect/proc_holder/changeling/swap_form/sting_action(var/mob/living/carbon/user)
|
||||
/datum/action/changeling/swap_form/sting_action(var/mob/living/carbon/user)
|
||||
var/obj/item/grab/G = user.get_active_hand()
|
||||
var/mob/living/carbon/human/target = G.affecting
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/obj/effect/proc_holder/changeling/sting
|
||||
/datum/action/changeling/sting
|
||||
name = "Tiny Prick"
|
||||
desc = "Stabby stabby"
|
||||
var/sting_icon = null
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/Click()
|
||||
var/mob/user = usr
|
||||
/datum/action/changeling/sting/Trigger()
|
||||
var/mob/user = owner
|
||||
if(!user || !user.mind || !user.mind.changeling)
|
||||
return
|
||||
if(!(user.mind.changeling.chosen_sting))
|
||||
@@ -13,13 +13,13 @@
|
||||
unset_sting(user)
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/proc/set_sting(var/mob/user)
|
||||
/datum/action/changeling/sting/proc/set_sting(var/mob/user)
|
||||
to_chat(user, "<span class='notice'>We prepare our sting, use alt+click or middle mouse button on target to sting them.</span>")
|
||||
user.mind.changeling.chosen_sting = src
|
||||
user.hud_used.lingstingdisplay.icon_state = sting_icon
|
||||
user.hud_used.lingstingdisplay.invisibility = 0
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/proc/unset_sting(var/mob/user)
|
||||
/datum/action/changeling/sting/proc/unset_sting(var/mob/user)
|
||||
to_chat(user, "<span class='warning'>We retract our sting, we can't sting anyone for now.</span>")
|
||||
user.mind.changeling.chosen_sting = null
|
||||
user.hud_used.lingstingdisplay.icon_state = null
|
||||
@@ -29,7 +29,7 @@
|
||||
if(mind && mind.changeling && mind.changeling.chosen_sting)
|
||||
mind.changeling.chosen_sting.unset_sting(src)
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/can_sting(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/sting/can_sting(var/mob/user, var/mob/target)
|
||||
if(!..())
|
||||
return
|
||||
if(!user.mind.changeling.chosen_sting)
|
||||
@@ -51,7 +51,7 @@
|
||||
return
|
||||
return 1
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/sting_feedback(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/sting/sting_feedback(var/mob/user, var/mob/target)
|
||||
if(!target)
|
||||
return
|
||||
to_chat(user, "<span class='notice'>We stealthily sting [target.name].</span>")
|
||||
@@ -61,7 +61,7 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/transformation
|
||||
/datum/action/changeling/sting/transformation
|
||||
name = "Transformation Sting"
|
||||
desc = "We silently sting a human, injecting a retrovirus that forces them to transform."
|
||||
helptext = "The victim will transform much like a changeling would. The effects will be obvious to the victim, and the process will damage our genomes."
|
||||
@@ -71,7 +71,7 @@
|
||||
genetic_damage = 100
|
||||
var/datum/dna/selected_dna = null
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/transformation/Click()
|
||||
/datum/action/changeling/sting/transformation/Trigger()
|
||||
var/mob/user = usr
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
if(changeling.chosen_sting)
|
||||
@@ -85,7 +85,7 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/transformation/can_sting(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/sting/transformation/can_sting(var/mob/user, var/mob/target)
|
||||
if(!..())
|
||||
return
|
||||
if((HUSK in target.mutations) || (!ishuman(target)))
|
||||
@@ -98,7 +98,7 @@
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/transformation/sting_action(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/sting/transformation/sting_action(var/mob/user, var/mob/target)
|
||||
add_attack_logs(user, target, "Transformation sting (changeling) (new identity is [selected_dna.real_name])")
|
||||
if(issmall(target))
|
||||
to_chat(user, "<span class='notice'>Our genes cry out as we sting [target.name]!</span>")
|
||||
@@ -114,7 +114,7 @@
|
||||
feedback_add_details("changeling_powers","TS")
|
||||
return TRUE
|
||||
|
||||
obj/effect/proc_holder/changeling/sting/extract_dna
|
||||
datum/action/changeling/sting/extract_dna
|
||||
name = "Extract DNA Sting"
|
||||
desc = "We stealthily sting a target and extract their DNA."
|
||||
helptext = "Will give you the DNA of your target, allowing you to transform into them."
|
||||
@@ -122,18 +122,18 @@ obj/effect/proc_holder/changeling/sting/extract_dna
|
||||
chemical_cost = 25
|
||||
dna_cost = 0
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/extract_dna/can_sting(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/sting/extract_dna/can_sting(var/mob/user, var/mob/target)
|
||||
if(..())
|
||||
return user.mind.changeling.can_absorb_dna(user, target)
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/extract_dna/sting_action(var/mob/user, var/mob/living/carbon/human/target)
|
||||
/datum/action/changeling/sting/extract_dna/sting_action(var/mob/user, var/mob/living/carbon/human/target)
|
||||
add_attack_logs(user, target, "Extraction sting (changeling)")
|
||||
if(!(user.mind.changeling.has_dna(target.dna)))
|
||||
user.mind.changeling.absorb_dna(target, user)
|
||||
feedback_add_details("changeling_powers","ED")
|
||||
return 1
|
||||
|
||||
obj/effect/proc_holder/changeling/sting/mute
|
||||
datum/action/changeling/sting/mute
|
||||
name = "Mute Sting"
|
||||
desc = "We silently sting a human, completely silencing them for a short time."
|
||||
helptext = "Does not provide a warning to the victim that they have been stung, until they try to speak and cannot."
|
||||
@@ -141,13 +141,13 @@ obj/effect/proc_holder/changeling/sting/mute
|
||||
chemical_cost = 20
|
||||
dna_cost = 2
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/mute/sting_action(var/mob/user, var/mob/living/carbon/target)
|
||||
/datum/action/changeling/sting/mute/sting_action(var/mob/user, var/mob/living/carbon/target)
|
||||
add_attack_logs(user, target, "Mute sting (changeling)")
|
||||
target.AdjustSilence(30)
|
||||
feedback_add_details("changeling_powers","MS")
|
||||
return 1
|
||||
|
||||
obj/effect/proc_holder/changeling/sting/blind
|
||||
datum/action/changeling/sting/blind
|
||||
name = "Blind Sting"
|
||||
desc = "Temporarily blinds the target."
|
||||
helptext = "This sting completely blinds a target for a short time."
|
||||
@@ -155,7 +155,7 @@ obj/effect/proc_holder/changeling/sting/blind
|
||||
chemical_cost = 25
|
||||
dna_cost = 1
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/blind/sting_action(var/mob/living/user, var/mob/living/target)
|
||||
/datum/action/changeling/sting/blind/sting_action(var/mob/living/user, var/mob/living/target)
|
||||
add_attack_logs(user, target, "Blind sting (changeling)")
|
||||
to_chat(target, "<span class='danger'>Your eyes burn horrifically!</span>")
|
||||
target.BecomeNearsighted()
|
||||
@@ -164,7 +164,7 @@ obj/effect/proc_holder/changeling/sting/blind
|
||||
feedback_add_details("changeling_powers","BS")
|
||||
return 1
|
||||
|
||||
obj/effect/proc_holder/changeling/sting/LSD
|
||||
datum/action/changeling/sting/LSD
|
||||
name = "Hallucination Sting"
|
||||
desc = "Causes terror in the target."
|
||||
helptext = "We evolve the ability to sting a target with a powerful hallucinogenic chemical. The target does not notice they have been stung, and the effect occurs after 30 to 60 seconds."
|
||||
@@ -172,7 +172,7 @@ obj/effect/proc_holder/changeling/sting/LSD
|
||||
chemical_cost = 10
|
||||
dna_cost = 1
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/LSD/sting_action(var/mob/user, var/mob/living/carbon/target)
|
||||
/datum/action/changeling/sting/LSD/sting_action(var/mob/user, var/mob/living/carbon/target)
|
||||
add_attack_logs(user, target, "LSD sting (changeling)")
|
||||
spawn(rand(300,600))
|
||||
if(target)
|
||||
@@ -180,7 +180,7 @@ obj/effect/proc_holder/changeling/sting/LSD
|
||||
feedback_add_details("changeling_powers","HS")
|
||||
return 1
|
||||
|
||||
obj/effect/proc_holder/changeling/sting/cryo //Enable when mob cooling is fixed so that frostoil actually makes you cold, instead of mostly just hungry.
|
||||
datum/action/changeling/sting/cryo //Enable when mob cooling is fixed so that frostoil actually makes you cold, instead of mostly just hungry.
|
||||
name = "Cryogenic Sting"
|
||||
desc = "We silently sting a human with a cocktail of chemicals that freeze them."
|
||||
helptext = "Does not provide a warning to the victim, though they will likely realize they are suddenly freezing."
|
||||
@@ -188,7 +188,7 @@ obj/effect/proc_holder/changeling/sting/cryo //Enable when mob cooling is fixed
|
||||
chemical_cost = 15
|
||||
dna_cost = 2
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/cryo/sting_action(var/mob/user, var/mob/target)
|
||||
/datum/action/changeling/sting/cryo/sting_action(var/mob/user, var/mob/target)
|
||||
add_attack_logs(user, target, "Cryo sting (changeling)")
|
||||
if(target.reagents)
|
||||
target.reagents.add_reagent("frostoil", 30)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/changeling/transform
|
||||
/datum/action/changeling/transform
|
||||
name = "Transform"
|
||||
desc = "We take on the appearance and voice of one we have absorbed."
|
||||
chemical_cost = 5
|
||||
@@ -8,7 +8,7 @@
|
||||
max_genetic_damage = 3
|
||||
|
||||
//Change our DNA to that of somebody we've absorbed.
|
||||
/obj/effect/proc_holder/changeling/transform/sting_action(var/mob/living/carbon/human/user)
|
||||
/datum/action/changeling/transform/sting_action(var/mob/living/carbon/human/user)
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
var/datum/dna/chosen_dna = changeling.select_dna("Select the target DNA: ", "Target DNA")
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
if(origin.changeling.can_absorb_dna(M, owner))
|
||||
origin.changeling.absorb_dna(owner, M)
|
||||
|
||||
origin.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
|
||||
origin.changeling.purchasedpowers += new /datum/action/changeling/humanform(null)
|
||||
M.key = origin.key
|
||||
owner.gib()
|
||||
|
||||
|
||||
@@ -956,9 +956,6 @@ var/list/slot_equipment_priority = list( \
|
||||
|
||||
statpanel("Status") // We only want alt-clicked turfs to come before Status
|
||||
|
||||
if(mind && mind.changeling)
|
||||
add_stings_to_statpanel(mind.changeling.purchasedpowers)
|
||||
|
||||
if(mob_spell_list && mob_spell_list.len)
|
||||
for(var/obj/effect/proc_holder/spell/S in mob_spell_list)
|
||||
add_spell_to_statpanel(S)
|
||||
@@ -1024,12 +1021,6 @@ var/list/slot_equipment_priority = list( \
|
||||
statpanel_things += A
|
||||
statpanel(listed_turf.name, null, statpanel_things)
|
||||
|
||||
|
||||
/mob/proc/add_stings_to_statpanel(var/list/stings)
|
||||
for(var/obj/effect/proc_holder/changeling/S in stings)
|
||||
if(S.chemical_cost >=0 && S.can_be_used_by(src))
|
||||
statpanel("[S.panel]",((S.chemical_cost > 0) ? "[S.chemical_cost]" : ""),S)
|
||||
|
||||
/mob/proc/add_spell_to_statpanel(var/obj/effect/proc_holder/spell/S)
|
||||
switch(S.charge_type)
|
||||
if("recharge")
|
||||
@@ -1039,7 +1030,6 @@ var/list/slot_equipment_priority = list( \
|
||||
if("holdervar")
|
||||
statpanel(S.panel,"[S.holder_var_type] [S.holder_var_amount]",S)
|
||||
|
||||
|
||||
// facing verbs
|
||||
/mob/proc/canface()
|
||||
if(!canmove) return 0
|
||||
|
||||
Reference in New Issue
Block a user