Changes the shapeshift spell to be more flexible. (#22559)

* WiP

* How could this happen
This commit is contained in:
ShiftyRail
2019-04-28 15:53:33 +02:00
committed by jknpj
parent acd768878d
commit af5f51f6f1
4 changed files with 78 additions and 28 deletions

View File

@@ -21,6 +21,9 @@
var/nullified = 0 var/nullified = 0
var/smitecounter = 0 var/smitecounter = 0
var/list/saved_appearances = list()
var/datum/human_appearance/initial_appearance
var/reviving = FALSE var/reviving = FALSE
var/draining = FALSE var/draining = FALSE
var/blood_usable = STARTING_BLOOD var/blood_usable = STARTING_BLOOD
@@ -69,6 +72,10 @@
var/datum/faction/vampire/V = faction var/datum/faction/vampire/V = faction
V.name_clan(src) V.name_clan(src)
var/mob/living/carbon/human/H = antag.current
initial_appearance = H.my_appearance.Copy()
initial_appearance.name = H.real_name
/datum/role/vampire/RemoveFromRole(var/datum/mind/M) /datum/role/vampire/RemoveFromRole(var/datum/mind/M)
var/list/vamp_spells = getAllVampSpells() var/list/vamp_spells = getAllVampSpells()
for(var/spell/spell in antag.current.spell_list) for(var/spell/spell in antag.current.spell_list)
@@ -346,6 +353,11 @@
smitecounter = max(0, (smitecounter + smitetemp)) smitecounter = max(0, (smitecounter + smitetemp))
// At any rate
if (smitecounter && H.real_name != initial_appearance.name)
H.switch_appearance(initial_appearance) // Reveal us as who we are
H.real_name = initial_appearance.name
switch(smitecounter) switch(smitecounter)
if(1 to 30) //just dizziness if(1 to 30) //just dizziness
H.dizziness = max(5, H.dizziness) H.dizziness = max(5, H.dizziness)

View File

@@ -33,40 +33,61 @@
my_appearance = new_looks my_appearance = new_looks
regenerate_icons() regenerate_icons()
/mob/living/carbon/human/proc/randomise_appearance_for(var/new_gender) /datum/human_appearance/proc/Copy()
var/datum/human_appearance/appearance = new var/datum/human_appearance/new_looks = new
new_looks.name = name
new_looks.gender = gender
new_looks.s_tone = s_tone
new_looks.h_style = h_style
new_looks.r_hair = r_hair
new_looks.g_hair = g_hair
new_looks.f_style = f_style
new_looks.r_facial = r_facial
new_looks.g_facial = g_facial
new_looks.b_facial = b_facial
new_looks.r_eyes = r_eyes
new_looks.g_eyes = g_eyes
new_looks.b_eyes = b_eyes
return new_looks
/datum/human_appearance/proc/randomise(var/new_gender, var/species)
if (new_gender) if (new_gender)
appearance.gender = new_gender gender = new_gender
else else
appearance.gender = pick(MALE, FEMALE) gender = pick(MALE, FEMALE)
appearance.s_tone = random_skin_tone(species) s_tone = random_skin_tone(species)
appearance.h_style = random_hair_style(gender, species) h_style = random_hair_style(gender, species)
appearance.f_style = random_facial_hair_style(gender, species) f_style = random_facial_hair_style(gender, species)
var/list/hair_colour = randomize_hair_color("hair") var/list/hair_colour = randomize_hair_color("hair")
var/list/facial_hair_colour = randomize_hair_color("facial") var/list/facial_hair_colour = randomize_hair_color("facial")
var/list/eye_colour = randomize_eyes_color() var/list/eye_colour = randomize_eyes_color()
appearance.r_hair = hair_colour[INDEX_RED] r_hair = hair_colour[INDEX_RED]
appearance.g_hair = hair_colour[INDEX_GREEN] g_hair = hair_colour[INDEX_GREEN]
appearance.b_hair = hair_colour[INDEX_BLUE] b_hair = hair_colour[INDEX_BLUE]
appearance.r_facial = facial_hair_colour[INDEX_RED] r_facial = facial_hair_colour[INDEX_RED]
appearance.g_facial = facial_hair_colour[INDEX_GREEN] g_facial = facial_hair_colour[INDEX_GREEN]
appearance.b_facial = facial_hair_colour[INDEX_BLUE] b_facial = facial_hair_colour[INDEX_BLUE]
appearance.r_eyes = eye_colour[INDEX_RED] r_eyes = eye_colour[INDEX_RED]
appearance.g_eyes = eye_colour[INDEX_GREEN] g_eyes = eye_colour[INDEX_GREEN]
appearance.b_eyes = eye_colour[INDEX_BLUE] b_eyes = eye_colour[INDEX_BLUE]
gender = appearance.gender
/mob/living/carbon/human/proc/randomise_appearance_for(var/new_gender)
var/datum/human_appearance/new_looks = new
new_looks.randomise(new_gender, species.name)
my_appearance = new_looks
regenerate_icons() regenerate_icons()
return appearance
/mob/living/carbon/human/proc/randomize_hair_color(var/target = "hair") return new_looks
/datum/human_appearance/proc/randomize_hair_color(var/target = "hair")
if(prob (75) && target == "facial") // Chance to inherit hair color if(prob (75) && target == "facial") // Chance to inherit hair color
return list(my_appearance.r_hair, my_appearance.g_hair, my_appearance.b_hair) return list(r_hair, g_hair, b_hair)
var/red var/red
var/green var/green
@@ -113,7 +134,7 @@
return list(red, green, blue) return list(red, green, blue)
/mob/living/carbon/human/proc/randomize_eyes_color() /datum/human_appearance/proc/randomize_eyes_color()
var/red var/red
var/green var/green
var/blue var/blue

View File

@@ -205,7 +205,7 @@
prev_gender = gender // Debug for plural genders prev_gender = gender // Debug for plural genders
make_blood() make_blood()
init_butchering_list() // While animals only generate list of their teeth/skins on death, humans generate it when they're born. init_butchering_list() // While animals only generate list of their teeth/skins on death, humans generate it when they're born.
my_appearance.name = real_name
// Set up DNA. // Set up DNA.
if(!delay_ready_dna) if(!delay_ready_dna)
dna.ready_dna(src) dna.ready_dna(src)

View File

@@ -1,6 +1,6 @@
/spell/shapeshift /spell/shapeshift
name = "Shapeshift (1)" name = "Shapeshift (1)"
desc = "Changes your name and appearance and has a cooldown of 3 minutes." desc = "Changes your name and appearance, either to someone in view or randomly. Has a cooldown of 3 minutes."
abbreviation = "SS" abbreviation = "SS"
school = "vampire" school = "vampire"
@@ -31,9 +31,26 @@
/spell/shapeshift/cast(var/list/targets, var/mob/living/carbon/human/user) /spell/shapeshift/cast(var/list/targets, var/mob/living/carbon/human/user)
if (!istype(user)) if (!istype(user))
return FALSE return FALSE
user.visible_message("<span class='sinister'>\The [user] transforms!</span>") var/list/choices = list()
user.real_name = user.generate_name() //random_name(M.current.gender)
user.randomise_appearance_for(user.gender)
var/datum/role/vampire/V = isvampire(user) var/datum/role/vampire/V = isvampire(user)
if (V) choices[V.initial_appearance.name] = V.initial_appearance
V.remove_blood(blood_cost) for (var/mob/living/carbon/human/H in view(user) - user)
choices[H.real_name] = H.my_appearance.Copy()
for (var/datum/human_appearance/looks in V.saved_appearances)
choices[looks.name] = looks
choices["Random"] = ""
var/choice = input(user, "Which appearance shall we adopt?", "Shapeshift", "Random") as null|anything in choices
if (!choice)
return
else if (choice == "Random")
var/name = user.generate_name() //random_name(M.current.gender)
var/datum/human_appearance/new_looks = user.randomise_appearance_for(user.gender)
new_looks.name = name
V.saved_appearances += new_looks
else
user.switch_appearance(choices[choice])
user.real_name = choice
V.remove_blood(blood_cost)