diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index e2a92ecde97..76130aafb76 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -200,12 +200,13 @@ var/global/list/frozen_crew = list() density = TRUE anchored = TRUE dir = WEST - - var/base_icon_state = "body_scanner" - var/occupied_icon_state = "body_scanner-closed" - var/on_store_message = "has entered long-term storage." + var/on_store_message = "has entered" + var/on_store_location = "long-term storage" var/on_store_name = "Cryogenic Oversight" var/on_enter_occupant_message = "You feel cool air surround you. You go numb as your senses turn inward." + var/on_enter_sound = 'sound/machines/cryopod/cryopod_enter.ogg' + var/on_exit_sound = 'sound/machines/cryopod/cryopod_exit.ogg' + var/on_store_sound = 'sound/machines/cryopod/cryopod_store.ogg' var/allow_occupant_types = list(/mob/living/carbon/human) var/disallow_occupant_types = list() @@ -238,10 +239,10 @@ var/global/list/frozen_crew = list() desc = "A storage unit for robots." icon = 'icons/obj/robot_storage.dmi' icon_state = "pod" - base_icon_state = "pod" - occupied_icon_state = "pod-closed" - on_store_message = "has entered robotic storage." + on_store_location = "robotic storage" on_store_name = "Robotic Storage Oversight" + on_enter_sound = 'sound/machines/cryopod/lift_enter.ogg' + on_exit_sound = 'sound/machines/cryopod/lift_exit.ogg' on_enter_occupant_message = "The storage unit broadcasts a sleep signal to you. Your systems start to shut down, and you enter low-power mode." allow_occupant_types = list(/mob/living/silicon/robot) disallow_occupant_types = list(/mob/living/silicon/robot/drone) @@ -250,14 +251,40 @@ var/global/list/frozen_crew = list() name = "living quarters lift" desc = "A lift heading to the ship's living quarters." icon = 'icons/obj/crew_quarters_lift.dmi' - icon_state = "lift_open" - base_icon_state = "lift_open" - occupied_icon_state = "lift_occupied" - on_store_message = "has departed for the living quarters." + icon_state = "pod" + on_store_message = "has departed for" + on_store_location = "the living quarters" on_store_name = "Living Quarters Oversight" + on_enter_sound = 'sound/machines/cryopod/lift_enter.ogg' + on_exit_sound = 'sound/machines/cryopod/lift_exit.ogg' on_enter_occupant_message = "The elevator door closes slowly, ready to bring you down to the living quarters." disallow_occupant_types = list(/mob/living/silicon/robot) +/obj/machinery/cryopod/living_quarters/update_icon() + cut_overlays() + var/image/I = image(icon, "pod_top") + I.layer = 5.021 + add_overlay(I) + + + if(occupant) + I = image(icon, "pod_back") + I.layer = 5 + add_overlay(I) + + name = "[name] ([occupant])" + I = image(occupant.icon, occupant.icon_state, dir = SOUTH) + I.overlays = occupant.overlays + I.layer = 5 + I.pixel_z = 11 + add_overlay(I) + + I = image(icon, "pod_door") + I.layer = 5 + add_overlay(I) + else + name = initial(name) + /obj/machinery/cryopod/Destroy() if(occupant) occupant.forceMove(loc) @@ -266,14 +293,13 @@ var/global/list/frozen_crew = list() /obj/machinery/cryopod/Initialize() . = ..() - - icon_state = base_icon_state + update_icon() find_control_computer() /obj/machinery/cryopod/examine(mob/user) ..(user) if(occupant) - to_chat(user, SPAN_NOTICE("[occupant] [occupant.get_pronoun("is")] inside \the [src].")) + to_chat(user, SPAN_NOTICE("[occupant] [occupant.get_pronoun("is")] inside \the [initial(name)].")) /obj/machinery/cryopod/can_hold_dropped_items() return FALSE @@ -376,8 +402,9 @@ var/global/list/frozen_crew = list() else W.forceMove(T) - global_announcer.autosay("[occupant.real_name], [occupant.mind.role_alt_title], [on_store_message]", "[on_store_name]") - visible_message(SPAN_NOTICE("\The [src] hums and hisses as it moves [occupant] into storage.")) + global_announcer.autosay("[occupant.real_name], [occupant.mind.role_alt_title], [on_store_message] [on_store_location].", "[on_store_name]") + visible_message(SPAN_NOTICE("\The [src] hums and hisses as it moves [occupant] to [on_store_location].")) + playsound(loc, on_store_sound, 25) frozen_crew += occupant // Let SSjobs handle the rest. @@ -395,120 +422,79 @@ var/global/list/frozen_crew = list() if(!check_occupant_allowed(G.affecting)) return TRUE - var/willing = FALSE //We don't want to allow people to be forced into despawning. var/mob/living/M = G.affecting - var/bucklestatus = M.bucklecheck(user) - if(!bucklestatus) - return TRUE - - if(M.client) - var/original_loc = M.loc - if(alert(M, "Would you like to enter long-term storage?", , "Yes", "No") == "Yes") - if(!M || !G || !G.affecting || M.loc != original_loc) - return TRUE - willing = TRUE - else - willing = TRUE - - if(willing) - user.visible_message(SPAN_NOTICE("\The [user] starts putting \the [G.affecting] into \the [src]."), SPAN_NOTICE("You start putting [G.affecting] into [src]."), range = 3) - - if(do_after(user, 20)) - if(!M || !G || !G.affecting) - return TRUE - - M.forceMove(src) - - if(M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - - update_icon() - to_chat(M, SPAN_NOTICE("[on_enter_occupant_message]")) - to_chat(M, SPAN_DANGER("Press Ghost in the OOC tab to leave, your character will shortly be removed from the round and the slot you occupy will be freed.")) - set_occupant(M) - - if(isipc(M)) - save_ipc_tag(M) - - // Book keeping! - var/turf/location = get_turf(src) - log_admin("[key_name_admin(M)] has entered a stasis pod. (JMP)",ckey=key_name(M)) - message_admins("[key_name_admin(M)] has entered a stasis pod.") - - //Despawning occurs when process() is called with an occupant without a client. - src.add_fingerprint(M) - return TRUE + go_in(user, M) + return TRUE /obj/machinery/cryopod/MouseDrop_T(atom/movable/O, mob/living/user) if(!istype(user)) return if(!check_occupant_allowed(O)) return - if(occupant) - to_chat(user, SPAN_WARNING("\The [src] is in use.")) + + var/mob/living/M = O + go_in(user, M) + +/obj/machinery/cryopod/verb/move_inside() + set name = "Enter Pod" + set category = "Object" + set src in oview(1) + + if(use_check_and_message(usr) || !check_occupant_allowed(usr)) return - var/mob/living/L = O - var/bucklestatus = L.bucklecheck(user) - if(!bucklestatus) //We must make sure the person is unbuckled before they go in - return + go_in(usr, usr, TRUE) //if you're going in of your own volition, you're probably willing - if(L.stat == DEAD) - to_chat(user, SPAN_WARNING("Dead people can not be put into stasis.")) +/obj/machinery/cryopod/proc/go_in(mob/user, mob/living/M, var/willing = FALSE) // user refers to the person doing the putting into, M refers to the person being put in + if(!M.bucklecheck(user)) //We must make sure the person is unbuckled before they go in return - for(var/mob/living/carbon/slime/M in range(1, L)) - if(M.victim == L) - to_chat(usr, SPAN_WARNING("[L.name] will not fit into the cryo pod because they have a slime latched onto their head.")) + if(M.stat == DEAD) + to_chat(user, SPAN_WARNING("Dead people can not be put into \the [src].")) + return + for(var/mob/living/carbon/slime/S in range(1, M)) + if(S.victim == M) + to_chat(usr, SPAN_WARNING("[M.name] will not fit into \the [src] because they have a slime latched onto their head!")) + if(S.victim == user) + to_chat(usr, SPAN_WARNING("You cannot fit into \the [src] do this while a slime is latched onto your head!")) return - - var/willing = FALSE //We don't want to allow people to be forced into despawning. - - if(L.client) - var/original_loc = L.loc - if(alert(L, "Would you like to enter stasis?", , "Yes", "No") == "Yes") - if(!L || L.loc != original_loc) + if(!willing && M.client) + var/original_loc = M.loc + if(alert(M, "Would you like to enter [on_store_location]?", , "Yes", "No") == "Yes") + if(!M || M.loc != original_loc) return willing = TRUE else willing = TRUE - if(willing) - if(L == user) - user.visible_message(SPAN_NOTICE("\The [user] starts climbing into \the [src]."), SPAN_NOTICE("You start climbing into \the [src]."), range = 3) - else - user.visible_message(SPAN_NOTICE("\The [user] starts putting \the [L] into \the [src]."), SPAN_NOTICE("You start putting \the [L] into \the [src]."), range = 3) + if(!willing) + return - if(do_after(user, 20)) - if(!L) - return + user.visible_message(SPAN_NOTICE("\The [user] starts [M == user ? "climbing into" : "putting \the [M] into"] \the [name]."), SPAN_NOTICE("You start [M == user ? "climbing into" : "putting \the [M] into"] \the [name]."), range = 3) + if(do_after(user, 20)) + if(!M) + return TRUE - L.forceMove(src) + if(occupant) + to_chat(user, SPAN_WARNING("\The [src] is already in use.")) + else + to_chat(user, SPAN_NOTICE("You stop [M == user ? "climbing into" : "putting \the [M] into"] \the [name].")) + return - if(L.client) - L.client.perspective = EYE_PERSPECTIVE - L.client.eye = src - else - to_chat(user, SPAN_NOTICE("You stop [L == user ? "climbing into" : "putting [L] into"] \the [name].")) - return + to_chat(M, SPAN_NOTICE("[on_enter_occupant_message]")) + playsound(loc, on_enter_sound, 25) + to_chat(M, SPAN_DANGER("Press Ghost in the OOC tab to leave, your character will shortly be removed from the round and the slot you occupy will be freed.")) + set_occupant(M) - to_chat(L, SPAN_NOTICE("[on_enter_occupant_message]")) - to_chat(L, SPAN_DANGER("Press Ghost in the OOC tab to leave, your character will shortly be removed from the round and the slot you occupy will be freed.")) - set_occupant(L) - update_icon() + if(isipc(M)) + save_ipc_tag(M) - if(isipc(L)) - save_ipc_tag(L) + // Book keeping! + var/turf/location = get_turf(src) + log_admin("[key_name_admin(M)] has entered a [initial(src.name)].",ckey=key_name(M)) + message_admins("[key_name_admin(M)] has entered a [initial(src.name)].(JMP)") - // Book keeping! - var/turf/location = get_turf(src) - log_admin("[key_name_admin(L)] has entered a stasis pod.",ckey=key_name(L)) - message_admins("[key_name_admin(L)] has entered a stasis pod.(JMP)") - - //Despawning occurs when process() is called with an occupant without a client. - src.add_fingerprint(L) - - return + //Despawning occurs when process() is called with an occupant without a client. + src.add_fingerprint(user) /obj/machinery/cryopod/verb/eject() set name = "Eject Pod" @@ -529,58 +515,6 @@ var/global/list/frozen_crew = list() src.go_out() add_fingerprint(usr) - name = initial(name) - update_icon() - -/obj/machinery/cryopod/verb/move_inside() - set name = "Enter Pod" - set category = "Object" - set src in oview(1) - - if(use_check_and_message(usr) || !check_occupant_allowed(usr)) - return - - if(src.occupant) - to_chat(usr, SPAN_WARNING("\The [src] is in use.")) - return - - for(var/mob/living/carbon/slime/M in range(1,usr)) - if(M.victim == usr) - to_chat(usr, SPAN_WARNING("You cannot do this while a slime is latched onto you!")) - return - - usr.visible_message(SPAN_NOTICE("[usr] starts climbing into [src]."), SPAN_NOTICE("You start climbing into [src]."), range = 3) - - if(do_after(usr, 20)) - if(!usr || !usr.client) - return - - if(occupant) - to_chat(usr, SPAN_WARNING("\The [src] is in use.")) - return - - set_occupant(usr) - - update_icon() - - to_chat(usr, SPAN_NOTICE("[on_enter_occupant_message]")) - to_chat(usr, SPAN_DANGER("Press Ghost in the OOC tab to leave, your character will shortly be removed from the round and the slot you occupy will be freed.")) - - if(isipc(usr)) - var/choice = alert(usr, "Would you like to save your tag data?", "Tag Persistence", "Yes", "No") - if(choice == "Yes") - var/mob/living/carbon/human/H = usr - var/obj/item/organ/internal/ipc_tag/tag = H.organs_by_name[BP_IPCTAG] - if(tag) - H.client.prefs.machine_ownership_status = tag.ownership_info - H.client.prefs.machine_serial_number = tag.serial_number - H.client.prefs.citizenship = tag.citizenship_info - H.client.prefs.machine_tag_status = TRUE - else if(isnull(tag) || !tag) - H.client.prefs.machine_tag_status = FALSE - H.client.prefs.save_character() - H.client.prefs.save_preferences() - src.add_fingerprint(usr) /obj/machinery/cryopod/proc/go_out() if(!occupant) @@ -592,6 +526,7 @@ var/global/list/frozen_crew = list() occupant.forceMove(get_turf(src)) occupant = null + playsound(loc, on_exit_sound, 25) update_icon() /obj/machinery/cryopod/proc/set_occupant(var/mob/living/carbon/occupant) @@ -605,12 +540,12 @@ var/global/list/frozen_crew = list() update_icon() /obj/machinery/cryopod/update_icon() + flick(src, "[initial(icon_state)]-anim") if(occupant) name = "[name] ([occupant])" - icon_state = occupied_icon_state else - icon_state = base_icon_state name = initial(name) + icon_state = "[initial(icon_state)][occupant ? "-closed" : ""]" /obj/machinery/cryopod/relaymove(var/mob/user) go_out() diff --git a/html/changelogs/airlocksounds.yml b/html/changelogs/airlocksounds.yml deleted file mode 100644 index c721aa95c1a..00000000000 --- a/html/changelogs/airlocksounds.yml +++ /dev/null @@ -1,3 +0,0 @@ -Delete-after: true -author: Wowzewow (Wezzy) & listerla -changes: [] diff --git a/html/changelogs/wezzy_new_cryo.yml b/html/changelogs/wezzy_new_cryo.yml new file mode 100644 index 00000000000..76521b6bee6 --- /dev/null +++ b/html/changelogs/wezzy_new_cryo.yml @@ -0,0 +1,42 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: Wowzewow (Wezzy) + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Adds new sprites for Living Quarters Lifts." + - soundadd: "Adds new sounds for cryo, lifts, and robotic storage." diff --git a/icons/obj/crew_quarters_lift.dmi b/icons/obj/crew_quarters_lift.dmi index c6e89d62614..116db8a8004 100644 Binary files a/icons/obj/crew_quarters_lift.dmi and b/icons/obj/crew_quarters_lift.dmi differ diff --git a/sound/machines/cryopod/cryopod_enter.ogg b/sound/machines/cryopod/cryopod_enter.ogg new file mode 100644 index 00000000000..c86c529d3fe Binary files /dev/null and b/sound/machines/cryopod/cryopod_enter.ogg differ diff --git a/sound/machines/cryopod/cryopod_exit.ogg b/sound/machines/cryopod/cryopod_exit.ogg new file mode 100644 index 00000000000..519c93369e0 Binary files /dev/null and b/sound/machines/cryopod/cryopod_exit.ogg differ diff --git a/sound/machines/cryopod/cryopod_store.ogg b/sound/machines/cryopod/cryopod_store.ogg new file mode 100644 index 00000000000..4c3c74738a7 Binary files /dev/null and b/sound/machines/cryopod/cryopod_store.ogg differ diff --git a/sound/machines/cryopod/lift_enter.ogg b/sound/machines/cryopod/lift_enter.ogg new file mode 100644 index 00000000000..1e7799804f9 Binary files /dev/null and b/sound/machines/cryopod/lift_enter.ogg differ diff --git a/sound/machines/cryopod/lift_exit.ogg b/sound/machines/cryopod/lift_exit.ogg new file mode 100644 index 00000000000..baa42fdfe98 Binary files /dev/null and b/sound/machines/cryopod/lift_exit.ogg differ