mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-16 03:56:20 +00:00
* tgui Preferences Menu + total rewrite of the preferences backend * nah, we dont need to ping those people * trying to remove the funny stuff * unmodularizing this * prefs reset * this may need to be reverted, who knows * okay, this part * perhaps * EEEEEEEEE * unsanitary * E * Stage 1 + loadout system * more fixes * E * I mean, it launches? * More fixes and reorganisation * E * customisation code is spaget. * disable ERP prefs * Update erp_preferences.dm * Update erp_preferences.dm * E * Slowly getting there * It may be time for help :) * tri...colors... help * preferences now pass preferences * Update dna.dm * Fuck this man * missing savefile return, set_species works, removed dumb stuff from updateappearance * https://github.com/Skyrat-SS13/Skyrat-tg/pull/8199 * https://github.com/Skyrat-SS13/Skyrat-tg/pull/8224 * https://github.com/tgstation/tgstation/pull/61519 * https://github.com/Skyrat-SS13/Skyrat-tg/pull/8278 * e * le butonAZARAK HELLO * hhh * Proper recognition where it's due, MrMelbert! * EEEE * examine block * Better gen hit sounds from whitedream * final loadout touches, more bug fixes im sure to come * i said there would be bugfixes * Update LoadoutManager.js * Missing preferences in the html menu * LIVE TESTING PHASE BABY * Update LoadoutManager.js * EEE * LAUNCH TEST FIRE * Update job.dm * Update new_player.dm * 50gb DAY ONE PATCH * EEE * Update preferences.dm * buggle fixes * Update examine.dm * >LOOC starts on Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: jjpark-kb <55967837+jjpark-kb@users.noreply.github.com> Co-authored-by: Gandalf <jzo123@hotmail.com> Co-authored-by: Azarak <azarak10@gmail.com>
289 lines
8.6 KiB
Plaintext
289 lines
8.6 KiB
Plaintext
//wip wip wup
|
|
/obj/structure/mirror
|
|
name = "mirror"
|
|
desc = "Mirror mirror on the wall, who's the most robust of them all?"
|
|
icon = 'icons/obj/watercloset.dmi'
|
|
icon_state = "mirror"
|
|
density = FALSE
|
|
anchored = TRUE
|
|
max_integrity = 200
|
|
integrity_failure = 0.5
|
|
|
|
/obj/structure/mirror/directional/north
|
|
dir = SOUTH
|
|
pixel_y = 28
|
|
|
|
/obj/structure/mirror/directional/south
|
|
dir = NORTH
|
|
pixel_y = -28
|
|
|
|
/obj/structure/mirror/directional/east
|
|
dir = WEST
|
|
pixel_x = 28
|
|
|
|
/obj/structure/mirror/directional/west
|
|
dir = EAST
|
|
pixel_x = -28
|
|
|
|
/obj/structure/mirror/Initialize(mapload)
|
|
. = ..()
|
|
if(icon_state == "mirror_broke" && !broken)
|
|
atom_break(null, mapload)
|
|
|
|
/obj/structure/mirror/attack_hand(mob/user, list/modifiers)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
if(broken || !Adjacent(user))
|
|
return
|
|
|
|
if(ishuman(user))
|
|
var/mob/living/carbon/human/H = user
|
|
|
|
//see code/modules/mob/dead/new_player/preferences.dm at approx line 545 for comments!
|
|
//this is largely copypasted from there.
|
|
|
|
//handle facial hair (if necessary)
|
|
if(H.gender != FEMALE)
|
|
var/new_style = input(user, "Select a facial hairstyle", "Grooming") as null|anything in GLOB.facial_hairstyles_list
|
|
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
|
return //no tele-grooming
|
|
if(new_style)
|
|
H.facial_hairstyle = new_style
|
|
else
|
|
H.facial_hairstyle = "Shaved"
|
|
|
|
//handle normal hair
|
|
var/new_style = input(user, "Select a hairstyle", "Grooming") as null|anything in GLOB.hairstyles_list
|
|
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
|
return //no tele-grooming
|
|
if(HAS_TRAIT(H, TRAIT_BALD))
|
|
to_chat(H, span_notice("If only growing back hair were that easy for you..."))
|
|
if(new_style)
|
|
H.hairstyle = new_style
|
|
|
|
H.update_hair()
|
|
|
|
/obj/structure/mirror/examine_status(mob/user)
|
|
if(broken)
|
|
return list()// no message spam
|
|
return ..()
|
|
|
|
/obj/structure/mirror/attacked_by(obj/item/I, mob/living/user)
|
|
if(broken || !istype(user) || !I.force)
|
|
return ..()
|
|
|
|
. = ..()
|
|
if(broken) // breaking a mirror truly gets you bad luck!
|
|
to_chat(user, span_warning("A chill runs down your spine as [src] shatters..."))
|
|
user.AddComponent(/datum/component/omen, silent=TRUE) // we have our own message
|
|
|
|
/obj/structure/mirror/bullet_act(obj/projectile/P)
|
|
if(broken || !isliving(P.firer) || !P.damage)
|
|
return ..()
|
|
|
|
. = ..()
|
|
if(broken) // breaking a mirror truly gets you bad luck!
|
|
var/mob/living/unlucky_dude = P.firer
|
|
to_chat(unlucky_dude, span_warning("A chill runs down your spine as [src] shatters..."))
|
|
unlucky_dude.AddComponent(/datum/component/omen, silent=TRUE) // we have our own message
|
|
|
|
/obj/structure/mirror/atom_break(damage_flag, mapload)
|
|
. = ..()
|
|
if(broken || (flags_1 & NODECONSTRUCT_1))
|
|
return
|
|
icon_state = "mirror_broke"
|
|
if(!mapload)
|
|
playsound(src, "shatter", 70, TRUE)
|
|
if(desc == initial(desc))
|
|
desc = "Oh no, seven years of bad luck!"
|
|
broken = TRUE
|
|
|
|
/obj/structure/mirror/deconstruct(disassembled = TRUE)
|
|
if(!(flags_1 & NODECONSTRUCT_1))
|
|
if(!disassembled)
|
|
new /obj/item/shard( src.loc )
|
|
qdel(src)
|
|
|
|
/obj/structure/mirror/welder_act(mob/living/user, obj/item/I)
|
|
..()
|
|
if(user.combat_mode)
|
|
return FALSE
|
|
|
|
if(!broken)
|
|
return TRUE
|
|
|
|
if(!I.tool_start_check(user, amount=0))
|
|
return TRUE
|
|
|
|
to_chat(user, span_notice("You begin repairing [src]..."))
|
|
if(I.use_tool(src, user, 10, volume=50))
|
|
to_chat(user, span_notice("You repair [src]."))
|
|
broken = 0
|
|
icon_state = initial(icon_state)
|
|
desc = initial(desc)
|
|
|
|
return TRUE
|
|
|
|
/obj/structure/mirror/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
|
|
switch(damage_type)
|
|
if(BRUTE)
|
|
playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE)
|
|
if(BURN)
|
|
playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE)
|
|
|
|
|
|
/obj/structure/mirror/magic
|
|
name = "magic mirror"
|
|
desc = "Turn and face the strange... face."
|
|
icon_state = "magic_mirror"
|
|
var/list/choosable_races = list()
|
|
|
|
/obj/structure/mirror/magic/New()
|
|
if(!choosable_races.len)
|
|
for(var/speciestype in subtypesof(/datum/species))
|
|
var/datum/species/S = speciestype
|
|
if(initial(S.changesource_flags) & MIRROR_MAGIC)
|
|
choosable_races += initial(S.id)
|
|
choosable_races = sortList(choosable_races)
|
|
..()
|
|
|
|
/obj/structure/mirror/magic/lesser/New()
|
|
choosable_races = get_selectable_species().Copy()
|
|
..()
|
|
|
|
/obj/structure/mirror/magic/badmin/New()
|
|
for(var/speciestype in subtypesof(/datum/species))
|
|
var/datum/species/S = speciestype
|
|
if(initial(S.changesource_flags) & MIRROR_BADMIN)
|
|
choosable_races += initial(S.id)
|
|
..()
|
|
|
|
/obj/structure/mirror/magic/attack_hand(mob/user, list/modifiers)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
if(!ishuman(user))
|
|
return
|
|
|
|
var/mob/living/carbon/human/H = user
|
|
|
|
var/choice = input(user, "Something to change?", "Magical Grooming") as null|anything in list("name", "race", "gender", "hair", "eyes")
|
|
|
|
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
|
return
|
|
|
|
switch(choice)
|
|
if("name")
|
|
var/newname = sanitize_name(stripped_input(H, "Who are we again?", "Name change", H.name, MAX_NAME_LEN), allow_numbers = TRUE) //It's magic so whatever.
|
|
if(!newname)
|
|
return
|
|
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
|
return
|
|
H.real_name = newname
|
|
H.name = newname
|
|
if(H.dna)
|
|
H.dna.real_name = newname
|
|
if(H.mind)
|
|
H.mind.name = newname
|
|
|
|
if("race")
|
|
var/newrace
|
|
var/racechoice = input(H, "What are we again?", "Race change") as null|anything in choosable_races
|
|
newrace = GLOB.species_list[racechoice]
|
|
|
|
if(!newrace)
|
|
return
|
|
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
|
return
|
|
H.set_species(newrace, icon_update=0)
|
|
|
|
if(H.dna.species.use_skintones)
|
|
var/new_s_tone = input(user, "Choose your skin tone:", "Race change") as null|anything in GLOB.skin_tones
|
|
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
|
return
|
|
|
|
if(new_s_tone)
|
|
H.skin_tone = new_s_tone
|
|
H.dna.update_ui_block(DNA_SKIN_TONE_BLOCK)
|
|
|
|
if(MUTCOLORS in H.dna.species.species_traits)
|
|
var/new_mutantcolor = input(user, "Choose your skin color:", "Race change","#"+H.dna.features["mcolor"]) as color|null
|
|
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
|
return
|
|
if(new_mutantcolor)
|
|
var/temp_hsv = RGBtoHSV(new_mutantcolor)
|
|
|
|
if(ReadHSV(temp_hsv)[3] >= ReadHSV("#7F7F7F")[3]) // mutantcolors must be bright
|
|
H.dna.features["mcolor"] = sanitize_hexcolor(new_mutantcolor)
|
|
H.dna.update_uf_block(DNA_MUTANT_COLOR_BLOCK)
|
|
|
|
else
|
|
to_chat(H, span_notice("Invalid color. Your color is not bright enough."))
|
|
|
|
H.update_body()
|
|
H.update_hair()
|
|
H.update_body_parts()
|
|
H.update_mutations_overlay() // no hulk lizard
|
|
|
|
if("gender")
|
|
if(!(H.gender in list("male", "female"))) //blame the patriarchy
|
|
return
|
|
if(H.gender == "male")
|
|
if(tgui_alert(H, "Become a Witch?", "Confirmation", list("Yes", "No")) == "Yes")
|
|
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
|
return
|
|
H.gender = FEMALE
|
|
H.body_type = FEMALE
|
|
to_chat(H, span_notice("Man, you feel like a woman!"))
|
|
else
|
|
return
|
|
|
|
else
|
|
if(tgui_alert(H, "Become a Warlock?", "Confirmation", list("Yes", "No")) == "Yes")
|
|
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
|
return
|
|
H.gender = MALE
|
|
H.body_type = MALE
|
|
to_chat(H, span_notice("Whoa man, you feel like a man!"))
|
|
else
|
|
return
|
|
H.dna.update_ui_block(DNA_GENDER_BLOCK)
|
|
H.update_body()
|
|
H.update_mutations_overlay() //(hulk male/female)
|
|
|
|
if("hair")
|
|
var/hairchoice = tgui_alert(H, "Hairstyle or hair color?", "Change Hair", list("Style", "Color"))
|
|
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
|
return
|
|
if(hairchoice == "Style") //So you just want to use a mirror then?
|
|
..()
|
|
else
|
|
var/new_hair_color = input(H, "Choose your hair color", "Hair Color","#"+H.hair_color) as color|null
|
|
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
|
return
|
|
if(new_hair_color)
|
|
H.hair_color = sanitize_hexcolor(new_hair_color)
|
|
H.dna.update_ui_block(DNA_HAIR_COLOR_BLOCK)
|
|
if(H.gender == "male")
|
|
var/new_face_color = input(H, "Choose your facial hair color", "Hair Color","#"+H.facial_hair_color) as color|null
|
|
if(new_face_color)
|
|
H.facial_hair_color = sanitize_hexcolor(new_face_color)
|
|
H.dna.update_ui_block(DNA_FACIAL_HAIR_COLOR_BLOCK)
|
|
H.update_hair()
|
|
H.update_mutant_bodyparts(force_update = TRUE) /// SKYRAT EDIT - Mirrors are no longer scared of colored ears
|
|
|
|
if(BODY_ZONE_PRECISE_EYES)
|
|
var/new_eye_color = input(H, "Choose your eye color", "Eye Color","#"+H.eye_color) as color|null
|
|
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
|
return
|
|
if(new_eye_color)
|
|
H.eye_color = sanitize_hexcolor(new_eye_color)
|
|
H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
|
|
H.update_body()
|
|
if(choice)
|
|
curse(user)
|
|
|
|
/obj/structure/mirror/magic/proc/curse(mob/living/user)
|
|
return
|