mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
Changes the shapeshift spell to be more flexible. (#22559)
* WiP * How could this happen
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
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)
|
V.remove_blood(blood_cost)
|
||||||
Reference in New Issue
Block a user