From d6482e1dde8a14c569501f1e192f6a62cc012a94 Mon Sep 17 00:00:00 2001 From: blackdragonTOW <31581761+blackdragonTOW@users.noreply.github.com> Date: Wed, 2 Aug 2023 22:51:46 -0700 Subject: [PATCH 01/52] BUG FIX: 3rd Party Music Filename References (#4082) # About the pull request 3rd Party victory music isn't playing when WY/UPP/CLF win a round, I believe this is why: Was told to update the .ogg files to all lower case in the original PR. Unfortunately when I referenced them in code they still had capitalization, and that was not caught. This should fix 3rd Party music not playing. (I think). # Explain why it's good for the game Bug fixes good # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: fix: fixed a file reference that broke end of round music for some factions /:cl: --- code/game/gamemodes/colonialmarines/colonialmarines.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/colonialmarines/colonialmarines.dm b/code/game/gamemodes/colonialmarines/colonialmarines.dm index 067201277e38..cf2b7819a596 100644 --- a/code/game/gamemodes/colonialmarines/colonialmarines.dm +++ b/code/game/gamemodes/colonialmarines/colonialmarines.dm @@ -372,11 +372,11 @@ var/headcount = count_per_faction() var/living = headcount["total_headcount"] if ((headcount["WY_headcount"] / living) > MAJORITY) - musical_track = pick('sound/theme/LastManStanding_WY.ogg') + musical_track = pick('sound/theme/lastmanstanding_wy.ogg') else if ((headcount["UPP_headcount"] / living) > MAJORITY) - musical_track = pick('sound/theme/LastManStanding_UPP.ogg') + musical_track = pick('sound/theme/lastmanstanding_upp.ogg') else if ((headcount["CLF_headcount"] / living) > MAJORITY) - musical_track = pick('sound/theme/LastManStanding_CLF.ogg') + musical_track = pick('sound/theme/lastmanstanding_clf.ogg') else if ((headcount["marine_headcount"] / living) > MAJORITY) musical_track = pick('sound/theme/neutral_melancholy2.ogg') //This is the theme song for Colonial Marines the game, fitting else From b054a79141a77bc308fcc840989a9c6964bd7c1b Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 06:59:33 +0100 Subject: [PATCH 02/52] Automatic changelog for PR #4082 [ci skip] --- html/changelogs/AutoChangeLog-pr-4082.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4082.yml diff --git a/html/changelogs/AutoChangeLog-pr-4082.yml b/html/changelogs/AutoChangeLog-pr-4082.yml new file mode 100644 index 000000000000..bc2e8e989ea7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4082.yml @@ -0,0 +1,4 @@ +author: "blackdragonTOW" +delete-after: True +changes: + - bugfix: "fixed a file reference that broke end of round music for some factions" \ No newline at end of file From e7f2873f3d58d9ee86add693870c2bb17ba0ec11 Mon Sep 17 00:00:00 2001 From: ghostsheet <43085828+ghostsheet@users.noreply.github.com> Date: Thu, 3 Aug 2023 18:54:27 +1000 Subject: [PATCH 03/52] B5 Hammer slowdown (#3860) # About the pull request This makes Synth b5 breaching hammer, apply a slowdown to (marines) anyone who picks it up but doesn't have the strength to use it. Added extra warning and effect to show that MARINE REALLY SHOULDN'T pick it up and try to use it. # Explain why it's good for the game Synth have been complaining that marines are running off their hammer. The visible slowdown should prevent marines from running off with it too often # Changelog :cl: ghostsheet add: B5 Breaching Hammer will now slow down humans who picks it up. /:cl: --- code/game/objects/items/weapons/twohanded.dm | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index c9bfb9b9f757..be7571fa84a1 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -323,13 +323,25 @@ item_state = "syn_breacher" force_wielded = MELEE_FORCE_VERY_STRONG really_heavy = TRUE + var/move_delay_addition = 1.5 /obj/item/weapon/twohanded/breacher/synth/pickup(mob/user) if(!(HAS_TRAIT(user, TRAIT_SUPER_STRONG))) - to_chat(user, SPAN_WARNING("You barely manage to lift \the [src] above your knees. This thing will probably be useless to you.")) + to_chat(user, SPAN_HIGHDANGER("You barely manage to lift [src] above your knees. This thing will probably be useless to you.")) + user.apply_effect(3, EYE_BLUR) + RegisterSignal(user, COMSIG_HUMAN_POST_MOVE_DELAY, PROC_REF(handle_movedelay)) + return ..() +/obj/item/weapon/twohanded/breacher/synth/proc/handle_movedelay(mob/living/M, list/movedata) + SIGNAL_HANDLER + movedata["move_delay"] += move_delay_addition + +/obj/item/weapon/twohanded/breacher/synth/dropped(mob/user, silent) + . = ..() + UnregisterSignal(user, COMSIG_HUMAN_POST_MOVE_DELAY) + /obj/item/weapon/twohanded/breacher/synth/attack(target as mob, mob/living/user as mob) if(!HAS_TRAIT(user, TRAIT_SUPER_STRONG)) to_chat(user, SPAN_WARNING("\The [src] is too heavy for you to use as a weapon!")) From 8d25b841712144f34d7aefca9bd78c68fd4ab1f2 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 10:02:13 +0100 Subject: [PATCH 04/52] Automatic changelog for PR #3860 [ci skip] --- html/changelogs/AutoChangeLog-pr-3860.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3860.yml diff --git a/html/changelogs/AutoChangeLog-pr-3860.yml b/html/changelogs/AutoChangeLog-pr-3860.yml new file mode 100644 index 000000000000..c897739d6646 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3860.yml @@ -0,0 +1,4 @@ +author: "ghostsheet" +delete-after: True +changes: + - rscadd: "B5 Breaching Hammer will now slow down humans who picks it up." \ No newline at end of file From e4e3d026c2baab5471f85c482932710b2e4a9d43 Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Thu, 3 Aug 2023 17:12:57 +0100 Subject: [PATCH 05/52] Yautja bracer shock fix (#4090) # About the pull request I forgot when I moved the shock to process() to reduce the probability. Currently, it's overkill lethal. # Explain why it's good for the game Less murder-y # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: fix: Yautja Bracers are no longer hyper lethal electrical outlets. /:cl: --- code/modules/cm_preds/yaut_bracers.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/cm_preds/yaut_bracers.dm b/code/modules/cm_preds/yaut_bracers.dm index f33d5f9a5554..ca946aa580ac 100644 --- a/code/modules/cm_preds/yaut_bracers.dm +++ b/code/modules/cm_preds/yaut_bracers.dm @@ -94,7 +94,7 @@ return if(human_holder.stat == DEAD) decloak(human_holder, TRUE) - if(!HAS_TRAIT(human_holder, TRAIT_YAUTJA_TECH) && !human_holder.hunter_data.thralled && prob(15)) + if(!HAS_TRAIT(human_holder, TRAIT_YAUTJA_TECH) && !human_holder.hunter_data.thralled && prob(2)) decloak(human_holder) shock_user(human_holder) @@ -293,7 +293,7 @@ var/mob/living/carbon/human/human = loc //Non-Yautja have a chance to get stunned with each power drain - if((!HAS_TRAIT(human, TRAIT_YAUTJA_TECH) && !human.hunter_data.thralled) && prob(15)) + if((!HAS_TRAIT(human, TRAIT_YAUTJA_TECH) && !human.hunter_data.thralled) && prob(4)) if(cloaked) decloak(human, TRUE, DECLOAK_SPECIES) shock_user(human) From e245b17d374185f0b4cd40cfefd9606856ac69aa Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 17:23:50 +0100 Subject: [PATCH 06/52] Automatic changelog for PR #4090 [ci skip] --- html/changelogs/AutoChangeLog-pr-4090.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4090.yml diff --git a/html/changelogs/AutoChangeLog-pr-4090.yml b/html/changelogs/AutoChangeLog-pr-4090.yml new file mode 100644 index 000000000000..786b56eed7bb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4090.yml @@ -0,0 +1,4 @@ +author: "realforest2001" +delete-after: True +changes: + - bugfix: "Yautja Bracers are no longer hyper lethal electrical outlets." \ No newline at end of file From 5772b409502f63034d000d9c365d03526c431b85 Mon Sep 17 00:00:00 2001 From: Julian56 <117036822+Huffie56@users.noreply.github.com> Date: Thu, 3 Aug 2023 18:13:21 +0200 Subject: [PATCH 07/52] Fix acid harness not having item restriction. (#4094) # About the pull request fixes: https://github.com/cmss13-devs/cmss13/issues/3744 # Explain why it's good for the game # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: fix: forbidden all the items beside battery and beakers to avoid weirdness and bug. /:cl: --------- Co-authored-by: Julien --- code/modules/reagents/chemistry_machinery/acid_harness.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/reagents/chemistry_machinery/acid_harness.dm b/code/modules/reagents/chemistry_machinery/acid_harness.dm index 49cb8860fa00..ae54474c3aed 100644 --- a/code/modules/reagents/chemistry_machinery/acid_harness.dm +++ b/code/modules/reagents/chemistry_machinery/acid_harness.dm @@ -39,6 +39,10 @@ /obj/item/storage/internal/accessory/black_vest/acid_harness storage_slots = 2 + can_hold = list( + /obj/item/reagent_container/glass/beaker, + /obj/item/cell, + ) /obj/item/clothing/accessory/storage/black_vest/acid_harness name = "A.C.I.D. Harness" From 3352080065c4741ad37230cfebb1ea711bbd3877 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 17:39:39 +0100 Subject: [PATCH 08/52] Automatic changelog for PR #4094 [ci skip] --- html/changelogs/AutoChangeLog-pr-4094.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4094.yml diff --git a/html/changelogs/AutoChangeLog-pr-4094.yml b/html/changelogs/AutoChangeLog-pr-4094.yml new file mode 100644 index 000000000000..071aedb02f61 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4094.yml @@ -0,0 +1,4 @@ +author: "Huffie56" +delete-after: True +changes: + - bugfix: "forbidden all the items beside battery and beakers to avoid weirdness and bug." \ No newline at end of file From e513b8aff610a729fa8424e5fbcc4a86b467a3c6 Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Thu, 3 Aug 2023 18:22:15 +0200 Subject: [PATCH 09/52] Makes the predator computers not a moneybag subtype (#4084) # About the pull request Makes predator computers their own prop instead of being a subtype of `/obj/item/moneybag` for some reason??? Also makes them dense while I'm there. # Explain why it's good for the game To quote a mapping friend of mine, image # Changelog :cl: fix: Predator flight computers can no longer be walked on. /:cl: Co-authored-by: John Doe --- code/game/objects/structures/props.dm | 8 ++++++ maps/predship/huntership.dmm | 36 +++++++++++---------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/code/game/objects/structures/props.dm b/code/game/objects/structures/props.dm index 8c7813b47a72..7a0e7c9a9834 100644 --- a/code/game/objects/structures/props.dm +++ b/code/game/objects/structures/props.dm @@ -1153,8 +1153,16 @@ icon_state = "rope" density = FALSE +/obj/structure/prop/pred_flight + name = "hunter flight console" + desc = "A console designed by the Hunters to assist in flight pathing and navigation." + icon = 'icons/obj/structures/machinery/computer.dmi' + icon_state = "overwatch" + density = TRUE + /obj/structure/prop/invuln/joey name = "Workin' Joey" desc = "A defunct Seegson-brand Working Joe lifted from deep storage by a crew of marines after the last shore leave. Attempts have been made to modify the janitorial synthetic to serve as a crude bartender, but with little success." icon = 'icons/obj/structures/props/props.dmi' icon_state = "joey" + diff --git a/maps/predship/huntership.dmm b/maps/predship/huntership.dmm index 5680271c4df2..73cdc78084d9 100644 --- a/maps/predship/huntership.dmm +++ b/maps/predship/huntership.dmm @@ -674,9 +674,9 @@ color = "#6b675e" }, /obj/item/weapon/claymore/mercsword/machete/arnold{ + anchored = 1; desc = "Won by an Elder during their youthful hunting days. None are allowed to touch it."; - name = "\improper Dutch's Machete"; - anchored = 1 + name = "\improper Dutch's Machete" }, /turf/open/floor/corsat{ dir = 1; @@ -1789,9 +1789,9 @@ /area/yautja) "gr" = ( /obj/structure/closet/crate/secure{ - req_one_access_txt = "252"; color = "#6b675e"; - name = "Secure Yautja crate" + name = "Secure Yautja crate"; + req_one_access_txt = "252" }, /obj/item/explosive/grenade/spawnergrenade/hellhound, /obj/item/explosive/grenade/spawnergrenade/hellhound, @@ -1806,9 +1806,9 @@ /obj/structure/machinery/door_control{ id = "Yautja Armory"; name = "Armory Shutters"; + needs_power = 0; pixel_x = 24; - req_one_access_txt = "252"; - needs_power = 0 + req_one_access_txt = "252" }, /turf/open/floor/corsat{ dir = 1; @@ -2424,9 +2424,9 @@ /area/yautja) "Bg" = ( /obj/structure/closet/crate/secure{ - req_one_access_txt = "252"; color = "#6b675e"; - name = "Secure Yautja crate" + name = "Secure Yautja crate"; + req_one_access_txt = "252" }, /obj/item/weapon/yautja/combistick, /obj/item/weapon/yautja/combistick{ @@ -2686,14 +2686,14 @@ layer = 2.79 }, /obj/item/stack/medical/advanced/ointment/predator{ - pixel_x = 6; desc = "A poultice made of cold, blue petals that is rubbed on burns. Not to be removed from the ship."; - name = "arena soothing herbs" + name = "arena soothing herbs"; + pixel_x = 6 }, /obj/item/stack/medical/advanced/bruise_pack/predator{ - pixel_x = -6; desc = "A poultice made of soft leaves that is rubbed on bruises. Not to be removed from the ship."; - name = "arena mending herbs" + name = "arena mending herbs"; + pixel_x = -6 }, /turf/open/shuttle/predship, /area/yautja) @@ -2721,9 +2721,9 @@ "HD" = ( /obj/structure/surface/rack{ color = "#6b675e"; + density = 0; layer = 2.79; - pixel_y = 24; - density = 0 + pixel_y = 24 }, /obj/item/weapon/gun/energy/yautja/plasmarifle{ pixel_y = -8 @@ -2924,13 +2924,7 @@ }, /area/yautja) "LX" = ( -/obj/item/moneybag{ - anchored = 1; - desc = "A console designed by the Hunters to assist in flight pathing and navigation."; - icon = 'icons/obj/structures/machinery/computer.dmi'; - icon_state = "overwatch"; - name = "Hunter Flight Console" - }, +/obj/structure/prop/pred_flight, /turf/open/floor/corsat{ dir = 1; icon_state = "squareswood" From ecd91c65f4ec9fc2bfe9c7a6dae80f7d2d2d4d4e Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 17:55:51 +0100 Subject: [PATCH 10/52] Automatic changelog for PR #4084 [ci skip] --- html/changelogs/AutoChangeLog-pr-4084.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4084.yml diff --git a/html/changelogs/AutoChangeLog-pr-4084.yml b/html/changelogs/AutoChangeLog-pr-4084.yml new file mode 100644 index 000000000000..51bc383a0eda --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4084.yml @@ -0,0 +1,4 @@ +author: "Zonespace27" +delete-after: True +changes: + - bugfix: "Predator flight computers can no longer be walked on." \ No newline at end of file From a089cd535013c78225901b8c4834783520545c83 Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Thu, 3 Aug 2023 18:23:21 +0200 Subject: [PATCH 11/52] Clean up predator emote panel (#4083) # About the pull request Adds much more user-friendly labels to the predator emote panel's emotes. # Explain why it's good for the game It's better UX to see "Human scream (male)" over "malescream", for instance. # Testing Photographs and Procedure
Screenshots & Videos image
# Changelog :cl: qol: Predator emote panel emotes now look a bit cleaner in the menu /:cl: Co-authored-by: John Doe --- .../living/carbon/human/species/yautja/fake_sounds.dm | 4 ++++ .../mob/living/carbon/human/species/yautja/fake_voice.dm | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/code/modules/mob/living/carbon/human/species/yautja/fake_sounds.dm b/code/modules/mob/living/carbon/human/species/yautja/fake_sounds.dm index f29a990b6254..80aa853c663f 100644 --- a/code/modules/mob/living/carbon/human/species/yautja/fake_sounds.dm +++ b/code/modules/mob/living/carbon/human/species/yautja/fake_sounds.dm @@ -2,21 +2,25 @@ category = YAUTJA_EMOTE_CATEGORY_FAKESOUND /datum/emote/living/carbon/human/yautja/fake_sound/aliengrowl + override_say = "Xenomorph growl" key = "aliengrowl" /datum/emote/living/carbon/human/yautja/fake_sound/aliengrowl/get_sound(mob/living/user) return pick('sound/voice/alien_growl1.ogg', 'sound/voice/alien_growl2.ogg') /datum/emote/living/carbon/human/yautja/fake_sound/alienhelp + override_say = "Xenomorph needs help" key = "alienhelp" /datum/emote/living/carbon/human/yautja/fake_sound/alienhelp/get_sound(mob/living/user) return pick('sound/voice/alien_help1.ogg', 'sound/voice/alien_help2.ogg') /datum/emote/living/carbon/human/yautja/fake_sound/malescream + override_say = "Human scream (male)" key = "malescream" sound = "male_scream" /datum/emote/living/carbon/human/yautja/fake_sound/femalescream + override_say = "Human scream (female)" key = "femalescream" sound = "female_scream" diff --git a/code/modules/mob/living/carbon/human/species/yautja/fake_voice.dm b/code/modules/mob/living/carbon/human/species/yautja/fake_voice.dm index 409fa83e7f1b..7e2c73fd41e4 100644 --- a/code/modules/mob/living/carbon/human/species/yautja/fake_voice.dm +++ b/code/modules/mob/living/carbon/human/species/yautja/fake_voice.dm @@ -2,49 +2,58 @@ category = YAUTJA_EMOTE_CATEGORY_VOICE /datum/emote/living/carbon/human/yautja/voice/anytime + override_say = "Anytime." key = "anytime" sound = 'sound/voice/pred_anytime.ogg' /datum/emote/living/carbon/human/yautja/voice/helpme + override_say = "Help me!" key = "helpme" sound = 'sound/voice/pred_helpme.ogg' volume = 25 /datum/emote/living/carbon/human/yautja/voice/iseeyou + override_say = "I see you." key = "iseeyou" sound = 'sound/hallucinations/i_see_you2.ogg' /datum/emote/living/carbon/human/yautja/voice/itsatrap + override_say = "It's a trap." key = "itsatrap" sound = 'sound/voice/pred_itsatrap.ogg' volume = 25 /datum/emote/living/carbon/human/yautja/voice/overhere + override_say = "Over here." key = "overhere" sound = 'sound/voice/pred_overhere.ogg' volume = 25 /datum/emote/living/carbon/human/yautja/voice/turnaround + override_say = "Turn around." key = "turnaround" sound = 'sound/voice/pred_turnaround.ogg' volume = 25 /datum/emote/living/carbon/human/yautja/voice/comeonout + override_say = "Come on out, motherfucker." key = "comeonout" sound = 'sound/voice/pred_come_on_out.ogg' /datum/emote/living/carbon/human/yautja/voice/overthere + override_say = "Over there." key = "overthere" sound = 'sound/voice/pred_over_there.ogg' /datum/emote/living/carbon/human/yautja/voice/uglyfreak + override_say = "Come on, you ugly freak." key = "uglyfreak" sound = 'sound/voice/pred_ugly_freak.ogg' From c22c43dad23afadd8fd8f07b524abc471c84456c Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 18:13:19 +0100 Subject: [PATCH 12/52] Automatic changelog for PR #4083 [ci skip] --- html/changelogs/AutoChangeLog-pr-4083.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4083.yml diff --git a/html/changelogs/AutoChangeLog-pr-4083.yml b/html/changelogs/AutoChangeLog-pr-4083.yml new file mode 100644 index 000000000000..6fa9a43c2892 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4083.yml @@ -0,0 +1,4 @@ +author: "Zonespace27" +delete-after: True +changes: + - qol: "Predator emote panel emotes now look a bit cleaner in the menu" \ No newline at end of file From 87f058a2bf4c63c46b3446b086746b3b59680d37 Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Thu, 3 Aug 2023 18:26:48 +0200 Subject: [PATCH 13/52] Makes WJs spawn in the ARES core (#4068) # About the pull request - WJs now spawn in the ARES core. Pending a better machine, there are now cryopods in a new small room in the core. - Removes the WJ spawnpoints in the reception area. - There is now a synth repair station in the same room. # Explain why it's good for the game - It makes more sense, also allowing WJs to start & leave in a place of (relative) safety. - Superseded by the better locations. - It makes sense for there to be at least *some* repair facilities in the core. Sometimes, it's not safe to go down to reception for repairs. # Changelog :cl: add: WJs now spawn in the ARES core. add: There is now a synthetic repair station in the ARES core. /:cl: --------- Co-authored-by: John Doe --- code/_globalvars/lists/mapping_globals.dm | 1 + code/game/jobs/job/job.dm | 2 + code/game/jobs/role_authority.dm | 2 + .../objects/effects/landmarks/landmarks.dm | 10 ++ maps/map_files/USS_Almayer/USS_Almayer.dmm | 158 +++++++++++------- 5 files changed, 110 insertions(+), 63 deletions(-) diff --git a/code/_globalvars/lists/mapping_globals.dm b/code/_globalvars/lists/mapping_globals.dm index cf5b2ad435b8..47cc22dae5e1 100644 --- a/code/_globalvars/lists/mapping_globals.dm +++ b/code/_globalvars/lists/mapping_globals.dm @@ -27,6 +27,7 @@ GLOBAL_LIST_EMPTY(latewhiskey) GLOBAL_LIST_EMPTY(latejoin) GLOBAL_LIST_EMPTY(latejoin_by_squad) +GLOBAL_LIST_EMPTY(latejoin_by_job) GLOBAL_LIST_EMPTY(zombie_landmarks) diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index b860667486be..234902e11d22 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -288,6 +288,8 @@ join_turf = get_turf(pick(GLOB.spawns_by_job[type])) else if(assigned_squad && GLOB.latejoin_by_squad[assigned_squad]) join_turf = get_turf(pick(GLOB.latejoin_by_squad[assigned_squad])) + else if(GLOB.latejoin_by_job[title]) + join_turf = get_turf(pick(GLOB.latejoin_by_job[title])) else join_turf = get_turf(pick(GLOB.latejoin)) human.forceMove(join_turf) diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm index e7697d54f0de..d1934c597da7 100644 --- a/code/game/jobs/role_authority.dm +++ b/code/game/jobs/role_authority.dm @@ -553,6 +553,8 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou var/turf/late_join_turf if(GLOB.latejoin_by_squad[assigned_squad]) late_join_turf = get_turf(pick(GLOB.latejoin_by_squad[assigned_squad])) + else if(GLOB.latejoin_by_job[J.title]) + late_join_turf = get_turf(pick(GLOB.latejoin_by_job[J.title])) else late_join_turf = get_turf(pick(GLOB.latejoin)) H.forceMove(late_join_turf) diff --git a/code/game/objects/effects/landmarks/landmarks.dm b/code/game/objects/effects/landmarks/landmarks.dm index 1cbe10c497f6..5f4a374ba31c 100644 --- a/code/game/objects/effects/landmarks/landmarks.dm +++ b/code/game/objects/effects/landmarks/landmarks.dm @@ -378,6 +378,8 @@ name = "late join" icon_state = "x2" var/squad + /// What job should latejoin on this landmark + var/job /obj/effect/landmark/late_join/alpha name = "alpha late join" @@ -396,16 +398,24 @@ squad = SQUAD_MARINE_4 +/obj/effect/landmark/late_join/working_joe + name = "working joe late join" + job = JOB_WORKING_JOE + /obj/effect/landmark/late_join/Initialize(mapload, ...) . = ..() if(squad) LAZYADD(GLOB.latejoin_by_squad[squad], src) + else if(job) + LAZYADD(GLOB.latejoin_by_job[job], src) else GLOB.latejoin += src /obj/effect/landmark/late_join/Destroy() if(squad) LAZYREMOVE(GLOB.latejoin_by_squad[squad], src) + else if(job) + LAZYREMOVE(GLOB.latejoin_by_job[job], src) else GLOB.latejoin -= src return ..() diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index b02cd24e2e4e..ff74707aa9c0 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -23219,32 +23219,13 @@ }, /area/almayer/shipboard/brig/lobby) "bRo" = ( -/obj/structure/machinery/door/poddoor/shutters/almayer{ - id = "ARES StairsLower"; - name = "\improper ARES Core Shutters"; - plane = -7 - }, -/obj/effect/step_trigger/ares_alert/public{ - alert_id = "AresStairs"; - alert_message = "Caution: Movement detected in ARES Core."; - cooldown_duration = 1200 - }, -/obj/effect/step_trigger/ares_alert/public{ - alert_id = "AresStairs"; - alert_message = "Caution: Movement detected in ARES Core."; - cooldown_duration = 1200 - }, -/obj/structure/machinery/door/poddoor/almayer/blended/white/open{ - closed_layer = 3.2; - id = "ARES Emergency"; - layer = 3.2; - name = "ARES Emergency Lockdown"; - needs_power = 0; - open_layer = 1.9; - plane = -7 +/obj/effect/landmark/late_join/working_joe, +/obj/effect/landmark/start/working_joe, +/obj/structure/machinery/light{ + dir = 8 }, /turf/open/floor/almayer/no_build{ - icon_state = "test_floor4" + icon_state = "ai_floors" }, /area/almayer/command/airoom) "bRr" = ( @@ -23953,7 +23934,6 @@ }, /area/almayer/squads/delta) "bUx" = ( -/obj/effect/landmark/start/working_joe, /obj/structure/machinery/light/small{ dir = 8 }, @@ -28456,6 +28436,12 @@ icon_state = "redcorner" }, /area/almayer/shipboard/brig/execution) +"czG" = ( +/obj/structure/machinery/recharge_station, +/turf/open/floor/almayer/no_build{ + icon_state = "ai_floors" + }, +/area/almayer/command/airoom) "czJ" = ( /obj/structure/sign/safety/restrictedarea{ pixel_x = 8; @@ -37871,19 +37857,13 @@ /turf/open/floor/almayer, /area/almayer/hull/upper_hull/u_f_p) "gAe" = ( -/obj/structure/filingcabinet{ - density = 0; - pixel_x = -8; - pixel_y = 18 - }, -/obj/structure/filingcabinet{ - density = 0; - pixel_x = 8; - pixel_y = 18 +/obj/structure/machinery/door_control{ + id = "ARES JoeCryo"; + name = "Working Joe Cryogenics Lockdown"; + pixel_x = 24; + pixel_y = 8; + req_one_access_txt = "19;200;90;91;92" }, -/obj/item/folder/white, -/obj/item/folder/white, -/obj/item/folder/white, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" }, @@ -51742,7 +51722,6 @@ }, /area/almayer/living/pilotbunks) "mLE" = ( -/obj/effect/landmark/start/working_joe, /turf/open/floor/plating, /area/almayer/command/airoom) "mLF" = ( @@ -58708,6 +58687,25 @@ icon_state = "silvercorner" }, /area/almayer/command/computerlab) +"pTt" = ( +/obj/structure/machinery/door/poddoor/shutters/almayer{ + id = "ARES JoeCryo"; + name = "\improper ARES Core Shutters"; + plane = -7 + }, +/turf/open/floor/almayer/no_build{ + icon_state = "test_floor4" + }, +/area/almayer/command/airoom) +"pTM" = ( +/obj/structure/sign/safety/water{ + pixel_x = 8; + pixel_y = -32 + }, +/turf/open/floor/almayer{ + icon_state = "sterile_green_side" + }, +/area/almayer/medical/hydroponics) "pTT" = ( /obj/structure/platform{ dir = 4 @@ -62393,6 +62391,13 @@ icon_state = "redfull" }, /area/almayer/command/cic) +"rzf" = ( +/obj/effect/landmark/late_join/working_joe, +/obj/effect/landmark/start/working_joe, +/turf/open/floor/almayer/no_build{ + icon_state = "ai_floors" + }, +/area/almayer/command/airoom) "rzj" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -65411,8 +65416,8 @@ /area/almayer/living/briefing) "sTV" = ( /obj/structure/machinery/power/apc/almayer/hardened{ - dir = 1; - cell_type = /obj/item/cell/hyper + cell_type = /obj/item/cell/hyper; + dir = 1 }, /turf/open/floor/plating, /area/almayer/command/airoom) @@ -70813,12 +70818,19 @@ }, /area/almayer/hull/lower_hull/l_m_p) "vhe" = ( -/obj/structure/prop/server_equipment/yutani_server{ +/obj/structure/filingcabinet{ density = 0; - desc = "A powerful server tower housing various AI functions."; - name = "server tower"; - pixel_y = 16 + pixel_x = -8; + pixel_y = 18 + }, +/obj/structure/filingcabinet{ + density = 0; + pixel_x = 8; + pixel_y = 18 }, +/obj/item/folder/white, +/obj/item/folder/white, +/obj/item/folder/white, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" }, @@ -74141,6 +74153,20 @@ icon_state = "bluefull" }, /area/almayer/command/cichallway) +"wyv" = ( +/obj/structure/machinery/door_control{ + id = "ARES JoeCryo"; + name = "Working Joe Cryogenics Lockdown"; + pixel_x = -24; + pixel_y = -8; + req_one_access_txt = "19;200;90;91;92" + }, +/obj/effect/landmark/late_join/working_joe, +/obj/effect/landmark/start/working_joe, +/turf/open/floor/almayer/no_build{ + icon_state = "ai_floors" + }, +/area/almayer/command/airoom) "wyK" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -75717,12 +75743,12 @@ pixel_y = 32 }, /obj/item/folded_tent/big{ - pixel_y = 10; - pixel_x = -6 + pixel_x = -6; + pixel_y = 10 }, /obj/item/storage/box/mousetraps{ - pixel_y = 12; - pixel_x = 3 + pixel_x = 3; + pixel_y = 12 }, /turf/open/floor/almayer{ icon_state = "plate" @@ -78348,6 +78374,12 @@ icon_state = "plate" }, /area/almayer/squads/delta) +"ylg" = ( +/obj/structure/machinery/cryopod, +/turf/open/floor/almayer/no_build{ + icon_state = "ai_floors" + }, +/area/almayer/command/airoom) "ylm" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/disposalpipe/segment{ @@ -136553,7 +136585,7 @@ pYi fMl gUN bLv -bRo +wkM xvM osy cBm @@ -137355,7 +137387,7 @@ lmz lmz lmz lmz -lmz +daz sbJ sbJ sbJ @@ -137558,11 +137590,11 @@ lmz lmz lmz lmz -lmz -lmz -lmz -lmz daz +rzf +bRo +wyv +pTt gAe rCi gba @@ -137761,10 +137793,10 @@ lmz lmz lmz lmz -lmz -lmz -lmz -lmz +daz +czG +ylg +ylg daz daz daz @@ -137964,11 +137996,11 @@ bdH bdH bdH lmz -lmz -lmz -lmz -lmz -lmz +daz +daz +daz +daz +daz lmz lmz lmz From c35d48a33ac0ecf9bbd8c78bdb13a80da43d9f81 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 18:32:14 +0100 Subject: [PATCH 14/52] Automatic changelog for PR #4068 [ci skip] --- html/changelogs/AutoChangeLog-pr-4068.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4068.yml diff --git a/html/changelogs/AutoChangeLog-pr-4068.yml b/html/changelogs/AutoChangeLog-pr-4068.yml new file mode 100644 index 000000000000..f0437bbca87c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4068.yml @@ -0,0 +1,5 @@ +author: "Zonespace27" +delete-after: True +changes: + - rscadd: "WJs now spawn in the ARES core." + - rscadd: "There is now a synthetic repair station in the ARES core." \ No newline at end of file From 01c6796a7d1800c4b87e9a45f2b7413f3ffeee93 Mon Sep 17 00:00:00 2001 From: Segrain Date: Thu, 3 Aug 2023 20:47:35 +0400 Subject: [PATCH 15/52] Fix for runner-lesserdrone collision. (#4075) # About the pull request I tried digging for the reasoning behind the current state of things, and I gave up. Git blamer for the pass flags on base xenomorph and on runner goes through several overhauls into a separate two-three years old commits (CM Dev strikes again), and I honestly cannot be bothered to check which predates which or go dig deep into private repository on Gitlab in search of corresponding PRs and their descriptions. I do not know what can go wrong here, anyway. (Last time I said something like that, things managed to go wrong anyway...) # Explain why it's good for the game Closes #4012. # Changelog :cl: fix: Lesser drones now can pass through runners same as through any other castes. /:cl: --- code/modules/mob/living/carbon/xenomorph/castes/Runner.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Runner.dm b/code/modules/mob/living/carbon/xenomorph/castes/Runner.dm index 69e5b82aa307..f946ec44b5b7 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Runner.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Runner.dm @@ -71,7 +71,7 @@ /mob/living/carbon/xenomorph/runner/initialize_pass_flags(datum/pass_flags_container/PF) ..() if (PF) - PF.flags_pass = PASS_FLAGS_CRAWLER + PF.flags_pass |= PASS_FLAGS_CRAWLER /datum/behavior_delegate/runner_base name = "Base Runner Behavior Delegate" From 3516649c4934da25cdadd942e88af0687dacab9d Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 18:51:16 +0100 Subject: [PATCH 16/52] Automatic changelog for PR #4075 [ci skip] --- html/changelogs/AutoChangeLog-pr-4075.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4075.yml diff --git a/html/changelogs/AutoChangeLog-pr-4075.yml b/html/changelogs/AutoChangeLog-pr-4075.yml new file mode 100644 index 000000000000..d590d7020367 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4075.yml @@ -0,0 +1,4 @@ +author: "Segrain" +delete-after: True +changes: + - bugfix: "Lesser drones now can pass through runners same as through any other castes." \ No newline at end of file From 64d4308fe12cb7ca12e9265d48566369c86e41b8 Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Thu, 3 Aug 2023 18:52:44 +0200 Subject: [PATCH 17/52] Anchors the yautja carpnade (#4074) # About the pull request Anchors the carpnade found in the yautja ship. # Explain why it's good for the game - Requested by forest - Prevents people abducted onto the pred ship from being dumb with the grenade - Prevents preds from unwittingly handing out the carpnade despite it being expressly prohibited by a senator (see [here](https://discord.com/channels/150315577943130112/207230793423126539/966035290399592468)) # Testing Photographs and Procedure
Screenshots & Videos It's a one tile change
# Changelog :cl: del: You can no longer move the carp nade in the yautja ship /:cl: --------- Co-authored-by: John Doe --- maps/predship/huntership.dmm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/maps/predship/huntership.dmm b/maps/predship/huntership.dmm index 73cdc78084d9..e6fb4adc1c74 100644 --- a/maps/predship/huntership.dmm +++ b/maps/predship/huntership.dmm @@ -2623,7 +2623,10 @@ /obj/structure/surface/table/reinforced/prison{ color = "#6b675e" }, -/obj/item/explosive/grenade/spawnergrenade/spesscarp, +/obj/item/explosive/grenade/spawnergrenade/spesscarp{ + anchored = 1; + desc = "A strange device taken from a far-off land. It looks incredibly fragile, best not to touch it." + }, /turf/open/floor/corsat{ dir = 1; icon_state = "squareswood" From cdbc91de4a36b7767805cae637fd2538e4ed9e88 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 19:07:40 +0100 Subject: [PATCH 18/52] Automatic changelog for PR #4074 [ci skip] --- html/changelogs/AutoChangeLog-pr-4074.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4074.yml diff --git a/html/changelogs/AutoChangeLog-pr-4074.yml b/html/changelogs/AutoChangeLog-pr-4074.yml new file mode 100644 index 000000000000..cea925a9026d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4074.yml @@ -0,0 +1,4 @@ +author: "Zonespace27" +delete-after: True +changes: + - rscdel: "You can no longer move the carp nade in the yautja ship" \ No newline at end of file From 5ab0070162b8bc1dce4db264bed071afbf6f897b Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Thu, 3 Aug 2023 17:59:05 +0100 Subject: [PATCH 19/52] Log Updates (#4024) # About the pull request Adds new and updates old logs. - Chestbursts now include location data. - Near miss shots now include the name of the firer. - Mentor Imaginary Friends now log their speech. - Ahelps now log to chat when they're deferred to mentors. - Phonecalls now log speech being relayed through a phone. - Dropships now log who launched them again. Dropship interactions are now also logged within attack logs via log_interact. # Explain why it's good for the game Knowledge is power. # Testing Photographs and Procedure
Screenshots & Videos ![image](https://github.com/cmss13-devs/cmss13/assets/41653574/aba3178b-1a4a-4e2f-837b-93431097eae9) Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: admin: Added logs for speech through telephones and deferring ahelps to mentors. admin: Chestburst logs now include location data. Mentor Imaginary Friend now logs its speech. Narrow miss shots now log who fired them (where applicable). admin: Dropship interactions (Launch/Flyby/Autopilot) are now logged again, and also included in attack logs for the user. /:cl: --- code/__HELPERS/logging.dm | 6 ++-- .../datums/statistics/entities/death_stats.dm | 19 ++++++++--- .../items/explosives/grenades/marines.dm | 33 ++++++++++--------- code/modules/admin/verbs/adminhelp.dm | 1 + code/modules/cm_phone/phone.dm | 1 + code/modules/mob/camera/imaginary_friend.dm | 1 + .../mob/living/carbon/xenomorph/Embryo.dm | 6 ++-- code/modules/projectiles/guns/specialist.dm | 21 ++++++------ code/modules/projectiles/projectile.dm | 9 ++--- .../shuttle/computers/dropship_computer.dm | 22 ++++++++++--- 10 files changed, 76 insertions(+), 43 deletions(-) diff --git a/code/__HELPERS/logging.dm b/code/__HELPERS/logging.dm index 32da4c953188..5ecbff108725 100644 --- a/code/__HELPERS/logging.dm +++ b/code/__HELPERS/logging.dm @@ -108,8 +108,10 @@ if (CONFIG_GET(flag/log_interact)) WRITE_LOG(GLOB.world_game_log, "INTERACT: [msg]") LOG_REDIS("interact", "\[[time]\] [msg]") - origin.attack_log += "\[[time]\] [msg] " - target.attack_log += "\[[time]\] [msg] " + if(origin) + origin.attack_log += "\[[time]\] [msg] " + if(target) + target.attack_log += "\[[time]\] [msg] " GLOB.STUI.attack.Add("\[[time]]INTERACT: [msg]") GLOB.STUI.processing |= STUI_LOG_ATTACK diff --git a/code/datums/statistics/entities/death_stats.dm b/code/datums/statistics/entities/death_stats.dm index 7e26e92ae135..4a01e4e9d72b 100644 --- a/code/datums/statistics/entities/death_stats.dm +++ b/code/datums/statistics/entities/death_stats.dm @@ -65,13 +65,25 @@ ) /mob/proc/track_mob_death(datum/cause_data/cause_data, turf/death_loc) - if(!mind || statistic_exempt) - return - if(cause_data && !istype(cause_data)) stack_trace("track_mob_death called with string cause ([cause_data]) instead of datum") cause_data = create_cause_data(cause_data) + var/log_message = "\[[time_stamp()]\] [key_name(src)] died to " + if(cause_data) + log_message += "[cause_data.cause_name]" + else + log_message += "unknown causes" + var/mob/cause_mob = cause_data?.resolve_mob() + if(cause_mob) + log_message += " from [key_name(cause_data.resolve_mob())]" + cause_mob.attack_log += "\[[time_stamp()]\] [key_name(cause_mob)] killed [key_name(src)] with [cause_data.cause_name]." + + attack_log += "[log_message]." + + if(!mind || statistic_exempt) + return + var/datum/entity/statistic/death/new_death = DB_ENTITY(/datum/entity/statistic/death) var/datum/entity/player/player_entity = get_player_from_key(mind.ckey) if(player_entity) @@ -96,7 +108,6 @@ new_death.cause_role_name = cause_data?.role new_death.cause_faction_name = cause_data?.faction - var/mob/cause_mob = cause_data?.resolve_mob() if(cause_mob) cause_mob.life_kills_total += life_value diff --git a/code/game/objects/items/explosives/grenades/marines.dm b/code/game/objects/items/explosives/grenades/marines.dm index 1892c7543414..a8e0e1803a33 100644 --- a/code/game/objects/items/explosives/grenades/marines.dm +++ b/code/game/objects/items/explosives/grenades/marines.dm @@ -547,31 +547,32 @@ ram_distance -- //for max pinballing. icon_state = inactive_icon -/obj/item/explosive/grenade/slug/proc/impact_mob(mob/living/M) - var/direction = Get_Angle(src,M) - var/target_turf = get_angle_target_turf(src,direction,throw_max) - var/fling = rand(throw_min,throw_max) //WEEEEEEEEEEEEEEEEEEEE What is going to be put into throw_atom +/obj/item/explosive/grenade/slug/proc/impact_mob(mob/living/smacked) + var/direction = Get_Angle(src, smacked) + var/target_turf = get_angle_target_turf(src,direction, throw_max) + var/fling = rand(throw_min, throw_max) //WEEEEEEEEEEEEEEEEEEEE What is going to be put into throw_atom var/random_tile = 0 //random tile for bounce - playsound(M.loc, impact_sound, 75, 1) - M.apply_damage(impact_damage, BRUTE) + playsound(smacked.loc, impact_sound, 75, 1) + smacked.apply_damage(impact_damage, BRUTE) + smacked.attack_log += "\[[time_stamp()]\] [src], fired by [fingerprintslast], struck [key_name(smacked)]." random_tile = get_random_turf_in_range(src,ram_distance,ram_distance) //getting random tile for bounce src.throw_atom(random_tile,ram_distance,SPEED_FAST,src,TRUE,NORMAL_LAUNCH,NO_FLAGS) //time for a little trolling - if(isyautja(M)|| issynth(M)) - M.apply_effect(slowdown_time * 0.5, SLOW) - M.apply_effect(dazed_time * 0.5, DAZE) + if(isyautja(smacked)|| issynth(smacked)) + smacked.apply_effect(slowdown_time * 0.5, SLOW) + smacked.apply_effect(dazed_time * 0.5, DAZE) - if(M.mob_size >= MOB_SIZE_BIG)//big xenos not KO'ed - M.apply_effect(slowdown_time * 1.2, SLOW)//They are slowed more :trol: - M.apply_effect(dazed_time * 1.2, DAZE) + if(smacked.mob_size >= MOB_SIZE_BIG)//big xenos not KO'ed + smacked.apply_effect(slowdown_time * 1.2, SLOW)//They are slowed more :trol: + smacked.apply_effect(dazed_time * 1.2, DAZE) return - M.apply_effect(knockout_time, WEAKEN)//but little xenos and humans are - M.throw_atom(target_turf,fling,SPEED_AVERAGE,M,TRUE) - M.apply_effect(slowdown_time, SLOW) - M.apply_effect(dazed_time, DAZE) + smacked.apply_effect(knockout_time, WEAKEN)//but little xenos and humans are + smacked.throw_atom(target_turf, fling, SPEED_AVERAGE, smacked, TRUE) + smacked.apply_effect(slowdown_time, SLOW) + smacked.apply_effect(dazed_time, DAZE) return /obj/item/explosive/grenade/slug/baton diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 03d2ae517354..3d50b50e414c 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -519,6 +519,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) AddInteraction("Deferred to Mentors by [key_name_admin(usr)].", player_message = "Deferred to Mentors.") to_chat(initiator, SPAN_ADMINHELP("Your ticket has been deferred to Mentors.")) + log_admin_private("Ticket [TicketHref("#[id]")] deferred to mentors by [usr.key].") log_ahelp(id, "Defer", "Deferred to mentors by [usr.key]", null, usr.ckey) Close(silent = TRUE) diff --git a/code/modules/cm_phone/phone.dm b/code/modules/cm_phone/phone.dm index ac00e717f79a..b3e0ecd87206 100644 --- a/code/modules/cm_phone/phone.dm +++ b/code/modules/cm_phone/phone.dm @@ -312,6 +312,7 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) P.handle_hear(message, L, speaking) attached_to.handle_hear(message, L, speaking) + log_say("TELEPHONE: [key_name(speaking)] on Phone '[phone_id]' to '[T.phone_id]' said '[message]'") /obj/structure/transmitter/attackby(obj/item/W, mob/user) if(W == attached_to) diff --git a/code/modules/mob/camera/imaginary_friend.dm b/code/modules/mob/camera/imaginary_friend.dm index 054dd6ea8ff4..a78de70a7e15 100644 --- a/code/modules/mob/camera/imaginary_friend.dm +++ b/code/modules/mob/camera/imaginary_friend.dm @@ -200,6 +200,7 @@ to_chat(owner, "[rendered]") to_chat(src, "[rendered]") + log_say("Imaginary Friend: [dead_rendered]") if(!hidden) var/list/send_to = list() if(!owner.client?.prefs.lang_chat_disabled) diff --git a/code/modules/mob/living/carbon/xenomorph/Embryo.dm b/code/modules/mob/living/carbon/xenomorph/Embryo.dm index 54f5892ca93c..4ce266f70596 100644 --- a/code/modules/mob/living/carbon/xenomorph/Embryo.dm +++ b/code/modules/mob/living/carbon/xenomorph/Embryo.dm @@ -337,8 +337,8 @@ if(larva_embryo.client) larva_embryo.set_lighting_alpha_from_prefs(larva_embryo.client) - larva_embryo.attack_log += "\[[time_stamp()]\] chestbursted from [key_name(victim)]" - victim.attack_log += "\[[time_stamp()]\] Was chestbursted, larva was [key_name(larva_embryo)]" + larva_embryo.attack_log += "\[[time_stamp()]\] chestbursted from [key_name(victim)] in [get_area_name(larva_embryo)] at X[victim.x], Y[victim.y], Z[victim.z]" + victim.attack_log += "\[[time_stamp()]\] Was chestbursted in [get_area_name(larva_embryo)] at X[victim.x], Y[victim.y], Z[victim.z]. The larva was [key_name(larva_embryo)]." if(burstcount) step(larva_embryo, pick(cardinal)) @@ -359,7 +359,7 @@ if(!victim.first_xeno) to_chat(larva_embryo, SPAN_XENOHIGHDANGER("The Queen's will overwhelms your instincts...")) to_chat(larva_embryo, SPAN_XENOHIGHDANGER("\"[hive.hive_orders]\"")) - log_attack("[key_name(victim)] chestbursted, the larva was [key_name(larva_embryo)].") //this is so that admins are not spammed with los logs + log_attack("[key_name(victim)] chestbursted in [get_area_name(larva_embryo)] at X[victim.x], Y[victim.y], Z[victim.z]. The larva was [key_name(larva_embryo)].") //this is so that admins are not spammed with los logs for(var/obj/item/alien_embryo/AE in victim) qdel(AE) diff --git a/code/modules/projectiles/guns/specialist.dm b/code/modules/projectiles/guns/specialist.dm index 22fb290878e9..66456f4e21fc 100644 --- a/code/modules/projectiles/guns/specialist.dm +++ b/code/modules/projectiles/guns/specialist.dm @@ -829,26 +829,27 @@ muzzle_flash(angle,user) simulate_recoil(0, user) - var/obj/item/explosive/grenade/F = cylinder.contents[1] - cylinder.remove_from_storage(F, user.loc) + var/obj/item/explosive/grenade/fired = cylinder.contents[1] + cylinder.remove_from_storage(fired, user.loc) var/pass_flags = NO_FLAGS if(is_lobbing) - if(istype(F, /obj/item/explosive/grenade/slug/baton)) + if(istype(fired, /obj/item/explosive/grenade/slug/baton)) if(ishuman(user)) var/mob/living/carbon/human/human_user = user - human_user.remember_dropped_object(F) + human_user.remember_dropped_object(fired) + fired.fingerprintslast = key_name(user) pass_flags |= PASS_MOB_THRU_HUMAN|PASS_MOB_IS_OTHER|PASS_OVER else pass_flags |= PASS_MOB_THRU|PASS_HIGH_OVER - msg_admin_attack("[key_name_admin(user)] fired a grenade ([F.name]) from \a ([name]).") + msg_admin_attack("[key_name_admin(user)] fired a grenade ([fired.name]) from \a ([name]).") log_game("[key_name_admin(user)] used a grenade ([name]).") - F.throw_range = 20 - F.det_time = min(10, F.det_time) - F.activate(user, FALSE) - F.forceMove(get_turf(src)) - F.throw_atom(target, 20, SPEED_VERY_FAST, user, null, NORMAL_LAUNCH, pass_flags) + fired.throw_range = 20 + fired.det_time = min(10, fired.det_time) + fired.activate(user, FALSE) + fired.forceMove(get_turf(src)) + fired.throw_atom(target, 20, SPEED_VERY_FAST, user, null, NORMAL_LAUNCH, pass_flags) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 2fc04e35f399..e4251f5f6b31 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -501,13 +501,14 @@ if(ammo.sound_miss) playsound_client(L.client, ammo.sound_miss, get_turf(L), 75, TRUE) L.visible_message(SPAN_AVOIDHARM("[src] misses [L]!"), SPAN_AVOIDHARM("[src] narrowly misses you!"), null, 4, CHAT_TYPE_TAKING_HIT) - log_attack("[src] narrowly missed [key_name(L)]") + var/log_message = "[src] narrowly missed [key_name(L)]" var/mob/living/carbon/shotby = firer if(istype(shotby)) - L.attack_log += "[time_stamp()]\] [src], fired by [key_name(firer)], narrowly missed [key_name(L)]" - shotby.attack_log += "[time_stamp()]\] [src], fired by [key_name(shotby)], narrowly missed [key_name(L)]" - + L.attack_log += "\[[time_stamp()]\] [src], fired by [key_name(firer)], narrowly missed [key_name(L)]" + shotby.attack_log += "\[[time_stamp()]\] [src], fired by [key_name(shotby)], narrowly missed [key_name(L)]" + log_message = "[src], fired by [key_name(firer)], narrowly missed [key_name(L)]" + log_attack(log_message) #if DEBUG_HIT_CHANCE to_world(SPAN_DEBUG("([L]) Missed.")) diff --git a/code/modules/shuttle/computers/dropship_computer.dm b/code/modules/shuttle/computers/dropship_computer.dm index 50449b32fcb9..5ad84e17f159 100644 --- a/code/modules/shuttle/computers/dropship_computer.dm +++ b/code/modules/shuttle/computers/dropship_computer.dm @@ -362,6 +362,9 @@ update_equipment(is_optimised) if(is_set_flyby) to_chat(user, SPAN_NOTICE("You begin the launch sequence for a flyby.")) + var/log = "[key_name(user)] launched the dropship [src.shuttleId] on flyby." + msg_admin_niche(log) + log_interact(user, msg = "[log]") shuttle.send_for_flyby() return TRUE var/dockId = params["target"] @@ -387,6 +390,9 @@ return TRUE SSshuttle.moveShuttle(shuttle.id, dock.id, TRUE) to_chat(user, SPAN_NOTICE("You begin the launch sequence to [dock].")) + var/log = "[key_name(user)] launched the dropship [src.shuttleId] on transport." + msg_admin_niche(log) + log_interact(user, msg = "[log]") return TRUE if("button-push") playsound(loc, get_sfx("terminal_button"), KEYBOARD_SOUND_VOLUME, 1) @@ -403,10 +409,14 @@ to_chat(user, SPAN_WARNING("Door controls have been overridden. Please call technical support.")) if("set-ferry") is_set_flyby = FALSE - msg_admin_niche("[key_name_admin(usr)] set the dropship [src.shuttleId] into transport") + var/log = "[key_name(user)] set the dropship [src.shuttleId] into transport" + msg_admin_niche(log) + log_interact(user, msg = "[log]") if("set-flyby") is_set_flyby = TRUE - msg_admin_niche("[key_name_admin(usr)] set the dropship [src.shuttleId] into flyby") + var/log = "[key_name(user)] set the dropship [src.shuttleId] into flyby." + msg_admin_niche(log) + log_interact(user, msg = "[log]") if("set-automate") var/almayer_lz = params["hangar_id"] var/ground_lz = params["ground_id"] @@ -426,7 +436,9 @@ shuttle.automated_lz_id = ground_lz shuttle.automated_delay = delay playsound(loc, get_sfx("terminal_button"), KEYBOARD_SOUND_VOLUME, 1) - message_admins("[key_name_admin(usr)] has set auto pilot on '[shuttle.name]'") + var/log = "[key_name(user)] has enabled auto pilot on '[shuttle.name]'" + message_admins(log) + log_interact(user, msg = "[log]") return /* TODO if(!dropship.automated_launch) //If we're toggling it on... @@ -440,7 +452,9 @@ shuttle.automated_lz_id = null shuttle.automated_delay = null playsound(loc, get_sfx("terminal_button"), KEYBOARD_SOUND_VOLUME, 1) - message_admins("[key_name_admin(usr)] has removed auto pilot on '[shuttle.name]'") + var/log = "[key_name(user)] has disabled auto pilot on '[shuttle.name]'" + message_admins(log) + log_interact(user, msg = "[log]") return if("cancel-flyby") From c7721377d41f0da947225503352d16e33e474ac5 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 19:25:40 +0100 Subject: [PATCH 20/52] Automatic changelog for PR #4024 [ci skip] --- html/changelogs/AutoChangeLog-pr-4024.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4024.yml diff --git a/html/changelogs/AutoChangeLog-pr-4024.yml b/html/changelogs/AutoChangeLog-pr-4024.yml new file mode 100644 index 000000000000..1d20fc50b0a1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4024.yml @@ -0,0 +1,6 @@ +author: "realforest2001" +delete-after: True +changes: + - admin: "Added logs for speech through telephones and deferring ahelps to mentors." + - admin: "Chestburst logs now include location data. Mentor Imaginary Friend now logs its speech. Narrow miss shots now log who fired them (where applicable)." + - admin: "Dropship interactions (Launch/Flyby/Autopilot) are now logged again, and also included in attack logs for the user." \ No newline at end of file From c952578280b687fcb68f156fad25b4c80ba0fe08 Mon Sep 17 00:00:00 2001 From: Ben <91219575+Ben10083@users.noreply.github.com> Date: Thu, 3 Aug 2023 13:37:25 -0400 Subject: [PATCH 21/52] Workin Joey Talks (#4093) # About the pull request Expansion on #4042 that was discussed with Thwomp. Working Joe randomly says a quip and responds when attacked. # Explain why it's good for the game More character to Joey instead of being a static prop that doesn't move. Showing how "Joey" is still active but been interfered with by the crew. # Testing Photographs and Procedure ![image](https://github.com/cmss13-devs/cmss13/assets/91219575/f24d5095-301d-4d2c-896b-3134928d7e43) # Changelog :cl: add: Workin Joey now randomly talks and responds when attacked /:cl: --------- Co-authored-by: harryob --- code/game/objects/structures/props.dm | 74 +++++++++++++++++++ .../living/carbon/xenomorph/attack_alien.dm | 9 +++ 2 files changed, 83 insertions(+) diff --git a/code/game/objects/structures/props.dm b/code/game/objects/structures/props.dm index 7a0e7c9a9834..0df2cc345cb7 100644 --- a/code/game/objects/structures/props.dm +++ b/code/game/objects/structures/props.dm @@ -1165,4 +1165,78 @@ desc = "A defunct Seegson-brand Working Joe lifted from deep storage by a crew of marines after the last shore leave. Attempts have been made to modify the janitorial synthetic to serve as a crude bartender, but with little success." icon = 'icons/obj/structures/props/props.dmi' icon_state = "joey" + unslashable = FALSE + wrenchable = FALSE + /// converted into minutes when used to determine cooldown timer between quips + var/quip_delay_minimum = 5 + /// delay between Quips. Slightly randomized with quip_delay_minimum plus a random number + COOLDOWN_DECLARE(quip_delay) + /// delay between attack voicelines. Short but done for anti-spam + COOLDOWN_DECLARE(damage_delay) + /// list of quip emotes, taken from Working Joe + var/static/list/quips = list( + /datum/emote/living/carbon/human/synthetic/working_joe/quip/alwaysknow_damaged, + /datum/emote/living/carbon/human/synthetic/working_joe/quip/not_liking, + /datum/emote/living/carbon/human/synthetic/working_joe/greeting/how_can_i_help, + /datum/emote/living/carbon/human/synthetic/working_joe/task_update/day_never_done, + /datum/emote/living/carbon/human/synthetic/working_joe/task_update/required_by_apollo, + /datum/emote/living/carbon/human/synthetic/working_joe/warning/safety_breach + ) + /// list of voicelines to use when damaged + var/static/list/damaged = list( + /datum/emote/living/carbon/human/synthetic/working_joe/warning/damage, + /datum/emote/living/carbon/human/synthetic/working_joe/warning/that_stings, + /datum/emote/living/carbon/human/synthetic/working_joe/warning/irresponsible, + /datum/emote/living/carbon/human/synthetic/working_joe/warning/this_is_futile, + /datum/emote/living/carbon/human/synthetic/working_joe/warning/hysterical, + /datum/emote/living/carbon/human/synthetic/working_joe/warning/patience + ) + +/obj/structure/prop/invuln/joey/Initialize() + . = ..() + START_PROCESSING(SSobj, src) + +/obj/structure/prop/invuln/joey/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/structure/prop/invuln/joey/process() + //check if quip_delay cooldown finished. If so, random chance it says a line + if(COOLDOWN_FINISHED(src, quip_delay) && prob(10)) + emote(pick(quips)) + var/delay = rand(3) + quip_delay_minimum + COOLDOWN_START(src, quip_delay, delay MINUTES) + +// Advert your eyes. +/obj/structure/prop/invuln/joey/attackby(obj/item/W, mob/user) + attacked() + return ..() + +/obj/structure/prop/invuln/joey/bullet_act(obj/item/projectile/P) + attacked() + return ..() + +/// A terrible way of handling being hit. If signals would work it should be used. +/obj/structure/prop/invuln/joey/proc/attacked() + if(COOLDOWN_FINISHED(src, damage_delay) && prob(25)) + emote(pick(damaged)) + COOLDOWN_START(src, damage_delay, 8 SECONDS) + +/// SAY THE LINE JOE +/obj/structure/prop/invuln/joey/proc/emote(datum/emote/living/carbon/human/synthetic/working_joe/emote) + if (!emote) + return FALSE + + for(var/mob/mob in hearers(src, null)) + mob.show_message("[src] says, \"[initial(emote.say_message)]\"", SHOW_MESSAGE_AUDIBLE) + + var/list/viewers = get_mobs_in_view(7, src) + for(var/mob/current_mob in viewers) + if(!(current_mob.client?.prefs.toggles_langchat & LANGCHAT_SEE_EMOTES)) + viewers -= current_mob + langchat_speech(initial(emote.say_message), viewers, GLOB.all_languages, skip_language_check = TRUE) + + if(initial(emote.sound)) + playsound(loc, initial(emote.sound), 50, FALSE) + return TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm index 246e2d2809db..8e64afa3f733 100644 --- a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm +++ b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm @@ -982,3 +982,12 @@ var/matrix/A = matrix() apply_transform(A) stat &= ~BROKEN //Remove broken. MAGICAL REPAIRS + +//Misc +/obj/structure/prop/invuln/joey/attack_alien(mob/living/carbon/xenomorph/alien) + alien.animation_attack_on(src) + alien.visible_message(SPAN_DANGER("[alien] [alien.slashes_verb] [src]!"), \ + SPAN_DANGER("You [alien.slash_verb] [src]!"), null, 5) + playsound(loc, "alien_claw_metal", 25, 1) + attacked() + return XENO_ATTACK_ACTION From a97bc41de7895725fcd907be85cf26686d3e627a Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 19:41:16 +0100 Subject: [PATCH 22/52] Automatic changelog for PR #4093 [ci skip] --- html/changelogs/AutoChangeLog-pr-4093.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4093.yml diff --git a/html/changelogs/AutoChangeLog-pr-4093.yml b/html/changelogs/AutoChangeLog-pr-4093.yml new file mode 100644 index 000000000000..5b0503e1ec68 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4093.yml @@ -0,0 +1,4 @@ +author: "Ben10083" +delete-after: True +changes: + - rscadd: "Workin Joey now randomly talks and responds when attacked" \ No newline at end of file From 256346f2679e4975290c6b4e687d2a80d1439009 Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Thu, 3 Aug 2023 18:50:48 +0100 Subject: [PATCH 23/52] Falcon Drone appears on marine MD (#4057) # About the pull request Adds the falcon drone to marine MD, same manner as queen eye. # Explain why it's good for the game It is a moving object after all, more so than the Queen's eye. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: add: Added the falcon drone to marine motion detectors, appearing the same as Queen eye. /:cl: --------- Co-authored-by: harryob --- code/game/objects/items/devices/motion_detector.dm | 9 ++++++--- code/modules/cm_preds/falcon.dm | 1 + code/modules/cm_tech/hologram.dm | 4 +++- code/modules/mob/living/carbon/xenomorph/castes/Queen.dm | 1 + 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/devices/motion_detector.dm b/code/game/objects/items/devices/motion_detector.dm index ade74531bc91..dd0c5d45eda4 100644 --- a/code/game/objects/items/devices/motion_detector.dm +++ b/code/game/objects/items/devices/motion_detector.dm @@ -229,11 +229,14 @@ if(human_user) show_blip(human_user, M) - for(var/mob/hologram/queen/Q in GLOB.hologram_list) - if(Q.z != cur_turf.z || !(range_bounds.contains_atom(Q))) continue + for(var/mob/hologram/holo as anything in GLOB.hologram_list) + if(!holo.motion_sensed) + continue + if(holo.z != cur_turf.z || !(range_bounds.contains_atom(holo))) + continue ping_count++ if(human_user) - show_blip(human_user, Q, "queen_eye") + show_blip(human_user, holo, "queen_eye") if(ping_count > 0) playsound(loc, pick('sound/items/detector_ping_1.ogg', 'sound/items/detector_ping_2.ogg', 'sound/items/detector_ping_3.ogg', 'sound/items/detector_ping_4.ogg'), 60, 0, 7, 2) diff --git a/code/modules/cm_preds/falcon.dm b/code/modules/cm_preds/falcon.dm index 19977a7bd84a..4461f9b4f7e7 100644 --- a/code/modules/cm_preds/falcon.dm +++ b/code/modules/cm_preds/falcon.dm @@ -68,6 +68,7 @@ var/obj/item/falcon_drone/parent_drone var/obj/item/clothing/gloves/yautja/owned_bracers desc = "An agile drone used by Yautja to survey the hunting grounds." + motion_sensed = TRUE /mob/hologram/falcon/Initialize(mapload, mob/M, obj/item/falcon_drone/drone, obj/item/clothing/gloves/yautja/bracers) . = ..() diff --git a/code/modules/cm_tech/hologram.dm b/code/modules/cm_tech/hologram.dm index 83cc0937b46e..5c0e986f45b2 100644 --- a/code/modules/cm_tech/hologram.dm +++ b/code/modules/cm_tech/hologram.dm @@ -1,4 +1,4 @@ -GLOBAL_LIST_EMPTY(hologram_list) +GLOBAL_LIST_EMPTY_TYPED(hologram_list, /mob/hologram) /mob/hologram name = "Hologram" @@ -16,6 +16,8 @@ GLOBAL_LIST_EMPTY(hologram_list) var/mob/linked_mob var/datum/action/leave_hologram/leave_button + ///If can be detected on motion detectors. + var/motion_sensed = FALSE /mob/hologram/movement_delay() . = -2 // Very fast speed, so they can navigate through easily, they can't ever have movement delay whilst as a hologram diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm index f3a354b42ad0..53e30d374b2c 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm @@ -68,6 +68,7 @@ /mob/hologram/queen name = "Queen Eye" action_icon_state = "queen_exit" + motion_sensed = TRUE color = "#a800a8" From 216794e565a3098d526e2feb4d66425e8d0c295b Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 19:54:33 +0100 Subject: [PATCH 24/52] Automatic changelog for PR #4057 [ci skip] --- html/changelogs/AutoChangeLog-pr-4057.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4057.yml diff --git a/html/changelogs/AutoChangeLog-pr-4057.yml b/html/changelogs/AutoChangeLog-pr-4057.yml new file mode 100644 index 000000000000..0677c85b9dd8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4057.yml @@ -0,0 +1,4 @@ +author: "realforest2001" +delete-after: True +changes: + - rscadd: "Added the falcon drone to marine motion detectors, appearing the same as Queen eye." \ No newline at end of file From 2c85063514bea66df4f865053c70fdbfc1b64979 Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Thu, 3 Aug 2023 20:06:15 +0200 Subject: [PATCH 25/52] Fixes predator crew monitor console (#4079) # About the pull request Fixes the predator crew monitor to work at all. # Testing Photographs and Procedure
Screenshots & Videos ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/f0928b55-378a-403e-b732-0e3bc2217692)
# Changelog :cl: fix: Predator ship health monitor console now works /:cl: Co-authored-by: John Doe --- code/modules/cm_marines/marines_consoles.dm | 57 ++++++++++++++++++++- maps/predship/huntership.dmm | 3 +- 2 files changed, 56 insertions(+), 4 deletions(-) diff --git a/code/modules/cm_marines/marines_consoles.dm b/code/modules/cm_marines/marines_consoles.dm index 36535a0b5141..4743034a68f4 100644 --- a/code/modules/cm_marines/marines_consoles.dm +++ b/code/modules/cm_marines/marines_consoles.dm @@ -679,11 +679,13 @@ idle_power_usage = 250 active_power_usage = 500 var/faction = FACTION_MARINE + /// What type of /datum/crewmonitor this will create + var/crewmonitor_type = /datum/crewmonitor /obj/structure/machinery/computer/crew/Initialize() . = ..() if(!GLOB.crewmonitor[faction]) - GLOB.crewmonitor[faction] = new /datum/crewmonitor(faction) + GLOB.crewmonitor[faction] = new crewmonitor_type(faction) /obj/structure/machinery/computer/crew/attack_remote(mob/living/user) attack_hand(user) @@ -714,6 +716,12 @@ icon_state = "cmonitor" density = FALSE +/obj/structure/machinery/computer/crew/alt/yautja + name = "\improper Yautja health monitor" + desc = "Used to monitor active health sensors of all Yautja in the system. You can see that the console highlights the human's ship areas with BLUE and the hunting locations with RED." + faction = FACTION_YAUTJA + crewmonitor_type = /datum/crewmonitor/yautja + /obj/structure/machinery/computer/crew/upp faction = FACTION_UPP @@ -790,7 +798,7 @@ GLOBAL_LIST_EMPTY_TYPED(crewmonitor, /datum/crewmonitor) /datum/crewmonitor/ui_data(mob/user) . = list( "sensors" = update_data(), - "link_allowed" = isAI(user) + "link_allowed" = isAI(user), ) /datum/crewmonitor/proc/update_data() @@ -1102,6 +1110,51 @@ GLOBAL_LIST_EMPTY_TYPED(crewmonitor, /datum/crewmonitor) else jobs = list() +/datum/crewmonitor/yautja + faction = FACTION_YAUTJA + +/datum/crewmonitor/yautja/update_data() + var/list/results = list() + for(var/mob/living/carbon/human/human_mob as anything in GLOB.human_mob_list) + + if(!isyautja(human_mob)) + continue + + if(faction != human_mob.faction) + continue + + // Check if z-level is correct + var/turf/pos = get_turf(human_mob) + if(!pos) + continue + + // The entry for this human + var/list/entry = list( + "ref" = REF(human_mob), + "name" = human_mob.real_name, + "ijob" = UNKNOWN_JOB_ID, + "assignment" = "Hunter", + "oxydam" = round(human_mob.getOxyLoss(), 1), + "toxdam" = round(human_mob.getToxLoss(), 1), + "burndam" = round(human_mob.getFireLoss(), 1), + "brutedam" = round(human_mob.getBruteLoss(), 1), + "can_track" = TRUE, + ) + + if(is_mainship_level(pos.z)) + entry["side"] = "Almayer" + + var/area/mob_area = get_area(human_mob) + entry["area"] = sanitize_area(mob_area.name) + + results[++results.len] = entry + + // Cache result + data = results + last_update = world.time + + return results + #undef SENSOR_LIVING #undef SENSOR_VITALS #undef SENSOR_COORDS diff --git a/maps/predship/huntership.dmm b/maps/predship/huntership.dmm index e6fb4adc1c74..d7dcb49427a0 100644 --- a/maps/predship/huntership.dmm +++ b/maps/predship/huntership.dmm @@ -486,8 +486,7 @@ /obj/structure/pipes/standard/simple/hidden{ dir = 4 }, -/obj/structure/machinery/computer/crew/alt{ - faction = "Yautja"; +/obj/structure/machinery/computer/crew/alt/yautja{ pixel_y = 24 }, /turf/open/floor/corsat{ From 9dc6e61aa54e9ea16959a40039eef97f08effbf8 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 20:07:59 +0100 Subject: [PATCH 26/52] Automatic changelog for PR #4079 [ci skip] --- html/changelogs/AutoChangeLog-pr-4079.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4079.yml diff --git a/html/changelogs/AutoChangeLog-pr-4079.yml b/html/changelogs/AutoChangeLog-pr-4079.yml new file mode 100644 index 000000000000..5a7fcc03642b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4079.yml @@ -0,0 +1,4 @@ +author: "Zonespace27" +delete-after: True +changes: + - bugfix: "Predator ship health monitor console now works" \ No newline at end of file From c073bd8c7c5b5fa02fdd21c717f5b23a83da89ec Mon Sep 17 00:00:00 2001 From: Ben <91219575+Ben10083@users.noreply.github.com> Date: Thu, 3 Aug 2023 14:07:53 -0400 Subject: [PATCH 27/52] Add security camera console to ARES Chamber (#4059) # About the pull request Add general camera console to ARES Chamber # Explain why it's good for the game ARES core and chamber especially is supposed to be the nexus of information, as such, I believe it would be better to start adding some new consoles to chamber, as right now it just mirrors itself on each side. # Changelog :cl: mapadd: ARES Chamber now has a security camera console /:cl: --- maps/map_files/USS_Almayer/USS_Almayer.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index ff74707aa9c0..741b511792b1 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -53969,7 +53969,7 @@ }, /area/almayer/hull/upper_hull/u_a_p) "nJH" = ( -/obj/structure/machinery/computer/cameras/almayer/ares{ +/obj/structure/machinery/computer/cameras/almayer{ dir = 8; pixel_x = 17 }, From 6dd2c71e9cc24980df2d6b529910ea0a1495c2be Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 20:21:37 +0100 Subject: [PATCH 28/52] Automatic changelog for PR #4059 [ci skip] --- html/changelogs/AutoChangeLog-pr-4059.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4059.yml diff --git a/html/changelogs/AutoChangeLog-pr-4059.yml b/html/changelogs/AutoChangeLog-pr-4059.yml new file mode 100644 index 000000000000..cef9e6ea95b2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4059.yml @@ -0,0 +1,4 @@ +author: "Ben10083" +delete-after: True +changes: + - mapadd: "ARES Chamber now has a security camera console" \ No newline at end of file From 36b6bffa2f2643a6a13a2ac0b2d762b5f750a7de Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Thu, 3 Aug 2023 22:41:55 +0200 Subject: [PATCH 29/52] Preds now show up on the predship tacmap (#4080) # About the pull request Now makes preds (and thralls) show up on their (and only their) tacmaps. Additionally, anyone wearing a stolen bracer (since that's what the tracker is based from) has a custom icon on the tacmap. # Explain why it's good for the game Well, it makes sense that preds should be able to see each other on their tacmap. Not sure if this was intended when preds got their tacmap, but it's here now. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: add: Predators and thralls are now visible on the predship tacmap. add: Anyone wearing a stolen predator bracer is now visible on the predship tacmap. /:cl: --------- Co-authored-by: John Doe --- code/__DEFINES/minimap.dm | 3 +- code/modules/cm_preds/yaut_bracers.dm | 42 ++++++++++++++++++++++++++ icons/ui_icons/map_blips.dmi | Bin 2672 -> 2840 bytes 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/minimap.dm b/code/__DEFINES/minimap.dm index 9069ed323357..ca6d9718cd0c 100644 --- a/code/__DEFINES/minimap.dm +++ b/code/__DEFINES/minimap.dm @@ -4,7 +4,8 @@ #define MINIMAP_FLAG_PMC (1<<2) #define MINIMAP_FLAG_UPP (1<<3) #define MINIMAP_FLAG_CLF (1<<4) -#define MINIMAP_FLAG_ALL (1<<5) - 1 +#define MINIMAP_FLAG_YAUTJA (1<<5) +#define MINIMAP_FLAG_ALL (1<<6) - 1 ///Converts the overworld x and y to minimap x and y values #define MINIMAP_SCALE 2 diff --git a/code/modules/cm_preds/yaut_bracers.dm b/code/modules/cm_preds/yaut_bracers.dm index ca946aa580ac..305badf6fceb 100644 --- a/code/modules/cm_preds/yaut_bracers.dm +++ b/code/modules/cm_preds/yaut_bracers.dm @@ -46,6 +46,8 @@ var/mob/living/carbon/human/owner //Pred spawned on, or thrall given to. var/obj/item/clothing/gloves/yautja/linked_bracer //Bracer linked to this one (thrall or mentor). COOLDOWN_DECLARE(bracer_recharge) + /// What minimap icon this bracer should have + var/minimap_icon = "predator" /obj/item/clothing/gloves/yautja/equipped(mob/user, slot) . = ..() @@ -54,6 +56,8 @@ if(!owner) owner = user toggle_lock_internal(user, TRUE) + RegisterSignal(user, list(COMSIG_MOB_STAT_SET_ALIVE, COMSIG_MOB_DEATH), PROC_REF(update_minimap_icon)) + INVOKE_NEXT_TICK(src, PROC_REF(update_minimap_icon), user) /obj/item/clothing/gloves/yautja/Destroy() STOP_PROCESSING(SSobj, src) @@ -65,6 +69,8 @@ /obj/item/clothing/gloves/yautja/dropped(mob/user) STOP_PROCESSING(SSobj, src) flags_item = initial(flags_item) + UnregisterSignal(user, list(COMSIG_MOB_STAT_SET_ALIVE, COMSIG_MOB_DEATH)) + SSminimaps.remove_marker(user) ..() /obj/item/clothing/gloves/yautja/pickup(mob/living/user) @@ -102,6 +108,27 @@ /obj/item/clothing/gloves/yautja/proc/decloak() return +/// Called to update the minimap icon of the predator +/obj/item/clothing/gloves/yautja/proc/update_minimap_icon() + if(!ishuman(owner)) + return + + var/mob/living/carbon/human/human_owner = owner + var/turf/wearer_turf = get_turf(owner) + SSminimaps.remove_marker(owner) + if(!isyautja(owner)) + if(owner.stat >= DEAD) + if(human_owner.undefibbable) + SSminimaps.add_marker(owner, wearer_turf.z, MINIMAP_FLAG_YAUTJA, "bracer_stolen", 'icons/ui_icons/map_blips.dmi', overlay_iconstates = list("undefibbable")) + else + SSminimaps.add_marker(owner, wearer_turf.z, MINIMAP_FLAG_YAUTJA, "bracer_stolen", 'icons/ui_icons/map_blips.dmi', overlay_iconstates = list("defibbable")) + else + SSminimaps.add_marker(owner, wearer_turf.z, MINIMAP_FLAG_YAUTJA, "bracer_stolen", 'icons/ui_icons/map_blips.dmi') + else + if(owner?.stat >= DEAD) + SSminimaps.add_marker(owner, wearer_turf.z, MINIMAP_FLAG_YAUTJA, minimap_icon, 'icons/ui_icons/map_blips.dmi', overlay_iconstates = list("undefibbable")) //defib/undefib status doesn't really matter because they're gonna explode in the end regardless + else + SSminimaps.add_marker(owner, wearer_turf.z, MINIMAP_FLAG_YAUTJA, minimap_icon, 'icons/ui_icons/map_blips.dmi') /* *This is the main proc for checking AND draining the bracer energy. It must have human passed as an argument. *It can take a negative value in amount to restore energy. @@ -193,8 +220,23 @@ desc = "A pair of strange alien bracers, adapted for human biology." color = "#b85440" + minimap_icon = "thrall" +/obj/item/clothing/gloves/yautja/thrall/update_minimap_icon() + if(!ishuman(owner)) + return + + var/mob/living/carbon/human/human_owner = owner + var/turf/wearer_turf = get_turf(owner) + if(owner.stat >= DEAD) + if(human_owner.undefibbable) + SSminimaps.add_marker(owner, wearer_turf.z, MINIMAP_FLAG_YAUTJA, minimap_icon, overlay_iconstates = list("undefibbable")) + else + SSminimaps.add_marker(owner, wearer_turf.z, MINIMAP_FLAG_YAUTJA, minimap_icon, overlay_iconstates = list("defibbable")) + else + SSminimaps.add_marker(owner, wearer_turf.z, MINIMAP_FLAG_YAUTJA, minimap_icon) + /obj/item/clothing/gloves/yautja/hunter name = "clan bracers" desc = "An extremely complex, yet simple-to-operate set of armored bracers worn by the Yautja. It has many functions, activate them to use some." diff --git a/icons/ui_icons/map_blips.dmi b/icons/ui_icons/map_blips.dmi index 829d9b8a43b09a6bab06c96c8145c04426b97288..0034b4fd6ff7df582f6698f428dc90da42f53d63 100644 GIT binary patch delta 2837 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 delta 2668 zcmV-y3X}Di7Vs26iBL{Q4GJ0x0000DNk~Le0000#0000#2nGNE09RiS-v9ssw0cxn zbVOxyV{&P5bZKvH004NLm6X43+%OErkw77T$&!+R7Y{%2-$#D8?&tHb)2lnaoZ1y7 zQ)1V-hy9PX*(j9Bb?&KcCZusHu5(XqE>O^Q?xqKS86{N?H*FJ0vg_Pk+YACT{{4SP zD_=Nmta6^b%H%7TNv9B0W}%phN(HaiwCV^Y6+s?Jg$xzXi;8R@0d+kB4%GM1M>I%( z{0(@{dKX?t1T%v82}RdhXoaFz77>CWT#5PyE@)Wh8KjJr*^qO_U^ow-L@+Oj1F}BB zTxHcm>dn3(>-!x+R{bgm@Ho|RG)yF7&M4;~iFIXdl-RTgI3QaVrLQ7sGk_Vn5Tico ziB^nBbkp@9LWay6h)^<2yUNAV$U>!m7&w6yEFycU*>>T8B?*CUYki_Z4)rU)phP}_pR?E0W1bXLoRYXFOV~>`nmnX2NL4( zi_$+Tzu(<|wytG~SM|+d|F}EsA3t@GC7Z@xD*xvmZ{73j(H&n-?H?Alq11|hB&FB@ z00?(UL_t(&f$dvgXdB5L{$?emR$?qH;hd?ceT4YM4~OVekJ?$4*g6hOA1-}5g_e6b zxc1fI!lf-H9OvSYP(q&12VHnVLodZBFm&3}+3QW^PG#X_%C)EX%Icn@n=kFqm6_k&zKj#0Lil`QYGxpu;{fG2uu> ztgo;0R4T=;UcK7p6!j|;wOlUqa=F}AuIoCd87w2dva-V5{b{*ePF5eAo11ptGz{q@ zu)4a+DwPTAeXd zrfD+HIcJP9H*pnV5vf#)-M@doO#pJ#-5+6SXo!i#0U)2xn}B3;{lXu)x>!k6_V zzpS@*4l(~K@$CG0P8XHgV2trdBm&bk(cj99XLf1dZu&9SeONk0B!?Fs_Gi4!MKuh;SP=~IM%!(lvr{Mc?-sZ`KxHkqbr z8~{Y(Kx=Es=kuu7>yGkVF2~B{GN&zz>|(^JF5PFYsHnGK7zR(L(^BF1a070=)qtRd#VFHnLlLlH*S2^MZQ2@6PesIqo5z%NA+v1js$M8ff$X0zE>LPi|NYm8Vd#*4+`j(pJkDkKsK?k4DVD4WePa%iWk zF!igdFB`K^D4E(ED|A)&`n>;zR8%IbK*)~>xC={@~yo_u%%a)gyrR_tZ5GO*S zA4E(PEt}1qq(lOSPjgTlVmCA9%~q$v55NB@ z_excm)_b{E+HFkFtB<>%-F%O$?7q|9kN6+|)%x0jQrn>}6Zax`#S%PR&jv`>c310ZYg3_-b&`wGfUAL_h>^DI# z?E6;t`B(4rK=`@T;n}4W@03U)n z<|lu5_$Jzanfi-V$mi7ne*L3=ze&ZMT}p9wdM3=hD(q(@RPfpbKD+rIcMC)KV&MZW z69#w@*jMo^bsH+;08p!KE8CgnEu~GXhoSwi5bP9t5#~_;lH(`Ln-`n^SG*xF!|YP( zm46j^&`^?pUJa;BhejABd95B+HaaZAD9QUB5L9@bgi(^;%gITFgAm4l>-PiYml>U$ zoTlfKT=u?BOavwdB91OOP13_J2-yH9?R#+SdpA?@>% zS^-}k8ECW3+|)ZNI(QRyK2M z0X}WUcaUih=7WS*W=)2lSRE#Ts*UAN4ywJ Date: Thu, 3 Aug 2023 21:59:08 +0100 Subject: [PATCH 30/52] Automatic changelog for PR #4080 [ci skip] --- html/changelogs/AutoChangeLog-pr-4080.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4080.yml diff --git a/html/changelogs/AutoChangeLog-pr-4080.yml b/html/changelogs/AutoChangeLog-pr-4080.yml new file mode 100644 index 000000000000..2f631b6d1a70 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4080.yml @@ -0,0 +1,5 @@ +author: "Zonespace27" +delete-after: True +changes: + - rscadd: "Predators and thralls are now visible on the predship tacmap." + - rscadd: "Anyone wearing a stolen predator bracer is now visible on the predship tacmap." \ No newline at end of file From b4859b4c7a86bb3ba22e62e97216a220447e0442 Mon Sep 17 00:00:00 2001 From: Segrain Date: Fri, 4 Aug 2023 00:47:47 +0400 Subject: [PATCH 31/52] Assigned job slots and cryorines. (#4076) # About the pull request Followup to #3552. In other words, the second part of it that was left out of the original PR to cut down on feature creep. Seems to work out fine in first approach on localhost, but testing with wider populace in natural conditions is probably required. (Also, added an extra sanity check to keep randomised characters from inheriting actual characters' records which might be using the actual names - not that anybody ever reads character records anyawy.) # Explain why it's good for the game Roleplaying game letting players use their characters is good. Encouraging players to use different characters more is also good. # Changelog :cl: add: Joining cryomarines now uses your assigned character slot for the role you get (as long as you have not already used that character name this round). /:cl: --- code/datums/emergency_calls/cryo_marines.dm | 15 ++++++++++----- code/modules/client/preferences.dm | 17 ++++++++++++----- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/code/datums/emergency_calls/cryo_marines.dm b/code/datums/emergency_calls/cryo_marines.dm index eb914e198b37..fb4a0d94e177 100644 --- a/code/datums/emergency_calls/cryo_marines.dm +++ b/code/datums/emergency_calls/cryo_marines.dm @@ -36,30 +36,35 @@ if(leaders < cryo_squad.max_leaders && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(H.client, JOB_SQUAD_LEADER, time_required_for_job)) leader = H leaders++ - arm_equipment(H, /datum/equipment_preset/uscm/leader/cryo, TRUE, TRUE) + H.client.prefs.copy_all_to(H, JOB_SQUAD_LEADER, TRUE, TRUE) + arm_equipment(H, /datum/equipment_preset/uscm/leader/cryo, FALSE, TRUE) to_chat(H, SPAN_ROLE_HEADER("You are a Squad Leader in the USCM")) to_chat(H, SPAN_ROLE_BODY("You are here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) to_chat(H, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced.")) else if (heavies < max_heavies && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_HEAVY) && check_timelock(H.client, JOB_SQUAD_SPECIALIST, time_required_for_job)) heavies++ - arm_equipment(H, /datum/equipment_preset/uscm/spec/cryo, TRUE, TRUE) + H.client.prefs.copy_all_to(H, JOB_SQUAD_SPECIALIST, TRUE, TRUE) + arm_equipment(H, /datum/equipment_preset/uscm/spec/cryo, FALSE, TRUE) to_chat(H, SPAN_ROLE_HEADER("You are a Weapons Specialist in the USCM")) to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) to_chat(H, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced.")) else if (medics < max_medics && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_MEDIC) && check_timelock(H.client, JOB_SQUAD_MEDIC, time_required_for_job)) medics++ - arm_equipment(H, /datum/equipment_preset/uscm/medic/cryo, TRUE, TRUE) + H.client.prefs.copy_all_to(H, JOB_SQUAD_MEDIC, TRUE, TRUE) + arm_equipment(H, /datum/equipment_preset/uscm/medic/cryo, FALSE, TRUE) to_chat(H, SPAN_ROLE_HEADER("You are a Hospital Corpsman in the USCM")) to_chat(H, SPAN_ROLE_BODY("You are here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) to_chat(H, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced.")) else if (engineers < max_engineers && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_ENGINEER) && check_timelock(H.client, JOB_SQUAD_ENGI, time_required_for_job)) engineers++ - arm_equipment(H, /datum/equipment_preset/uscm/engineer/cryo, TRUE, TRUE) + H.client.prefs.copy_all_to(H, JOB_SQUAD_ENGI, TRUE, TRUE) + arm_equipment(H, /datum/equipment_preset/uscm/engineer/cryo, FALSE, TRUE) to_chat(H, SPAN_ROLE_HEADER("You are an Engineer in the USCM")) to_chat(H, SPAN_ROLE_BODY("You are here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) to_chat(H, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced.")) else - arm_equipment(H, /datum/equipment_preset/uscm/pfc/cryo, TRUE, TRUE) + H.client.prefs.copy_all_to(H, JOB_SQUAD_MARINE, TRUE, TRUE) + arm_equipment(H, /datum/equipment_preset/uscm/pfc/cryo, FALSE, TRUE) to_chat(H, SPAN_ROLE_HEADER("You are a Rifleman in the USCM")) to_chat(H, SPAN_ROLE_BODY("You are here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command.")) to_chat(H, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced.")) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 16afa8d1b4f2..4f1161709657 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1955,11 +1955,17 @@ var/const/MAX_SAVE_SLOTS = 10 load_character(slot_for_job) /// Transfers both physical characteristics and character information to character -/datum/preferences/proc/copy_all_to(mob/living/carbon/human/character, job_title, is_late_join = FALSE) +/datum/preferences/proc/copy_all_to(mob/living/carbon/human/character, job_title, is_late_join = FALSE, check_datacore = FALSE) if(!istype(character)) return find_assigned_slot(job_title, is_late_join) + if(check_datacore && !(be_random_body && be_random_name)) + for(var/datum/data/record/record as anything in GLOB.data_core.locked) + if(record.fields["name"] == real_name) + be_random_body = TRUE + be_random_name = TRUE + break if(be_random_name) real_name = random_name(gender) @@ -1987,10 +1993,11 @@ var/const/MAX_SAVE_SLOTS = 10 character.flavor_texts["legs"] = flavor_texts["legs"] character.flavor_texts["feet"] = flavor_texts["feet"] - character.med_record = strip_html(med_record) - character.sec_record = strip_html(sec_record) - character.gen_record = strip_html(gen_record) - character.exploit_record = strip_html(exploit_record) + if(!be_random_name) + character.med_record = strip_html(med_record) + character.sec_record = strip_html(sec_record) + character.gen_record = strip_html(gen_record) + character.exploit_record = strip_html(exploit_record) character.age = age character.gender = gender From 8ec830baf70c9decc8d85fd9b34e0aee7fe801a3 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 22:16:53 +0100 Subject: [PATCH 32/52] Automatic changelog for PR #4076 [ci skip] --- html/changelogs/AutoChangeLog-pr-4076.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4076.yml diff --git a/html/changelogs/AutoChangeLog-pr-4076.yml b/html/changelogs/AutoChangeLog-pr-4076.yml new file mode 100644 index 000000000000..0299cb845e98 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4076.yml @@ -0,0 +1,4 @@ +author: "Segrain" +delete-after: True +changes: + - rscadd: "Joining cryomarines now uses your assigned character slot for the role you get (as long as you have not already used that character name this round)." \ No newline at end of file From 327057eb043c8854657831b3310f6dfd33d8202e Mon Sep 17 00:00:00 2001 From: Stan_Albatross <66756236+stanalbatross@users.noreply.github.com> Date: Thu, 3 Aug 2023 22:21:58 +0100 Subject: [PATCH 33/52] Almayer control console tgui (#4066) # About the pull request ![image](https://github.com/cmss13-devs/cmss13/assets/66756236/9cbacd1d-5932-43a7-85f8-afa6982a7bc9) also majorly cleaned up almayer command console code # Explain why it's good for the game tgui is good # Changelog :cl: ui: changed the almayer control console from html to tgui fix: custom faction messages will now be named properly in the paper printed out from the almayer control console /:cl: --------- Co-authored-by: Stan_Albatross Co-authored-by: harryob --- .../machinery/computer/almayer_control.dm | 465 ++++++++---------- code/game/objects/items/devices/cictablet.dm | 2 +- code/modules/admin/tabs/event_tab.dm | 4 +- .../tgui/interfaces/AlmayerControl.js | 259 ++++++++++ .../packages/tgui/interfaces/CommandTablet.js | 4 +- 5 files changed, 477 insertions(+), 257 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/AlmayerControl.js diff --git a/code/game/machinery/computer/almayer_control.dm b/code/game/machinery/computer/almayer_control.dm index b2a931224464..7d63a2e8c3af 100644 --- a/code/game/machinery/computer/almayer_control.dm +++ b/code/game/machinery/computer/almayer_control.dm @@ -1,16 +1,3 @@ -#define STATE_DEFAULT 1 -#define STATE_EVACUATION 2 -#define STATE_EVACUATION_CANCEL 3 -#define STATE_DISTRESS 4 -#define STATE_DESTROY 5 -#define STATE_DEFCONLIST 6 - -#define STATE_MESSAGELIST 7 -#define STATE_VIEWMESSAGE 8 -#define STATE_DELMESSAGE 9 - - - #define COMMAND_SHIP_ANNOUNCE "Command Ship Announcement" /obj/structure/machinery/computer/almayer_control @@ -21,273 +8,149 @@ unslashable = TRUE unacidable = TRUE - var/state = STATE_DEFAULT - - var/is_announcement_active = TRUE - - var/cooldown_request = 0 - var/cooldown_destruct = 0 - var/cooldown_central = 0 + /// requesting a distress beacon + COOLDOWN_DECLARE(cooldown_request) + /// requesting evac + COOLDOWN_DECLARE(cooldown_destruct) + /// messaging HC (admins) + COOLDOWN_DECLARE(cooldown_central) + /// making a ship announcement + COOLDOWN_DECLARE(cooldown_message) var/list/messagetitle = list() var/list/messagetext = list() - var/currmsg = 0 - var/aicurrmsg = 0 /obj/structure/machinery/computer/almayer_control/attack_remote(mob/user as mob) return attack_hand(user) /obj/structure/machinery/computer/almayer_control/attack_hand(mob/user as mob) - if(..() || !allowed(user) || inoperable()) + if(..() || inoperable()) return + if(!allowed(user)) + to_chat(usr, SPAN_WARNING("Access denied.")) + return FALSE + if(!istype(loc.loc, /area/almayer/command/cic)) //Has to be in the CIC. Can also be a generic CIC area to communicate, if wanted. to_chat(usr, SPAN_WARNING("Unable to establish a connection.")) return FALSE - ui_interact(user) - -/obj/structure/machinery/computer/almayer_control/ui_interact(mob/user as mob) - user.set_interaction(src) + tgui_interact(user) - var/dat = "Almayer Control Console" +// tgui boilerplate \\ - if(EvacuationAuthority.evac_status == EVACUATION_STATUS_INITIATING) - dat += "Evacuation in Progress\n
\nETA: [EvacuationAuthority.get_status_panel_eta()]
" - - switch(state) - if(STATE_DEFAULT) - dat += "Alert Level: [get_security_level()]
" - dat += "
[is_announcement_active ? "Make a ship announcement" : "*Unavailable*"]" - dat += GLOB.admins.len > 0 ? "
Send a message to USCM" : "
USCM communication offline" - dat += "
Award a medal" - dat += "

" - dat += "

" - - - dat += "
Message list" - dat += "
Send Distress Beacon" - dat += "
Activate Self-Destruct" - switch(EvacuationAuthority.evac_status) - if(EVACUATION_STATUS_STANDING_BY) - dat += "
Initiate emergency evacuation" - if(EVACUATION_STATUS_INITIATING) - dat += "
Cancel emergency evacuation" - - if(STATE_EVACUATION) - dat += "Are you sure you want to evacuate the [MAIN_SHIP_NAME]? Confirm" - - if(STATE_EVACUATION_CANCEL) - dat += "Are you sure you want to cancel the evacuation of the [MAIN_SHIP_NAME]? Confirm" - - if(STATE_DISTRESS) - dat += "Are you sure you want to trigger a distress signal? The signal can be picked up by anyone listening, friendly or not. Confirm" - - if(STATE_DESTROY) - dat += "Are you sure you want to trigger the self-destruct? This would mean abandoning ship. Confirm" - - if(STATE_MESSAGELIST) - dat += "Messages:" - for(var/i = 1; i<=messagetitle.len; i++) - dat += "
[messagetitle[i]]" - - if(STATE_VIEWMESSAGE) - if (currmsg) - dat += "[messagetitle[currmsg]]

[messagetext[currmsg]]" - dat += "

Delete" - else - state = STATE_MESSAGELIST - attack_hand(user) - return FALSE +/obj/structure/machinery/computer/almayer_control/tgui_interact(mob/user, datum/tgui/ui, datum/ui_state/state) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AlmayerControl", "[name]") + ui.open() - if(STATE_DELMESSAGE) - if (currmsg) - dat += "Are you sure you want to delete this message? OK|Cancel" - else - state = STATE_MESSAGELIST - attack_hand(user) - return FALSE +/obj/structure/machinery/computer/almayer_control/ui_status(mob/user, datum/ui_state/state) + . = ..() + if(!allowed(user)) + return UI_CLOSE + if(!operable()) + return UI_CLOSE - dat += "
[(state != STATE_DEFAULT) ? "Main Menu|" : ""]Close" +/obj/structure/machinery/computer/almayer_control/ui_state(mob/user) + return GLOB.not_incapacitated_and_adjacent_strict_state - show_browser(user, dat, name, "almayer_control") - onclose(user, "almayer_control") +// tgui data \\ -/obj/structure/machinery/computer/almayer_control/Topic(href, href_list) - if(..()) - return FALSE - - usr.set_interaction(src) - var/datum/ares_link/link = GLOB.ares_link - switch(href_list["operation"]) - if("main") - state = STATE_DEFAULT - - if("ship_announce") - if(!is_announcement_active) - to_chat(usr, SPAN_WARNING("Please allow at least [COOLDOWN_COMM_MESSAGE*0.1] second\s to pass between announcements.")) - return FALSE - var/input = stripped_multiline_input(usr, "Please write a message to announce to the station crew.", "Priority Announcement", "") - if(!input || !is_announcement_active || !(usr in view(1,src))) - return FALSE - - is_announcement_active = FALSE - - var/signed = null - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - var/obj/item/card/id/id = H.wear_id - if(istype(id)) - var/paygrade = get_paygrades(id.paygrade, FALSE, H.gender) - signed = "[paygrade] [id.registered_name]" +/obj/structure/machinery/computer/almayer_control/ui_static_data(mob/user) + var/list/data = list() - shipwide_ai_announcement(input, COMMAND_SHIP_ANNOUNCE, signature = signed) - addtimer(CALLBACK(src, PROC_REF(reactivate_announcement), usr), COOLDOWN_COMM_MESSAGE) - message_admins("[key_name(usr)] has made a shipwide annoucement.") - log_announcement("[key_name(usr)] has announced the following to the ship: [input]") + data["cooldown_request"] = COOLDOWN_COMM_REQUEST + data["cooldown_destruct"] = COOLDOWN_COMM_DESTRUCT + data["cooldown_central"] = COOLDOWN_COMM_CENTRAL + data["cooldown_message"] = COOLDOWN_COMM_MESSAGE + data["distresstimelock"] = DISTRESS_TIME_LOCK + return data - if("evacuation_start") - if(state == STATE_EVACUATION) - if(security_level < SEC_LEVEL_RED) - to_chat(usr, SPAN_WARNING("The ship must be under red alert in order to enact evacuation procedures.")) - return FALSE +/obj/structure/machinery/computer/almayer_control/ui_data(mob/user) + var/list/data = list() + var/list/messages = list() - if(EvacuationAuthority.flags_scuttle & FLAGS_EVACUATION_DENY) - to_chat(usr, SPAN_WARNING("The USCM has placed a lock on deploying the evacuation pods.")) - return FALSE + data["alert_level"] = security_level - if(!EvacuationAuthority.initiate_evacuation()) - to_chat(usr, SPAN_WARNING("You are unable to initiate an evacuation procedure right now!")) - return FALSE + data["time_request"] = cooldown_request + data["time_destruct"] = cooldown_destruct + data["time_central"] = cooldown_central + data["time_message"] = cooldown_message - log_game("[key_name(usr)] has called for an emergency evacuation.") - message_admins("[key_name_admin(usr)] has called for an emergency evacuation.") - link.log_ares_security("Initiate Evacuation", "[usr] has called for an emergency evacuation.") - return TRUE + data["worldtime"] = world.time - state = STATE_EVACUATION + data["evac_status"] = EvacuationAuthority.evac_status + if(EvacuationAuthority.evac_status == EVACUATION_STATUS_INITIATING) + data["evac_eta"] = EvacuationAuthority.get_status_panel_eta() - if("evacuation_cancel") - if(state == STATE_EVACUATION_CANCEL) - if(!EvacuationAuthority.cancel_evacuation()) - to_chat(usr, SPAN_WARNING("You are unable to cancel the evacuation right now!")) - return FALSE + if(!messagetitle.len) + data["messages"] = null + else + for(var/i in 1 to length(messagetitle)) + var/list/messagedata = list(list( + "title" = messagetitle[i], + "text" = messagetext[i], + "number" = i + )) + messages += messagedata - spawn(35)//some time between AI announcements for evac cancel and SD cancel. - if(EvacuationAuthority.evac_status == EVACUATION_STATUS_STANDING_BY)//nothing changed during the wait - //if the self_destruct is active we try to cancel it (which includes lowering alert level to red) - if(!EvacuationAuthority.cancel_self_destruct(1)) - //if SD wasn't active (likely canceled manually in the SD room), then we lower the alert level manually. - set_security_level(SEC_LEVEL_RED, TRUE) //both SD and evac are inactive, lowering the security level. + data["messages"] = messages - log_game("[key_name(usr)] has canceled the emergency evacuation.") - message_admins("[key_name_admin(usr)] has canceled the emergency evacuation.") - link.log_ares_security("Cancel Evacuation", "[usr] has cancelled the emergency evacuation.") - return TRUE + return data - state = STATE_EVACUATION_CANCEL +// end tgui data \\ - if("distress") - if(state == STATE_DISTRESS) - if(world.time < DISTRESS_TIME_LOCK) - to_chat(usr, SPAN_WARNING("The distress beacon cannot be launched this early in the operation. Please wait another [time_left_until(DISTRESS_TIME_LOCK, world.time, 1 MINUTES)] minutes before trying again.")) - return FALSE +// tgui interact \\ - if(!SSticker.mode) - return FALSE //Not a game mode? +/obj/structure/machinery/computer/almayer_control/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return - if(SSticker.mode.force_end_at == 0) - to_chat(usr, SPAN_WARNING("ARES has denied your request for operational security reasons.")) - return FALSE + switch(action) + if("award") + print_medal(usr, src) + . = TRUE - if(world.time < cooldown_request + COOLDOWN_COMM_REQUEST) - to_chat(usr, SPAN_WARNING("The distress beacon has recently broadcast a message. Please wait.")) - return FALSE + // evac stuff start \\ - if(security_level == SEC_LEVEL_DELTA) - to_chat(usr, SPAN_WARNING("The ship is already undergoing self-destruct procedures!")) - return FALSE + if("evacuation_start") + if(security_level < SEC_LEVEL_RED) + to_chat(usr, SPAN_WARNING("The ship must be under red alert in order to enact evacuation procedures.")) + return FALSE - for(var/client/C in GLOB.admins) - if((R_ADMIN|R_MOD) & C.admin_holder.rights) - C << 'sound/effects/sos-morse-code.ogg' - message_admins("[key_name(usr)] has requested a Distress Beacon! [CC_MARK(usr)] (SEND) (DENY) [ADMIN_JMP_USER(usr)] [CC_REPLY(usr)]") - to_chat(usr, SPAN_NOTICE("A distress beacon request has been sent to USCM Central Command.")) + if(EvacuationAuthority.flags_scuttle & FLAGS_EVACUATION_DENY) + to_chat(usr, SPAN_WARNING("The USCM has placed a lock on deploying the evacuation pods.")) + return FALSE - cooldown_request = world.time - return TRUE + if(!EvacuationAuthority.initiate_evacuation()) + to_chat(usr, SPAN_WARNING("You are unable to initiate an evacuation procedure right now!")) + return FALSE - state = STATE_DISTRESS + log_game("[key_name(usr)] has called for an emergency evacuation.") + message_admins("[key_name_admin(usr)] has called for an emergency evacuation.") + var/datum/ares_link/link = GLOB.ares_link + link.log_ares_security("Initiate Evacuation", "[usr] has called for an emergency evacuation.") + . = TRUE - if("destroy") - if(state == STATE_DESTROY) - //Comment to test - if(world.time < DISTRESS_TIME_LOCK) - to_chat(usr, SPAN_WARNING("The self-destruct cannot be activated this early in the operation. Please wait another [time_left_until(DISTRESS_TIME_LOCK, world.time, 1 MINUTES)] minutes before trying again.")) - return FALSE - - if(!SSticker.mode) - return FALSE //Not a game mode? - - if(SSticker.mode.force_end_at == 0) - to_chat(usr, SPAN_WARNING("ARES has denied your request for operational security reasons.")) - return FALSE - - if(world.time < cooldown_destruct + COOLDOWN_COMM_DESTRUCT) - to_chat(usr, SPAN_WARNING("A self-destruct request has already been sent to high command. Please wait.")) - return FALSE - - if(get_security_level() == "delta") - to_chat(usr, SPAN_WARNING("The [MAIN_SHIP_NAME]'s self-destruct is already activated.")) - return FALSE - - for(var/client/C in GLOB.admins) - if((R_ADMIN|R_MOD) & C.admin_holder.rights) - C << 'sound/effects/sos-morse-code.ogg' - message_admins("[key_name(usr)] has requested Self-Destruct! [CC_MARK(usr)] (GRANT) (DENY) [ADMIN_JMP_USER(usr)] [CC_REPLY(usr)]") - to_chat(usr, SPAN_NOTICE("A self-destruct request has been sent to USCM Central Command.")) - cooldown_destruct = world.time - return TRUE - - state = STATE_DESTROY - - if("messagelist") - currmsg = 0 - state = STATE_MESSAGELIST - - if("viewmessage") - state = STATE_VIEWMESSAGE - if (!currmsg) - if(href_list["message-num"]) currmsg = text2num(href_list["message-num"]) - else state = STATE_MESSAGELIST + if("evacuation_cancel") + if(!EvacuationAuthority.cancel_evacuation()) + to_chat(usr, SPAN_WARNING("You are unable to cancel the evacuation right now!")) + return FALSE - if("delmessage") - state = (currmsg) ? STATE_DELMESSAGE : STATE_MESSAGELIST - - if("delmessage2") - if(currmsg) - var/title = messagetitle[currmsg] - var/text = messagetext[currmsg] - messagetitle.Remove(title) - messagetext.Remove(text) - if(currmsg == aicurrmsg) aicurrmsg = 0 - currmsg = 0 - state = STATE_MESSAGELIST + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/structure/machinery/computer/almayer_control, cancel_evac)), 4 SECONDS) - if("messageUSCM") - if(world.time < cooldown_central + COOLDOWN_COMM_CENTRAL) - to_chat(usr, SPAN_WARNING("Arrays recycling. Please stand by.")) - return FALSE - var/input = stripped_input(usr, "Please choose a message to transmit to USCM. Please be aware that this process is very expensive, and abuse will lead to termination. Transmission does not guarantee a response. There is a small delay before you may send another message. Be clear and concise.", "To abort, send an empty message.", "") - if(!input || !(usr in view(1,src)) || world.time < cooldown_central + COOLDOWN_COMM_CENTRAL) return FALSE + log_game("[key_name(usr)] has canceled the emergency evacuation.") + message_admins("[key_name_admin(usr)] has canceled the emergency evacuation.") + var/datum/ares_link/link = GLOB.ares_link + link.log_ares_security("Cancel Evacuation", "[usr] has cancelled the emergency evacuation.") + . = TRUE - high_command_announce(input, usr) - to_chat(usr, SPAN_NOTICE("Message transmitted.")) - log_announcement("[key_name(usr)] has made an USCM announcement: [input]") - cooldown_central = world.time + // evac stuff end \\ - if("changeseclevel") + if("change_sec_level") var/list/alert_list = list(num2seclevel(SEC_LEVEL_GREEN), num2seclevel(SEC_LEVEL_BLUE)) switch(security_level) if(SEC_LEVEL_GREEN) @@ -302,27 +165,125 @@ return set_security_level(seclevel2num(level_selected)) - log_game("[key_name(usr)] has changed the security level to [get_security_level()].") message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].") + var/datum/ares_link/link = GLOB.ares_link + link.log_ares_security("Security Level Update", "[usr] has changed the security level to [get_security_level()].") + . = TRUE - if("award") - print_medal(usr, src) + if("messageUSCM") + if(!COOLDOWN_FINISHED(src, cooldown_central)) + to_chat(usr, SPAN_WARNING("Arrays are re-cycling. Please stand by.")) + return FALSE + var/input = stripped_input(usr, "Please choose a message to transmit to USCM. Please be aware that this process is very expensive, and abuse will lead to termination. Transmission does not guarantee a response. There is a small delay before you may send another message. Be clear and concise.", "To abort, send an empty message.", "") + if(!input || !(usr in view(1,src)) || !COOLDOWN_FINISHED(src, cooldown_central)) + return FALSE + + high_command_announce(input, usr) + to_chat(usr, SPAN_NOTICE("Message transmitted.")) + log_announcement("[key_name(usr)] has made an USCM announcement: [input]") + COOLDOWN_START(src, cooldown_central, COOLDOWN_COMM_CENTRAL) + . = TRUE + + if("ship_announce") + if(!COOLDOWN_FINISHED(src, cooldown_message)) + to_chat(usr, SPAN_WARNING("Please allow at least [COOLDOWN_TIMELEFT(src, cooldown_message)/10] second\s to pass between announcements.")) + return FALSE + var/input = stripped_multiline_input(usr, "Please write a message to announce to the station crew.", "Priority Announcement", "") + if(!input || !COOLDOWN_FINISHED(src, cooldown_message) || !(usr in view(1,src))) + return FALSE + + var/signed = null + if(ishuman(usr)) + var/mob/living/carbon/human/human_user = usr + var/obj/item/card/id/id = human_user.wear_id + if(istype(id)) + var/paygrade = get_paygrades(id.paygrade, FALSE, human_user.gender) + signed = "[paygrade] [id.registered_name]" + + COOLDOWN_START(src, cooldown_message, COOLDOWN_COMM_MESSAGE) + shipwide_ai_announcement(input, COMMAND_SHIP_ANNOUNCE, signature = signed) + message_admins("[key_name(usr)] has made a shipwide annoucement.") + log_announcement("[key_name(usr)] has announced the following to the ship: [input]") + . = TRUE + + if("distress") + if(world.time < DISTRESS_TIME_LOCK) + to_chat(usr, SPAN_WARNING("The distress beacon cannot be launched this early in the operation. Please wait another [time_left_until(DISTRESS_TIME_LOCK, world.time, 1 MINUTES)] minutes before trying again.")) + return FALSE + + if(!SSticker.mode) + return FALSE //Not a game mode? + + if(SSticker.mode.force_end_at == 0) + to_chat(usr, SPAN_WARNING("ARES has denied your request for operational security reasons.")) + return FALSE + + if(!COOLDOWN_FINISHED(src, cooldown_request)) + to_chat(usr, SPAN_WARNING("The distress beacon has recently broadcast a message. Please wait.")) + return FALSE - updateUsrDialog() + if(security_level == SEC_LEVEL_DELTA) + to_chat(usr, SPAN_WARNING("The ship is already undergoing self-destruct procedures!")) + return FALSE + + for(var/client/admin_client as anything in GLOB.admins) + if((R_ADMIN|R_MOD) & admin_client.admin_holder.rights) + admin_client << 'sound/effects/sos-morse-code.ogg' + message_admins("[key_name(usr)] has requested a Distress Beacon! [CC_MARK(usr)] (SEND) (DENY) [ADMIN_JMP_USER(usr)] [CC_REPLY(usr)]") + to_chat(usr, SPAN_NOTICE("A distress beacon request has been sent to USCM Central Command.")) + + COOLDOWN_START(src, cooldown_request, COOLDOWN_COMM_REQUEST) + . = TRUE + + // sd \\ + + if("destroy") + if(world.time < DISTRESS_TIME_LOCK) + to_chat(usr, SPAN_WARNING("The self-destruct cannot be activated this early in the operation. Please wait another [time_left_until(DISTRESS_TIME_LOCK, world.time, 1 MINUTES)] minutes before trying again.")) + return FALSE + + if(!SSticker.mode) + return FALSE //Not a game mode? + + if(SSticker.mode.force_end_at == 0) + to_chat(usr, SPAN_WARNING("ARES has denied your request for operational security reasons.")) + return FALSE + + if(!COOLDOWN_FINISHED(src, cooldown_destruct)) + to_chat(usr, SPAN_WARNING("A self-destruct request has already been sent to high command. Please wait.")) + return FALSE + + if(get_security_level() == "delta") + to_chat(usr, SPAN_WARNING("The [MAIN_SHIP_NAME]'s self-destruct is already activated.")) + return FALSE + + for(var/client/admin_client as anything in GLOB.admins) + if((R_ADMIN|R_MOD) & admin_client.admin_holder.rights) + admin_client << 'sound/effects/sos-morse-code.ogg' + message_admins("[key_name(usr)] has requested Self-Destruct! [CC_MARK(usr)] (GRANT) (DENY) [ADMIN_JMP_USER(usr)] [CC_REPLY(usr)]") + to_chat(usr, SPAN_NOTICE("A self-destruct request has been sent to USCM Central Command.")) + COOLDOWN_START(src, cooldown_destruct, COOLDOWN_COMM_DESTRUCT) + . = TRUE + + if("delmessage") + var/number_of_message = params["number"] + if(!number_of_message) + return FALSE + var/title = messagetitle[number_of_message] + var/text = messagetext[number_of_message] + messagetitle.Remove(title) + messagetext.Remove(text) + . = TRUE -/obj/structure/machinery/computer/almayer_control/proc/reactivate_announcement(mob/user) - is_announcement_active = TRUE - updateUsrDialog() +// end tgui interact \\ -#undef STATE_DEFAULT -#undef STATE_EVACUATION -#undef STATE_EVACUATION_CANCEL -#undef STATE_DISTRESS -#undef STATE_DESTROY -#undef STATE_DEFCONLIST +// end tgui \\ -#undef STATE_MESSAGELIST -#undef STATE_VIEWMESSAGE -#undef STATE_DELMESSAGE +/obj/structure/machinery/computer/almayer_control/proc/cancel_evac() + if(EvacuationAuthority.evac_status == EVACUATION_STATUS_STANDING_BY)//nothing changed during the wait + //if the self_destruct is active we try to cancel it (which includes lowering alert level to red) + if(!EvacuationAuthority.cancel_self_destruct(1)) + //if SD wasn't active (likely canceled manually in the SD room), then we lower the alert level manually. + set_security_level(SEC_LEVEL_RED, TRUE) //both SD and evac are inactive, lowering the security level. diff --git a/code/game/objects/items/devices/cictablet.dm b/code/game/objects/items/devices/cictablet.dm index 1a4aebe813cc..b2707a20aa90 100644 --- a/code/game/objects/items/devices/cictablet.dm +++ b/code/game/objects/items/devices/cictablet.dm @@ -53,6 +53,7 @@ data["faction"] = announcement_faction data["cooldown_message"] = cooldown_between_messages + data["distresstimelock"] = DISTRESS_TIME_LOCK return data @@ -63,7 +64,6 @@ data["evac_status"] = EvacuationAuthority.evac_status data["endtime"] = announcement_cooldown data["distresstime"] = distress_cooldown - data["distresstimelock"] = DISTRESS_TIME_LOCK data["worldtime"] = world.time return data diff --git a/code/modules/admin/tabs/event_tab.dm b/code/modules/admin/tabs/event_tab.dm index b9eb4fd47ea1..fdf70d314c21 100644 --- a/code/modules/admin/tabs/event_tab.dm +++ b/code/modules/admin/tabs/event_tab.dm @@ -491,10 +491,10 @@ for(var/obj/structure/machinery/computer/almayer_control/C in machines) if(!(C.inoperable())) var/obj/item/paper/P = new /obj/item/paper( C.loc ) - P.name = "'[command_name] Update.'" + P.name = "'[customname].'" P.info = input P.update_icon() - C.messagetitle.Add("[command_name] Update") + C.messagetitle.Add("[customname]") C.messagetext.Add(P.info) if(alert("Press \"Yes\" if you want to announce it to ship crew and marines. Press \"No\" to keep it only as printed report on communication console.",,"Yes","No") == "Yes") diff --git a/tgui/packages/tgui/interfaces/AlmayerControl.js b/tgui/packages/tgui/interfaces/AlmayerControl.js new file mode 100644 index 000000000000..6cc44737626c --- /dev/null +++ b/tgui/packages/tgui/interfaces/AlmayerControl.js @@ -0,0 +1,259 @@ +import { Fragment } from 'inferno'; +import { useBackend } from '../backend'; +import { Button, Section, Flex, NoticeBox, Collapsible, Divider, Box } from '../components'; +import { Window } from '../layouts'; + +export const AlmayerControl = (_props, context) => { + const { act, data } = useBackend(context); + + const worldTime = data.worldtime; + const messages = data.messages; + + const evacstatus = data.evac_status; + const evacEta = data.evac_eta; + + const AlertLevel = data.alert_level; + + const minimumTimeElapsed = worldTime > data.distresstimelock; + + const canMessage = data.time_message < worldTime; // ship announcement + const canRequest = // requesting distress beacon + data.time_request < worldTime && AlertLevel === 2 && minimumTimeElapsed; + const canEvac = (evacstatus === 0, AlertLevel >= 2); // triggering evac + const canDestruct = + data.time_destruct < worldTime && minimumTimeElapsed && AlertLevel === 2; + const canCentral = data.time_central < worldTime; // messaging HC + + let distress_reason; + let destruct_reason; + if (AlertLevel === 3) { + distress_reason = 'Self-destruct in progress. Beacon disabled.'; + destruct_reason = 'Self-destruct is already active!'; + } else if (AlertLevel !== 2) { + distress_reason = 'Ship is not under an active emergency.'; + destruct_reason = 'Ship is not under an active emergency.'; + } else if (data.time_request < worldTime) { + distress_reason = + 'Beacon is currently recharging. Time remaining: ' + + Math.ceil((data.time_message - worldTime) / 10) + + 'secs.'; + } else if (data.time_destruct < worldTime) { + destruct_reason = + 'A request has already been sent to HC. Please wait: ' + + Math.ceil((data.time_destruct - worldTime) / 10) + + 'secs to send another.'; + } else if (!minimumTimeElapsed) { + distress_reason = "It's too early to launch a distress beacon."; + destruct_reason = "It's too early to initiate the self-destruct."; + } + + let alertLevelString; + let alertLevelColor; + if (AlertLevel === 3) { + alertLevelString = 'DELTA'; + alertLevelColor = 'purple'; + } + if (AlertLevel === 2) { + alertLevelString = 'RED'; + alertLevelColor = 'red'; + } + if (AlertLevel === 1) { + alertLevelString = 'BLUE'; + alertLevelColor = 'blue'; + } + if (AlertLevel === 0) { + alertLevelString = 'GREEN'; + alertLevelColor = 'green'; + } + + return ( + + +
+ + + + + + {!canMessage && ( + + )} + {!!canMessage && ( + + )} + {!!canCentral && ( +
+ + + {messages && ( + + + + + {messages.map((entry) => { + return ( + +
+ act('delmessage', { number: entry.number }) + } + /> + }> + {entry.text} +
+
+ ); + })} +
+
+
+ )} +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/CommandTablet.js b/tgui/packages/tgui/interfaces/CommandTablet.js index f4cc882070b2..8b334d1dac62 100644 --- a/tgui/packages/tgui/interfaces/CommandTablet.js +++ b/tgui/packages/tgui/interfaces/CommandTablet.js @@ -28,7 +28,7 @@ export const CommandTablet = (_props, context) => { } else if (AlertLevel !== 2) { distress_reason = 'Ship is not under an active emergency.'; } else if (distressCooldown) { - distress_reason = 'Beacon is currently on cooldown.'; + distress_reason = 'Beacon is currently recharging.'; } else if (!minimumTimeElapsed) { distress_reason = "It's too early to launch a distress beacon."; } @@ -41,7 +41,7 @@ export const CommandTablet = (_props, context) => { {!canAnnounce && ( )} From 7e0ae9e0d4933db6398c405d5b64364d92378b0f Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Thu, 3 Aug 2023 22:31:46 +0100 Subject: [PATCH 34/52] Automatic changelog for PR #4066 [ci skip] --- html/changelogs/AutoChangeLog-pr-4066.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4066.yml diff --git a/html/changelogs/AutoChangeLog-pr-4066.yml b/html/changelogs/AutoChangeLog-pr-4066.yml new file mode 100644 index 000000000000..db124283d592 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4066.yml @@ -0,0 +1,5 @@ +author: "stanalbatross" +delete-after: True +changes: + - ui: "changed the almayer control console from html to tgui" + - bugfix: "custom faction messages will now be named properly in the paper printed out from the almayer control console" \ No newline at end of file From 7e822b92cc37ad2b0ac8b1e34c7a5f6f00a596dc Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 4 Aug 2023 01:18:36 +0000 Subject: [PATCH 35/52] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-3860.yml | 4 --- html/changelogs/AutoChangeLog-pr-4024.yml | 6 ---- html/changelogs/AutoChangeLog-pr-4057.yml | 4 --- html/changelogs/AutoChangeLog-pr-4059.yml | 4 --- html/changelogs/AutoChangeLog-pr-4066.yml | 5 --- html/changelogs/AutoChangeLog-pr-4068.yml | 5 --- html/changelogs/AutoChangeLog-pr-4074.yml | 4 --- html/changelogs/AutoChangeLog-pr-4075.yml | 4 --- html/changelogs/AutoChangeLog-pr-4076.yml | 4 --- html/changelogs/AutoChangeLog-pr-4079.yml | 4 --- html/changelogs/AutoChangeLog-pr-4080.yml | 5 --- html/changelogs/AutoChangeLog-pr-4082.yml | 4 --- html/changelogs/AutoChangeLog-pr-4083.yml | 4 --- html/changelogs/AutoChangeLog-pr-4084.yml | 4 --- html/changelogs/AutoChangeLog-pr-4090.yml | 4 --- html/changelogs/AutoChangeLog-pr-4093.yml | 4 --- html/changelogs/AutoChangeLog-pr-4094.yml | 4 --- html/changelogs/archive/2023-08.yml | 38 +++++++++++++++++++++++ 18 files changed, 38 insertions(+), 73 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-3860.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4024.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4057.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4059.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4066.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4068.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4074.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4075.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4076.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4079.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4080.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4082.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4083.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4084.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4090.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4093.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4094.yml diff --git a/html/changelogs/AutoChangeLog-pr-3860.yml b/html/changelogs/AutoChangeLog-pr-3860.yml deleted file mode 100644 index c897739d6646..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3860.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ghostsheet" -delete-after: True -changes: - - rscadd: "B5 Breaching Hammer will now slow down humans who picks it up." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4024.yml b/html/changelogs/AutoChangeLog-pr-4024.yml deleted file mode 100644 index 1d20fc50b0a1..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4024.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "realforest2001" -delete-after: True -changes: - - admin: "Added logs for speech through telephones and deferring ahelps to mentors." - - admin: "Chestburst logs now include location data. Mentor Imaginary Friend now logs its speech. Narrow miss shots now log who fired them (where applicable)." - - admin: "Dropship interactions (Launch/Flyby/Autopilot) are now logged again, and also included in attack logs for the user." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4057.yml b/html/changelogs/AutoChangeLog-pr-4057.yml deleted file mode 100644 index 0677c85b9dd8..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4057.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "realforest2001" -delete-after: True -changes: - - rscadd: "Added the falcon drone to marine motion detectors, appearing the same as Queen eye." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4059.yml b/html/changelogs/AutoChangeLog-pr-4059.yml deleted file mode 100644 index cef9e6ea95b2..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4059.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ben10083" -delete-after: True -changes: - - mapadd: "ARES Chamber now has a security camera console" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4066.yml b/html/changelogs/AutoChangeLog-pr-4066.yml deleted file mode 100644 index db124283d592..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4066.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "stanalbatross" -delete-after: True -changes: - - ui: "changed the almayer control console from html to tgui" - - bugfix: "custom faction messages will now be named properly in the paper printed out from the almayer control console" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4068.yml b/html/changelogs/AutoChangeLog-pr-4068.yml deleted file mode 100644 index f0437bbca87c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4068.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Zonespace27" -delete-after: True -changes: - - rscadd: "WJs now spawn in the ARES core." - - rscadd: "There is now a synthetic repair station in the ARES core." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4074.yml b/html/changelogs/AutoChangeLog-pr-4074.yml deleted file mode 100644 index cea925a9026d..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4074.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Zonespace27" -delete-after: True -changes: - - rscdel: "You can no longer move the carp nade in the yautja ship" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4075.yml b/html/changelogs/AutoChangeLog-pr-4075.yml deleted file mode 100644 index d590d7020367..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4075.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Segrain" -delete-after: True -changes: - - bugfix: "Lesser drones now can pass through runners same as through any other castes." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4076.yml b/html/changelogs/AutoChangeLog-pr-4076.yml deleted file mode 100644 index 0299cb845e98..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4076.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Segrain" -delete-after: True -changes: - - rscadd: "Joining cryomarines now uses your assigned character slot for the role you get (as long as you have not already used that character name this round)." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4079.yml b/html/changelogs/AutoChangeLog-pr-4079.yml deleted file mode 100644 index 5a7fcc03642b..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4079.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Zonespace27" -delete-after: True -changes: - - bugfix: "Predator ship health monitor console now works" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4080.yml b/html/changelogs/AutoChangeLog-pr-4080.yml deleted file mode 100644 index 2f631b6d1a70..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4080.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Zonespace27" -delete-after: True -changes: - - rscadd: "Predators and thralls are now visible on the predship tacmap." - - rscadd: "Anyone wearing a stolen predator bracer is now visible on the predship tacmap." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4082.yml b/html/changelogs/AutoChangeLog-pr-4082.yml deleted file mode 100644 index bc2e8e989ea7..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4082.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "blackdragonTOW" -delete-after: True -changes: - - bugfix: "fixed a file reference that broke end of round music for some factions" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4083.yml b/html/changelogs/AutoChangeLog-pr-4083.yml deleted file mode 100644 index 6fa9a43c2892..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4083.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Zonespace27" -delete-after: True -changes: - - qol: "Predator emote panel emotes now look a bit cleaner in the menu" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4084.yml b/html/changelogs/AutoChangeLog-pr-4084.yml deleted file mode 100644 index 51bc383a0eda..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4084.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Zonespace27" -delete-after: True -changes: - - bugfix: "Predator flight computers can no longer be walked on." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4090.yml b/html/changelogs/AutoChangeLog-pr-4090.yml deleted file mode 100644 index 786b56eed7bb..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4090.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "realforest2001" -delete-after: True -changes: - - bugfix: "Yautja Bracers are no longer hyper lethal electrical outlets." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4093.yml b/html/changelogs/AutoChangeLog-pr-4093.yml deleted file mode 100644 index 5b0503e1ec68..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4093.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ben10083" -delete-after: True -changes: - - rscadd: "Workin Joey now randomly talks and responds when attacked" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4094.yml b/html/changelogs/AutoChangeLog-pr-4094.yml deleted file mode 100644 index 071aedb02f61..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4094.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Huffie56" -delete-after: True -changes: - - bugfix: "forbidden all the items beside battery and beakers to avoid weirdness and bug." \ No newline at end of file diff --git a/html/changelogs/archive/2023-08.yml b/html/changelogs/archive/2023-08.yml index d8fa59382b06..fe0ed539128f 100644 --- a/html/changelogs/archive/2023-08.yml +++ b/html/changelogs/archive/2023-08.yml @@ -22,3 +22,41 @@ lockbox. Thwomper: - maptweak: added Workin' Joey to maint bar. +2023-08-04: + Ben10083: + - mapadd: ARES Chamber now has a security camera console + - rscadd: Workin Joey now randomly talks and responds when attacked + Huffie56: + - bugfix: forbidden all the items beside battery and beakers to avoid weirdness + and bug. + Segrain: + - bugfix: Lesser drones now can pass through runners same as through any other castes. + - rscadd: Joining cryomarines now uses your assigned character slot for the role + you get (as long as you have not already used that character name this round). + Zonespace27: + - bugfix: Predator flight computers can no longer be walked on. + - rscadd: Predators and thralls are now visible on the predship tacmap. + - rscadd: Anyone wearing a stolen predator bracer is now visible on the predship + tacmap. + - qol: Predator emote panel emotes now look a bit cleaner in the menu + - bugfix: Predator ship health monitor console now works + - rscadd: WJs now spawn in the ARES core. + - rscadd: There is now a synthetic repair station in the ARES core. + - rscdel: You can no longer move the carp nade in the yautja ship + blackdragonTOW: + - bugfix: fixed a file reference that broke end of round music for some factions + ghostsheet: + - rscadd: B5 Breaching Hammer will now slow down humans who picks it up. + realforest2001: + - admin: Added logs for speech through telephones and deferring ahelps to mentors. + - admin: Chestburst logs now include location data. Mentor Imaginary Friend now + logs its speech. Narrow miss shots now log who fired them (where applicable). + - admin: Dropship interactions (Launch/Flyby/Autopilot) are now logged again, and + also included in attack logs for the user. + - bugfix: Yautja Bracers are no longer hyper lethal electrical outlets. + - rscadd: Added the falcon drone to marine motion detectors, appearing the same + as Queen eye. + stanalbatross: + - ui: changed the almayer control console from html to tgui + - bugfix: custom faction messages will now be named properly in the paper printed + out from the almayer control console From 50e83da9f53579e7b27d72da11be02d94f88db73 Mon Sep 17 00:00:00 2001 From: ghostsheet <43085828+ghostsheet@users.noreply.github.com> Date: Fri, 4 Aug 2023 14:19:08 +1000 Subject: [PATCH 36/52] Tent Quickfix (#4100) # About the pull request Prevent noise spam by using action_busy # Explain why it's good for the game My code was bad, this improves it. Prevents people from spamming deconstruction noise and text --- code/modules/tents/deployed_tents.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/tents/deployed_tents.dm b/code/modules/tents/deployed_tents.dm index fc9a69d2366c..d55fe6b59879 100644 --- a/code/modules/tents/deployed_tents.dm +++ b/code/modules/tents/deployed_tents.dm @@ -100,12 +100,12 @@ /obj/structure/tent/attackby(obj/item/item, mob/user) var/obj/item/tool/shovel/shovel = item - if(!istype(shovel) || shovel.folded) + if(!istype(shovel) || shovel.folded || user.action_busy) return visible_message(SPAN_HIGHDANGER("[user] is trying to tear down the [src]")) playsound(src, 'sound/items/paper_ripped.ogg', 25, 1) - if(user.action_busy || !do_after(user, 150, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE, src) || QDELETED(src)) + if(!do_after(user, 150, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE, src) || QDELETED(src)) return visible_message(SPAN_HIGHDANGER("[user] tears down the [src]")) From e1a97c4df5270a9d5c458df8c5e67dff044eb885 Mon Sep 17 00:00:00 2001 From: morrowwolf Date: Fri, 4 Aug 2023 00:57:30 -0400 Subject: [PATCH 37/52] You can no longer bypass skill checks on pill bottles (#4097) # About the pull request When it got passed to attack_hand() from unarmed_attack() in click() it would not check the skillcheck as it calls attack_hand() on the pill rather than through the pill bottle which was allowing a bypass for the skillcheck for pill bottles. This *feels* like the wrong way to do it as like OOP so I'm happy to do it in a different way. # Explain why it's good for the game Bug bad # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: Morrow fix: You can no longer bypass skill checks on pill bottles /:cl: --- code/game/objects/items/storage/firstaid.dm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index 2717b7c98501..ccab1bf3dfc7 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -448,6 +448,22 @@ ..() update_icon() +/obj/item/storage/pill_bottle/attack_hand(mob/user, mods) + if(loc != user) + return ..() + + if(!mods || !mods["alt"]) + return ..() + + if(!ishuman(user)) + return ..() + + if(skilllock && !skillcheck(user, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC)) + error_idlock(user) + return FALSE + + return ..() + /obj/item/storage/pill_bottle/proc/error_idlock(mob/user) to_chat(user, SPAN_WARNING("It must have some kind of ID lock...")) From aa0c3a682308037c5d046f960a6c05d402a7b4ad Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Fri, 4 Aug 2023 06:05:38 +0100 Subject: [PATCH 38/52] Automatic changelog for PR #4097 [ci skip] --- html/changelogs/AutoChangeLog-pr-4097.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4097.yml diff --git a/html/changelogs/AutoChangeLog-pr-4097.yml b/html/changelogs/AutoChangeLog-pr-4097.yml new file mode 100644 index 000000000000..077d31d7df64 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4097.yml @@ -0,0 +1,4 @@ +author: "Morrow" +delete-after: True +changes: + - bugfix: "You can no longer bypass skill checks on pill bottles" \ No newline at end of file From bbeab9d7f00aab36e81db5993928711385bcdbba Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Fri, 4 Aug 2023 06:57:53 +0200 Subject: [PATCH 39/52] Fixes underbarrel extinguishers (#4102) # About the pull request Closes https://github.com/cmss13-devs/cmss13/issues/4036 You can now refill underbarrel extinguishers at watertanks and such when they are selected. # Testing Photographs and Procedure
Screenshots & Videos ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/b9d57670-0532-46d8-8c24-baae3e099618)
# Changelog :cl: fix: Underbarrel extinguishers can now be refilled. /:cl: Co-authored-by: John Doe --- code/modules/projectiles/gun.dm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 6b948b9debe2..7a2a5f85c5b3 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -1218,6 +1218,16 @@ and you're good to go. #define EXECUTION_CHECK (attacked_mob.stat == UNCONSCIOUS || attacked_mob.is_mob_restrained()) && ((user.a_intent == INTENT_GRAB)||(user.a_intent == INTENT_DISARM)) +/obj/item/weapon/gun/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + if(!proximity_flag) + return FALSE + + if(active_attachable && (active_attachable.flags_attach_features & ATTACH_MELEE)) + active_attachable.last_fired = world.time + active_attachable.fire_attachment(target, src, user) + return TRUE + + /obj/item/weapon/gun/attack(mob/living/attacked_mob, mob/living/user) if(active_attachable && (active_attachable.flags_attach_features & ATTACH_MELEE)) //this is expected to do something in melee. active_attachable.last_fired = world.time From d053185ab0bb9961c9e40a902688cfac4e3f9516 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Fri, 4 Aug 2023 06:19:34 +0100 Subject: [PATCH 40/52] Automatic changelog for PR #4102 [ci skip] --- html/changelogs/AutoChangeLog-pr-4102.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4102.yml diff --git a/html/changelogs/AutoChangeLog-pr-4102.yml b/html/changelogs/AutoChangeLog-pr-4102.yml new file mode 100644 index 000000000000..b713f5842337 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4102.yml @@ -0,0 +1,4 @@ +author: "Zonespace27" +delete-after: True +changes: + - bugfix: "Underbarrel extinguishers can now be refilled." \ No newline at end of file From 69ff181ce69643debf3b1824daae2cf00b880dca Mon Sep 17 00:00:00 2001 From: BeagleGaming1 <56142455+BeagleGaming1@users.noreply.github.com> Date: Fri, 4 Aug 2023 01:06:58 -0400 Subject: [PATCH 41/52] Adds campfires (#4091) # About the pull request Adds campfires that provide heating to those nearby, while requiring fuel Sprites and sound by Thwomper # Explain why it's good for the game They look cool and will allow marines, and maps, to have campfires without using braziers # Changelog :cl: add: Adds campfires, craftable with wood code: Modifies brazier construction code for easier use and mapping /:cl: --------- Co-authored-by: harryob --- .../items/stacks/sheets/sheet_types.dm | 1 + code/game/objects/structures/props.dm | 195 +++++++++++++++--- code/game/turfs/walls/walls.dm | 2 +- icons/obj/structures/structures.dmi | Bin 42628 -> 42273 bytes maps/templates/clf_ert_station.dmm | 4 +- sound/machines/firepit_ambience.ogg | Bin 0 -> 58377 bytes 6 files changed, 168 insertions(+), 34 deletions(-) create mode 100644 sound/machines/firepit_ambience.ogg diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 34719747bd02..98a7ab036f06 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -144,6 +144,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \ /* new/datum/stack_recipe("table parts", /obj/item/frame/table/wood, 2), \ */ + new/datum/stack_recipe("campfire", /obj/structure/prop/brazier/frame/full/campfire, 5, time = 15, one_per_turf = ONE_TYPE_PER_TURF, on_floor = TRUE), \ new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood/normal, 1, time = 10, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1), \ new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 20, one_per_turf = ONE_TYPE_PER_BORDER, on_floor = 1), \ new/datum/stack_recipe("wooden crate", /obj/structure/closet/coffin/woodencrate, 5, time = 15, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1), \ diff --git a/code/game/objects/structures/props.dm b/code/game/objects/structures/props.dm index 0df2cc345cb7..ea3a2af391bc 100644 --- a/code/game/objects/structures/props.dm +++ b/code/game/objects/structures/props.dm @@ -639,6 +639,10 @@ icon_state = "" icon = 'icons/turf/lifeboat.dmi' +#define STATE_COMPLETE 0 +#define STATE_FUEL 1 +#define STATE_IGNITE 2 + /obj/structure/prop/brazier name = "brazier" desc = "The fire inside the brazier emits a relatively dim glow to flashlights and flares, but nothing can replace the feeling of sitting next to a fireplace with your friends." @@ -647,6 +651,40 @@ density = TRUE health = 150 luminosity = 6 + /// What obj this becomes when it gets to its next stage of construction / ignition + var/frame_type + /// What is used to progress to the next stage + var/state = STATE_COMPLETE + +/obj/structure/prop/brazier/get_examine_text(mob/user) + . = ..() + switch(state) + if(STATE_FUEL) + . += "[src] requires wood to be fueled." + if(STATE_IGNITE) + . += "[src] needs to be lit." + +/obj/structure/prop/brazier/attackby(obj/item/hit_item, mob/user) + switch(state) + if(STATE_COMPLETE) + return ..() + if(STATE_FUEL) + if(!istype(hit_item, /obj/item/stack/sheet/wood)) + return ..() + var/obj/item/stack/sheet/wood/wooden_boards = hit_item + if(!wooden_boards.use(5)) + to_chat(user, SPAN_WARNING("Not enough wood!")) + return + user.visible_message(SPAN_NOTICE("[user] fills [src] with [hit_item].")) + if(STATE_IGNITE) + if(!hit_item.heat_source) + return ..() + if(!do_after(user, 3 SECONDS, INTERRUPT_MOVED, BUSY_ICON_BUILD)) + return + user.visible_message(SPAN_NOTICE("[user] ignites [src] with [hit_item].")) + + new frame_type(loc) + qdel(src) /obj/structure/prop/brazier/Destroy() SetLuminosity(0) @@ -662,31 +700,15 @@ desc = "An empty brazier." icon_state = "brazier_frame" luminosity = 0 + frame_type = /obj/structure/prop/brazier/frame/full + state = STATE_FUEL -/obj/structure/prop/brazier/frame/attackby(obj/item/hit_item, mob/user) - if(!istype(hit_item, /obj/item/stack/sheet/wood)) - return ..() - var/obj/item/stack/wooden_boards = hit_item - if(wooden_boards.amount < 5) - to_chat(user, SPAN_WARNING("Not enough wood!")) - return - wooden_boards.use(5) - user.visible_message(SPAN_NOTICE("[user] fills the brazier with wood.")) - new /obj/structure/prop/brazier/frame_woodened(loc) - qdel(src) - -/obj/structure/prop/brazier/frame_woodened +/obj/structure/prop/brazier/frame/full name = "empty full brazier" desc = "An empty brazier. Yet it's also full. What??? Use something hot to ignite it, like a welding tool." icon_state = "brazier_frame_filled" - luminosity = 0 - -/obj/structure/prop/brazier/frame_woodened/attackby(obj/item/hit_item, mob/user) - if(!hit_item.heat_source) - return ..() - user.visible_message(SPAN_NOTICE("[user] ignites the brazier with [hit_item].")) - new /obj/structure/prop/brazier(loc) - qdel(src) + frame_type = /obj/structure/prop/brazier + state = STATE_IGNITE /obj/structure/prop/brazier/torch name = "torch" @@ -695,25 +717,136 @@ density = FALSE luminosity = 5 -/obj/structure/prop/brazier/torch/frame +/obj/structure/prop/brazier/frame/full/torch name = "unlit torch" desc = "It's a torch, but it's not lit. Use something hot to ignite it, like a welding tool." icon_state = "torch_frame" - luminosity = 0 - -/obj/structure/prop/brazier/torch/frame/attackby(obj/item/hit_item, mob/user) - if(!hit_item.heat_source) - return ..() - user.visible_message(SPAN_NOTICE("[user] ignites the torch with [hit_item].")) - new /obj/structure/prop/brazier/torch(loc) - qdel(src) + frame_type = /obj/structure/prop/brazier/torch /obj/item/prop/torch_frame name = "unlit torch" icon = 'icons/obj/structures/structures.dmi' desc = "It's a torch, but it's not lit or placed down. Click on a wall to place it." icon_state = "torch_frame" - luminosity = 0 + +/obj/structure/prop/brazier/frame/full/campfire + name = "unlit campfire" + desc = "A circle of stones surrounding a pile of wood. If only you were to light it." + icon_state = "campfire" + frame_type = /obj/structure/prop/brazier/campfire + density = FALSE + +/obj/structure/prop/brazier/frame/full/campfire/smolder + name = "smoldering campfire" + desc = "A campfire that used to be lit, but was extinguished. You can still see the embers, and smoke rises from it." + state = STATE_FUEL + frame_type = /obj/structure/prop/brazier/frame/full/campfire + +/obj/structure/prop/brazier/campfire + name = "campfire" + desc = "A circle of stones surrounding a burning pile of wood. The fire is roaring and you can hear its crackle. You could probably stomp the fire out." + icon = 'icons/obj/structures/structures.dmi' + icon_state = "campfire_on" + density = FALSE + ///How many tiles the heating and sound goes + var/heating_range = 2 + /// time between sounds + var/time_to_sound = 20 + /// Time for it to burn through fuel + var/fuel_stage_time = 1 MINUTES + /// How much fuel it has + var/remaining_fuel = 5 //Maxes at 5, but burns one when made + /// If the fire can be manually put out + var/extinguishable = TRUE + /// Make no noise + var/quiet = FALSE + +/obj/structure/prop/brazier/campfire/Initialize() + . = ..() + START_PROCESSING(SSobj, src) + fuel_drain(TRUE) + +/obj/structure/prop/brazier/campfire/get_examine_text(mob/user) + . = ..() + switch(remaining_fuel) + if(4 to INFINITY) + . += "The fire is roaring." + if(2 to 3) + . += "The fire is burning warm." + if(-INFINITY to 1) + . += "The embers of the fire barely burns." + +/obj/structure/prop/brazier/campfire/process(delta_time) + if(!isturf(loc)) + return + + for(var/mob/living/carbon/human/mob in range(heating_range, src)) + if(mob.bodytemperature < T20C) + mob.bodytemperature += min(round(T20C - mob.bodytemperature)*0.7, 25) + mob.recalculate_move_delay = TRUE + + if(quiet) + return + time_to_sound -= delta_time + if(time_to_sound <= 0) + playsound(loc, 'sound/machines/firepit_ambience.ogg', 15, FALSE, heating_range) + time_to_sound = initial(time_to_sound) + +/obj/structure/prop/brazier/campfire/attack_hand(mob/user) + . = ..() + if(!extinguishable) + to_chat(user, SPAN_WARNING("You cannot extinguish [src].")) + return + to_chat(user, SPAN_NOTICE("You begin to extinguish [src].")) + while(remaining_fuel) + if(user.action_busy || !do_after(user, 3 SECONDS, INTERRUPT_MOVED, BUSY_ICON_BUILD)) + return + fuel_drain() + to_chat(user, SPAN_NOTICE("You continue to extinguish [src].")) + visible_message(SPAN_NOTICE("[user] extinguishes [src].")) + +/obj/structure/prop/brazier/campfire/attackby(obj/item/attacking_item, mob/user) + if(!istype(attacking_item, /obj/item/stack/sheet/wood)) + to_chat(SPAN_NOTICE("You cannot fuel [src] with [attacking_item].")) + return + var/obj/item/stack/sheet/wood/fuel = attacking_item + if(remaining_fuel >= initial(remaining_fuel)) + to_chat(user, SPAN_NOTICE("You cannot fuel [src] further.")) + if(!fuel.use(1)) + to_chat(SPAN_NOTICE("You do not have enough [attacking_item] to fuel [src].")) + visible_message(SPAN_NOTICE("[user] fuels [src] with [fuel].")) + remaining_fuel++ + +/obj/structure/prop/brazier/campfire/attack_alien(mob/living/carbon/xenomorph/xeno) + if(!extinguishable) + to_chat(xeno, SPAN_WARNING("You cannot extinguish [src].")) + return + to_chat(xeno, SPAN_NOTICE("You begin to extinguish [src].")) + while(remaining_fuel) + if(xeno.action_busy || !do_after(xeno, 1 SECONDS, INTERRUPT_MOVED, BUSY_ICON_HOSTILE)) + return + fuel_drain() + to_chat(xeno, SPAN_NOTICE("You continue to extinguish [src].")) + visible_message(SPAN_WARNING("[xeno] extinguishes [src]!")) + +/obj/structure/prop/brazier/campfire/proc/fuel_drain(looping) + remaining_fuel-- + if(!remaining_fuel) + new /obj/structure/prop/brazier/frame/full/campfire/smolder(loc) + qdel(src) + return + if(!looping || !fuel_stage_time) + return + addtimer(CALLBACK(src, PROC_REF(fuel_drain), TRUE), fuel_stage_time) + +/obj/structure/prop/brazier/campfire/Destroy() + SetLuminosity(0) + STOP_PROCESSING(SSobj, src) + return ..() + +#undef STATE_COMPLETE +#undef STATE_FUEL +#undef STATE_IGNITE //ICE COLONY PROPS //Thematically look to Blackmesa's Xen levels. Generic science-y props n' stuff. diff --git a/code/game/turfs/walls/walls.dm b/code/game/turfs/walls/walls.dm index 3599d5bb980b..2387a2086192 100644 --- a/code/game/turfs/walls/walls.dm +++ b/code/game/turfs/walls/walls.dm @@ -403,7 +403,7 @@ if(istype(attacking_item, /obj/item/prop/torch_frame)) to_chat(user, SPAN_NOTICE("You place the torch down on the wall.")) - new /obj/structure/prop/brazier/torch/frame(src) + new /obj/structure/prop/brazier/frame/full/torch(src) qdel(attacking_item) if(hull) diff --git a/icons/obj/structures/structures.dmi b/icons/obj/structures/structures.dmi index 21567936aad0905d18b2c3eb3b710a9172035ba9..ef63dee56e13a33cc8e21a0c1f57f6613387d2ae 100644 GIT binary patch literal 42273 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 E063EbqyPW_ literal 42628 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 diff --git a/maps/templates/clf_ert_station.dmm b/maps/templates/clf_ert_station.dmm index cf8bc8d46bf6..330f7b2a1819 100644 --- a/maps/templates/clf_ert_station.dmm +++ b/maps/templates/clf_ert_station.dmm @@ -46,7 +46,7 @@ /turf/closed/wall/rock/brown, /area/adminlevel/ert_station/clf_station) "az" = ( -/obj/structure/prop/brazier/frame_woodened, +/obj/structure/prop/brazier/frame/full, /turf/open/floor/plating{ dir = 1; icon_state = "asteroidwarning" @@ -1079,7 +1079,7 @@ /turf/open/auto_turf/strata_grass/layer1, /area/adminlevel/ert_station/clf_station) "yY" = ( -/obj/structure/prop/brazier/frame_woodened, +/obj/structure/prop/brazier/frame/full, /turf/open/floor/plating{ icon_state = "asteroidwarning" }, diff --git a/sound/machines/firepit_ambience.ogg b/sound/machines/firepit_ambience.ogg new file mode 100644 index 0000000000000000000000000000000000000000..bebbd13cc6dcd74ae3c1aaeabbb45f0dda575180 GIT binary patch literal 58377 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%0ABsa%hflRw0Kj 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 HbMFxV+~pCW literal 0 HcmV?d00001 From 28e175ac8b6266901100e2d4efa22d06f96471ba Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Fri, 4 Aug 2023 06:32:50 +0100 Subject: [PATCH 42/52] Automatic changelog for PR #4091 [ci skip] --- html/changelogs/AutoChangeLog-pr-4091.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4091.yml diff --git a/html/changelogs/AutoChangeLog-pr-4091.yml b/html/changelogs/AutoChangeLog-pr-4091.yml new file mode 100644 index 000000000000..a2b5f63f9e67 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4091.yml @@ -0,0 +1,5 @@ +author: "BeagleGaming1" +delete-after: True +changes: + - rscadd: "Adds campfires, craftable with wood" + - code_imp: "Modifies brazier construction code for easier use and mapping" \ No newline at end of file From bf132414b4ad13c8a8afdb163a3206e265a0d206 Mon Sep 17 00:00:00 2001 From: Smov1 <52742585+Smov1@users.noreply.github.com> Date: Fri, 4 Aug 2023 06:11:05 +0100 Subject: [PATCH 43/52] Adds a False Testemony charge to Marine Law (#4009) # About the pull request Adds a new Marine Law charge "False Testemony" to the JAS system. It was classified as a minor crime and 5 minutes brig timer. # Explain why it's good for the game Right now, Marine Law doesn't cover people purposely lying to MPs when they are asked about whether they saw who did what, etc. The closest thing we have is aiding and abetting but that usually only applies when someone actively attempts to help a suspect. If the person that lied to the MP is proved to have lied, Marine Law should cover this circumstance. # Testing Photographs and Procedure ![image](https://github.com/cmss13-devs/cmss13/assets/52742585/751642c0-88a7-4ec7-a553-1487b3650a33) # Changelog :cl: smov add: Adds a new Marine Law charge /:cl: --------- Co-authored-by: forest2001 <41653574+realforest2001@users.noreply.github.com> --- code/modules/law/laws/minor_crime.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/modules/law/laws/minor_crime.dm b/code/modules/law/laws/minor_crime.dm index 3fc257cf1cbf..651b9dd42d4f 100644 --- a/code/modules/law/laws/minor_crime.dm +++ b/code/modules/law/laws/minor_crime.dm @@ -50,3 +50,8 @@ desc = "To take items (or property) from another person or entity without their express permission, or to retain possession of items that have been taken without permission. This includes the removal of vendors from department areas without permission." special_punishment = "Return of Stolen Item" brig_time = 10 + +/datum/law/minor_law/false_testimony + name = "False Testimony" + desc = "To intentionally and willingly lie to an MP, or deputized officer, during a legal investigation with the intent to disrupt said investigation." + brig_time = 5 From 864bc8d51206fc24f4e661bc31990661904908f4 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Fri, 4 Aug 2023 06:46:26 +0100 Subject: [PATCH 44/52] Automatic changelog for PR #4009 [ci skip] --- html/changelogs/AutoChangeLog-pr-4009.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4009.yml diff --git a/html/changelogs/AutoChangeLog-pr-4009.yml b/html/changelogs/AutoChangeLog-pr-4009.yml new file mode 100644 index 000000000000..ab83978637f8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4009.yml @@ -0,0 +1,4 @@ +author: "smov" +delete-after: True +changes: + - rscadd: "Adds a new Marine Law charge" \ No newline at end of file From 34f1f2466732a8eb35a3e7aa8997cc29358696aa Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Fri, 4 Aug 2023 06:13:26 +0100 Subject: [PATCH 45/52] Admin Flag for Disposal mobs (#3814) # About the pull request Allows admins to toggle a flag as to whether mobs will fit inside disposals tubes. # Explain why it's good for the game Regarding disposal tubes, there are some situations where I can see it being fitting to the situation, and this will also allow a measured level of return for a feature we had to remove due to abuse. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: add: Added an admin toggle flag for fitting mobs into disposals. (Within reason - no queens...) add: The Crawler trait that allows mobs to enter vents will also allow them to climb into disposals regardless of above flag. add: Added a subtype of disposal that can't fit mobs, used for the delivery units. /:cl: --- code/__DEFINES/mode.dm | 1 + code/_globalvars/bitfields.dm | 1 + code/modules/admin/admin_verbs.dm | 1 + code/modules/admin/tabs/admin_tab.dm | 14 +++ code/modules/recycling/disposal.dm | 112 +++++++++++++-------- maps/map_files/USS_Almayer/USS_Almayer.dmm | 6 +- 6 files changed, 89 insertions(+), 46 deletions(-) diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm index 2895b3211fd3..32a292d0d8cc 100644 --- a/code/__DEFINES/mode.dm +++ b/code/__DEFINES/mode.dm @@ -70,6 +70,7 @@ #define MODE_LZ_PROTECTION (1<<7) /// Prevents the LZ from being mortared #define MODE_SHIPSIDE_SD (1<<8) /// Toggles whether Predators can big SD when not on the groundmap #define MODE_HARDCORE_PERMA (1<<9) /// Toggles Hardcore for all marines, meaning they instantly perma upon death +#define MODE_DISPOSABLE_MOBS (1<<10) // Toggles if mobs fit in disposals or not. Off by default. #define ROUNDSTATUS_FOG_DOWN 1 #define ROUNDSTATUS_PODDOORS_OPEN 2 diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index ef539b8459c7..4936609d892e 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -415,6 +415,7 @@ DEFINE_BITFIELD(toggleable_flags, list( "MODE_NO_COMBAT_CAS" = MODE_NO_COMBAT_CAS, "MODE_LZ_PROTECTION" = MODE_LZ_PROTECTION, "MODE_SHIPSIDE_SD" = MODE_SHIPSIDE_SD, + "MODE_DISPOSABLE_MOBS" = MODE_DISPOSABLE_MOBS, )) DEFINE_BITFIELD(state, list( diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 20ff65ed144e..de884cfebe61 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -121,6 +121,7 @@ var/list/admin_verbs_minor_event = list( /client/proc/toggle_sniper_upgrade, /client/proc/toggle_attack_dead, /client/proc/toggle_strip_drag, + /client/proc/toggle_disposal_mobs, /client/proc/toggle_uniform_strip, /client/proc/toggle_strong_defibs, /client/proc/toggle_blood_optimization, diff --git a/code/modules/admin/tabs/admin_tab.dm b/code/modules/admin/tabs/admin_tab.dm index a2f3bd42df5f..6dc08c63e5de 100644 --- a/code/modules/admin/tabs/admin_tab.dm +++ b/code/modules/admin/tabs/admin_tab.dm @@ -708,6 +708,20 @@ SSticker.mode.toggleable_flags ^= MODE_NO_ATTACK_DEAD message_admins("[src] has [MODE_HAS_TOGGLEABLE_FLAG(MODE_NO_ATTACK_DEAD) ? "prevented dead mobs from being" : "allowed dead mobs to be"] attacked.") +/client/proc/toggle_disposal_mobs() + set name = "Toggle Disposable Mobs" + set category = "Admin.Flags" + + if(!admin_holder || !check_rights(R_EVENT, FALSE)) + return + + if(!SSticker.mode) + to_chat(usr, SPAN_WARNING("A mode hasn't been selected yet!")) + return + + SSticker.mode.toggleable_flags ^= MODE_DISPOSABLE_MOBS + message_admins("[src] has [MODE_HAS_TOGGLEABLE_FLAG(MODE_DISPOSABLE_MOBS) ? "allowed mobs to fit" : "prevented mobs fitting"] inside disposals.") + /client/proc/toggle_strip_drag() set name = "Toggle Strip/Drag Dead" set category = "Admin.Flags" diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 8a5a6ec960ec..2c7401ac278c 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -37,6 +37,13 @@ active_power_usage = 3500 idle_power_usage = 100 var/disposal_pressure = 0 + ///Whether the disposals tube is too narrow for a mob to fit into. + var/narrow_tube = FALSE + +/obj/structure/machinery/disposal/delivery + name = "delivery chute" + desc = "A pneumatic delivery unit connecting two locations. It's rather narrow." + narrow_tube = TRUE /obj/structure/machinery/disposal/broken name = "broken disposal unit" @@ -128,24 +135,42 @@ update() return - var/obj/item/grab/G = I - if(istype(G)) //Handle grabbed mob - if(ismob(G.grabbed_thing)) - to_chat(user, SPAN_WARNING("You can't fit that in there!")) - return - /*&& user.grab_level >= GRAB_AGGRESSIVE) - var/mob/GM = G.grabbed_thing - user.visible_message(SPAN_WARNING("[user] starts putting [GM] into [src]."), - SPAN_WARNING("You start putting [GM] into [src].")) - if(do_after(user, 20, INTERRUPT_ALL, BUSY_ICON_HOSTILE)) - GM.forceMove(src) - user.visible_message(SPAN_WARNING("[user] puts [GM] into [src]."), - SPAN_WARNING("[user] puts [GM] into [src].")) - user.attack_log += text("\[[time_stamp()]\] Has placed [GM] ([GM.ckey]) in disposals.") - GM.attack_log += text("\[[time_stamp()]\] Has been placed in disposals by [user] ([user.ckey])") - msg_admin_attack("[user] ([user.ckey]) placed [GM] ([GM.ckey]) in a disposals unit in [get_area(user)] ([user.loc.x],[user.loc.y],[user.loc.z]).", user.loc.x, user.loc.y, user.loc.z) - flush()*/ - return + var/obj/item/grab/grab_effect = I + if(istype(grab_effect)) //Handle grabbed mob + if(ismob(grab_effect.grabbed_thing)) + var/mob/grabbed_mob = grab_effect.grabbed_thing + if((!MODE_HAS_TOGGLEABLE_FLAG(MODE_DISPOSABLE_MOBS) && !HAS_TRAIT(grabbed_mob, TRAIT_CRAWLER)) || narrow_tube || grabbed_mob.mob_size >= MOB_SIZE_BIG) + to_chat(user, SPAN_WARNING("You can't fit that in there!")) + return FALSE + var/max_grab_size = user.mob_size + /// Amazing what you can do with a bit of dexterity. + if(HAS_TRAIT(user, TRAIT_DEXTROUS)) + max_grab_size++ + /// Strong mobs can lift above their own weight. + if(HAS_TRAIT(user, TRAIT_SUPER_STRONG))//NB; this will mean Yautja can bodily lift MOB_SIZE_XENO(3) and Synths can lift MOB_SIZE_XENO_SMALL(2) + max_grab_size++ + if(grabbed_mob.mob_size > max_grab_size || !(grabbed_mob.status_flags & CANPUSH)) + to_chat(user, SPAN_WARNING("You don't have the strength to move [grabbed_mob]!")) + return FALSE//can't tighten your grip on mobs bigger than you and mobs you can't push. + if(!user.grab_level >= GRAB_AGGRESSIVE) + to_chat(user, SPAN_WARNING("You need a better grip to force [grabbed_mob] in there!")) + return FALSE + user.visible_message(SPAN_WARNING("[user] starts putting [grabbed_mob] into [src]."), + SPAN_WARNING("You start putting [grabbed_mob] into [src].")) + if(!do_after(user, 2 SECONDS, INTERRUPT_ALL, BUSY_ICON_HOSTILE)) + user.visible_message(SPAN_WARNING("[user] stops putting [grabbed_mob] into [src]."), + SPAN_WARNING("You stop putting [grabbed_mob] into [src].")) + return FALSE + + grabbed_mob.forceMove(src) + user.visible_message(SPAN_WARNING("[user] puts [grabbed_mob] into [src]."), + SPAN_WARNING("[user] puts [grabbed_mob] into [src].")) + user.attack_log += text("\[[time_stamp()]\] Has placed [key_name(grabbed_mob)] in disposals.") + grabbed_mob.attack_log += text("\[[time_stamp()]\] Has been placed in disposals by [user] ([user.ckey])") + msg_admin_attack("[user] ([user.ckey]) placed [key_name(grabbed_mob)] in a disposals unit in [get_area(user)] ([user.loc.x],[user.loc.y],[user.loc.z]).", user.loc.x, user.loc.y, user.loc.z) + flush(TRUE)//Forcibly flushing someone if forced in by another player. + return TRUE + return FALSE if(isrobot(user)) return @@ -161,51 +186,50 @@ ///Mouse drop another mob or self /obj/structure/machinery/disposal/MouseDrop_T(mob/target, mob/user) - return -/* - if(!istype(target) || target.anchored || target.buckled || get_dist(user, src) > 1 || get_dist(user, target) > 1 || user.is_mob_incapacitated(TRUE) || isRemoteControlling(user) || target.mob_size >= MOB_SIZE_BIG) - return - if(!(ishuman(target)) || !(ishuman(user))) return - if(isanimal(user) && target != user) return //Animals cannot put mobs other than themselves into disposal + if((!MODE_HAS_TOGGLEABLE_FLAG(MODE_DISPOSABLE_MOBS) && !HAS_TRAIT(user, TRAIT_CRAWLER)) || narrow_tube) + to_chat(user, SPAN_WARNING("Looks a little bit too tight in there!")) + return FALSE + + if(target != user) + to_chat(user, SPAN_WARNING("You need a better grip on [target] to force them into [src]!")) + return FALSE //Need a firm grip to put someone else in there. + + if(!istype(target) || target.anchored || target.buckled || get_dist(user, src) > 1 || user.is_mob_incapacitated(TRUE) || isRemoteControlling(user) || target.mob_size >= MOB_SIZE_BIG) + to_chat(user, SPAN_WARNING("You cannot get into the [src]!")) + return FALSE add_fingerprint(user) var/target_loc = target.loc if(target == user) visible_message(SPAN_NOTICE("[user] starts climbing into the disposal.")) - else - if(user.is_mob_restrained()) return //can't stuff someone other than you if restrained. - visible_message(SPAN_WARNING("[user] starts stuffing [target] into the disposal.")) + if(!do_after(user, 40, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) - return + return FALSE if(target_loc != target.loc) - return + return FALSE + if(user.is_mob_incapacitated(TRUE)) + to_chat(user, SPAN_WARNING("You cannot do this while incapacitated!")) + return FALSE + if(target == user) - if(user.is_mob_incapacitated(TRUE)) return user.visible_message(SPAN_NOTICE("[user] climbs into [src]."), SPAN_NOTICE("You climb into [src].")) - else - if(user.is_mob_incapacitated()) return - user.visible_message(SPAN_DANGER("[user] stuffs [target] into [src]!"), - SPAN_WARNING("You stuff [target] into [src]!")) - - user.attack_log += text("\[[time_stamp()]\] Has placed [target.name] ([target.ckey]) in disposals.") - target.attack_log += text("\[[time_stamp()]\] Has been placed in disposals by [user.name] ([user.ckey])") - msg_admin_attack("[user] ([user.ckey]) placed [target] ([target.ckey]) in a disposals unit in [get_area(user)] ([user.loc.x],[user.loc.y],[user.loc.z]).", user.loc.x, user.loc.y, user.loc.z) + user.attack_log += text("\[[time_stamp()]\] [key_name(user)] climbed into a disposals bin!") target.forceMove(src) - flush() - update()*/ + flush()//Not forcing flush if climbing in by self. + update() ///Attempt to move while inside /obj/structure/machinery/disposal/relaymove(mob/user) if(user.stat || user.stunned || user.knocked_down || flushing) - return + return FALSE if(user.loc == src) go_out(user) + return TRUE ///Leave the disposal /obj/structure/machinery/disposal/proc/go_out(mob/user) - if(user.client) user.client.eye = user.client.mob user.client.perspective = MOB_PERSPECTIVE @@ -364,7 +388,9 @@ return ///Perform a flush -/obj/structure/machinery/disposal/proc/flush() +/obj/structure/machinery/disposal/proc/flush(forced = FALSE) + if((disposal_pressure < SEND_PRESSURE) && !forced) + return FALSE flushing = TRUE flick("[icon_state]-flush", src) diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 741b511792b1..ce4a853acc62 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -5011,7 +5011,7 @@ /obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/structure/machinery/disposal{ +/obj/structure/machinery/disposal/delivery{ density = 0; desc = "A pneumatic delivery unit. Sends items to the requisitions."; icon_state = "delivery_engi"; @@ -76155,12 +76155,12 @@ /obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/structure/machinery/disposal{ +/obj/structure/machinery/disposal/delivery{ density = 0; desc = "A pneumatic delivery unit. Sends items to the requisitions."; icon_state = "delivery_med"; name = "Requisitions Delivery Unit"; - pixel_y = 29 + pixel_y = 28 }, /turf/open/floor/almayer{ icon_state = "mono" From 8d881703b07cd6fea7df282d7381d43bc3f68ed2 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Fri, 4 Aug 2023 06:59:39 +0100 Subject: [PATCH 46/52] Automatic changelog for PR #3814 [ci skip] --- html/changelogs/AutoChangeLog-pr-3814.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3814.yml diff --git a/html/changelogs/AutoChangeLog-pr-3814.yml b/html/changelogs/AutoChangeLog-pr-3814.yml new file mode 100644 index 000000000000..38c4ee962b5f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3814.yml @@ -0,0 +1,6 @@ +author: "realforest2001" +delete-after: True +changes: + - rscadd: "Added an admin toggle flag for fitting mobs into disposals. (Within reason - no queens...)" + - rscadd: "The Crawler trait that allows mobs to enter vents will also allow them to climb into disposals regardless of above flag." + - rscadd: "Added a subtype of disposal that can't fit mobs, used for the delivery units." \ No newline at end of file From 9dc622aa8a0928f136f439d07f6b4967901b4db5 Mon Sep 17 00:00:00 2001 From: Steelpoint <6595389+Steelpoint@users.noreply.github.com> Date: Fri, 4 Aug 2023 13:14:22 +0800 Subject: [PATCH 47/52] Nightmare Insert: Trijent Dam - Crashed UPP Survivors (#3845) # About the pull request **Starring** _The UPP 173rd Airborne Reconnaissance Company, 2nd Platoon_ ![Screenshot 2023-07-09 16 10 32](https://github.com/cmss13-devs/cmss13/assets/6595389/76159e01-6d7f-44f7-b404-e30c54ecc9c8) This PR adds a new nightmare insert to Trijent Dam that sees a small group of UPP survivors, post a crash landing in their Mi-220 Assault Gunship "Fulcrum", attempting to survive the xenomorph outbreak. Whilst successful in holding their ground despite their initial casualties, the group are now running low on ammunition and their equipment is starting to falter. Rescue is coming, but from whom? The Americans? Is the enemy of my enemy really our friend? --------------- Technically speaking the PR will see the deployment of the following survivor roles * 4 Riflemen * 1 Non-Combat Synthetic * 2 Sappers * 2 Medics * 1 Specialist * 1 Squad Leader ![Screenshot 2023-07-10 01 54 11](https://github.com/cmss13-devs/cmss13/assets/6595389/07ef824b-ec62-499c-b7fd-80e935140b73) Squad Patch The UPP are in dire straits and this is represented in game by them being spawned with a mish mash of armour and items. Only the Specialist and SL are guaranteed to spawn with full armour, everyone else is likely getting clothing or webbing. If a soldier spawns with webbing they will be given a flashlight in their suit storage slot. Weapon's wise it is a even 33% chance for each role to either get a UPP Pulse Rifle, Pulse Carbine or a UPP Shotgun, with each only getting two spare mags/3 shell handfuls. The Specialist is guaranteed to get the UPP Pulse Rifle/Flamer. The mini-gun in the DS is a prop and non-functional. The area is littered with mostly props or junk, the 'HEAP' ammo mags are all empty. There is a single ammo box of soft-point ammo set to around 120 rounds. Every UPP member speaks Russian by default, with Chinese and German as their secondary languages. Only the SL and Synth can speak English. The Synthetic has lesser equipment compared to its ERT counterpart and uses survivor synth skills. It has similar combat restrictions to its USCM counterpart. The lore has been run past the lore channel and has been given a thumbs up. ----------- **Other Additions** - External webbing can be clipped to UPP uniforms, which is used to facilitate some of the cosmetic options for the survivors. - New UPP logo has been added for documents and faxes. Official UPP documents now can look more official (see images for example). - UPP synthetics will now speak Russian as their first language instead of English ----------- The PR (as far as I can tell) works and runs properly. I mostly have a few other tasks of moderate difficulty to finish. To-Do - [x] Add the UPP synth - [x] Figure out how to get the UPP to spawn with random UPP names - [x] Sprite the dropships side and rear wings - [x] Expand the in-game lore and descriptions - [x] Get spawn chances set to correct odds (20% ?) - [ ] BALANCE # Explain why it's good for the game I believe that this would add further variety to the game in two respects. Firstly, the UPP are a somewhat under-used aspect that generally only appear during events or as hostile ERT. Technically in-universe the USCM and UPP are in a cold war and are technically not at war, I believe that their introduction as a uncommon survivor spawn may provide some interesting opportunities for roleplay to occur, either from actual encounters between UPP and USCM personnel, or from the USCM finding the last stand of the UPP. Secondly I think more variety in survivor roles is a boon for the game, and the opportunity to play as a UPP soldier in a non-ERT setting may present more opportunities for UPP roleplay to occur. # Testing Photographs and Procedure
Screenshots & Videos ![2023-07-19 15 51 28](https://github.com/cmss13-devs/cmss13/assets/6595389/ffbce5b8-e593-4f1e-b1c0-0035c56807fd) In game map as it stands ![Screenshot 2023-07-09 16 10 32](https://github.com/cmss13-devs/cmss13/assets/6595389/76159e01-6d7f-44f7-b404-e30c54ecc9c8) Overview of the UPP as they stand ![Screenshot 2023-07-10 01 54 11](https://github.com/cmss13-devs/cmss13/assets/6595389/07ef824b-ec62-499c-b7fd-80e935140b73) Squad Patch ![Screenshot 2023-07-11 12 09 54](https://github.com/cmss13-devs/cmss13/assets/6595389/572ec5b1-55eb-4e4b-95d2-9957dd6ebb02) Your Orders + UPP logo
# Changelog :cl: add: A team of UPP survivors may spawn on Trijent Dam. mapadd: A new nightmare insert for Trijent Dam has been added, featuring a crashed UPP dropship. /:cl: --------- Co-authored-by: Steelpoint --- code/__DEFINES/language.dm | 2 + code/datums/skills.dm | 76 + .../effects/landmarks/survivor_spawner.dm | 27 +- code/game/objects/items/storage/backpack.dm | 4 + code/game/objects/items/storage/belt.dm | 13 + code/game/objects/items/storage/pouch.dm | 6 + code/modules/asset_cache/asset_list_items.dm | 1 + code/modules/clothing/under/marine_uniform.dm | 2 +- code/modules/clothing/under/ties.dm | 5 + .../modules/gear_presets/_select_equipment.dm | 50 + code/modules/gear_presets/survivors.dm | 156 + code/modules/gear_presets/synths.dm | 48 +- code/modules/gear_presets/upp.dm | 2 +- code/modules/paperwork/paper.dm | 10 + html/images/upplogo.png | Bin 0 -> 897 bytes icons/obj/items/clothing/ties.dmi | Bin 18979 -> 19394 bytes icons/turf/ert_shuttle.dmi | Bin 9813 -> 12039 bytes maps/Nightmare/maps/DesertDam/nightmare.json | 13 +- maps/Nightmare/maps/DesertDam/scenario.json | 10 +- maps/map_files/BigRed/BigRed.dmm | 16 +- maps/map_files/DesertDam/Desert_Dam.dmm | 11 +- .../standalone/crashlanding-upp-bar.dmm | 4544 +++++++++++++++++ 22 files changed, 4969 insertions(+), 27 deletions(-) create mode 100644 html/images/upplogo.png create mode 100644 maps/map_files/DesertDam/standalone/crashlanding-upp-bar.dmm diff --git a/code/__DEFINES/language.dm b/code/__DEFINES/language.dm index 557f8e6a3f68..e4c4041a3dda 100644 --- a/code/__DEFINES/language.dm +++ b/code/__DEFINES/language.dm @@ -20,6 +20,8 @@ #define ALL_SYNTH_LANGUAGES list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE, LANGUAGE_CHINESE, LANGUAGE_RUSSIAN, LANGUAGE_GERMAN, LANGUAGE_SPANISH, LANGUAGE_YAUTJA, LANGUAGE_XENOMORPH) +#define ALL_SYNTH_LANGUAGES_UPP list(LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH, LANGUAGE_JAPANESE, LANGUAGE_CHINESE, LANGUAGE_GERMAN, LANGUAGE_SPANISH, LANGUAGE_YAUTJA, LANGUAGE_XENOMORPH) + //Chinese language sound bitflags //initial flags diff --git a/code/datums/skills.dm b/code/datums/skills.dm index b70b2bb9b7b0..7d58a64d9d13 100644 --- a/code/datums/skills.dm +++ b/code/datums/skills.dm @@ -1594,6 +1594,82 @@ COLONIAL MARSHALS SKILL_INTEL = SKILL_INTEL_EXPERT, SKILL_DOMESTIC = SKILL_DOMESTIC_MASTER ) + +/datum/skills/military/survivor/upp_private + name = "UPP Private" + skills = list( + SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, + SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, + SKILL_CQC = SKILL_CQC_TRAINED, + SKILL_FIREARMS = SKILL_FIREARMS_TRAINED, + SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, + SKILL_VEHICLE = SKILL_VEHICLE_DEFAULT, + SKILL_JTAC = SKILL_JTAC_TRAINED, + ) + +/datum/skills/military/survivor/upp_sapper + name = "UPP Sapper" + skills = list( + SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, + SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, + SKILL_CQC = SKILL_CQC_TRAINED, + SKILL_FIREARMS = SKILL_FIREARMS_TRAINED, + SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, + SKILL_VEHICLE = SKILL_VEHICLE_DEFAULT, + SKILL_JTAC = SKILL_JTAC_TRAINED, + ) + +/datum/skills/military/survivor/upp_medic + name = "UPP Medic" + skills = list( + SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR, + SKILL_SURGERY = SKILL_SURGERY_TRAINED, + SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, + SKILL_FIREARMS = SKILL_FIREARMS_TRAINED, + SKILL_CQC = SKILL_CQC_TRAINED, + SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, + SKILL_VEHICLE = SKILL_VEHICLE_DEFAULT, + SKILL_JTAC = SKILL_JTAC_TRAINED, + ) + +/datum/skills/military/survivor/upp_spec + name = "UPP Specialist" + skills = list( + SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, + SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, + SKILL_CQC = SKILL_CQC_TRAINED, + SKILL_LEADERSHIP = SKILL_LEAD_TRAINED, + SKILL_JTAC = SKILL_JTAC_TRAINED, + SKILL_SPEC_WEAPONS = SKILL_SPEC_UPP, + SKILL_FIREARMS = SKILL_FIREARMS_TRAINED, + SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, + SKILL_CQC = SKILL_CQC_TRAINED, + SKILL_VEHICLE = SKILL_VEHICLE_DEFAULT, + ) + +/datum/skills/military/survivor/upp_sl + name = "UPP Squad Leader" + skills = list( + SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, + SKILL_FIREARMS = SKILL_FIREARMS_TRAINED, + SKILL_CQC = SKILL_CQC_TRAINED, + SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, + SKILL_LEADERSHIP = SKILL_LEAD_EXPERT, + SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, + SKILL_VEHICLE = SKILL_VEHICLE_DEFAULT, + SKILL_JTAC = SKILL_JTAC_EXPERT, + ) + /* --------------------- SPEC-OPS diff --git a/code/game/objects/effects/landmarks/survivor_spawner.dm b/code/game/objects/effects/landmarks/survivor_spawner.dm index eba13a41c89d..d19bbbe49516 100644 --- a/code/game/objects/effects/landmarks/survivor_spawner.dm +++ b/code/game/objects/effects/landmarks/survivor_spawner.dm @@ -117,7 +117,6 @@ spawn_priority = SPAWN_PRIORITY_VERY_HIGH - //Military Survivors// /obj/effect/landmark/survivor_spawner/lv522_forecon_tech @@ -139,3 +138,29 @@ /obj/effect/landmark/survivor_spawner/lv522_forecon_squad_leader equipment = /datum/equipment_preset/survivor/forecon/squad_leader spawn_priority = SPAWN_PRIORITY_HIGH + +/obj/effect/landmark/survivor_spawner/upp/soldier + equipment = /datum/equipment_preset/survivor/upp/soldier + synth_equipment = /datum/equipment_preset/synth/survivor/upp + spawn_priority = SPAWN_PRIORITY_MEDIUM + +/obj/effect/landmark/survivor_spawner/upp_sapper + equipment = /datum/equipment_preset/survivor/upp/sapper + synth_equipment = /datum/equipment_preset/synth/survivor/upp + spawn_priority = SPAWN_PRIORITY_MEDIUM + +/obj/effect/landmark/survivor_spawner/upp_medic + equipment = /datum/equipment_preset/survivor/upp/medic + synth_equipment = /datum/equipment_preset/synth/survivor/upp + spawn_priority = SPAWN_PRIORITY_HIGH + +/obj/effect/landmark/survivor_spawner/upp_specialist + equipment = /datum/equipment_preset/survivor/upp/specialist + synth_equipment = /datum/equipment_preset/synth/survivor/upp + spawn_priority = SPAWN_PRIORITY_HIGH + +/obj/effect/landmark/survivor_spawner/squad_leader + equipment = /datum/equipment_preset/survivor/upp/squad_leader + synth_equipment = /datum/equipment_preset/synth/survivor/upp + spawn_priority = SPAWN_PRIORITY_VERY_HIGH + diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 40bd143fd074..3bf3656f4bd2 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -437,6 +437,10 @@ xeno_icon_state = "medicpack" xeno_types = list(/mob/living/carbon/xenomorph/runner, /mob/living/carbon/xenomorph/praetorian, /mob/living/carbon/xenomorph/drone, /mob/living/carbon/xenomorph/warrior, /mob/living/carbon/xenomorph/defender, /mob/living/carbon/xenomorph/sentinel, /mob/living/carbon/xenomorph/spitter) +/obj/item/storage/backpack/marine/medic/upp + name = "\improper UPP corpsman backpack" + desc = "Uncommon issue backpack worn by UPP medics from isolated sectors. You can swear you can see a faded USCM symbol." + /obj/item/storage/backpack/marine/tech name = "\improper USCM technician backpack" desc = "A standard-issue backpack worn by USCM technicians." diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 290460da758f..d12e5b2808a1 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -283,6 +283,19 @@ new /obj/item/storage/pill_bottle/tramadol(src) new /obj/item/storage/pill_bottle/peridaxon(src) +/obj/item/storage/belt/medical/lifesaver/upp/partial/fill_preset_inventory() + new /obj/item/stack/medical/advanced/bruise_pack(src) + new /obj/item/stack/medical/advanced/bruise_pack(src) + new /obj/item/stack/medical/advanced/ointment(src) + new /obj/item/stack/medical/advanced/ointment(src) + new /obj/item/stack/medical/splint(src) + new /obj/item/stack/medical/splint(src) + new /obj/item/reagent_container/hypospray/autoinjector/oxycodone(src) + new /obj/item/storage/pill_bottle/bicaridine(src) + new /obj/item/storage/pill_bottle/kelotane(src) + new /obj/item/storage/pill_bottle/inaprovaline(src) + new /obj/item/storage/pill_bottle/tramadol(src) + /obj/item/storage/belt/security name = "\improper M276 pattern security rig" desc = "The M276 is the standard load-bearing equipment of the USCM. It consists of a modular belt with various clips. This configuration is commonly seen among USCM Military Police and peacekeepers, though it can hold some light munitions." diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm index dc3ee0ba1506..6397c33b76c1 100644 --- a/code/game/objects/items/storage/pouch.dm +++ b/code/game/objects/items/storage/pouch.dm @@ -1211,6 +1211,12 @@ new /obj/item/explosive/plastic(src) new /obj/item/explosive/plastic(src) +/obj/item/storage/pouch/tools/uppsynth/fill_preset_inventory() + new /obj/item/tool/crowbar(src) + new /obj/item/tool/wirecutters(src) + new /obj/item/tool/weldingtool(src) + new /obj/item/tool/wrench(src) + /obj/item/storage/pouch/sling name = "sling strap" desc = "Keeps a single item attached to a strap." diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index e00f4a2d1263..f5f1122fa795 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -143,6 +143,7 @@ assets = list( "wylogo.png" = 'html/images/wylogo.png', "uscmlogo.png" = 'html/images/uscmlogo.png', + "upplogo.png" = 'html/images/upplogo.png', "faxwylogo.png" = 'html/images/faxwylogo.png', "faxbackground.jpg" = 'html/images/faxbackground.jpg', ) diff --git a/code/modules/clothing/under/marine_uniform.dm b/code/modules/clothing/under/marine_uniform.dm index eca050cc4b88..01598eeb2785 100644 --- a/code/modules/clothing/under/marine_uniform.dm +++ b/code/modules/clothing/under/marine_uniform.dm @@ -527,7 +527,7 @@ min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROT has_sensor = UNIFORM_HAS_SENSORS sensor_faction = FACTION_UPP - suit_restricted = list(/obj/item/clothing/suit/storage/marine/faction/UPP, /obj/item/clothing/suit/gimmick/jason, /obj/item/clothing/suit/storage/snow_suit/soviet, /obj/item/clothing/suit/storage/snow_suit/survivor) + suit_restricted = list(/obj/item/clothing/suit/storage/marine/faction/UPP, /obj/item/clothing/suit/gimmick/jason, /obj/item/clothing/suit/storage/snow_suit/soviet, /obj/item/clothing/suit/storage/snow_suit/survivor, /obj/item/clothing/suit/storage/webbing) flags_jumpsuit = UNIFORM_SLEEVE_ROLLABLE /obj/item/clothing/under/marine/veteran/UPP/medic diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index d42e7d17bfd2..329e2055778e 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -359,6 +359,11 @@ desc = "A fire-resistant shoulder patch, worn by the men and women of the USS Hanyut, USCM FORECON." icon_state = "forecon_patch" +/obj/item/clothing/accessory/patch/upp + name = "UPP Airborne Reconnaissance patch" + desc = "A fire-resistant shoulder patch, worn by the men and women of the 173rd Airborne Reconnaissance Platoon." + icon_state = "upppatch" + /obj/item/clothing/accessory/poncho name = "USCM Poncho" desc = "The standard USCM poncho has variations for every climate. Custom fitted to be attached to standard USCM armor variants it is comfortable, warming or cooling as needed, and well-fit. A marine couldn't ask for more. Affectionately referred to as a \"woobie\"." diff --git a/code/modules/gear_presets/_select_equipment.dm b/code/modules/gear_presets/_select_equipment.dm index fc70e5fc90bb..94a628553252 100644 --- a/code/modules/gear_presets/_select_equipment.dm +++ b/code/modules/gear_presets/_select_equipment.dm @@ -952,3 +952,53 @@ var/list/rebel_rifles = list( list("Shoulder Holster", 10, /obj/item/clothing/accessory/storage/holster, null, VENDOR_ITEM_REGULAR), list("Webbing", 10, /obj/item/clothing/accessory/storage/webbing, null, VENDOR_ITEM_REGULAR) ) + +/datum/equipment_preset/proc/add_upp_weapon(mob/living/carbon/human/new_human) + var/random_gun = rand(1,3) + switch(random_gun) + if(1) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71(new_human), WEAR_L_HAND) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK) + if(2) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/carbine(new_human), WEAR_L_HAND) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK) + if(3) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/type23(new_human), WEAR_L_HAND) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/heavy/buckshot(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/heavy/buckshot(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/heavy/buckshot(new_human), WEAR_IN_BACK) + +/datum/equipment_preset/proc/spawn_random_upp_headgear(mob/living/carbon/human/new_human) + var/random_hat = rand(1,10) + switch(random_hat) + if (1, 2) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/UPP(new_human), WEAR_HEAD) + if (3, 4, 5) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap(new_human), WEAR_HEAD) + if (6, 7) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret(new_human), WEAR_HEAD) + if (8, 9) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/ushanka(new_human), WEAR_HEAD) + +/datum/equipment_preset/proc/spawn_random_upp_armor(mob/living/carbon/human/new_human) + var/random_gear = rand(1, 4) + switch(random_gear) + if (1, 2, 3) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP (new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/webbing(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/device/flashlight(new_human), WEAR_J_STORE) + if (4) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP (new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar(new_human), WEAR_IN_JACKET) + +/datum/equipment_preset/proc/spawn_random_upp_belt(mob/living/carbon/human/new_human) + var/random_gun = rand(1, 3) + switch(random_gun) + if (1, 2) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/NY(new_human), WEAR_WAIST) + if (3) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/marine/upp(new_human), WEAR_WAIST) diff --git a/code/modules/gear_presets/survivors.dm b/code/modules/gear_presets/survivors.dm index 8c6a118d24d4..9ab5e7c8d22c 100644 --- a/code/modules/gear_presets/survivors.dm +++ b/code/modules/gear_presets/survivors.dm @@ -1562,3 +1562,159 @@ new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/med_small_stack(new_human), WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/m1911(new_human), WEAR_WAIST) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap(new_human), WEAR_HEAD) + + ..() + +/datum/equipment_preset/survivor/upp + name = "UPP Soldier" + paygrade = "UE1" + origin_override = ORIGIN_UPP + rank = JOB_SURVIVOR + skills = /datum/skills/military/survivor/upp_private + languages = list(LANGUAGE_RUSSIAN, LANGUAGE_GERMAN, LANGUAGE_CHINESE) + faction = FACTION_UPP + faction_group = list(FACTION_UPP, FACTION_SURVIVOR) + role_comm_title = "UPP 173RD RECON" + idtype = /obj/item/card/id/dogtag + flags = EQUIPMENT_PRESET_EXTRA + uses_special_name = TRUE + access = list( + ACCESS_CIVILIAN_PUBLIC, + ) + +/datum/equipment_preset/survivor/upp/load_name(mob/living/carbon/human/new_human, randomise) + var/random_name = capitalize(pick(new_human.gender == MALE ? first_names_male_upp : first_names_female_upp)) + " " + capitalize(pick(last_names_upp)) + new_human.change_real_name(new_human, random_name) + +/datum/equipment_preset/survivor/upp/load_gear(mob/living/carbon/human/new_human) + var/obj/item/clothing/under/marine/veteran/UPP/uniform = new() + var/random_number = rand(1,2) + switch(random_number) + if(1) + uniform.roll_suit_jacket(new_human) + if(2) + uniform.roll_suit_sleeves(new_human) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp (new_human), WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp_knife(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/flare(new_human), WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/med_small_stack(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/radio(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) + +/datum/equipment_preset/survivor/upp/soldier + name = "Survivor - UPP Soldier" + paygrade = "UE2" + assignment = "UPP Soldier" + skills = /datum/skills/military/survivor/upp_private + +/datum/equipment_preset/survivor/upp/soldier/load_gear(mob/living/carbon/human/new_human) + var/obj/item/clothing/under/marine/veteran/UPP/uniform = new() + var/random_number = rand(1,2) + switch(random_number) + if(1) + uniform.roll_suit_jacket(new_human) + if(2) + uniform.roll_suit_sleeves(new_human) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) + add_upp_weapon(new_human) + spawn_random_upp_headgear(new_human) + spawn_random_upp_armor(new_human) + spawn_random_upp_belt(new_human) + + ..() + +/datum/equipment_preset/survivor/upp/sapper + name = "Survivor - UPP Sapper" + paygrade = "UE3S" + assignment = "UPP Sapper" + skills = /datum/skills/military/survivor/upp_sapper + +/datum/equipment_preset/survivor/upp/sapper/load_gear(mob/living/carbon/human/new_human) + + var/obj/item/clothing/under/marine/veteran/UPP/engi/uniform = new() + var/R = rand(1,2) + switch(R) + if(1) + uniform.roll_suit_jacket(new_human) + if(2) + uniform.roll_suit_sleeves(new_human) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/insulated(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(new_human), WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) + spawn_random_upp_armor(new_human) + add_upp_weapon(new_human) + spawn_random_upp_headgear(new_human) + + ..() + +/datum/equipment_preset/survivor/upp/medic + name = "Survivor - UPP Medic" + paygrade = "UE3M" + assignment = "UPP Medic" + skills = /datum/skills/military/survivor/upp_medic + +/datum/equipment_preset/survivor/upp/medic/load_gear(mob/living/carbon/human/new_human) + var/obj/item/clothing/under/marine/veteran/UPP/medic/uniform = new() + var/random_number = rand(1,2) + switch(random_number) + if(1) + uniform.roll_suit_jacket(new_human) + if(2) + uniform.roll_suit_sleeves(new_human) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + new_human.equip_to_slot_or_del(new/obj/item/clothing/glasses/hud/health(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/upp/partial(new_human), WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/medic/upp(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/radio(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer(new_human), WEAR_IN_BACK) + spawn_random_upp_armor(new_human) + add_upp_weapon(new_human) + spawn_random_upp_headgear(new_human) + + ..() + +/datum/equipment_preset/survivor/upp/specialist + name = "Survivor - UPP Specialist" + paygrade = "UE4" + assignment = "UPP Specialist" + skills = /datum/skills/military/survivor/upp_spec + +/datum/equipment_preset/survivor/upp/specialist/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/UPP/heavy(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP (new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/heavy (new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer(new_human), WEAR_L_HAND) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/PK9(new_human), WEAR_WAIST) + + ..() + +/datum/equipment_preset/survivor/upp/squad_leader + name = "Survivor - UPP Squad Leader" + paygrade = "UE5" + languages = list(LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH, LANGUAGE_GERMAN, LANGUAGE_CHINESE) + assignment = "UPP Squad Leader" + role_comm_title = "UPP 173Rd RECON SL" + skills = /datum/skills/military/survivor/upp_sl + +/datum/equipment_preset/survivor/upp/squad_leader/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP/officer (new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/officer (new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/PK9(new_human), WEAR_WAIST) + add_upp_weapon(new_human) + + ..() diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm index eaf6299b88a8..7976ad6c2351 100644 --- a/code/modules/gear_presets/synths.dm +++ b/code/modules/gear_presets/synths.dm @@ -1,7 +1,7 @@ /datum/equipment_preset/synth name = "Synth" uses_special_name = TRUE - languages = ALL_SYNTH_LANGUAGES + languages = ALL_SYNTH_LANGUAGES_UPP skills = /datum/skills/synthetic paygrade = "SYN" @@ -455,13 +455,50 @@ survivor_variant = ENGINEERING_SURVIVOR - faction = FACTION_SURVIVOR - faction_group = list(FACTION_SURVIVOR) - access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_COMMAND) +/datum/equipment_preset/synth/survivor/upp + name = "Survivor - Synthetic - UPP Synth" + flags = EQUIPMENT_PRESET_EXTRA + assignment = JOB_UPP_COMBAT_SYNTH + rank = JOB_SURVIVOR + faction = FACTION_UPP + faction_group = list(FACTION_UPP, FACTION_SURVIVOR) + skills = /datum/skills/colonial_synthetic + paygrade = "SYN" + idtype = /obj/item/card/id/dogtag + role_comm_title = "UPP 173Rd RECON Syn" + +/datum/equipment_preset/synth/survivor/upp/load_gear(mob/living/carbon/human/new_human) + var/obj/item/clothing/under/marine/veteran/UPP/medic/uniform = new() + var/random_number = rand(1,2) + switch(random_number) + if(1) + uniform.roll_suit_jacket(new_human) + if(2) + uniform.roll_suit_sleeves(new_human) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret, WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/tool/screwdriver, WEAR_R_EAR) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/roller, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/multitool, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/radio, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/small_stack, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/webbing, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/device/flashlight, WEAR_J_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/upp/partial, WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/uppsynth, WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET) /datum/equipment_preset/synth/survivor/pmc name = "Survivor - Synthetic - PMC Support Synth" - + faction = FACTION_SURVIVOR + faction_group = list(FACTION_SURVIVOR) + access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_COMMAND) idtype = /obj/item/card/id/pmc assignment = JOB_PMC_SYNTH rank = JOB_PMC_SYNTH @@ -507,6 +544,7 @@ new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank, WEAR_IN_L_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/construction/full_barbed_wire, WEAR_R_STORE) + //*****************************************************************************************************/ /datum/equipment_preset/synth/working_joe diff --git a/code/modules/gear_presets/upp.dm b/code/modules/gear_presets/upp.dm index 2f7148302485..a43404c59450 100644 --- a/code/modules/gear_presets/upp.dm +++ b/code/modules/gear_presets/upp.dm @@ -1777,7 +1777,7 @@ name = "UPP Combat Synthetic" flags = EQUIPMENT_PRESET_EXTRA - languages = ALL_SYNTH_LANGUAGES + languages = ALL_SYNTH_LANGUAGES_UPP skills = /datum/skills/synthetic assignment = JOB_UPP_COMBAT_SYNTH diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 7665e0a5d7ab..3b10c757f2f4 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -256,6 +256,7 @@ t = replacetext(t, "\[logo\]", "") t = replacetext(t, "\[wy\]", "") t = replacetext(t, "\[uscm\]", "") + t = replacetext(t, "\[upp\]", "") t = "[t]" else // If it is a crayon, and he still tries to use these, make them empty! @@ -606,6 +607,15 @@ color = "green" info = "

I could not do it, the fucking marshals, the minions of THEM, have gotten a whiff of my co-workers plans and started raiding us pre-emptively. We managed to get word of it and erected a few barricades to slow them down, but it is too late. Our plan, my plan to save humanity has turned to dust.

As I lay and write this, they are gassing the entire area with tear gas, while gunshots echo around the caves. \n They have gotten to my mind already, their voices are... laughing, saying that, \" it's over \" and that \n “we have risen\". Their voices are mocking me as I could do nothing to prevent their rise \n Just as I am about to finish my final entry, I overhear a few panicked radio calls from a dead officer's radio, about a code red lambda breach, and \" X-RAYS OUT OF CONTAINMENT\". \n However, not a single one of their cries has been met with a response as their fellow officers are too preoccupied with beating up poor miners... \n They have won.... they have PLANNED THIS all along.... \n only God may save us now..." +/obj/item/paper/bigred/upp + name = "UPP Orders" + +/obj/item/paper/bigred/upp/Initialize(mapload, photo_list) + . = ..() + + var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) + info = "

Union Of Progressive People's Fourth Fleet
Orders For 173rd Airborne Reconnaissance: 2nd Platoon
No.52

Order of Military Officer of the UPP
Kolonel Ganbaatar
Commander of MV-35
Date: 2182
On Special Mission
The actions of the hostile Weyland-Yutani corporation on the fringes of the Neroid sector have grown increasingly intolerable. However, evidence suggesting they are researching into the creation and deployment of some form of biological weapons program represent an unacceptable risk to the security of UPP interests in this sector. The risk of these items falling into UA/USCM hands is unacceptable.

Orders for the Boris squad of the 173rd Airborne Recon are as follows. Initiate airborne reconnaissance of WY colony Oxley's Buttle, Trijent Dam, location on planet Raijin (UA Code: LV-670). Ascertain veracity of onsight biological weapons program. If positive confirmation of the weapons program is identified, authorization for rapid assault and recovery is granted. Avoid all contact with UA/USCM military forces, abort missions if UA/USCM forces are encountered.
Authorizing Officer: Gaanbatar
Name and Rank: Kolonel

FOR SANCTIONED USE ONLY" + /obj/item/paper/crumpled name = "paper scrap" icon_state = "scrap" diff --git a/html/images/upplogo.png b/html/images/upplogo.png new file mode 100644 index 0000000000000000000000000000000000000000..55619e2ce5ea042654f25ef0a1eef8e972d153d7 GIT binary patch literal 897 zcmeAS@N?(olHy`uVBq!ia0vp^GeDSw4M<8HQcwg^Y)RhkE(|U}7DI@E>o*|9S>O>_ z%)p?h48n{ROYO^mg6t)pzOL*~*@YRESq@#lyB{bdS>hT|;+&tGo0?a`;9QiNSdyBe zP@Y+mq2TW68xY>eC(gjY^wQJCF{I+w+q;H&!j2+r4-7Y@?DTRM@eRX4`yY>)*9YTTi@ub^Xle&$sV_oDKtRTX*U`{r=_f z>AUx)KFsjfKhHjYZ(-yKl>`n6CbrPqQI7xr9gYrPHl^tM&*T^PYj^#9l{7Wz)b{yd z200TsBv`UHm|pQ+e$AubUQWDt4M*hVzyZ7ASuV{kjeufuMlDl0FDC7hxU!Ex}FmcxV_^4|xmy5G*F4)?X*v-P|d?4V- z`7jIj?k7vl1EWR$K96~QJ>x>uL7-_oEImI<4SfZ7<{R!l(O>pfc~kexxc9qFd>eIz z7?~Lt^T+nQ?y>kaNAveSZ-@gf>Au>w^@MKh;>e)dRTsOU%3k(fJ2B&qttf`;`*_a8{@Cy4Zuh%(dKl0FAY1%bSH!3I zp8l<%>{e}_(pxAC3d5Gt!rM{bUcY>{ZhMvGak*D^+7e7{4UG*OFDdQ+wz~eUV)o3- z?7Hgwo77FSt}kmp$qALe*nV@l=BDoN8Q1MT-<^DMxx@7>Z}$23D_6VRHeuc70rK)x zv7fr!KcXCCv^QiwtMhuW^7z%)5`9YY(JD-A={NOWCM-XDai_Z8Il=nAV@K=H-{fKg z+N_wc;fB)wRL1+xn~kb?CKktBnhuN;u#*h;huSpg8J(P9Yc%(-d3C}pCXh)?Zt~j} z&kgvd&tQ7F@6XD`mdaxPz&>s+y^^4tJ>yN`(~GZk;jTVgs>yy?Wcu#C+J`UBi<`GL h0g@142@*)3_`?28jOzwNa{oe*sHdx+%Q~loCIA+ndtLwl literal 0 HcmV?d00001 diff --git a/icons/obj/items/clothing/ties.dmi b/icons/obj/items/clothing/ties.dmi index 4f5a3777ab10d39cb383a8a1db2bdab8038c57b6..083aaa4d4ada0f5e7970abee23e4db0b7b6f0d84 100644 GIT binary patch literal 19394 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 m6E7+>GDY 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 diff --git a/icons/turf/ert_shuttle.dmi b/icons/turf/ert_shuttle.dmi index 2a9627a77094997395032429459ddc8716d7201d..6c38d6b409c09890ea3f5d7630ec5cb96392a251 100644 GIT binary patch literal 12039 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 Pp#)f4*qPUvo=*5b`XgwK diff --git a/maps/Nightmare/maps/DesertDam/nightmare.json b/maps/Nightmare/maps/DesertDam/nightmare.json index e1b1e5123ac0..261481f6531b 100644 --- a/maps/Nightmare/maps/DesertDam/nightmare.json +++ b/maps/Nightmare/maps/DesertDam/nightmare.json @@ -1,9 +1,16 @@ [ { "type": "pick", "choices": [ { "type": "map_insert", "landmark": "green-new-bridge", "path": "greenriver/newbridge.dmm" } - ], "chance": 0.5 }, + ], "chance": 0.0 }, { "type": "pick", "choices": [ { "weight": 2, "type": "map_insert", "landmark": "purple-new-bridge", "path": "purpleriver/newbridge.dmm" } - ], "chance": 0.6 }, - { "type": "map_sprinkle", "path": "sprinkles/" } + ], "chance": 0.0 }, + { "type": "map_sprinkle", "path": "sprinkles/" }, + { + "type": "map_insert", + "landmark": "uppcrash", + "chance": 1.0, + "path": "standalone/crashlanding-upp-bar.dmm", + "when": { "lvevent": "uppcrash" } + } ] diff --git a/maps/Nightmare/maps/DesertDam/scenario.json b/maps/Nightmare/maps/DesertDam/scenario.json index fe51488c7066..bacb95e27c25 100644 --- a/maps/Nightmare/maps/DesertDam/scenario.json +++ b/maps/Nightmare/maps/DesertDam/scenario.json @@ -1 +1,9 @@ -[] +[ + { + "type": "pick", "name": "uppcrash", + "choices": [ + { "weight": 10, "type": "def", "values": { "lvevent": "none" } }, + { "weight": 4, "type": "def", "values": { "lvevent": "uppcrash" } } + ] + } +] diff --git a/maps/map_files/BigRed/BigRed.dmm b/maps/map_files/BigRed/BigRed.dmm index 29e43dc9e128..32259fa72f45 100644 --- a/maps/map_files/BigRed/BigRed.dmm +++ b/maps/map_files/BigRed/BigRed.dmm @@ -1975,7 +1975,6 @@ "afP" = ( /obj/structure/machinery/door/airlock/almayer/security/glass/colony{ dir = 1; - locked = 0; name = "\improper Marshal Office Prison" }, /turf/open/floor{ @@ -1986,7 +1985,6 @@ /obj/structure/pipes/standard/simple/hidden/green, /obj/structure/machinery/door/airlock/almayer/security/glass/colony{ dir = 1; - locked = 0; name = "\improper Marshal Office Prison" }, /turf/open/floor{ @@ -2799,7 +2797,6 @@ /obj/structure/pipes/standard/simple/hidden/green, /obj/structure/machinery/door/airlock/almayer/security/glass/colony{ dir = 1; - locked = 0; name = "\improper Marshal Office Armory" }, /turf/open/floor{ @@ -3387,7 +3384,6 @@ dir = 4 }, /obj/structure/machinery/door/airlock/almayer/security/glass/colony{ - locked = 0; name = "\improper Marshal Office Armory" }, /turf/open/floor{ @@ -4684,7 +4680,6 @@ "anx" = ( /obj/structure/machinery/door/airlock/almayer/security/glass/colony{ dir = 1; - locked = 0; name = "\improper Marshal Office Holding Cell" }, /turf/open/floor{ @@ -6923,7 +6918,6 @@ dir = 1; icon_state = "door_locked"; id = "safe_room"; - locked = 0; name = "\improper Lambda Lab Secure Storage" }, /turf/open/floor{ @@ -27115,12 +27109,6 @@ icon_state = "delivery" }, /area/bigredv2/outside/office_complex) -"bFh" = ( -/obj/structure/surface/table, -/turf/open/floor{ - icon_state = "wood" - }, -/area/bigredv2/caves/eta/living) "bFw" = ( /turf/closed/wall/solaris/reinforced, /area/bigredv2/outside/telecomm/warehouse) @@ -62303,14 +62291,14 @@ aDX kqS bDu bDA -bFh +aRf aDX bDU elM aDX bDo aQy -bFh +aRf aRf aDX bEK diff --git a/maps/map_files/DesertDam/Desert_Dam.dmm b/maps/map_files/DesertDam/Desert_Dam.dmm index 9aeb42c9d8c5..938092bde688 100644 --- a/maps/map_files/DesertDam/Desert_Dam.dmm +++ b/maps/map_files/DesertDam/Desert_Dam.dmm @@ -64447,6 +64447,15 @@ icon_state = "desert_transition_corner1" }, /area/desert_dam/interior/caves/temple) +"sRl" = ( +/obj/effect/landmark/nightmare{ + insert_tag = "uppcrash" + }, +/turf/open/desert/dirt{ + dir = 6; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/valley_hydro) "sUe" = ( /obj/effect/decal/sand_overlay/sand1{ dir = 1 @@ -82412,7 +82421,7 @@ dTs dTs dTs dTs -cMo +sRl dNS cZw xgA diff --git a/maps/map_files/DesertDam/standalone/crashlanding-upp-bar.dmm b/maps/map_files/DesertDam/standalone/crashlanding-upp-bar.dmm new file mode 100644 index 000000000000..f4efd48f0a88 --- /dev/null +++ b/maps/map_files/DesertDam/standalone/crashlanding-upp-bar.dmm @@ -0,0 +1,4544 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/closed/shuttle/ert{ + icon_state = "upp25"; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"ab" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal7" + }, +/obj/effect/decal/sand_overlay/sand1/corner1{ + dir = 1 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"am" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal11" + }, +/obj/effect/decal/sand_overlay/sand1{ + dir = 6 + }, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"aw" = ( +/obj/effect/decal/sand_overlay/sand1, +/obj/effect/decal/sand_overlay/sand1{ + dir = 4 + }, +/obj/item/ammo_casing/bullet, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached12" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"aO" = ( +/obj/item/prop/colony/used_flare, +/turf/open/floor/plating{ + dir = 8; + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar) +"aT" = ( +/turf/closed/shuttle/ert{ + icon_state = "T16"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"aY" = ( +/obj/item/reagent_container/food/drinks/flask/canteen{ + desc = "You take a sip from your trusty UPP canteen..." + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"be" = ( +/obj/structure/closet/secure_closet/bar, +/obj/effect/landmark/objective_landmark/close, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/backroom) +"bf" = ( +/obj/structure/desertdam/decals/road_edge, +/obj/effect/spawner/gibspawner/xeno, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"bu" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "grimy" + }, +/area/desert_dam/building/bar/bar) +"bz" = ( +/obj/structure/bed/roller, +/obj/structure/machinery/iv_drip, +/obj/effect/decal/cleanable/blood, +/obj/item/prop/colony/usedbandage{ + dir = 5 + }, +/obj/effect/spawner/gibspawner/human, +/turf/open/shuttle/dropship{ + icon_state = "rasputin6" + }, +/area/desert_dam/building/bar/bar) +"bC" = ( +/obj/structure/barricade/sandbags/wired{ + dir = 1 + }, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/backroom) +"bI" = ( +/obj/item/ammo_casing/bullet, +/turf/open/desert/dirt{ + dir = 5; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"bJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"bN" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/plating, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"bO" = ( +/turf/closed/shuttle/ert{ + icon_state = "T4"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"bP" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/structure/disposalpipe/segment, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"bY" = ( +/turf/closed/shuttle/ert{ + icon_state = "upp4"; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"cl" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal2" + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"cu" = ( +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"cH" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"cI" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar_restroom) +"cL" = ( +/obj/effect/decal/cleanable/blood, +/obj/structure/bed/chair/dropship/pilot{ + dir = 1 + }, +/obj/structure/machinery/computer/cameras{ + desc = "The flight controls for a Mi-220 Attack Dropship. these controls look pretty banged up, and there's some blood covering the screen.."; + name = "\improper 'Fulcrum' flight controls"; + network = null; + pixel_y = 21 + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/desert_dam/building/bar/bar) +"cR" = ( +/obj/effect/landmark/crap_item, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"cZ" = ( +/turf/open/asphalt/cement{ + icon_state = "cement2" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"da" = ( +/obj/structure/flora/grass/desert/heavygrass_4, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"ds" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/shuttle/ert{ + icon_state = "T11"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"du" = ( +/obj/item/stack/rods, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/backroom) +"dJ" = ( +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/asphalt/cement{ + icon_state = "cement14" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"dQ" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal4" + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"dR" = ( +/turf/open/asphalt/cement{ + icon_state = "cement3" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"dX" = ( +/obj/structure/surface/table/almayer, +/obj/item/ammo_box/rounds/type71{ + bullet_amount = 129 + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/desert_dam/building/bar/bar) +"ee" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E" + }, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"eh" = ( +/turf/open/floor/plating{ + dir = 8; + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar_restroom) +"ej" = ( +/obj/structure/flora/grass/desert/lightgrass_2, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"eD" = ( +/obj/structure/flora/grass/tallgrass/desert, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"eI" = ( +/obj/effect/decal/sand_overlay/sand1, +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal3" + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"eJ" = ( +/obj/structure/desertdam/decals/road_edge, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"eK" = ( +/obj/structure/fence, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"eQ" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal9" + }, +/obj/effect/decal/sand_overlay/sand1{ + dir = 1 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"eT" = ( +/obj/structure/barricade/sandbags/wired{ + dir = 4 + }, +/obj/item/shard{ + icon_state = "medium" + }, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"eU" = ( +/obj/structure/surface/table/almayer, +/obj/item/trash/semki, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"eV" = ( +/obj/structure/surface/table/almayer, +/obj/item/clothing/accessory/patch/upp{ + pixel_y = -6; + pixel_x = -7 + }, +/obj/item/paper/bigred/upp{ + pixel_y = 4; + pixel_x = 3 + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/desert_dam/building/bar/bar) +"fk" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached13" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"fy" = ( +/obj/structure/flora/grass/desert/lightgrass_6, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"fL" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal2" + }, +/obj/effect/decal/sand_overlay/sand1{ + dir = 8 + }, +/obj/item/ammo_magazine/rifle/type71/heap{ + current_rounds = 0 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"fM" = ( +/obj/item/stack/rods, +/turf/open/floor{ + icon_state = "grimy" + }, +/area/desert_dam/building/bar/bar) +"fN" = ( +/obj/structure/disposalpipe/segment, +/obj/item/stack/sandbags, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"fP" = ( +/obj/structure/bed/bedroll, +/obj/item/bedsheet/brown, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"fR" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 4 + }, +/obj/effect/decal/sand_overlay/sand1/corner1{ + dir = 4 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached13" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"ga" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 8 + }, +/obj/item/prop/colony/used_flare, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached13" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"gm" = ( +/obj/structure/desertdam/decals/road_edge, +/turf/open/floor/plating, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"gA" = ( +/obj/structure/disposalpipe/segment, +/obj/item/ammo_casing/bullet, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"gM" = ( +/obj/item/trash/candy, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"gN" = ( +/obj/item/ammo_casing/bullet, +/obj/effect/decal/cleanable/blood, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"gP" = ( +/obj/structure/flora/grass/desert/lightgrass_4, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"gR" = ( +/obj/effect/decal/sand_overlay/sand1, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"hc" = ( +/obj/structure/prop/dam/wide_boulder/boulder1, +/turf/open/desert/dirt{ + dir = 9; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"hd" = ( +/obj/structure/flora/grass/desert/lightgrass_8, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"hi" = ( +/obj/item/ammo_casing/bullet, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"hk" = ( +/obj/structure/machinery/squeezer, +/turf/open/floor/plating, +/area/desert_dam/building/bar/backroom) +"hm" = ( +/turf/closed/shuttle/ert{ + icon_state = "upp5"; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"hn" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal2" + }, +/obj/effect/decal/sand_overlay/sand1{ + dir = 8 + }, +/obj/effect/spawner/gibspawner/xeno, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"hv" = ( +/turf/closed/wall/wood, +/area/desert_dam/building/bar/bar) +"hx" = ( +/turf/closed/shuttle/ert{ + icon_state = "upp20"; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"hF" = ( +/obj/structure/machinery/light/double{ + dir = 8 + }, +/obj/effect/landmark/survivor_spawner/upp_medic, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"hH" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal4" + }, +/obj/effect/decal/sand_overlay/sand1{ + dir = 1 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"hJ" = ( +/obj/item/ammo_box/rounds/type71/heap/empty{ + bullet_amount = 0 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"hO" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"hT" = ( +/obj/structure/pipes/vents/pump{ + dir = 4 + }, +/turf/open/floor/prison{ + dir = 8; + icon_state = "sterile_white" + }, +/area/desert_dam/building/bar/bar_restroom) +"hY" = ( +/obj/structure/bed/stool, +/turf/open/floor{ + icon_state = "grimy" + }, +/area/desert_dam/building/bar/bar) +"if" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/rods, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"ig" = ( +/obj/structure/flora/grass/tallgrass/desert/corner{ + dir = 5 + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"in" = ( +/obj/item/prop/colony/used_flare, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"is" = ( +/turf/open/desert/dirt{ + icon_state = "desert_transition_corner1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"iy" = ( +/turf/closed/wall/wood, +/area/desert_dam/building/bar/backroom) +"iz" = ( +/obj/structure/flora/bush/desert/cactus, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"iI" = ( +/obj/item/ammo_casing/bullet, +/turf/open/desert/rock, +/area/desert_dam/exterior/valley/bar_valley_dam) +"iL" = ( +/obj/structure/prop/dam/boulder/boulder1, +/turf/open/desert/dirt{ + dir = 1; + icon_state = "desert_transition_corner1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"iV" = ( +/obj/effect/landmark/crap_item, +/turf/open/floor/plating, +/area/desert_dam/building/bar/backroom) +"jf" = ( +/obj/structure/prop/invuln/lattice_prop{ + icon_state = "lattice12"; + pixel_x = -7; + pixel_y = 35 + }, +/obj/structure/prop/invuln/pipe_water{ + pixel_y = 11 + }, +/obj/item/reagent_container/glass/bucket/mopbucket, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"jj" = ( +/obj/item/trash/cheesie, +/obj/item/stack/sheet/wood, +/turf/open/floor{ + icon_state = "grimy" + }, +/area/desert_dam/building/bar/bar) +"jm" = ( +/obj/effect/decal/sand_overlay/sand1, +/obj/structure/barricade/sandbags/wired{ + dir = 8 + }, +/obj/item/prop/colony/usedbandage{ + dir = 5; + pixel_y = 8 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"jp" = ( +/obj/structure/desertdam/decals/road_edge, +/obj/structure/machinery/door/poddoor/almayer/locked{ + dir = 2; + id = "dam_checkpoint_west"; + name = "\improper Checkpoint Lock" + }, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"jr" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal2" + }, +/obj/structure/machinery/door/poddoor/almayer/locked{ + dir = 2; + id = "dam_checkpoint_west"; + name = "\improper Checkpoint Lock" + }, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"jt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/interior/wood/alt, +/area/desert_dam/building/bar/bar) +"jw" = ( +/obj/item/ammo_casing/bullet, +/turf/open/desert/dirt{ + dir = 6; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"jy" = ( +/obj/structure/machinery/door/airlock/almayer/maint/colony{ + dir = 1; + name = "\improper Bar Backroom" + }, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/backroom) +"jC" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 4 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"jI" = ( +/obj/structure/barricade/sandbags/wired{ + dir = 4 + }, +/turf/open/desert/dirt{ + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"jJ" = ( +/obj/structure/flora/grass/desert/lightgrass_1, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"kf" = ( +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"kh" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal2" + }, +/obj/item/ammo_casing/bullet, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"ki" = ( +/obj/item/stack/sandbags, +/turf/open/desert/dirt{ + dir = 10; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"kk" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 4 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached13" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"kp" = ( +/obj/effect/decal/cleanable/blood, +/obj/item/prop/almayer/flight_recorder/colony, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"kB" = ( +/obj/structure/barricade/sandbags/wired{ + dir = 4 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached14" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"kD" = ( +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"kM" = ( +/turf/closed/shuttle/ert{ + icon_state = "rightengine_2"; + opacity = 0; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"kQ" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/desert_dam/building/bar/backroom) +"ln" = ( +/turf/open/desert/rock, +/area/desert_dam/exterior/valley/bar_valley_dam) +"lC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/sand_overlay/sand1{ + dir = 1 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached4" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"lT" = ( +/turf/open/desert/dirt{ + dir = 8; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"mb" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 6 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"md" = ( +/obj/item/ammo_magazine/rifle/type71/heap{ + current_rounds = 0 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"mf" = ( +/turf/open/desert/dirt{ + dir = 9; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"mq" = ( +/obj/structure/flora/grass/tallgrass/desert/corner{ + dir = 8 + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"mw" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/obj/item/prop/colony/used_flare, +/turf/open/floor/plating{ + dir = 8; + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/backroom) +"mF" = ( +/obj/structure/disposalpipe/segment, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"mL" = ( +/obj/structure/flora/bush/desert/cactus{ + icon_state = "cactus_8" + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"mR" = ( +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"mT" = ( +/obj/item/ammo_casing/bullet, +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"mV" = ( +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/building/bar/bar_restroom) +"nk" = ( +/turf/closed/shuttle/ert{ + icon_state = "T3"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"np" = ( +/obj/structure/flora/grass/desert/lightgrass_1, +/obj/item/ammo_casing/bullet, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"nt" = ( +/obj/effect/decal/sand_overlay/sand1, +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal3" + }, +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"ny" = ( +/obj/effect/decal/cleanable/blood, +/obj/item/prop/almayer/comp_closed, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"nz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/shuttle/ert{ + icon_state = "T8"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"nB" = ( +/obj/effect/landmark/survivor_spawner/upp/soldier, +/turf/open/shuttle/dropship{ + icon_state = "rasputin5" + }, +/area/desert_dam/building/bar/bar) +"nC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/rods, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar) +"nD" = ( +/obj/structure/flora/grass/desert/heavygrass_4, +/obj/item/trash/cheesie, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"nP" = ( +/obj/structure/machinery/colony_floodlight, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"nR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/sand_overlay/sand1/corner1{ + dir = 1 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"oc" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/chem_dispenser/soda{ + density = 0; + pixel_y = 32 + }, +/obj/effect/landmark/objective_landmark/medium, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"oo" = ( +/obj/structure/flora/grass/desert/heavygrass_4, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"oy" = ( +/obj/effect/decal/sand_overlay/sand1, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached16" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"oD" = ( +/obj/structure/machinery/vending/snack, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/bar) +"oF" = ( +/obj/item/ammo_casing/bullet, +/obj/item/ammo_magazine/rifle/type71/heap{ + current_rounds = 0 + }, +/turf/open/desert/dirt{ + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"oK" = ( +/obj/effect/decal/sand_overlay/sand1/corner1{ + dir = 8 + }, +/obj/effect/decal/sand_overlay/sand1{ + dir = 9 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached16" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"oN" = ( +/obj/effect/decal/sand_overlay/sand1, +/obj/item/ammo_casing/bullet, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached12" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"pk" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 10 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"pq" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal2" + }, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"pu" = ( +/obj/structure/machinery/light/double, +/turf/open/desert/dirt{ + dir = 5; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"px" = ( +/obj/structure/barricade/sandbags/wired{ + dir = 4 + }, +/obj/item/prop/colony/used_flare, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"py" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + dir = 2; + name = "\improper Fulcrum Airlock" + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"pA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/rods, +/turf/open/floor/plating{ + dir = 8; + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar) +"pM" = ( +/obj/structure/bed/chair/dropship/passenger, +/obj/item/storage/belt/medical/lifesaver/upp, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/desert_dam/building/bar/bar) +"pO" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/closed/shuttle/ert{ + icon_state = "T10"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"pW" = ( +/turf/closed/wall/r_wall/bunker{ + name = "reinforced metal wall" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"pZ" = ( +/obj/item/prop/colony/usedbandage{ + dir = 9; + pixel_x = 5; + pixel_y = 15 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"qe" = ( +/obj/structure/prop/dam/boulder/boulder3, +/turf/open/desert/dirt{ + dir = 8; + icon_state = "desert_transition_corner1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"qu" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 8 + }, +/obj/item/prop/colony/used_flare, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"qx" = ( +/turf/open/desert/dirt{ + dir = 4; + icon_state = "desert_transition_corner1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"qS" = ( +/turf/open/floor/interior/wood/alt, +/area/desert_dam/building/bar/bar) +"qU" = ( +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/floor/interior/wood/alt, +/area/desert_dam/building/bar/bar) +"rj" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N" + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"rl" = ( +/obj/structure/barricade/sandbags/wired{ + dir = 1 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"rm" = ( +/obj/structure/machinery/power/apc{ + dir = 8; + pixel_x = -30; + start_charge = 0 + }, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/bar) +"rR" = ( +/obj/structure/prop/dam/boulder/boulder1, +/turf/open/desert/dirt{ + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"rX" = ( +/obj/item/prop/colony/folded_bedroll, +/obj/item/shard{ + icon_state = "medium" + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar) +"se" = ( +/obj/item/trash/semki, +/turf/open/shuttle/dropship, +/area/desert_dam/building/bar/bar) +"sn" = ( +/obj/structure/barricade/sandbags/wired{ + dir = 4 + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"so" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/asphalt/cement{ + icon_state = "cement3" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"sp" = ( +/obj/structure/machinery/cm_vending/sorted/boozeomat, +/turf/open/floor{ + icon_state = "grimy" + }, +/area/desert_dam/building/bar/bar) +"su" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/chem_dispenser/soda{ + density = 0; + pixel_y = 32 + }, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"sv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/tool/shovel, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"sE" = ( +/obj/structure/machinery/light/double{ + dir = 4; + pixel_y = -5 + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin7" + }, +/area/desert_dam/building/bar/bar) +"sH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/barricade/sandbags/wired, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"sI" = ( +/obj/structure/flora/grass/desert/lightgrass_5, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"sO" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/backroom) +"sT" = ( +/obj/structure/flora/grass/desert/lightgrass_3, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"tl" = ( +/obj/item/ammo_casing/bullet, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"tu" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/shuttle/dropship{ + icon_state = "rasputin8" + }, +/area/desert_dam/building/bar/bar) +"tA" = ( +/obj/item/tool/wrench, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"tE" = ( +/obj/structure/flora/grass/desert/heavygrass_3, +/obj/item/ammo_magazine/rifle/type71/heap{ + current_rounds = 0 + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"tK" = ( +/obj/structure/bed/bedroll, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"tM" = ( +/turf/closed/shuttle/ert{ + icon_state = "leftengine_1"; + opacity = 0; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"tR" = ( +/obj/item/prop/colony/used_flare, +/turf/open/floor/plating, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"tW" = ( +/turf/closed/shuttle/ert{ + icon_state = "T11"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"tX" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"ug" = ( +/obj/structure/flora/grass/desert/lightgrass_10, +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"uA" = ( +/obj/structure/surface/table/almayer, +/obj/item/prop{ + desc = "A gas-operated rotary machine gun used by UPP heavies. Its enormous volume of fire and ammunition capacity allows the suppression of large concentrations of enemy forces. Heavy weapons training is required control its recoil, is non-functional."; + icon_state = "painless"; + item_state = "m41amk1"; + name = "\improper GSh-7.62 rotary machine gun"; + pixel_y = 7; + icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi' + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/desert_dam/building/bar/bar) +"uF" = ( +/turf/open/desert/dirt{ + dir = 4; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"uZ" = ( +/obj/item/roller, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"vk" = ( +/obj/structure/flora/grass/desert/lightgrass_9, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"vl" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal2" + }, +/obj/effect/decal/sand_overlay/sand1/corner1, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"vn" = ( +/obj/item/prop/colony/used_flare, +/turf/open/floor/prison{ + dir = 8; + icon_state = "sterile_white" + }, +/area/desert_dam/building/bar/bar_restroom) +"vq" = ( +/obj/structure/sink, +/obj/effect/landmark/objective_landmark/medium, +/turf/open/floor/prison{ + dir = 8; + icon_state = "sterile_white" + }, +/area/desert_dam/building/bar/bar_restroom) +"vy" = ( +/obj/item/prop/colony/used_flare, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar_restroom) +"vP" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal5" + }, +/obj/item/ammo_casing/bullet, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"vR" = ( +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"vZ" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 8 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached13" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"wj" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/plating{ + dir = 8; + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar) +"wm" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/turf/closed/shuttle/ert{ + icon_state = "upp5"; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"wp" = ( +/obj/structure/flora/grass/desert/heavygrass_10, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"wq" = ( +/obj/structure/flora/grass/desert/lightgrass_2, +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"ws" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/closed/shuttle/ert{ + icon_state = "T17"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"wv" = ( +/obj/structure/flora/grass/tallgrass/desert/corner{ + dir = 6 + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"wy" = ( +/obj/item/trash/candy, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/desert_dam/building/bar/bar_restroom) +"wE" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"wI" = ( +/obj/structure/machinery/light/double{ + dir = 1 + }, +/obj/structure/bed/bedroll, +/obj/item/reagent_container/food/drinks/bottle/vodka, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"wJ" = ( +/turf/open/desert/dirt{ + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"wO" = ( +/obj/structure/barricade/sandbags/wired{ + dir = 4 + }, +/obj/structure/barricade/sandbags/wired{ + dir = 1 + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"wT" = ( +/turf/closed/shuttle/ert{ + icon_state = "upp16"; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"wZ" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S-corner" + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/desert_dam/building/bar/bar) +"xg" = ( +/obj/structure/prop/dam/boulder/boulder1, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"xj" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 1 + }, +/obj/effect/landmark/crap_item, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached4" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"xm" = ( +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"xn" = ( +/obj/structure/prop/dam/large_boulder{ + icon_state = "boulder_large1" + }, +/turf/open/desert/rock, +/area/desert_dam/exterior/valley/bar_valley_dam) +"xr" = ( +/obj/structure/prop/dam/boulder/boulder3, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"xt" = ( +/obj/structure/barricade/sandbags/wired{ + dir = 1 + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"xx" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/bar) +"xz" = ( +/obj/structure/prop/wooden_cross{ + pixel_y = 13 + }, +/obj/item/clothing/accessory/patch/upp{ + pixel_y = -6 + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"xG" = ( +/obj/structure/machinery/power/apc{ + dir = 8; + pixel_x = -30; + start_charge = 0 + }, +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/floor/prison{ + dir = 10; + icon_state = "floor_plate" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"xN" = ( +/turf/closed/shuttle/ert{ + icon_state = "rightengine_1"; + opacity = 0; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"xP" = ( +/obj/item/ammo_casing/bullet, +/turf/open/desert/dirt{ + dir = 9; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"xT" = ( +/turf/template_noop, +/area/template_noop) +"xX" = ( +/obj/item/prop/colony/used_flare, +/turf/open/desert/rock, +/area/desert_dam/exterior/valley/bar_valley_dam) +"yc" = ( +/obj/structure/flora/grass/desert/lightgrass_3, +/obj/item/prop/colony/usedbandage{ + dir = 10 + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"ye" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/sheet/wood, +/turf/open/floor{ + icon_state = "grimy" + }, +/area/desert_dam/building/bar/bar) +"yf" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E" + }, +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"yk" = ( +/obj/structure/prop/dam/large_boulder/boulder2, +/turf/open/desert/dirt{ + dir = 6; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"ym" = ( +/obj/item/stack/sandbags/large_stack, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"yo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/shard{ + icon_state = "medium" + }, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/desert_dam/building/bar/bar) +"ys" = ( +/obj/structure/flora/grass/tallgrass/desert/corner{ + dir = 1 + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"yx" = ( +/obj/structure/closet/secure_closet/bar, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/backroom) +"yC" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 9 + }, +/turf/closed/shuttle/ert{ + icon_state = "upp5"; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"yF" = ( +/obj/effect/decal/cleanable/blood, +/obj/item/ammo_magazine/rifle/type71/heap{ + current_rounds = 0 + }, +/turf/open/shuttle/dropship, +/area/desert_dam/building/bar/bar) +"yG" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal11" + }, +/obj/effect/decal/sand_overlay/sand1{ + dir = 6 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"yP" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 1 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached4" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"zl" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"zm" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/floor/prison{ + dir = 8; + icon_state = "sterile_white" + }, +/area/desert_dam/building/bar/bar_restroom) +"zC" = ( +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/closed/shuttle/ert{ + icon_state = "T6"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"zD" = ( +/obj/structure/surface/table/woodentable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "grimy" + }, +/area/desert_dam/building/bar/bar) +"zM" = ( +/turf/open/floor/plating{ + dir = 8; + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar) +"zO" = ( +/turf/open/desert/dirt{ + dir = 10; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"zS" = ( +/obj/structure/flora/grass/desert/heavygrass_4, +/turf/open/desert/dirt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"zT" = ( +/obj/structure/surface/table/woodentable, +/obj/effect/landmark/good_item, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/backroom) +"zZ" = ( +/obj/structure/barricade/sandbags/wired{ + dir = 8 + }, +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Ae" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor/prison{ + dir = 10; + icon_state = "floor_plate" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"Ah" = ( +/obj/structure/barricade/wooden{ + dir = 1; + pixel_y = 7 + }, +/turf/open/floor/plating, +/area/desert_dam/building/bar/backroom) +"Al" = ( +/obj/structure/machinery/light/double{ + dir = 1 + }, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"At" = ( +/obj/effect/landmark/crap_item, +/turf/open/floor/interior/wood/alt, +/area/desert_dam/building/bar/bar) +"Aw" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal5" + }, +/obj/effect/decal/sand_overlay/sand1/corner1, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"AC" = ( +/obj/structure/barricade/sandbags/wired{ + dir = 1 + }, +/turf/open/desert/dirt{ + dir = 6; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"AT" = ( +/turf/closed/shuttle/ert{ + icon_state = "T2"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"Bj" = ( +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/backroom) +"Bq" = ( +/obj/structure/machinery/light/double{ + dir = 8 + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin6" + }, +/area/desert_dam/building/bar/bar) +"Bu" = ( +/obj/effect/decal/sand_overlay/sand1, +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached12" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Bx" = ( +/obj/structure/surface/table/almayer, +/obj/item/reagent_container/food/drinks/bottle/vodka, +/obj/item/reagent_container/food/drinks/bottle/vodka{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/reagent_container/food/drinks/bottle/vodka{ + pixel_y = -8; + pixel_x = -8 + }, +/obj/item/reagent_container/food/drinks/bottle/vodka{ + pixel_x = 6 + }, +/obj/item/ammo_magazine/rifle/type71/heap{ + current_rounds = 0 + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/desert_dam/building/bar/bar) +"BB" = ( +/turf/closed/shuttle/ert{ + icon_state = "T5"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"BK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/sand_overlay/sand1{ + dir = 8 + }, +/obj/item/reagent_container/food/drinks/flask/canteen{ + desc = "You take a sip from your trusty UPP canteen..." + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"BM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating{ + dir = 8; + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar) +"BP" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal5" + }, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"BU" = ( +/obj/item/ammo_magazine/rifle/type71/heap{ + current_rounds = 0 + }, +/obj/item/shard{ + icon_state = "medium" + }, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"BW" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/plating{ + dir = 8; + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/backroom) +"Cc" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal9" + }, +/obj/effect/decal/sand_overlay/sand1{ + dir = 9 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Ce" = ( +/turf/open/desert/dirt{ + dir = 8; + icon_state = "desert_transition_corner1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Ch" = ( +/turf/open/desert/dirt{ + dir = 6; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Cm" = ( +/obj/structure/prop/invuln/lattice_prop{ + icon_state = "lattice12"; + pixel_x = 1; + pixel_y = 35 + }, +/turf/closed/shuttle/ert{ + icon_state = "T3"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"Cn" = ( +/obj/effect/landmark/survivor_spawner/upp/soldier, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"Cx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/sand_overlay/sand1{ + dir = 4 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached13" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"CA" = ( +/turf/closed/shuttle/ert{ + icon_state = "upp21"; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"CE" = ( +/obj/structure/desertdam/decals/road_edge, +/obj/effect/decal/sand_overlay/sand1{ + dir = 4 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"CH" = ( +/obj/item/stack/sheet/metal, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/desert_dam/building/bar/bar_restroom) +"CI" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 10 + }, +/obj/structure/prop/wooden_cross{ + pixel_y = 13 + }, +/obj/item/clothing/mask/cigarette/cigar, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"CL" = ( +/turf/closed/shuttle/ert{ + icon_state = "leftengine_2"; + opacity = 0; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"CX" = ( +/obj/effect/decal/sand_overlay/sand1/corner1{ + dir = 4 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached13" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Db" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"Df" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Di" = ( +/obj/item/prop/colony/used_flare, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Dn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/shuttle/ert{ + icon_state = "T7"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"Dt" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar_restroom) +"Du" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/shuttle/ert{ + icon_state = "upp5"; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"DB" = ( +/obj/structure/bed/bedroll, +/obj/item/trash/cheesie, +/turf/open/shuttle/dropship{ + icon_state = "rasputin7" + }, +/area/desert_dam/building/bar/bar) +"DD" = ( +/obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ + dir = 2; + name = "\improper Bar" + }, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/bar) +"DE" = ( +/obj/structure/machinery/light, +/turf/open/floor/prison{ + dir = 8; + icon_state = "sterile_white" + }, +/area/desert_dam/building/bar/bar_restroom) +"DO" = ( +/obj/effect/spawner/gibspawner/xeno, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"DR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/sand_overlay/sand1, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached12" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"DZ" = ( +/obj/structure/pipes/standard/simple/hidden/green, +/obj/effect/decal/cleanable/dirt, +/turf/closed/shuttle/ert{ + icon_state = "T4"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"Eb" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"Ec" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_casing/bullet, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Eg" = ( +/turf/open/desert/dirt{ + dir = 5; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Ek" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/backroom) +"Eq" = ( +/obj/effect/decal/sand_overlay/sand1, +/obj/structure/barricade/sandbags/wired{ + dir = 4 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached19" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Er" = ( +/obj/item/stack/sheet/wood, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/bar) +"Ev" = ( +/turf/open/floor{ + icon_state = "grimy" + }, +/area/desert_dam/building/bar/bar) +"Ex" = ( +/obj/item/prop/colony/used_flare, +/turf/open/desert/dirt{ + dir = 5; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"EH" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 8 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"EO" = ( +/turf/closed/shuttle/ert{ + icon_state = "T14"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"EW" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/structure/disposalpipe/segment, +/obj/item/ammo_casing/bullet, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Fa" = ( +/obj/structure/flora/tree/joshua, +/turf/closed/wall/rock/orange, +/area/desert_dam/exterior/rock) +"Fd" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor{ + icon_state = "grimy" + }, +/area/desert_dam/building/bar/bar) +"Fh" = ( +/obj/item/storage/belt/utility, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"Fl" = ( +/obj/structure/pipes/standard/manifold/hidden/green, +/turf/closed/shuttle/ert{ + icon_state = "T15"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"Fr" = ( +/obj/item/stack/sandbags, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Fs" = ( +/obj/structure/flora/bush/desert{ + icon_state = "tree_3" + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"FB" = ( +/obj/structure/barricade/sandbags/wired{ + dir = 4 + }, +/turf/open/desert/dirt{ + dir = 4; + icon_state = "desert_transition_corner1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"FF" = ( +/obj/structure/disposalpipe/segment, +/obj/item/ammo_casing/bullet, +/obj/item/prop/colony/used_flare, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"FI" = ( +/obj/effect/decal/sand_overlay/sand1, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached15" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Gc" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 1 + }, +/obj/effect/decal/sand_overlay/sand1{ + dir = 4 + }, +/obj/item/ammo_casing/bullet, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached4" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Gd" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"GK" = ( +/obj/item/ammo_magazine/rifle/type71/heap{ + current_rounds = 0 + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"GP" = ( +/obj/item/prop/colony/used_flare, +/turf/open/floor{ + icon_state = "grimy" + }, +/area/desert_dam/building/bar/bar) +"GY" = ( +/obj/item/trash/used_stasis_bag, +/obj/effect/landmark/survivor_spawner/squad_leader, +/turf/open/shuttle/dropship{ + icon_state = "rasputin5" + }, +/area/desert_dam/building/bar/bar) +"GZ" = ( +/obj/item/stack/barbed_wire/small_stack, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Hb" = ( +/obj/structure/desertdam/decals/road_edge, +/obj/effect/decal/sand_overlay/sand1/corner1{ + dir = 8 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Hl" = ( +/turf/open/desert/dirt{ + dir = 1; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Hq" = ( +/obj/structure/barricade/sandbags/wired{ + dir = 4 + }, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"HB" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/desert_dam/building/bar/bar) +"HH" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E" + }, +/obj/item/prop/colony/used_flare, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"HI" = ( +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"HP" = ( +/turf/closed/shuttle/ert{ + icon_state = "T8"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"HV" = ( +/obj/structure/disposalpipe/segment, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Ip" = ( +/obj/item/prop/colony/usedbandage{ + dir = 5 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Iu" = ( +/turf/open/desert/dirt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"IA" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal2" + }, +/obj/item/stack/sandbags, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"IF" = ( +/obj/structure/bed/chair/dropship/passenger{ + dir = 8 + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/desert_dam/building/bar/bar) +"IU" = ( +/obj/item/tool/shovel, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"IW" = ( +/turf/closed/shuttle/ert{ + icon_state = "upp27"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"Jc" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/desert_dam/building/bar/bar) +"Jd" = ( +/obj/structure/flora/grass/desert/lightgrass_5, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Ji" = ( +/obj/item/trash/candy, +/obj/item/stack/rods, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/desert_dam/building/bar/bar) +"Jk" = ( +/turf/open/desert/dirt{ + dir = 9; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"Js" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"Jt" = ( +/obj/item/trash/cheesie, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Jx" = ( +/obj/structure/desertdam/decals/road_edge, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"JB" = ( +/obj/structure/desertdam/decals/road_edge, +/obj/effect/decal/sand_overlay/sand1{ + dir = 4 + }, +/obj/item/prop/colony/used_flare, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"JS" = ( +/obj/structure/barricade/sandbags/wired, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"JT" = ( +/turf/closed/shuttle/ert{ + icon_state = "upp3"; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"Kf" = ( +/obj/structure/bed/bedroll, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"Kl" = ( +/obj/structure/window/framed/wood/reinforced, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"KA" = ( +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 1 + }, +/turf/closed/shuttle/ert{ + icon_state = "upp5"; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"KC" = ( +/obj/structure/barricade/sandbags/wired, +/turf/open/desert/dirt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"Li" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 8 + }, +/obj/item/stack/sandbags, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached13" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Lo" = ( +/obj/effect/landmark/survivor_spawner/upp_medic, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"Lu" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal3" + }, +/obj/effect/decal/sand_overlay/sand1/corner1, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"Lw" = ( +/obj/item/stack/rods, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar) +"LB" = ( +/obj/structure/machinery/door/poddoor/almayer/locked{ + dir = 2; + id = "dam_checkpoint_west"; + name = "\improper Checkpoint Lock" + }, +/obj/structure/disposalpipe/segment, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"LC" = ( +/obj/item/prop/colony/usedbandage, +/turf/open/desert/dirt{ + dir = 10; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"LD" = ( +/obj/item/ammo_casing/bullet, +/turf/open/desert/dirt{ + dir = 8; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"LF" = ( +/obj/effect/spawner/gibspawner/xeno, +/turf/open/floor/prison{ + dir = 10; + icon_state = "floor_plate" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"LJ" = ( +/obj/structure/machinery/power/apc{ + dir = 1; + pixel_y = 24; + start_charge = 0 + }, +/obj/item/stack/sheet/metal, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/backroom) +"LM" = ( +/obj/item/prop/colony/used_flare, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached16" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Ms" = ( +/obj/item/ammo_casing/bullet, +/obj/item/prop/colony/usedbandage{ + dir = 1 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Mw" = ( +/obj/structure/machinery/blackbox_recorder, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"MM" = ( +/obj/structure/machinery/light/double{ + dir = 4; + pixel_y = -5 + }, +/obj/effect/decal/cleanable/blood, +/obj/effect/spawner/gibspawner/human, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"MW" = ( +/obj/effect/decal/sand_overlay/sand1, +/obj/structure/barricade/sandbags/wired{ + dir = 4 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached12" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Nh" = ( +/obj/structure/flora/grass/desert/lightgrass_4, +/obj/effect/decal/sand_overlay/sand1{ + dir = 6 + }, +/obj/item/ammo_box/rounds/type71/heap/empty{ + bullet_amount = 0 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Nj" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 6 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"No" = ( +/obj/effect/spawner/gibspawner/xeno, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Nu" = ( +/obj/effect/spawner/gibspawner/xeno, +/turf/open/desert/dirt{ + dir = 1; + icon_state = "desert_transition_corner1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"NH" = ( +/obj/structure/machinery/light/double{ + dir = 4; + pixel_y = -5 + }, +/obj/effect/landmark/survivor_spawner/upp_sapper, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"NK" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/shuttle/ert{ + icon_state = "T20"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"Oe" = ( +/obj/structure/barricade/sandbags/wired{ + dir = 4 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Oj" = ( +/turf/closed/shuttle/ert{ + icon_state = "T12"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"Om" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/closed/shuttle/ert{ + icon_state = "T7"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"Ou" = ( +/obj/effect/decal/sand_overlay/sand1/corner1{ + dir = 8 + }, +/obj/effect/decal/sand_overlay/sand1{ + dir = 8 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Ow" = ( +/obj/structure/prop/dam/boulder/boulder2, +/turf/open/desert/dirt{ + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"OD" = ( +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"OJ" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 8 + }, +/obj/structure/machinery/sentry_holder/colony{ + dir = 1; + pixel_y = -10 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached19" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"OO" = ( +/turf/closed/wall/r_wall, +/area/desert_dam/exterior/valley/bar_valley_dam) +"OS" = ( +/obj/structure/barricade/sandbags/wired, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"OU" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal4" + }, +/obj/effect/decal/sand_overlay/sand1{ + dir = 1 + }, +/obj/item/ammo_casing/bullet, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"OZ" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E" + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Pd" = ( +/obj/structure/machinery/vending/coffee, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/bar) +"Pw" = ( +/turf/open/floor/prison{ + dir = 10; + icon_state = "floor_plate" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"PH" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 4 + }, +/obj/structure/prop/invuln/lattice_prop{ + icon_state = "lattice12"; + pixel_x = -7; + pixel_y = 35 + }, +/obj/structure/prop/invuln/lattice_prop{ + icon_state = "lattice12"; + pixel_x = 1; + pixel_y = 35 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"PR" = ( +/obj/structure/bed/chair/dropship/passenger{ + dir = 4 + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/desert_dam/building/bar/bar) +"PS" = ( +/obj/effect/decal/sand_overlay/sand1, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached12" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"PX" = ( +/obj/structure/flora/grass/desert/heavygrass_5, +/obj/effect/decal/sand_overlay/sand1{ + dir = 5 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"PY" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 4 + }, +/obj/structure/prop/wooden_cross{ + pixel_y = 13 + }, +/obj/item/toy/farwadoll, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Qc" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor{ + icon_state = "freezerfloor" + }, +/area/desert_dam/building/bar/bar_restroom) +"Qk" = ( +/obj/item/ammo_magazine/rifle/type71/heap{ + current_rounds = 0 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"QA" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/shuttle/ert{ + icon_state = "T2"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"QG" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/chem_dispenser/soda{ + density = 0; + pixel_y = 32 + }, +/turf/open/floor{ + icon_state = "grimy" + }, +/area/desert_dam/building/bar/bar) +"QI" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 10 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"QK" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/closed/shuttle/ert{ + icon_state = "T9"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"QN" = ( +/obj/structure/machinery/door/poddoor/almayer/locked{ + dir = 2; + id = "dam_checkpoint_west"; + name = "\improper Checkpoint Lock" + }, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"QW" = ( +/obj/item/prop/colony/used_flare, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Re" = ( +/obj/item/ammo_box/rounds/type71/heap/empty{ + bullet_amount = 0 + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin4" + }, +/area/desert_dam/building/bar/bar) +"Rl" = ( +/obj/structure/closet/crate/supply, +/obj/item/ammo_box/magazine/misc/flares, +/turf/open/shuttle/dropship{ + icon_state = "rasputin15" + }, +/area/desert_dam/building/bar/bar) +"Ro" = ( +/obj/structure/flora/grass/desert/lightgrass_11, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Rs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/rods, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/desert_dam/building/bar/bar) +"RU" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 5 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached9" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"RW" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S-corner" + }, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"Sb" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E" + }, +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/floor/plating, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"Sh" = ( +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plating{ + dir = 8; + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar) +"Sl" = ( +/obj/structure/pipes/standard/manifold/hidden/green{ + dir = 1 + }, +/turf/open/floor/plating{ + dir = 8; + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar) +"So" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/shuttle/ert{ + icon_state = "T16"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"SE" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/closed/shuttle/ert{ + icon_state = "T19"; + opacity = 0; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"SF" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/backroom) +"SG" = ( +/obj/effect/decal/sand_overlay/sand1, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"SL" = ( +/obj/item/ammo_magazine/rifle/type71/heap{ + current_rounds = 0 + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"SP" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/barricade/sandbags/wired{ + dir = 1 + }, +/turf/open/floor/plating{ + dir = 8; + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar) +"SY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/sheet/metal, +/obj/structure/barricade/wooden{ + dir = 8 + }, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"Ta" = ( +/obj/item/prop/colony/used_flare, +/turf/open/desert/dirt{ + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Tc" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 8 + }, +/obj/structure/machinery/light, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/backroom) +"Td" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/barricade/wooden{ + dir = 8 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar) +"Tl" = ( +/obj/effect/decal/sand_overlay/sand1, +/obj/item/ammo_magazine/rifle/type71/heap{ + current_rounds = 0 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached12" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"TH" = ( +/obj/effect/decal/sand_overlay/sand1, +/obj/item/ammo_casing/bullet, +/obj/effect/landmark/crap_item, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"TO" = ( +/obj/structure/pipes/vents/pump{ + dir = 8 + }, +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "grimy" + }, +/area/desert_dam/building/bar/bar) +"TR" = ( +/turf/open/floor/prison{ + dir = 8; + icon_state = "sterile_white" + }, +/area/desert_dam/building/bar/bar_restroom) +"Ug" = ( +/obj/item/ammo_casing/bullet, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Ui" = ( +/obj/structure/prop/dam/boulder/boulder2, +/turf/open/desert/dirt{ + dir = 8; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Ul" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood{ + layer = 3 + }, +/turf/closed/shuttle/ert{ + icon_state = "upp1"; + name = "Fulcrum" + }, +/area/desert_dam/building/bar/bar) +"Un" = ( +/obj/structure/prop/dam/large_boulder/boulder2, +/turf/open/desert/rock, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Uq" = ( +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/desert/dirt{ + icon_state = "desert_transition_corner1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"UB" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar) +"UK" = ( +/obj/item/ammo_box/rounds/type71/heap/empty{ + bullet_amount = 0 + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"UL" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 10 + }, +/obj/effect/decal/sand_overlay/sand1{ + dir = 1 + }, +/obj/structure/prop/wooden_cross{ + pixel_y = 13 + }, +/obj/item/clothing/head/helmet/marine/veteran/UPP, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"UQ" = ( +/obj/structure/surface/table/reinforced, +/obj/structure/machinery/chem_dispenser/soda{ + density = 0; + pixel_y = 32 + }, +/obj/effect/landmark/objective_landmark/far, +/turf/open/floor{ + icon_state = "grimy" + }, +/area/desert_dam/building/bar/bar) +"Vc" = ( +/obj/structure/desertdam/decals/road_edge, +/obj/effect/decal/sand_overlay/sand1{ + dir = 4 + }, +/obj/item/ammo_casing/bullet, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Vg" = ( +/obj/item/stack/sandbags, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Vl" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 4 + }, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/backroom) +"Vr" = ( +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor{ + icon_state = "grimy" + }, +/area/desert_dam/building/bar/bar) +"Vt" = ( +/obj/item/prop/colony/usedbandage{ + dir = 1 + }, +/obj/effect/landmark/survivor_spawner/upp_specialist, +/turf/open/shuttle/dropship{ + icon_state = "rasputin5" + }, +/area/desert_dam/building/bar/bar) +"VA" = ( +/obj/item/shard{ + icon_state = "medium" + }, +/turf/open/floor/plating{ + dir = 8; + icon_state = "platingdmg3" + }, +/area/desert_dam/building/bar/bar) +"VG" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/desert/dirt{ + dir = 9; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"VI" = ( +/turf/open/floor/plating, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"VP" = ( +/obj/structure/desertdam/decals/road_edge, +/obj/effect/decal/sand_overlay/sand1/corner1{ + dir = 1 + }, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"VQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/barricade/sandbags/wired, +/obj/structure/barricade/sandbags/wired{ + dir = 4 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"VT" = ( +/turf/closed/wall/wood, +/area/desert_dam/building/bar/bar_restroom) +"VU" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal2" + }, +/obj/effect/decal/sand_overlay/sand1{ + dir = 8 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"VW" = ( +/obj/structure/desertdam/decals/road_edge, +/obj/effect/decal/sand_overlay/sand1{ + dir = 4 + }, +/obj/item/ammo_magazine/rifle/type71/heap{ + current_rounds = 0 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Wb" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal2" + }, +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"Wh" = ( +/obj/structure/pipes/vents/pump{ + dir = 4 + }, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/backroom) +"WE" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/bar) +"WG" = ( +/obj/item/stack/sheet/wood, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"WK" = ( +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"WO" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"WX" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal8" + }, +/obj/effect/spawner/gibspawner/xeno, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"WY" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal4" + }, +/obj/item/stack/sheet/wood/medium_stack, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"WZ" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal3" + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Xe" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/reagent_container/food/drinks/flask/canteen{ + desc = "You take a sip from your trusty UPP canteen..."; + pixel_x = 3; + pixel_y = -6 + }, +/obj/item/reagent_container/food/drinks/flask/canteen{ + desc = "You take a sip from your trusty UPP canteen..."; + pixel_y = 5; + pixel_x = -8 + }, +/obj/item/reagent_container/food/drinks/flask/canteen{ + desc = "You take a sip from your trusty UPP canteen..."; + pixel_y = 4 + }, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Xh" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/bar) +"Xo" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 6 + }, +/obj/item/ammo_casing/bullet, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Xv" = ( +/obj/structure/prop/dam/boulder/boulder3, +/turf/open/mars{ + icon_state = "mars_dirt_5" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Xw" = ( +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/bar) +"XB" = ( +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal2" + }, +/obj/item/ammo_magazine/rifle/type71/heap{ + current_rounds = 0 + }, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"XF" = ( +/obj/structure/bed/chair/wood/normal{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"XR" = ( +/obj/structure/desertdam/decals/road_edge, +/obj/effect/decal/sand_overlay/sand1{ + dir = 4 + }, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"XZ" = ( +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/desert/dirt{ + dir = 5; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Yf" = ( +/obj/effect/spawner/gibspawner/xeno, +/turf/open/floor/interior/wood, +/area/desert_dam/building/bar/bar) +"Yn" = ( +/turf/open/desert/dirt{ + dir = 1; + icon_state = "desert_transition_corner1" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"Yq" = ( +/turf/open/floor{ + dir = 8; + icon_state = "carpet6-2" + }, +/area/desert_dam/building/bar/bar) +"YA" = ( +/obj/structure/bed/chair/wood/normal, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/desert_dam/building/bar/bar) +"YE" = ( +/obj/effect/decal/sand_overlay/sand1, +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal3" + }, +/obj/item/ammo_casing/bullet, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"YK" = ( +/obj/item/stack/rods, +/turf/open/floor/plating, +/area/desert_dam/building/bar/bar) +"YM" = ( +/obj/structure/flora/grass/tallgrass/desert/corner{ + dir = 10 + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"YQ" = ( +/obj/effect/decal/sand_overlay/sand1, +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal3" + }, +/obj/structure/machinery/light, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"YS" = ( +/turf/closed/shuttle/ert{ + icon_state = "T7"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"YY" = ( +/turf/closed/shuttle/ert{ + icon_state = "T1"; + name = "Fulcrum"; + opacity = 0 + }, +/area/desert_dam/building/bar/bar) +"YZ" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/desert_dam/building/bar/bar_restroom) +"Zn" = ( +/obj/effect/landmark/survivor_spawner/upp_sapper, +/turf/open/shuttle/dropship{ + icon_state = "rasputin3" + }, +/area/desert_dam/building/bar/bar) +"ZA" = ( +/obj/effect/decal/sand_overlay/sand1{ + dir = 1 + }, +/obj/structure/barricade/sandbags/wired{ + dir = 4 + }, +/turf/open/asphalt/cement_sunbleached{ + icon_state = "cement_sunbleached4" + }, +/area/desert_dam/exterior/valley/bar_valley_dam) +"ZB" = ( +/obj/effect/decal/sand_overlay/sand1, +/obj/structure/desertdam/decals/road_edge{ + icon_state = "road_edge_decal3" + }, +/turf/open/asphalt, +/area/desert_dam/interior/dam_interior/south_tunnel_entrance) +"ZD" = ( +/obj/structure/flora/grass/tallgrass/desert/corner{ + dir = 9 + }, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"ZS" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/structure/disposalpipe/segment, +/turf/open/asphalt, +/area/desert_dam/exterior/valley/bar_valley_dam) +"ZY" = ( +/obj/structure/flora/grass/desert/heavygrass_5, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/bar_valley_dam) + +(1,1,1) = {" +iy +iy +iy +iy +iy +xT +xT +xT +xT +xT +xT +VT +vq +vn +TR +DE +VT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(2,1,1) = {" +iy +sO +Bj +SF +iy +xT +xT +xT +xT +xT +mV +YZ +TR +TR +hT +TR +cI +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(3,1,1) = {" +iy +Bj +Wh +Vl +iy +hv +hv +wE +Mw +wj +CH +tW +zC +DZ +zm +eh +Dt +xT +xT +Fa +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(4,1,1) = {" +iy +Bj +Ek +zT +iy +Pd +rm +qS +Yq +aO +tW +nz +Om +BB +Qc +wy +vy +jf +kD +kD +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(5,1,1) = {" +iy +be +Ek +Tc +iy +oD +Xw +jt +Rs +tW +HP +YS +QK +CL +tM +zM +YK +PH +jC +jC +pk +kD +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(6,1,1) = {" +iy +yx +Ek +hk +iy +if +Xh +BM +ds +HP +YS +YS +pO +kM +xN +Sh +YY +Cm +nk +bO +kf +pk +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(7,1,1) = {" +jy +bC +mw +iV +Ah +Jc +cH +hx +bY +bY +bY +bY +bY +bY +bY +bY +bY +Ul +QA +EO +zZ +jm +xz +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(8,1,1) = {" +iy +LJ +kQ +hx +bY +wT +bY +CA +bz +hF +Lo +Cn +Re +PR +PR +PR +Bq +RW +hJ +sH +kf +SG +WO +UL +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(9,1,1) = {" +iy +du +BW +IW +cL +CA +cL +CA +GY +pM +dX +Rl +nB +GK +Fh +cu +yF +wZ +gM +kf +kf +kf +jC +IU +PY +CI +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(10,1,1) = {" +hv +su +HB +IW +kp +MM +ny +py +Vt +uA +eV +Bx +nB +fP +uZ +tA +se +wZ +kf +ym +GZ +cR +kf +kf +kf +kf +pk +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(11,1,1) = {" +hv +oc +Sl +aa +hm +hm +hm +CA +DB +NH +Zn +Cn +tu +IF +IF +IF +sE +RW +GZ +OS +sv +kf +kf +Di +md +tl +OS +QI +xT +xT +xT +xT +xT +xT +xT +xT +"} +(12,1,1) = {" +hv +hv +Td +SY +Jc +zM +Jc +aa +hm +hm +hm +KA +wm +yC +Du +hm +hm +JT +nk +bO +wI +kf +Jt +kf +hJ +Ms +OS +gR +xT +xT +xT +xT +xT +xT +xT +xT +"} +(13,1,1) = {" +hv +sp +Fd +nC +WG +UB +WK +zM +So +NK +Dn +Dn +SE +CL +tM +Kf +Oj +AT +AT +EO +md +kf +Jd +kf +tl +np +OS +Nj +pu +xT +xT +xT +xT +xT +xT +xT +"} +(14,1,1) = {" +hv +sp +Vr +bu +jj +ye +Xh +zM +YA +So +NK +Dn +ws +kM +xN +zM +wE +tK +Xe +tK +kf +Jd +gM +kf +kf +oo +mb +zS +Iu +xT +xT +xT +xT +xT +xT +xT +"} +(15,1,1) = {" +hv +hv +TO +fM +zD +bu +Xh +qU +in +XF +aT +NK +Om +BB +eU +Eb +Ji +Xv +aY +BK +qu +wp +pZ +kf +tl +TH +Ug +KC +Iu +Db +xT +xT +xT +xT +xT +pW +"} +(16,1,1) = {" +hv +QG +Ev +Ev +zD +hY +Er +At +qS +Js +pA +aT +Fl +EO +Al +wj +rX +Ip +mb +Gc +aw +PX +EH +EH +EH +Xo +tE +KC +Iu +bN +VI +Db +pW +pW +pW +pW +"} +(17,1,1) = {" +hv +UQ +Ev +GP +Ev +Ev +Yf +WE +Xw +xx +xm +yo +SP +VA +BU +wE +Lw +Nh +sI +yP +oN +yc +wq +nD +Ug +UK +Ug +KC +oK +VI +tR +Ae +xG +Pw +LF +Db +"} +(18,1,1) = {" +hv +hv +Kl +Kl +hv +Kl +Kl +hv +Kl +xx +DD +Kl +hv +eT +Hq +wE +mT +SL +gN +xj +Tl +kD +hc +LC +Cc +CE +Vc +XR +VP +jp +eJ +eJ +eJ +eJ +eJ +gm +"} +(19,1,1) = {" +xT +xT +ln +ln +ln +ln +ln +ln +wJ +lC +DR +xr +kD +kD +kD +gP +wO +sn +sn +yP +oN +VG +Ce +oF +OU +Ec +JS +ee +HH +QN +OD +ee +DO +OD +ee +Sb +"} +(20,1,1) = {" +xT +xT +ln +ln +ln +ln +ln +xX +wJ +lC +Bu +kD +kD +kD +kD +ej +kD +kD +kD +ZA +MW +Hl +xn +jI +OU +Oe +VQ +bP +bP +LB +mF +bP +mF +mF +bP +tX +"} +(21,1,1) = {" +xT +ln +ln +ln +ln +ln +ln +ln +Ta +yP +PS +kD +nP +kD +mR +fy +QW +mR +vk +yP +PS +Hl +Yn +Ch +hH +HI +bJ +BP +pq +jr +pq +pq +Wb +pq +pq +jr +"} +(22,1,1) = {" +xT +xT +ln +iI +Yn +Uq +ln +Nu +Ch +RU +Ou +fR +kk +Cx +kk +kk +kk +kk +kk +nR +FI +Eg +Ch +kD +hH +Df +hO +Lu +OJ +pW +cZ +so +dR +dR +dJ +pW +"} +(23,1,1) = {" +xT +xT +xT +Yn +jw +bI +is +wJ +kD +kD +kD +eQ +Jx +Jx +Jx +Jx +Jx +bf +Jx +Jx +Hb +CE +CE +JB +ab +vR +bJ +ZB +xT +xT +xT +xT +xT +xT +xT +xT +"} +(24,1,1) = {" +xT +xT +xT +wJ +Ug +Ug +Eg +Ch +kD +kD +kD +hH +HI +OZ +HI +HI +OZ +HI +HI +yf +HI +HI +OZ +HI +HI +OZ +bJ +YQ +xT +xT +xT +xT +xT +xT +xT +xT +"} +(25,1,1) = {" +xT +xT +xT +FB +ki +px +kD +kD +kD +ej +sT +hH +HI +Gd +HV +HV +ZS +HV +HV +ZS +HV +HV +ZS +HV +HV +ZS +zl +ZB +xT +xT +xT +xT +xT +xT +xT +xT +"} +(26,1,1) = {" +xT +xT +Yn +is +Ow +kD +sT +ug +wv +ig +hd +hH +HI +bJ +Aw +VU +VU +VU +VU +VU +VU +VU +hn +VU +VU +VU +VU +am +xT +xT +xT +xT +xT +xT +xT +xT +"} +(27,1,1) = {" +xT +xT +Ch +XZ +Ch +kD +da +wv +eD +ys +jJ +hH +Df +hO +eI +mf +lT +Ui +zO +kD +kD +kD +kD +mf +zO +nP +kD +Jk +xT +xT +xT +xT +xT +xT +xT +xT +"} +(28,1,1) = {" +xT +xT +zO +kD +kD +kD +wv +eD +eD +ZD +kD +hH +HI +bJ +eI +Hl +Un +iL +Ch +kD +kD +kD +kD +Hl +rR +kD +mf +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(29,1,1) = {" +xT +Yn +yk +QW +kD +Fs +YM +mq +ZD +vk +kD +hH +HI +bJ +eI +Eg +uF +Ch +Ug +kD +mL +mR +mf +Ce +qx +lT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(30,1,1) = {" +is +wJ +kD +Ug +kD +kD +jJ +fy +hd +Ro +QW +hH +vR +bJ +eI +Fr +kD +Ug +kD +iz +mf +lT +Ce +ln +xT +ln +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(31,1,1) = {" +XZ +AC +Ug +kD +nP +kD +kD +kD +kD +kD +kD +hH +Df +hO +eI +xt +kD +QW +kD +mf +qe +ln +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(32,1,1) = {" +CE +CE +VW +CE +Vc +CE +CE +Vc +CE +Vc +CE +ab +HI +bJ +eI +kD +ZY +xP +LD +Ce +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(33,1,1) = {" +No +vR +OZ +rl +hi +OZ +HI +hi +Qk +vR +OZ +HI +HI +bJ +nt +mf +lT +Ce +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(34,1,1) = {" +HV +HV +ZS +fN +HV +EW +HV +FF +HV +HV +ZS +HV +gA +zl +YE +Hl +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(35,1,1) = {" +cl +IA +cl +kh +XB +cl +WX +Vg +Oe +vP +vl +fL +hn +VU +yG +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(36,1,1) = {" +ga +Li +vZ +fk +CX +kB +dQ +Df +rj +WZ +Eq +Fr +kD +sn +Fr +Hl +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} +(37,1,1) = {" +eK +eK +eK +eK +OO +LM +WY +vR +HI +WZ +oy +nP +mR +xg +kD +Ex +uF +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +xT +"} From 4f9b17bc604bf0d33e5f98fbed8157575e5c177d Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Fri, 4 Aug 2023 07:16:39 +0100 Subject: [PATCH 48/52] Automatic changelog for PR #3845 [ci skip] --- html/changelogs/AutoChangeLog-pr-3845.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3845.yml diff --git a/html/changelogs/AutoChangeLog-pr-3845.yml b/html/changelogs/AutoChangeLog-pr-3845.yml new file mode 100644 index 000000000000..8be12e7b1974 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3845.yml @@ -0,0 +1,5 @@ +author: "Steelpoint" +delete-after: True +changes: + - rscadd: "A team of UPP survivors may spawn on Trijent Dam." + - mapadd: "A new nightmare insert for Trijent Dam has been added, featuring a crashed UPP dropship." \ No newline at end of file From aa1cf876d98ab41b1048f2aa398854c1a76c679a Mon Sep 17 00:00:00 2001 From: ghostsheet <43085828+ghostsheet@users.noreply.github.com> Date: Fri, 4 Aug 2023 15:20:04 +1000 Subject: [PATCH 49/52] Acid Runner Respawn (#4037) # About the pull request Acid Runner will now respawn on its turf when there's no hivecore to respawn at. instead of not spawning at all. # Explain why it's good for the game If acid runner exploded without a hivecore it wouldn't respawn at all. Now if it would respawn as a larva where it blew up, cool niche feature. # Testing Photographs and Procedure
Acid Runner Respawn https://github.com/cmss13-devs/cmss13/assets/43085828/97e3720d-3f6e-49f1-8258-a7e7c9c17837
# Changelog :cl: ghostsheet add: Acid Runners will now respawn where it blew up, if there is no hivecore to spawn at. /:cl: --------- Co-authored-by: Drathek <76988376+Drulikar@users.noreply.github.com> --- .../xenomorph/mutators/strains/runner/acid.dm | 7 ++++++- .../living/carbon/xenomorph/xeno_defines.dm | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/strains/runner/acid.dm b/code/modules/mob/living/carbon/xenomorph/mutators/strains/runner/acid.dm index 7a2196a3c209..7b64ae9f69d7 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/strains/runner/acid.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/strains/runner/acid.dm @@ -159,7 +159,12 @@ new /obj/effect/particle_effect/smoke/acid_runner_harmless(T) playsound(bound_xeno, 'sound/effects/blobattack.ogg', 75) if(bound_xeno.client && bound_xeno.hive) - addtimer(CALLBACK(bound_xeno.hive, TYPE_PROC_REF(/datum/hive_status, free_respawn), bound_xeno.client), 5 SECONDS) + var/datum/hive_status/hive_status = bound_xeno.hive + var/turf/spawning_turf = get_turf(bound_xeno) + if(!hive_status.hive_location) + addtimer(CALLBACK(bound_xeno.hive, TYPE_PROC_REF(/datum/hive_status, respawn_on_turf), bound_xeno.client, spawning_turf), 0.5 SECONDS) + else + addtimer(CALLBACK(bound_xeno.hive, TYPE_PROC_REF(/datum/hive_status, free_respawn), bound_xeno.client), 5 SECONDS) bound_xeno.gib() /mob/living/carbon/xenomorph/runner/ventcrawl_carry() diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm index acc72586e647..cfca16f70a51 100644 --- a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm +++ b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm @@ -936,6 +936,24 @@ else hive_ui.update_burrowed_larva() +/datum/hive_status/proc/respawn_on_turf(client/xeno_client, turf/spawning_turf) + var/mob/living/carbon/xenomorph/larva/new_xeno = spawn_hivenumber_larva(spawning_turf, hivenumber) + if(isnull(new_xeno)) + return FALSE + + if(!SSticker.mode.transfer_xeno(xeno_client.mob, new_xeno)) + qdel(new_xeno) + return FALSE + + new_xeno.visible_message(SPAN_XENODANGER("A larva suddenly emerges from a dead husk!"), + SPAN_XENOANNOUNCE("The hive has no core! You manage to emerge from your old husk as a larva!")) + msg_admin_niche("[key_name(new_xeno)] respawned at \a [spawning_turf]. [ADMIN_JMP(spawning_turf)]") + playsound(new_xeno, 'sound/effects/xeno_newlarva.ogg', 50, 1) + if(new_xeno.client?.prefs?.toggles_flashing & FLASH_POOLSPAWN) + window_flash(new_xeno.client) + + hive_ui.update_burrowed_larva() + /datum/hive_status/proc/do_buried_larva_spawn(mob/xeno_candidate) var/spawning_area if(hive_location) From e62502c58ab854ab8ea776e637e6a20690333d8c Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Fri, 4 Aug 2023 07:33:53 +0100 Subject: [PATCH 50/52] Automatic changelog for PR #4037 [ci skip] --- html/changelogs/AutoChangeLog-pr-4037.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4037.yml diff --git a/html/changelogs/AutoChangeLog-pr-4037.yml b/html/changelogs/AutoChangeLog-pr-4037.yml new file mode 100644 index 000000000000..f66dd54c89fd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4037.yml @@ -0,0 +1,4 @@ +author: "ghostsheet" +delete-after: True +changes: + - rscadd: "Acid Runners will now respawn where it blew up, if there is no hivecore to spawn at." \ No newline at end of file From 23d5d9872d5135967cf0fb03434da7adf2adb22c Mon Sep 17 00:00:00 2001 From: Vile Beggar Date: Fri, 4 Aug 2023 07:32:34 +0200 Subject: [PATCH 51/52] Increases the availability and minimum burn time for Star Shells (#4087) # About the pull request raises the minimum burn time for star shell fragments to 30 seconds from 5 and increases their quantity in squad vendors from scale * 2 to scale * 4. # Explain why it's good for the game these grenades are fairly innocuous but rarely, if ever, used outside the free packet you get with the m79. their short burn time coupled with the fact you are giving up space that could be used for actual grenades that have a lot more utility place them into the "not really worth it" category. hopefully with a higher minimum burn time and a bit more abundance in the squad vendor they'll see some more use, whether in an ugl or the m79. # Changelog :cl:Vile Beggar balance: Star Shells now have a higher minimum burn time and are more plentiful in squad prep. /:cl: --- .../machinery/vending/vendor_types/squad_prep/squad_prep.dm | 2 +- code/game/objects/items/devices/flashlight.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 4fcd3d25237c..4f10d956ee3c 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 @@ -194,7 +194,7 @@ list("M56D Drum Magazine", round(scale * 2), /obj/item/ammo_magazine/m56d, VENDOR_ITEM_REGULAR), list("M2C Box Magazine", round(scale * 2), /obj/item/ammo_magazine/m2c, VENDOR_ITEM_REGULAR), list("HIRR Baton Slugs", round(scale * 6), /obj/item/explosive/grenade/slug/baton, VENDOR_ITEM_REGULAR), - list("M74 AGM-S Star Shell", round(scale * 2), /obj/item/explosive/grenade/high_explosive/airburst/starshell, VENDOR_ITEM_REGULAR), + list("M74 AGM-S Star Shell", round(scale * 4), /obj/item/explosive/grenade/high_explosive/airburst/starshell, VENDOR_ITEM_REGULAR), list("M74 AGM-S Hornet Shell", round(scale * 4), /obj/item/explosive/grenade/high_explosive/airburst/hornet_shell, VENDOR_ITEM_REGULAR), ) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 07b56eedb7d2..9bcda4a82bbb 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -441,7 +441,7 @@ if(mapload) return INITIALIZE_HINT_QDEL . = ..() - fuel = rand(5 SECONDS, 60 SECONDS) + fuel = rand(30 SECONDS, 60 SECONDS) /obj/item/device/flashlight/flare/on/illumination/chemical name = "chemical light" From c1e2afa00048de39794f8641b4b5cde1c1af829b Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Fri, 4 Aug 2023 07:47:34 +0100 Subject: [PATCH 52/52] Automatic changelog for PR #4087 [ci skip] --- html/changelogs/AutoChangeLog-pr-4087.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4087.yml diff --git a/html/changelogs/AutoChangeLog-pr-4087.yml b/html/changelogs/AutoChangeLog-pr-4087.yml new file mode 100644 index 000000000000..f5e1dd6a638d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4087.yml @@ -0,0 +1,4 @@ +author: "Vile Beggar" +delete-after: True +changes: + - balance: "Star Shells now have a higher minimum burn time and are more plentiful in squad prep." \ No newline at end of file