Merge pull request #10923 from Miauw62/neonewling

upgrades changeling disguises
This commit is contained in:
phil235
2015-08-15 00:03:06 +02:00
10 changed files with 210 additions and 77 deletions

View File

@@ -376,7 +376,7 @@
text += "<b>YES</b>|<a href='?src=\ref[src];changeling=clear'>no</a>" text += "<b>YES</b>|<a href='?src=\ref[src];changeling=clear'>no</a>"
if (objectives.len==0) if (objectives.len==0)
text += "<br>Objectives are empty! <a href='?src=\ref[src];changeling=autoobjectives'>Randomize!</a>" text += "<br>Objectives are empty! <a href='?src=\ref[src];changeling=autoobjectives'>Randomize!</a>"
if( changeling && changeling.absorbed_dna.len && (current.real_name != changeling.absorbed_dna[1]) ) if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) )
text += "<br><a href='?src=\ref[src];changeling=initialdna'>Transform to initial appearance.</a>" text += "<br><a href='?src=\ref[src];changeling=initialdna'>Transform to initial appearance.</a>"
else else
text += "<a href='?src=\ref[src];changeling=changeling'>yes</a>|<b>NO</b>" text += "<a href='?src=\ref[src];changeling=changeling'>yes</a>|<b>NO</b>"
@@ -971,12 +971,12 @@
usr << "<span class='notice'>The objectives for changeling [key] have been generated. You can edit them and anounce manually.</span>" usr << "<span class='notice'>The objectives for changeling [key] have been generated. You can edit them and anounce manually.</span>"
if("initialdna") if("initialdna")
if( !changeling || !changeling.absorbed_dna.len || !istype(current, /mob/living/carbon)) if( !changeling || !changeling.stored_profiles.len || !istype(current, /mob/living/carbon))
usr << "<span class='danger'>Resetting DNA failed!</span>" usr << "<span class='danger'>Resetting DNA failed!</span>"
else else
var/mob/living/carbon/C = current var/mob/living/carbon/C = current
C.dna = changeling.absorbed_dna[1] C.dna = changeling.first_prof.dna
C.real_name = C.dna.real_name C.real_name = changeling.first_prof.name
updateappearance(C) updateappearance(C)
domutcheck(C) domutcheck(C)

View File

@@ -1,9 +1,12 @@
#define LING_FAKEDEATH_TIME 400 //40 seconds #define LING_FAKEDEATH_TIME 400 //40 seconds
#define LING_DEAD_GENETICDAMAGE_HEAL_CAP 50 //The lowest value of geneticdamage handle_changeling() can take it to while dead. #define LING_DEAD_GENETICDAMAGE_HEAL_CAP 50 //The lowest value of geneticdamage handle_changeling() can take it to while dead.
#define LING_ABSORB_RECENT_SPEECH 8 //The amount of recent spoken lines to gain on absorbing a mob #define LING_ABSORB_RECENT_SPEECH 8 //The amount of recent spoken lines to gain on absorbing a mob
var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega") var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")
var/list/slots = list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store")
var/list/slot2slot = list("head" = slot_head, "wear_mask" = slot_wear_mask, "back" = slot_back, "wear_suit" = slot_wear_suit, "w_uniform" = slot_w_uniform, "shoes" = slot_shoes, "belt" = slot_belt, "gloves" = slot_gloves, "glasses" = slot_glasses, "ears" = slot_ears, "wear_id" = slot_wear_id, "s_store" = slot_s_store)
var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mask" = /obj/item/clothing/mask/changeling, "back" = /obj/item/changeling, "wear_suit" = /obj/item/clothing/suit/changeling, "w_uniform" = /obj/item/clothing/under/changeling, "shoes" = /obj/item/clothing/shoes/changeling, "belt" = /obj/item/changeling, "gloves" = /obj/item/clothing/gloves/changeling, "glasses" = /obj/item/clothing/glasses/changeling, "ears" = /obj/item/changeling, "wear_id" = /obj/item/changeling, "s_store" = /obj/item/changeling)
/datum/game_mode /datum/game_mode
var/list/datum/mind/changelings = list() var/list/datum/mind/changelings = list()
@@ -257,9 +260,11 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
return 1 return 1
/datum/changeling //stores changeling powers, changeling recharge thingie, changeling absorbed DNA and changeling ID (for changeling hivemind) /datum/changeling //stores changeling powers, changeling recharge thingie, changeling absorbed DNA and changeling ID (for changeling hivemind)
var/list/absorbed_dna = list() var/list/stored_profiles = list() //list of datum/changelingprofile
var/list/protected_dna = list() //dna that is not lost when capacity is otherwise full var/datum/changelingprofile/first_prof = null
var/dna_max = 4 //How many extra DNA strands the changeling can store for transformation. //var/list/absorbed_dna = list()
//var/list/protected_dna = list() //dna that is not lost when capacity is otherwise full
var/dna_max = 6 //How many extra DNA strands the changeling can store for transformation.
var/absorbedcount = 1 //We would require at least 1 sample of compatible DNA to have taken on the form of a human. var/absorbedcount = 1 //We would require at least 1 sample of compatible DNA to have taken on the form of a human.
var/chem_charges = 20 var/chem_charges = 20
var/chem_storage = 75 var/chem_storage = 75
@@ -288,7 +293,6 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
changelingID = "[honorific] [changelingID]" changelingID = "[honorific] [changelingID]"
else else
changelingID = "[honorific] [rand(1,999)]" changelingID = "[honorific] [rand(1,999)]"
absorbed_dna.len = dna_max
/datum/changeling/proc/regenerate(var/mob/living/carbon/the_ling) /datum/changeling/proc/regenerate(var/mob/living/carbon/the_ling)
@@ -302,18 +306,19 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
/datum/changeling/proc/get_dna(dna_owner) /datum/changeling/proc/get_dna(dna_owner)
for(var/datum/dna/DNA in (absorbed_dna+protected_dna)) for(var/datum/changelingprofile/prof in stored_profiles)
if(dna_owner == DNA.real_name) if(dna_owner == prof.name)
return DNA return prof
/datum/changeling/proc/has_dna(datum/dna/tDNA) /datum/changeling/proc/has_dna(datum/dna/tDNA)
for(var/datum/dna/D in (absorbed_dna+protected_dna)) for(var/datum/changelingprofile/prof in stored_profiles)
if(tDNA.is_same_as(D)) if(tDNA.is_same_as(prof.dna))
return 1 return 1
return 0 return 0
/datum/changeling/proc/can_absorb_dna(mob/living/carbon/user, mob/living/carbon/target) /datum/changeling/proc/can_absorb_dna(mob/living/carbon/user, mob/living/carbon/human/target)
if(absorbed_dna[1] == user.dna)//If our current DNA is the stalest, we gotta ditch it. var/datum/changelingprofile/prof = stored_profiles[1]
if(prof.dna == user.dna && stored_profiles.len >= dna_max)//If our current DNA is the stalest, we gotta ditch it.
user << "<span class='warning'>We have reached our capacity to store genetic information! We must transform before absorbing more.</span>" user << "<span class='warning'>We have reached our capacity to store genetic information! We must transform before absorbing more.</span>"
return return
if(!target) if(!target)
@@ -330,3 +335,106 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
user << "<span class='warning'>[target] is not compatible with our biology.</span>" user << "<span class='warning'>[target] is not compatible with our biology.</span>"
return return
return 1 return 1
/datum/changeling/proc/add_profile(var/mob/living/carbon/human/H, var/mob/living/carbon/user, protect = 0)
if(stored_profiles.len > dna_max)
if(!push_out_profile())
return
var/datum/changelingprofile/prof = new()
H.dna.real_name = H.real_name //Set this again, just to be sure that it's properly set.
var/datum/dna/new_dna = new H.dna.type
H.dna.copy_dna(new_dna)
prof.dna = new_dna
prof.name = H.real_name
prof.protected = protect
var/list/slots = list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store")
for(var/slot in slots)
var/obj/item/I = H.vars[slot]
if(!I)
continue
prof.name_list[slot] = I.name
prof.appearance_list[slot] = I.appearance
prof.flags_cover_list[slot] = I.flags_cover
prof.item_color_list[slot] = I.item_color
prof.item_state_list[slot] = I.item_state
prof.exists_list[slot] = 1
stored_profiles += prof
return prof
/datum/changeling/proc/remove_profile(var/mob/living/carbon/human/H, force = 0)
for(var/datum/changelingprofile/prof in stored_profiles)
if(H.real_name == prof.name)
if(prof.protected && !force)
continue
stored_profiles -= prof
qdel(prof)
/datum/changeling/proc/get_profile_to_remove()
for(var/datum/changelingprofile/prof in stored_profiles)
if(!prof.protected)
return prof
/datum/changeling/proc/push_out_profile()
var/datum/changelingprofile/removeprofile = get_profile_to_remove()
if(removeprofile)
stored_profiles -= removeprofile
return 1
return 0
/proc/changeling_transform(var/mob/living/carbon/human/user, var/datum/changelingprofile/chosen_prof)
var/datum/dna/chosen_dna = chosen_prof.dna
user.real_name = chosen_prof.name
user.dna = chosen_dna
hardset_dna(user, null, null, null, null, chosen_dna.species.type, chosen_dna.features)
domutcheck(user)
updateappearance(user)
//vars hackery. not pretty, but better than the alternative.
for(var/slot in slots)
if(istype(user.vars[slot], slot2type[slot]) && !(chosen_prof.exists_list[slot])) //remove unnecessary flesh items
qdel(user.vars[slot])
continue
if((user.vars[slot] && !istype(user.vars[slot], slot2type[slot])) || !(chosen_prof.exists_list[slot]))
continue
var/obj/item/C
var/equip = 0
if(!user.vars[slot])
var/thetype = slot2type[slot]
equip = 1
C = new thetype(user)
else if(istype(user.vars[slot], slot2type[slot]))
C = user.vars[slot]
C.appearance = chosen_prof.appearance_list[slot]
C.name = chosen_prof.name_list[slot]
C.flags_cover = chosen_prof.flags_cover_list[slot]
C.item_color = chosen_prof.item_color_list[slot]
C.item_state = chosen_prof.item_state_list[slot]
if(equip)
user.equip_to_slot_or_del(C, slot2slot[slot])
user.regenerate_icons()
/datum/changelingprofile
var/name = "a bug"
var/protected = 0
var/datum/dna/dna = null
var/list/name_list = list() //associative list of slotname = itemname
var/list/appearance_list = list()
var/list/flags_cover_list = list()
var/list/exists_list = list()
var/list/item_color_list = list()
var/list/item_state_list = list()
/datum/changelingprofile/Destroy()
qdel(dna)

View File

@@ -371,7 +371,8 @@ var/list/sting_paths
S.on_purchase(src) S.on_purchase(src)
var/mob/living/carbon/C = src //only carbons have dna now, so we have to typecaste var/mob/living/carbon/C = src //only carbons have dna now, so we have to typecaste
mind.changeling.absorbed_dna |= C.dna var/datum/changelingprofile/prof = mind.changeling.add_profile(C) //not really a point in typecasting here but somebody will probably get mad at me if i dont
mind.changeling.first_prof = prof
return 1 return 1
/datum/changeling/proc/reset() /datum/changeling/proc/reset()

View File

@@ -54,7 +54,7 @@
target << "<span class='userdanger'>You are absorbed by the changeling!</span>" target << "<span class='userdanger'>You are absorbed by the changeling!</span>"
if(!changeling.has_dna(target.dna)) if(!changeling.has_dna(target.dna))
changeling.absorb_dna(target, user) changeling.add_profile(target, user)
if(user.nutrition < NUTRITION_LEVEL_WELL_FED) if(user.nutrition < NUTRITION_LEVEL_WELL_FED)
user.nutrition = min((user.nutrition + target.nutrition), NUTRITION_LEVEL_WELL_FED) user.nutrition = min((user.nutrition + target.nutrition), NUTRITION_LEVEL_WELL_FED)
@@ -88,7 +88,7 @@
changeling.chem_charges += min(target.mind.changeling.chem_charges, changeling.chem_storage) changeling.chem_charges += min(target.mind.changeling.chem_charges, changeling.chem_storage)
changeling.absorbedcount += (target.mind.changeling.absorbedcount) changeling.absorbedcount += (target.mind.changeling.absorbedcount)
target.mind.changeling.absorbed_dna.len = 1 target.mind.changeling.stored_profiles.len = 1
target.mind.changeling.absorbedcount = 0 target.mind.changeling.absorbedcount = 0
@@ -104,26 +104,9 @@
//Absorbs the target DNA. //Absorbs the target DNA.
/datum/changeling/proc/absorb_dna(mob/living/carbon/T, mob/user) //datum/changeling/proc/absorb_dna(mob/living/carbon/T, mob/user)
if(absorbed_dna.len)
absorbed_dna.Cut(1,2)
T.dna.real_name = T.real_name //Set this again, just to be sure that it's properly set.
var/datum/dna/new_dna = new T.dna.type
new_dna.uni_identity = T.dna.uni_identity
new_dna.struc_enzymes = T.dna.struc_enzymes
new_dna.real_name = T.dna.real_name
new_dna.species = T.dna.species
new_dna.features = T.dna.features
new_dna.blood_type = T.dna.blood_type
absorbedcount++
store_dna(new_dna, user)
/datum/changeling/proc/store_dna(datum/dna/new_dna, mob/user) //datum/changeling/proc/store_dna(datum/dna/new_dna, mob/user)
for(var/datum/objective/escape/escape_with_identity/E in user.mind.objectives)
if(E.target_real_name == new_dna.real_name)
protected_dna |= new_dna
return
absorbed_dna |= new_dna
@@ -169,9 +152,8 @@
target << "<span class='userdanger'>[user] tightens their grip as a painful sensation invades your body.</span>" target << "<span class='userdanger'>[user] tightens their grip as a painful sensation invades your body.</span>"
if(!changeling.has_dna(target.dna)) if(!changeling.has_dna(target.dna))
changeling.absorb_dna(target, user) changeling.add_profile(target, user)
changeling.protected_dna -= user.dna changeling.remove_profile(user)
changeling.absorbed_dna -= user.dna
var/mob/dead/observer/ghost = target.ghostize(0) var/mob/dead/observer/ghost = target.ghostize(0)
user.mind.transfer_to(target) user.mind.transfer_to(target)

View File

@@ -31,9 +31,9 @@ var/list/datum/dna/hivemind_bank = list()
/obj/effect/proc_holder/changeling/hivemind_upload/sting_action(var/mob/user) /obj/effect/proc_holder/changeling/hivemind_upload/sting_action(var/mob/user)
var/datum/changeling/changeling = user.mind.changeling var/datum/changeling/changeling = user.mind.changeling
var/list/names = list() var/list/names = list()
for(var/datum/dna/DNA in (changeling.absorbed_dna+changeling.protected_dna)) for(var/datum/changelingprofile/prof in changeling.stored_profiles)
if(!(DNA in hivemind_bank)) if(!(prof in hivemind_bank))
names += DNA.real_name names += prof.name
if(names.len <= 0) if(names.len <= 0)
user << "<span class='notice'>The airwaves already have all of our DNA.</span>" user << "<span class='notice'>The airwaves already have all of our DNA.</span>"
@@ -43,7 +43,7 @@ var/list/datum/dna/hivemind_bank = list()
if(!chosen_name) if(!chosen_name)
return return
var/datum/dna/chosen_dna = changeling.get_dna(chosen_name) var/datum/changelingprofile/chosen_dna = changeling.get_dna(chosen_name)
if(!chosen_dna) if(!chosen_dna)
return return
@@ -62,7 +62,8 @@ var/list/datum/dna/hivemind_bank = list()
if(!..()) if(!..())
return return
var/datum/changeling/changeling = user.mind.changeling var/datum/changeling/changeling = user.mind.changeling
if(changeling.absorbed_dna[1] == user.dna)//If our current DNA is the stalest, we gotta ditch it. var/datum/changelingprofile/first_prof = changeling.stored_profiles[1]
if(first_prof.name == user.real_name)//If our current DNA is the stalest, we gotta ditch it.
user << "<span class='warning'>We have reached our capacity to store genetic information! We must transform before absorbing more.</span>" user << "<span class='warning'>We have reached our capacity to store genetic information! We must transform before absorbing more.</span>"
return return
return 1 return 1
@@ -70,9 +71,9 @@ var/list/datum/dna/hivemind_bank = list()
/obj/effect/proc_holder/changeling/hivemind_download/sting_action(mob/user) /obj/effect/proc_holder/changeling/hivemind_download/sting_action(mob/user)
var/datum/changeling/changeling = user.mind.changeling var/datum/changeling/changeling = user.mind.changeling
var/list/names = list() var/list/names = list()
for(var/datum/dna/DNA in hivemind_bank) for(var/datum/changelingprofile/prof in hivemind_bank)
if(!(DNA in changeling.absorbed_dna)) if(!(prof in changeling.stored_profiles))
names[DNA.real_name] = DNA names[prof.name] = prof
if(names.len <= 0) if(names.len <= 0)
user << "<span class='notice'>There's no new DNA to absorb from the air.</span>" user << "<span class='notice'>There's no new DNA to absorb from the air.</span>"
@@ -80,13 +81,11 @@ var/list/datum/dna/hivemind_bank = list()
var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in names var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in names
if(!S) return if(!S) return
var/datum/dna/chosen_dna = names[S] var/datum/changelingprofile/chosen_prof = names[S]
if(!chosen_dna) if(!chosen_prof)
return return
if(changeling.absorbed_dna.len) changeling.add_profile(chosen_prof, user)
changeling.absorbed_dna.Cut(1,2)
changeling.store_dna(chosen_dna, user)
user << "<span class='notice'>We absorb the DNA of [S] from the air.</span>" user << "<span class='notice'>We absorb the DNA of [S] from the air.</span>"
feedback_add_details("changeling_powers","HD") feedback_add_details("changeling_powers","HD")
return 1 return 1

View File

@@ -11,25 +11,25 @@
/obj/effect/proc_holder/changeling/humanform/sting_action(mob/living/carbon/user) /obj/effect/proc_holder/changeling/humanform/sting_action(mob/living/carbon/user)
var/datum/changeling/changeling = user.mind.changeling var/datum/changeling/changeling = user.mind.changeling
var/list/names = list() var/list/names = list()
for(var/datum/dna/DNA in (changeling.absorbed_dna+changeling.protected_dna)) for(var/datum/changelingprofile/prof in changeling.stored_profiles)
names += "[DNA.real_name]" names += "[prof.name]"
var/chosen_name = input("Select the target DNA: ", "Target DNA", null) as null|anything in names var/chosen_name = input("Select the target DNA: ", "Target DNA", null) as null|anything in names
if(!chosen_name) if(!chosen_name)
return return
var/datum/dna/chosen_dna = changeling.get_dna(chosen_name) var/datum/changelingprofile/chosen_prof = changeling.get_dna(chosen_name)
if(!chosen_dna) if(!chosen_prof)
return return
if(!user || user.notransform) if(!user || user.notransform)
return 0 return 0
user << "<span class='notice'>We transform our appearance.</span>" user << "<span class='notice'>We transform our appearance.</span>"
user.dna = chosen_dna
user.humanize((TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPSRC), chosen_prof.name)
user.humanize((TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPSRC),chosen_dna.real_name) changeling_transform(user, chosen_prof)
changeling.purchasedpowers -= src changeling.purchasedpowers -= src
feedback_add_details("changeling_powers","LFT") feedback_add_details("changeling_powers","LFT")
qdel(user) qdel(user)
return 1 return 1

View File

@@ -171,7 +171,7 @@
/obj/effect/proc_holder/changeling/sting/extract_dna/sting_action(mob/user, mob/living/carbon/human/target) /obj/effect/proc_holder/changeling/sting/extract_dna/sting_action(mob/user, mob/living/carbon/human/target)
add_logs(user, target, "stung", "extraction sting") add_logs(user, target, "stung", "extraction sting")
if(!(user.mind.changeling.has_dna(target.dna))) if(!(user.mind.changeling.has_dna(target.dna)))
user.mind.changeling.absorb_dna(target, user) user.mind.changeling.add_profile(target, user)
feedback_add_details("changeling_powers","ED") feedback_add_details("changeling_powers","ED")
return 1 return 1

View File

@@ -7,30 +7,66 @@
req_human = 1 req_human = 1
max_genetic_damage = 3 max_genetic_damage = 3
/obj/item/clothing/glasses/changeling
name = "flesh"
flags = NODROP
/obj/item/clothing/under/changeling
name = "flesh"
flags = NODROP
/obj/item/clothing/suit/changeling
name = "flesh"
flags = NODROP
allowed = list(/obj/item/changeling)
/obj/item/clothing/head/changeling
name = "flesh"
flags = NODROP
/obj/item/clothing/shoes/changeling
name = "flesh"
flags = NODROP
/obj/item/clothing/gloves/changeling
name = "flesh"
flags = NODROP
/obj/item/clothing/mask/changeling
name = "flesh"
flags = NODROP
/obj/item/changeling
name = "flesh"
flags = NODROP
slot_flags = ALL
allowed = list(/obj/item/changeling)
//Change our DNA to that of somebody we've absorbed. //Change our DNA to that of somebody we've absorbed.
/obj/effect/proc_holder/changeling/transform/sting_action(mob/living/carbon/human/user) /obj/effect/proc_holder/changeling/transform/sting_action(mob/living/carbon/human/user)
var/datum/changeling/changeling = user.mind.changeling var/datum/changeling/changeling = user.mind.changeling
var/datum/dna/chosen_dna = changeling.select_dna("Select the target DNA: ", "Target DNA") var/datum/changelingprofile/chosen_prof = changeling.select_dna("Select the target DNA: ", "Target DNA", user)
if(!chosen_dna) if(!chosen_prof)
return return
user.dna = chosen_dna changeling_transform(user, chosen_prof)
user.real_name = chosen_dna.real_name
hardset_dna(user, null, null, null, null, chosen_dna.species.type, chosen_dna.features)
updateappearance(user)
domutcheck(user)
feedback_add_details("changeling_powers","TR") feedback_add_details("changeling_powers","TR")
return 1 return 1
/datum/changeling/proc/select_dna(var/prompt, var/title) /datum/changeling/proc/select_dna(var/prompt, var/title, var/mob/living/carbon/user)
var/list/names = list() var/list/names = list("Drop Flesh Disguise")
for(var/datum/dna/DNA in (absorbed_dna+protected_dna)) for(var/datum/changelingprofile/prof in stored_profiles)
names += "[DNA.real_name]" names += "[prof.name]"
var/chosen_name = input(prompt, title, null) as null|anything in names var/chosen_name = input(prompt, title, null) as null|anything in names
if(!chosen_name) if(!chosen_name)
return return
var/datum/dna/chosen_dna = get_dna(chosen_name)
return chosen_dna if(chosen_name == "Drop Flesh Disguise")
for(var/slot in slots)
if(istype(user.vars[slot], slot2type[slot]))
qdel(user.vars[slot])
var/datum/changelingprofile/prof = get_dna(chosen_name)
return prof

View File

@@ -610,7 +610,7 @@ var/global/list/possible_items_special = list()
return target_amount return target_amount
/datum/objective/absorb/check_completion() /datum/objective/absorb/check_completion()
if(owner && owner.changeling && owner.changeling.absorbed_dna && (owner.changeling.absorbedcount >= target_amount)) if(owner && owner.changeling && owner.changeling.stored_profiles && (owner.changeling.absorbedcount >= target_amount))
return 1 return 1
else else
return 0 return 0

View File

@@ -0,0 +1,7 @@
#if ur redding dis ur a dork xd
author: Miauw
delete-after: True
changes:
- rscadd: "Changeling transformations have been upgraded to also include clothing instead of just DNA."