diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index b0e2d2b57e..2b5b5a22b6 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -4,6 +4,11 @@ var/list/fullscreens = list() /mob/proc/overlay_fullscreen(category, type, severity) + if(ishuman(src)) + var/mob/living/carbon/human/human_mob = src + if(human_mob.in_cutscene && (category != "simulacrum_ko")) + return + var/atom/movable/screen/fullscreen/screen = fullscreens[category] if (!screen || screen.type != type) // needs to be recreated diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm index 42aa2e13b8..cc584aa05e 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm @@ -246,11 +246,11 @@ list("Marine Radio Headset", round(scale * 15), /obj/item/device/radio/headset/almayer/sof/survivor_forecon, VENDOR_ITEM_REGULAR), list("WEBBINGS", -1, null, null), - list("Brown Webbing Vest", round(scale * 1.25), /obj/item/clothing/accessory/storage/black_vest/brown_vest, VENDOR_ITEM_REGULAR), - list("Black Webbing Vest", round(max(1,(scale * 0.5))), /obj/item/clothing/accessory/storage/black_vest, VENDOR_ITEM_REGULAR), - list("Webbing", round(scale * 2), /obj/item/clothing/accessory/storage/webbing, VENDOR_ITEM_REGULAR), - list("Drop Pouch", round(max(1,(scale * 0.5))), /obj/item/clothing/accessory/storage/droppouch, VENDOR_ITEM_REGULAR), - list("Shoulder Holster", round(max(1,(scale * 0.5))), /obj/item/clothing/accessory/storage/holster, VENDOR_ITEM_REGULAR), + list("Brown Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest/brown_vest, VENDOR_ITEM_REGULAR), + list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, VENDOR_ITEM_REGULAR), + list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, VENDOR_ITEM_REGULAR), + list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, VENDOR_ITEM_REGULAR), + list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, VENDOR_ITEM_REGULAR), list("ARMOR", -1, null, null), list("M3-R Pattern Recon Armor", round(scale * 10), /obj/item/clothing/suit/storage/marine/rto/forecon, VENDOR_ITEM_REGULAR), diff --git a/code/modules/clothing/suits/marine_armor.dm b/code/modules/clothing/suits/marine_armor.dm index 93160e68ff..6714d608d6 100644 --- a/code/modules/clothing/suits/marine_armor.dm +++ b/code/modules/clothing/suits/marine_armor.dm @@ -68,7 +68,6 @@ /obj/item/tool/lighter, /obj/item/storage/bible, /obj/item/attachable/bayonet, - /obj/item/storage/backpack/general_belt, /obj/item/storage/large_holster/machete, /obj/item/storage/belt/gun/type47, /obj/item/storage/belt/gun/m4a3, @@ -427,7 +426,7 @@ if(is_type_in_list(equipping_item, smartgun_back)) return - + . = COMPONENT_HUMAN_CANCEL_ATTEMPT_EQUIP if(equipping_item.flags_equip_slot == SLOT_BACK) diff --git a/code/modules/simulacrum/simulacrumcutscenes.dm b/code/modules/simulacrum/simulacrumcutscenes.dm index def82d0f48..056a83894b 100644 --- a/code/modules/simulacrum/simulacrumcutscenes.dm +++ b/code/modules/simulacrum/simulacrumcutscenes.dm @@ -1,4 +1,8 @@ +/mob/living/carbon/human + var/in_cutscene = FALSE + /proc/simulacrum_text_1(mob/living/carbon/human/human) + human.in_cutscene = TRUE var/atom/movable/screen/text/screen_text/text_box = new /atom/movable/screen/text/screen_text/simulacrum_message() text_box.text_to_play = "Somewhere..." text_box.player = human.client @@ -24,8 +28,10 @@ body.after_play() body2.after_play() teleport_to_simulation(human, TRUE, TRUE) + human.in_cutscene = FALSE /proc/simulacrum_text_2(mob/living/carbon/human/human, should_roar) + human.in_cutscene = TRUE var/atom/movable/screen/text/screen_text/text_box = new /atom/movable/screen/text/screen_text/simulacrum_message() text_box.text_to_play = "Back here again." text_box.player = human.client @@ -51,8 +57,10 @@ body.after_play() body2.after_play() teleport_to_simulation(human, should_roar, FALSE) + human.in_cutscene = FALSE /proc/simulacrum_text_3(mob/living/carbon/human/human, should_roar) + human.in_cutscene = TRUE var/atom/movable/screen/text/screen_text/text_box = new /atom/movable/screen/text/screen_text/simulacrum_message() text_box.text_to_play = "Pain unending." text_box.player = human.client @@ -70,8 +78,10 @@ text_box.after_play() body.after_play() teleport_to_simulation(human, should_roar, FALSE) + human.in_cutscene = FALSE /proc/simulacrum_text_4(mob/living/carbon/human/human, should_roar) + human.in_cutscene = TRUE var/atom/movable/screen/text/screen_text/text_box = new /atom/movable/screen/text/screen_text/simulacrum_message() text_box.text_to_play = "6 Simulations Later..." text_box.player = human.client @@ -81,8 +91,10 @@ sleep(2.5 SECONDS) text_box.after_play() teleport_to_simulation(human, should_roar, FALSE) + human.in_cutscene = FALSE /proc/simulacrum_text_5(mob/living/carbon/human/human, should_roar) + human.in_cutscene = TRUE var/atom/movable/screen/text/screen_text/text_box = new /atom/movable/screen/text/screen_text/simulacrum_message() text_box.text_to_play = "19 Simulations Later..." text_box.player = human.client @@ -92,8 +104,10 @@ sleep(2.5 SECONDS) text_box.after_play() teleport_to_simulation(human, should_roar, FALSE) + human.in_cutscene = FALSE /proc/simulacrum_text_6(mob/living/carbon/human/human, should_roar) + human.in_cutscene = TRUE var/atom/movable/screen/text/screen_text/text_box = new /atom/movable/screen/text/screen_text/simulacrum_message() text_box.text_to_play = "321 Simulations Later..." text_box.player = human.client @@ -103,8 +117,10 @@ sleep(2.5 SECONDS) text_box.after_play() teleport_to_simulation(human, should_roar, FALSE) + human.in_cutscene = FALSE /proc/simulacrum_text_ending_good(mob/living/carbon/human/human) + human.in_cutscene = TRUE var/atom/movable/screen/text/screen_text/text_box = new /atom/movable/screen/text/screen_text/simulacrum_message() text_box.text_to_play = "It's finally over." text_box.player = human.client @@ -162,8 +178,10 @@ body.after_play() teleport_to_simulation(human, FALSE, FALSE) message_admins("END THE ROUND IN A LITTLE TINY BIT") + human.in_cutscene = FALSE /proc/simulacrum_text_ending_bad(mob/living/carbon/human/human, should_roar) + human.in_cutscene = TRUE var/atom/movable/screen/text/screen_text/text_box = new /atom/movable/screen/text/screen_text/simulacrum_message() text_box.text_to_play = "That was our chance." text_box.player = human.client diff --git a/code/modules/simulacrum/simulacrummisc.dm b/code/modules/simulacrum/simulacrummisc.dm index c694dbf4f8..02d9244aeb 100644 --- a/code/modules/simulacrum/simulacrummisc.dm +++ b/code/modules/simulacrum/simulacrummisc.dm @@ -19,7 +19,8 @@ screen_loc = "LEFT,TOP-5" /atom/movable/screen/text/screen_text/simulacrum_message/body/fatelist - screen_loc = "LEFT,TOP-6.5" + maptext_height = 256 + screen_loc = "LEFT,TOP-12" /atom/movable/screen/text/screen_text/simulacrum_message/play_to_client() diff --git a/code/modules/simulacrum/simulacrumprocs.dm b/code/modules/simulacrum/simulacrumprocs.dm index 524650a95c..1d77e993ae 100644 --- a/code/modules/simulacrum/simulacrumprocs.dm +++ b/code/modules/simulacrum/simulacrumprocs.dm @@ -44,6 +44,7 @@ /proc/ko_single_mob(mob/living/carbon/human/human) to_chat(human, SPAN_WARNING("A low whirring fills your mind.")) + human.clear_fullscreens() var/atom/movable/screen/fullscreen/overlay_screen = human.overlay_fullscreen("simulacrum_ko", /atom/movable/screen/fullscreen/impaired) overlay_screen.icon_state = "impairedoverlay1" sleep(5 SECONDS) @@ -157,6 +158,9 @@ GLOBAL_DATUM_INIT(simulation_controller, /datum/simulation_controller, new) var/list/new_simlist = list( "desert_dam" = list(), "varadero" = list(), + "ice_colony" = list(), + "chances_claim" = list(), + "final" = list() ) for(var/entry in GLOB.simulation_controller.non_completed_simulations) for(var/list/coordset as anything in GLOB.simulation_controller.non_completed_simulations[entry]) @@ -204,6 +208,9 @@ GLOBAL_DATUM_INIT(simulation_controller, /datum/simulation_controller, new) return to_chat(src, SPAN_NOTICE("Advancing simulation. Cutscene [GLOB.simulation_controller.next_cutscene ? "will" : "will not"] play.")) + var/do_roar = TRUE + if(GLOB.simulation_controller.next_simulation[1] == 19 && GLOB.simulation_controller.next_simulation[2] == 54) + do_roar = FALSE for(var/savename in GLOB.simulacrum_playersaves) var/datum/simulacrum_humansave/save = GLOB.simulacrum_playersaves[savename] @@ -212,6 +219,7 @@ GLOBAL_DATUM_INIT(simulation_controller, /datum/simulation_controller, new) continue save.tied_human.rejuvenate() + save.tied_human.clear_fullscreens() var/atom/movable/screen/fullscreen/overlay_screen = save.tied_human.overlay_fullscreen("simulacrum_ko", /atom/movable/screen/fullscreen/impaired) overlay_screen.icon_state = "impairedoverlay7" save.tied_human.Stun(100000000) @@ -226,18 +234,18 @@ GLOBAL_DATUM_INIT(simulation_controller, /datum/simulation_controller, new) winset(save.tied_human, "outputwindow", "is-visible=false") switch(GLOB.simulation_controller.next_cutscene) if("2") - INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(simulacrum_text_2), save.tied_human, TRUE) + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(simulacrum_text_2), save.tied_human, do_roar) if("3") - INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(simulacrum_text_3), save.tied_human, TRUE) + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(simulacrum_text_3), save.tied_human, do_roar) if("4") - INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(simulacrum_text_4), save.tied_human, TRUE) + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(simulacrum_text_4), save.tied_human, do_roar) if("5") - INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(simulacrum_text_5), save.tied_human, TRUE) + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(simulacrum_text_5), save.tied_human, do_roar) if("6") - INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(simulacrum_text_6), save.tied_human, FALSE) + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(simulacrum_text_6), save.tied_human, do_roar) else - INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(teleport_to_simulation), save.tied_human, TRUE, FALSE) + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(teleport_to_simulation), save.tied_human, do_roar, FALSE) /client/proc/boss_roar_verb() set name = "Boss Roar" @@ -326,7 +334,10 @@ GLOBAL_DATUM_INIT(simulation_controller, /datum/simulation_controller, new) "Following their harrowing experience, %NAME% quietly left the USCM at the first opportunity. %NAME% retired to the backwater colony of LV-325, living out their days peacefully. They died on August 9th, 2238 of natural causes.", "%NAME% continued their enlistment in the USCM following the incident. They were killed in a USCM raid on a CLF cell on June 14th, 2185.", "%NAME% became far more withdrawn after the incident. Once discharged from the USCM, they moved to Station 949, becoming a private security officer. They passed away from a rapidly-expanding brain tumor on Febuary 14th, 2199.", - // Add more later + "After retiring from the USCM %NAME% was employed as a shift manager at LockMart's Leo plant on Mars. Alongside 200 others, %NAME% was killed in the Leo explosion of 2187 on May 1st.", + "%NAME% retired to colonial life on LV-522, Chance's Claim. A xenomorph outbreak would see %NAME% meet their fate in the xenomorph hive on August 23rd, 2192.", + "Quiet and reserved after the incident, %NAME% retired from the USCM and served as the Chief Engineer on a LockMart & Welsun 3300B colony carrier, ferrying atmospheric processors to budding worlds. They passed on December 1st, 2210 in a vehicular accident.", + "%NAME% never fully recovered from the stress experienced during the incident. %NAME% died on July 29th, 2182 of a heart attack.", ) var/list/final_fates = list() for(var/savename in GLOB.simulacrum_playersaves) @@ -337,5 +348,7 @@ GLOBAL_DATUM_INIT(simulation_controller, /datum/simulation_controller, new) var/fate_string = pick(fate_list_pre) fate_list_pre -= fate_string final_fates += replacetext(fate_string, "%NAME%", name) + //for(var/fate in fate_list_pre) + // final_fates += replacetext(fate, "%NAME%", human_names[1]) GLOB.simulation_controller.fate_list = final_fates diff --git a/code/modules/simulacrum/simulacrumsavedata.dm b/code/modules/simulacrum/simulacrumsavedata.dm index 5fc9cbeb7a..7e85efe821 100644 --- a/code/modules/simulacrum/simulacrumsavedata.dm +++ b/code/modules/simulacrum/simulacrumsavedata.dm @@ -17,6 +17,7 @@ GLOBAL_LIST_EMPTY(simulacrum_playersaves) var/obj/item/righthand var/obj/item/pocket1 var/obj/item/pocket2 + var/obj/item/back var/list/suit_contents = list() var/list/helmet_contents = list() @@ -24,6 +25,7 @@ GLOBAL_LIST_EMPTY(simulacrum_playersaves) var/list/belt_contents = list() var/list/pocket1_contents = list() var/list/pocket2_contents = list() + var/list/back_contents = list() var/tied_ckey var/mob/living/carbon/human/tied_human @@ -51,6 +53,7 @@ GLOBAL_LIST_EMPTY(simulacrum_playersaves) save.righthand = DuplicateObject(human.r_hand, perfectcopy = TRUE, sameloc = FALSE, newloc = null) save.pocket1 = DuplicateObject(human.l_store, perfectcopy = TRUE, sameloc = FALSE, newloc = null) save.pocket2 = DuplicateObject(human.r_store, perfectcopy = TRUE, sameloc = FALSE, newloc = null) + save.back = DuplicateObject(human.back, perfectcopy = TRUE, sameloc = FALSE, newloc = null) if(istype(human.wear_suit, /obj/item/clothing/suit/storage)) var/obj/item/clothing/suit/storage/storage_suit = human.wear_suit @@ -82,6 +85,11 @@ GLOBAL_LIST_EMPTY(simulacrum_playersaves) for(var/obj/item/I in pouch.contents) save.pocket2_contents += DuplicateObject(I, perfectcopy = TRUE, sameloc = FALSE, newloc = null) + if(isstorage(human.back)) + var/obj/item/storage/pouch = human.back + for(var/obj/item/I in pouch.contents) + save.back_contents += DuplicateObject(I, perfectcopy = TRUE, sameloc = FALSE, newloc = null) + save.tied_ckey = human.ckey || human.persistent_ckey || "" save.tied_human = human GLOB.simulacrum_playersaves[save.tied_ckey] = save @@ -114,6 +122,7 @@ GLOBAL_LIST_EMPTY(simulacrum_playersaves) human.equip_to_slot(DuplicateObject(save.righthand, perfectcopy = TRUE, sameloc = FALSE, newloc = null), WEAR_R_HAND) human.equip_to_slot(DuplicateObject(save.pocket1, perfectcopy = TRUE, sameloc = FALSE, newloc = null), WEAR_L_STORE) human.equip_to_slot(DuplicateObject(save.pocket2, perfectcopy = TRUE, sameloc = FALSE, newloc = null), WEAR_R_STORE) + human.equip_to_slot(DuplicateObject(save.back, perfectcopy = TRUE, sameloc = FALSE, newloc = null), WEAR_BACK) if(istype(human.wear_suit, /obj/item/clothing/suit/storage)) var/obj/item/clothing/suit/storage/storage_suit = human.wear_suit @@ -131,6 +140,7 @@ GLOBAL_LIST_EMPTY(simulacrum_playersaves) qdel(I2) for(var/obj/item/I as anything in save.suitstorage_contents) pouch.handle_item_insertion(DuplicateObject(I, perfectcopy = TRUE, sameloc = FALSE, newloc = null), TRUE, human) + human.s_store.icon_state = replacetext(human.s_store.icon_state, "_g_g", "_g") if(isstorage(human.belt)) var/obj/item/storage/pouch = human.belt @@ -153,3 +163,10 @@ GLOBAL_LIST_EMPTY(simulacrum_playersaves) qdel(I2) for(var/obj/item/I as anything in save.pocket2_contents) pouch.handle_item_insertion(DuplicateObject(I, perfectcopy = TRUE, sameloc = FALSE, newloc = null), TRUE, human) + + if(isstorage(human.back)) + var/obj/item/storage/pouch = human.back + for(var/obj/item/I2 in pouch.contents) + qdel(I2) + for(var/obj/item/I as anything in save.back_contents) + pouch.handle_item_insertion(DuplicateObject(I, perfectcopy = TRUE, sameloc = FALSE, newloc = null), TRUE, human) diff --git a/maps/map_files/simulacrum/simulacrum.dmm b/maps/map_files/simulacrum/simulacrum.dmm index 2549593ef1..06f5881819 100644 --- a/maps/map_files/simulacrum/simulacrum.dmm +++ b/maps/map_files/simulacrum/simulacrum.dmm @@ -721,10 +721,6 @@ /turf/open/floor/interior/wood/alt, /area/simulacrum/interior) "iD" = ( -/obj/structure/machinery/door/airlock/multi_tile/almayer/medidoor/colony{ - name = "\improper Aurora Medical Clinic Treatment"; - req_access_txt = null - }, /turf/open/floor{ dir = 8; icon_state = "whitered" @@ -4042,11 +4038,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/machinery/door/airlock/multi_tile/almayer/medidoor/colony{ - dir = 1; - name = "\improper Aurora Medical Clinic"; - req_access_txt = null - }, /turf/open/floor{ icon_state = "whiteredfull" },