var/list/genescanner_addresses = list() /obj/machinery/genetics_scanner name = "GeneTek scanner" icon = 'icons/obj/Cryogenic2.dmi' icon_state = "scanner_0" density = 1 mats = 15 var/mob/occupant = null var/locked = 0 anchored = 1.0 soundproofing = 10 var/net_id = null var/frequency = 1149 var/datum/radio_frequency/radio_connection New() ..() spawn(8) if(radio_controller) radio_connection = radio_controller.add_object(src, "[frequency]") if(!src.net_id) src.net_id = generate_net_id(src) genescanner_addresses += src.net_id disposing() if (radio_controller) radio_controller.remove_object(src, "[frequency]") radio_connection = null if (src.net_id) genescanner_addresses -= src.net_id occupant = null ..() allow_drop() return 0 examine() set src in oview(7) ..() if (src.occupant) boutput(usr, "[src.occupant.name] is inside the scanner.") else boutput(usr, "There is nobody currently inside the scanner.") if (src.locked) boutput(usr, "The scanner is currently locked.") else boutput(usr, "The scanner is not currently locked.") verb/move_inside() set name = "Enter" set src in oview(1) set category = "Local" if(!iscarbon(usr)) boutput(usr, "The scanner supports only carbon based lifeforms.") return if (usr.stat != 0) return if (src.occupant) boutput(usr, "The scanner is already occupied!") return if (src.locked) boutput(usr, "You need to unlock the scanner first.") return usr.pulling = null src.go_in(usr) for(var/obj/O in src) qdel(O) src.add_fingerprint(usr) return attackby(var/obj/item/grab/G as obj, user as mob) if ((!( istype(G, /obj/item/grab) ) || !( ismob(G.affecting) ))) return if (!istype(user,/mob/living/)) boutput(user, "You're dead! Quit that!") return if (src.occupant) boutput(user, "The scanner is already occupied!") return if (src.locked) boutput(usr, "You need to unlock the scanner first.") return if(!iscarbon(G.affecting)) boutput(user, "The scanner supports only carbon based lifeforms.") return var/mob/living/L = user var/mob/M = G.affecting if (L.pulling == M) L.pulling = null src.go_in(M) for(var/obj/O in src) O.set_loc(src.loc) src.add_fingerprint(user) qdel(G) return verb/eject() set name = "Eject Occupant" set src in oview(1) set category = "Local" if (usr.stat != 0) return if (src.locked) boutput(usr, "The scanner door is locked!") return src.go_out() add_fingerprint(usr) return verb/lock() set name = "Scanner Lock" set src in oview(1) set category = "Local" if (usr.stat != 0) return if (usr == src.occupant) boutput(usr, "You can't reach the scanner lock from the inside.") return playsound(src.loc, "sound/machines/click.ogg", 50, 1) if (src.locked) src.locked = 0 usr.visible_message("[usr] unlocks the scanner.") if (src.occupant) boutput(src.occupant, "You hear the scanner's lock slide out of place.") else src.locked = 1 usr.visible_message("[usr] locks the scanner.") if (src.occupant) boutput(src.occupant, "You hear the scanner's lock click into place.") // Added (Convair880). if (src.occupant) logTheThing("station", usr, src.occupant, "[src.locked ? "locks" : "unlocks"] the [src.name] with %target% inside at [log_loc(src)].") return proc/go_in(var/mob/M) if (src.occupant || !M) return if (src.locked) return M.set_loc(src) src.occupant = M src.icon_state = "scanner_1" return proc/go_out() if (!src.occupant) return if (src.locked) return for(var/obj/O in src) O.set_loc(src.loc) src.occupant.set_loc(src.loc) src.occupant = null src.icon_state = "scanner_0" return /////////////////////////////////////////////////////////////////////////////////////////////////////////// /datum/genetics_appearancemenu var/client/usercl = null var/mob/living/carbon/human/target_mob = null var/customization_first = "Short Hair" var/customization_second = "None" var/customization_third = "None" var/customization_first_color = "#FFFFFF" var/customization_second_color = "#FFFFFF" var/customization_third_color = "#FFFFFF" var/e_color = "#FFFFFF" var/s_tone = 0.0 var/icon/preview_icon = null New(var/client/newuser, var/mob/target) ..() if(!newuser || !ishuman(target)) qdel(src) return src.target_mob = target src.usercl = newuser src.load_mob_data(src.target_mob) src.update_menu() src.process() return disposing() if(usercl && usercl.mob) usercl.mob << browse(null, "window=geneticsappearance") usercl = null target_mob = null ..() Topic(href, href_list) if(href_list["close"]) qdel(src) return else if (href_list["customization_first"]) var/new_style = input(usr, "Please select detail style", "Appearance Menu") as null|anything in customization_styles + customization_styles_gimmick if (new_style) src.customization_first = new_style else if (href_list["customization_second"]) var/new_style = input(usr, "Please select detail style", "Appearance Menu") as null|anything in customization_styles + customization_styles_gimmick if (new_style) src.customization_second = new_style else if (href_list["customization_third"]) var/new_style = input(usr, "Please select detail style", "Appearance Menu") as null|anything in customization_styles + customization_styles_gimmick if (new_style) src.customization_third = new_style else if (href_list["hair"]) var/new_hair = input(usr, "Please select hair color.", "Appearance Menu") as color if(new_hair) src.customization_first_color = new_hair else if (href_list["facial"]) var/new_facial = input(usr, "Please select detail 1 color.", "Appearance Menu") as color if(new_facial) src.customization_second_color = new_facial else if (href_list["detail"]) var/new_detail = input(usr, "Please select detail 2 color.", "Appearance Menu") as color if(new_detail) src.customization_third_color = new_detail else if (href_list["eyes"]) var/new_eyes = input(usr, "Please select eye color.", "Appearance Menu") as color if(new_eyes) src.e_color = new_eyes else if (href_list["s_tone"]) var/new_tone = input(usr, "Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Appearance Menu") as text if (new_tone) src.s_tone = max(min(round(text2num(new_tone)), 220), 1) src.s_tone = -src.s_tone + 35 else if(href_list["apply"]) src.copy_to_target() qdel(src) src.update_menu() return proc load_mob_data(var/mob/living/carbon/human/H) if(!ishuman(H)) qdel(src) return src.s_tone = H.bioHolder.mobAppearance.s_tone src.customization_first = H.bioHolder.mobAppearance.customization_first src.customization_first_color = H.bioHolder.mobAppearance.customization_first_color src.customization_second = H.bioHolder.mobAppearance.customization_second src.customization_second_color = H.bioHolder.mobAppearance.customization_second_color src.customization_third = H.bioHolder.mobAppearance.customization_third src.customization_third_color = H.bioHolder.mobAppearance.customization_third_color if(!(customization_styles[src.customization_first] || customization_styles_gimmick[src.customization_first])) src.customization_first = "None" if(!(customization_styles[src.customization_second] || customization_styles_gimmick[src.customization_second])) src.customization_second = "None" if(!(customization_styles[src.customization_third] || customization_styles_gimmick[src.customization_third])) src.customization_third = "None" src.e_color = H.bioHolder.mobAppearance.e_color return update_menu() set background = 1 if(!usercl) qdel(src) return var/mob/user = usercl.mob src.update_preview_icon() user << browse_rsc(preview_icon, "polymorphicon.png") var/dat = "GeneTek Appearance Modifier" dat += "
" dat += "Appearance:
" dat += "Skin Tone: [-src.s_tone + 35]/220
" dat += "Eye Color: #
" dat += "Bottom Detail: [src.customization_first] " dat += "#
" dat += "Mid Detail: [src.customization_second] " dat += "#
" dat += "Top Detail: [src.customization_third] " dat += "#
" dat += "
" dat += "
Preview:
" dat += "
" dat += "
" dat += "
" dat += "Apply
" dat += "" user << browse(dat, "window=geneticsappearance;size=300x250;can_resize=0;can_minimize=0") onclose(user, "geneticsappearance", src) return copy_to_target() if(!target_mob) return target_mob.bioHolder.mobAppearance.e_color = e_color target_mob.bioHolder.mobAppearance.customization_first_color = customization_first_color target_mob.bioHolder.mobAppearance.customization_second_color = customization_second_color target_mob.bioHolder.mobAppearance.customization_third_color = customization_third_color target_mob.bioHolder.mobAppearance.s_tone = s_tone target_mob.bioHolder.mobAppearance.customization_first = customization_first target_mob.bioHolder.mobAppearance.customization_second = customization_second target_mob.bioHolder.mobAppearance.customization_third = customization_third target_mob.cust_one_state = customization_styles[customization_first] if(!target_mob.cust_one_state) target_mob.cust_one_state = customization_styles_gimmick[customization_first] if(!target_mob.cust_one_state) target_mob.cust_one_state = "None" target_mob.cust_two_state = customization_styles[customization_second] if(!target_mob.cust_two_state) target_mob.cust_two_state = customization_styles_gimmick[customization_second] if(!target_mob.cust_two_state) target_mob.cust_two_state = "None" target_mob.cust_three_state = customization_styles[customization_third] if(!target_mob.cust_three_state) target_mob.cust_three_state = customization_styles_gimmick[customization_third] if(!target_mob.cust_three_state) target_mob.cust_three_state = "None" target_mob.set_face_icon_dirty() target_mob.set_body_icon_dirty() process() set background = 1 if(!usercl || !target_mob) qdel(src) return spawn(20) src.process() return update_preview_icon() set background = 1 qdel(src.preview_icon) var/customization_first_r = null var/customization_second_r = null var/customization_third_r = null var/gender = "" if(target_mob.gender == "male") gender = "m" else gender = "f" src.preview_icon = new /icon('icons/mob/human.dmi', "body_[gender]") if (src.s_tone >= 0) src.preview_icon.Blend(rgb(src.s_tone, src.s_tone, src.s_tone), ICON_ADD) else src.preview_icon.Blend(rgb(-src.s_tone, -src.s_tone, -src.s_tone), ICON_SUBTRACT) var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_hair.dmi', "icon_state" = "eyes") customization_first_r = customization_styles[customization_first] if(!customization_first_r) customization_first_r = customization_styles_gimmick[customization_first] if(!customization_first_r) customization_first_r = "None" customization_second_r = customization_styles[customization_second] if(!customization_second_r) customization_second_r = customization_styles_gimmick[customization_second] if(!customization_second_r) customization_second_r = "None" customization_third_r = customization_styles[customization_third] if(!customization_third_r) customization_third_r = customization_styles_gimmick[customization_third] if(!customization_third_r) customization_third_r = "None" var/icon/hair_s = new/icon("icon" = 'icons/mob/human_hair.dmi', "icon_state" = customization_first_r) hair_s.Blend(src.customization_first_color, ICON_MULTIPLY) eyes_s.Blend(hair_s, ICON_OVERLAY) qdel(hair_s) var/icon/facial_s = new/icon("icon" = 'icons/mob/human_hair.dmi', "icon_state" = customization_second_r) facial_s.Blend(src.customization_second_color, ICON_MULTIPLY) eyes_s.Blend(facial_s, ICON_OVERLAY) qdel(facial_s) var/icon/detail_s = new/icon("icon" = 'icons/mob/human_hair.dmi', "icon_state" = customization_third_r) detail_s.Blend(src.customization_third_color, ICON_MULTIPLY) eyes_s.Blend(detail_s, ICON_OVERLAY) qdel(detail_s) src.preview_icon.Blend(eyes_s, ICON_OVERLAY) qdel(eyes_s) return