From 85bcc1a23e09e240ed086ac502c856b29a27e4a6 Mon Sep 17 00:00:00 2001 From: LC4492 <122557086+LC4492@users.noreply.github.com> Date: Sun, 21 Apr 2024 18:16:53 -0300 Subject: [PATCH 01/29] Adds an upgraded photocopier for the CL and CC (#6126) # About the pull request Adds a new photocopier with a higher toner level (180) and that also have a higher print-at-once max limit (from the original 10 to 30), the original photocopier have been maintained for most part of the ship, receiving a little boost on the toner level (from the original 30 to 45). Sprites in overall have been updated to have a little bit more charm and look better, but the new photocopier version have a new "Weyland-Yutani" paint-scheme (look at the objects' descriptions for reason). # Explain why it's good for the game One problem that everyone encounters at least one time playing as CC or CL is the fact that, the toner limit of the normal photocopier is an annoying nightmare: Printing photos take a LOT of toner, and even though that makes a good balancing for the normal photocopier, its a giant ROCK in the way of anyone who wishes to mass-print newspapers (as CC) or spread pamphlets and photos (as CL) for the crew. This change would possibly makes the lives of both roles MUCH easier when printing and distributing, papers and photos, in mass. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: add: Adds a new, better variation of the normal photocopier. imageadd: Adds a new sprite to the new photocopier variation and updates the sprites of both normal, and new photocopiers to look slightly better. maptweak: Adds the new photocopiers to the CC and CL offices. /:cl: --------- Co-authored-by: Drathek <76988376+Drulikar@users.noreply.github.com> --- code/modules/paperwork/photocopier.dm | 37 +++++++++++++++++---- icons/obj/structures/machinery/library.dmi | Bin 11532 -> 18546 bytes maps/map_files/USS_Almayer/USS_Almayer.dmm | 6 ++-- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 08711f295085..0d5eca1dd9a1 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -1,7 +1,9 @@ +/// Normal Photocopier, made by Seegson /obj/structure/machinery/photocopier name = "photocopier" icon = 'icons/obj/structures/machinery/library.dmi' icon_state = "bigscanner" + desc = "A photocopier used for copying... you know, photos! Also useful for copying documents on paper. This specific model has been manufactured by Seegson in a cheaper frame than most modern photocopiers. It uses more primitive copying technology resulting in more toner waste and less printing capabilities. Nonetheless, its cheap construction means cheaper costs, and for people that only need to print a paper or two most of the time, it becomes cost-effective." anchored = TRUE density = TRUE use_power = USE_POWER_IDLE @@ -11,9 +13,15 @@ var/obj/item/paper/copy = null //what's in the copier! var/obj/item/photo/photocopy = null var/obj/item/paper_bundle/bundle = null - var/copies = 1 //how many copies to print! - var/toner = 30 //how much toner is left! woooooo~ - var/maxcopies = 10 //how many copies can be copied at once- idea shamelessly stolen from bs12's copier! + ///how many copies to print! + var/copies = 1 + ///how much toner is left! woooooo~ + var/toner = 45 + ///how many copies can be copied at once- idea shamelessly stolen from bs12's copier! + var/maxcopies = 10 + ///the flick state to use when inserting paper into the machine + var/animate_state = "bigscanner1" + /obj/structure/machinery/photocopier/attack_remote(mob/user as mob) return attack_hand(user) @@ -116,7 +124,7 @@ if(user.drop_inv_item_to_loc(O, src)) copy = O to_chat(user, SPAN_NOTICE("You insert the paper into \the [src].")) - flick("bigscanner1", src) + flick(animate_state, src) updateUsrDialog() else to_chat(user, SPAN_NOTICE("There is already something in \the [src].")) @@ -125,7 +133,7 @@ if(user.drop_inv_item_to_loc(O, src)) photocopy = O to_chat(user, SPAN_NOTICE("You insert the photo into \the [src].")) - flick("bigscanner1", src) + flick(animate_state, src) updateUsrDialog() else to_chat(user, SPAN_NOTICE("There is already something in \the [src].")) @@ -134,13 +142,13 @@ if(user.drop_inv_item_to_loc(O, src)) bundle = O to_chat(user, SPAN_NOTICE("You insert the bundle into \the [src].")) - flick("bigscanner1", src) + flick(animate_state, src) updateUsrDialog() else if(istype(O, /obj/item/device/toner)) if(toner == 0) if(user.temp_drop_inv_item(O)) qdel(O) - toner = 30 + toner = initial(toner) to_chat(user, SPAN_NOTICE("You insert the toner cartridge into \the [src].")) updateUsrDialog() else @@ -239,6 +247,21 @@ return p +/// Upgraded photocopier, straight upgrade from the normal photocopier, made by Weyland-Yutani +/obj/structure/machinery/photocopier/wyphotocopier + name = "photocopier" + icon = 'icons/obj/structures/machinery/library.dmi' + icon_state = "bigscannerpro" + desc = "A photocopier used for copying... you know, photos! Also useful for copying documents on paper. This specific model has been manufactured by Weyland-Yutani in a more modern and robust frame than the average photocopiers you see from smaller companies. It uses some of the most advanced technologies in the area of paper-printing such as bigger toner economy and much higher printing capabilities. All that makes it the favorite among consumers that need to print high amounts of paperwork for their daily duties." + idle_power_usage = 50 + active_power_usage = 300 + copies = 1 + toner = 180 + maxcopies = 30 + animate_state = "bigscannerpro1" + + +/// The actual toner cartridge used in photcopiers /obj/item/device/toner name = "toner cartridge" icon_state = "tonercartridge" diff --git a/icons/obj/structures/machinery/library.dmi b/icons/obj/structures/machinery/library.dmi index 3efeeef8b9f58ed85ce7da2737698f30431668d2..b2e62dc1bb932f4d864f9ecd9b9e2f10a4032901 100644 GIT binary patch literal 18546 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 literal 11532 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 WJ<-?xE`V=21NYT*RKF=(hWsxU1vU); diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 84eb6b3b142a..6bc6bfeb4a22 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -56403,10 +56403,10 @@ }, /area/almayer/living/briefing) "phj" = ( -/obj/structure/machinery/photocopier, /obj/structure/machinery/light/small{ dir = 1 }, +/obj/structure/machinery/photocopier/wyphotocopier, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -69589,12 +69589,10 @@ /obj/structure/machinery/light{ dir = 1 }, -/obj/structure/machinery/photocopier{ - anchored = 0 - }, /obj/structure/sign/poster/art{ pixel_y = 32 }, +/obj/structure/machinery/photocopier/wyphotocopier, /turf/open/floor/wood/ship, /area/almayer/command/corporateliaison) "tHk" = ( From 5e7d21c2befd85782d29d63367e84deca45cb584 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Sun, 21 Apr 2024 22:21:27 +0100 Subject: [PATCH 02/29] Automatic changelog for PR #6126 [ci skip] --- html/changelogs/AutoChangeLog-pr-6126.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6126.yml diff --git a/html/changelogs/AutoChangeLog-pr-6126.yml b/html/changelogs/AutoChangeLog-pr-6126.yml new file mode 100644 index 000000000000..32c18a571e83 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6126.yml @@ -0,0 +1,6 @@ +author: "LC4492" +delete-after: True +changes: + - rscadd: "Adds a new, better variation of the normal photocopier." + - imageadd: "Adds a new sprite to the new photocopier variation and updates the sprites of both normal, and new photocopiers to look slightly better." + - maptweak: "Adds the new photocopiers to the CC and CL offices." \ No newline at end of file From c6c04431a1653bcddb9d176835bdd578fd1e09cc Mon Sep 17 00:00:00 2001 From: GrrrKitten <158611449+GrrrKitten@users.noreply.github.com> Date: Sun, 21 Apr 2024 17:39:16 -0400 Subject: [PATCH 03/29] Adds Shockwaves to Explosions and Xeno Screeches (#5938) # About the pull request Mostly ported from TGMC via code from Ivanmixo + Tiviplus Tested and very functional, only activates on explosions with above 150 power meaning: notable would shockwave: -yajuta casters -HE rockets -nuke -pod decompresion -CAS minirockets -All OB's -most OT nades notable wouldnt shockwave: -AP rockets -Mateba HE -plastic explosives -sentry explosions -HEDP's -HEFA -other tiny explosions Also adds shockwaves to: -Queen Screech (very large) -Predalien Screech (smaller) # Explain why it's good for the game Looks pretty cool, purely a VFX change via render plates. After extensively testing it for a few hours then going to play an actual round and seeing our OB's in their current state it was so sad. # Testing Photographs and Procedure Screenshots & Videos video had to be stupid compressed for github and also I cant crop it good cause photoshop said no more rendering today so have fun with this: https://github.com/cmss13-devs/cmss13/assets/158611449/a83d26ea-3f7f-4053-8be4-d15ad707cdbc Queen + Predalien Screech from 3 seperate POV's https://github.com/cmss13-devs/cmss13/assets/158611449/137a496e-8b56-4039-ae84-cbaafa3de8d8 # Changelog :cl: add: Adds shockwave VFX to powerful explosions add: Adds shockwave VFX to Queen + Predalien screech /:cl: --------- Co-authored-by: harryob Co-authored-by: Drathek <76988376+Drulikar@users.noreply.github.com> --- code/__DEFINES/layers.dm | 3 + code/_onclick/hud/rendering/plane_master.dm | 7 ++ code/_onclick/hud/rendering/render_plate.dm | 4 ++ code/datums/autocells/explosion.dm | 3 + .../game/objects/effects/temporary_visuals.dm | 23 +++++++ .../mob/living/carbon/xenomorph/Abilities.dm | 2 +- .../abilities/predalien/predalien_powers.dm | 3 +- .../living/carbon/xenomorph/update_icons.dm | 65 ++++++++++++------- 8 files changed, 82 insertions(+), 28 deletions(-) diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 63e79cdf676d..ee958d87f580 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -11,6 +11,9 @@ //#define AREA_LAYER 1 +#define DISPLACEMENT_PLATE_RENDER_LAYER 1 +#define DISPLACEMENT_PLATE_RENDER_TARGET "*DISPLACEMENT_PLATE_RENDER_TARGET" + #define UNDER_TURF_LAYER 1.99 #define TURF_LAYER 2 diff --git a/code/_onclick/hud/rendering/plane_master.dm b/code/_onclick/hud/rendering/plane_master.dm index 6625120d1514..c4f070bdd842 100644 --- a/code/_onclick/hud/rendering/plane_master.dm +++ b/code/_onclick/hud/rendering/plane_master.dm @@ -189,3 +189,10 @@ plane = ESCAPE_MENU_PLANE appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR render_relay_plane = RENDER_PLANE_MASTER + +/atom/movable/screen/plane_master/displacement + name = "displacement plane" + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + plane = DISPLACEMENT_PLATE_RENDER_LAYER + render_target = DISPLACEMENT_PLATE_RENDER_TARGET + render_relay_plane = null diff --git a/code/_onclick/hud/rendering/render_plate.dm b/code/_onclick/hud/rendering/render_plate.dm index 18236c6ee759..cb579eb4ff6a 100644 --- a/code/_onclick/hud/rendering/render_plate.dm +++ b/code/_onclick/hud/rendering/render_plate.dm @@ -39,6 +39,10 @@ plane = RENDER_PLANE_GAME render_relay_plane = RENDER_PLANE_MASTER +/atom/movable/screen/plane_master/rendering_plate/game_world/Initialize(mapload, datum/hud/hud_owner) + . = ..() + add_filter("displacer", 1, displacement_map_filter(render_source = DISPLACEMENT_PLATE_RENDER_TARGET, size = 10)) + ///render plate for OOC stuff like ghosts, hud-screen effects, etc /atom/movable/screen/plane_master/rendering_plate/non_game name = "non-game rendering plate" diff --git a/code/datums/autocells/explosion.dm b/code/datums/autocells/explosion.dm index 367567a6d40d..ecc6f9925800 100644 --- a/code/datums/autocells/explosion.dm +++ b/code/datums/autocells/explosion.dm @@ -282,6 +282,9 @@ as having entered the turf. if(QDELETED(E)) return + if(power >= 150) //shockwave for anything over 150 power + new /obj/effect/shockwave(epicenter, power/60) + E.power = power E.power_falloff = falloff E.falloff_shape = falloff_shape diff --git a/code/game/objects/effects/temporary_visuals.dm b/code/game/objects/effects/temporary_visuals.dm index 4dc07b76f3cb..d05e7789b1d5 100644 --- a/code/game/objects/effects/temporary_visuals.dm +++ b/code/game/objects/effects/temporary_visuals.dm @@ -96,3 +96,26 @@ splatter_type = "csplatter" color = BLOOD_COLOR_SYNTHETIC +//------------------------------------------ +//Shockwaves +//------------------------------------------ + +/obj/effect/shockwave + icon = 'icons/effects/light_overlays/shockwave.dmi' + icon_state = "shockwave" + plane = DISPLACEMENT_PLATE_RENDER_LAYER + pixel_x = -496 + pixel_y = -496 + +/obj/effect/shockwave/Initialize(mapload, radius, speed, easing_type = LINEAR_EASING, y_offset, x_offset) + . = ..() + if(!speed) + speed = 1 + if(y_offset) + pixel_y += y_offset + if(x_offset) + pixel_x += x_offset + QDEL_IN(src, 0.5 * radius * speed) + transform = matrix().Scale(32 / 1024, 32 / 1024) + animate(src, time = 0.5 * radius * speed, transform=matrix().Scale((32 / 1024) * radius * 1.5, (32 / 1024) * radius * 1.5), easing = easing_type) + diff --git a/code/modules/mob/living/carbon/xenomorph/Abilities.dm b/code/modules/mob/living/carbon/xenomorph/Abilities.dm index 3bf0c67ef721..ec024c3b5605 100644 --- a/code/modules/mob/living/carbon/xenomorph/Abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/Abilities.dm @@ -142,7 +142,7 @@ playsound(xeno.loc, pick(xeno.screech_sound_effect_list), 75, 0, status = 0) xeno.visible_message(SPAN_XENOHIGHDANGER("[xeno] emits an ear-splitting guttural roar!")) - xeno.create_shriekwave() //Adds the visual effect. Wom wom wom + xeno.create_shriekwave(14) //Adds the visual effect. Wom wom wom, 14 shriekwaves for(var/mob/mob in view()) if(mob && mob.client) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_powers.dm index 6e6fef86a2f4..3ec4855f9c3a 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_powers.dm @@ -12,8 +12,7 @@ playsound(xeno.loc, pick(predalien_roar), 75, 0, status = 0) xeno.visible_message(SPAN_XENOHIGHDANGER("[xeno] emits a guttural roar!")) - xeno.create_shriekwave(color = "#FF0000") - + xeno.create_shriekwave(7) //Adds the visual effect. Wom wom wom, 7 shriekwaves for(var/mob/living/carbon/carbon in view(7, xeno)) if(ishuman(carbon)) var/mob/living/carbon/human/human = carbon diff --git a/code/modules/mob/living/carbon/xenomorph/update_icons.dm b/code/modules/mob/living/carbon/xenomorph/update_icons.dm index cf84312657a3..ac0c381f5ed4 100644 --- a/code/modules/mob/living/carbon/xenomorph/update_icons.dm +++ b/code/modules/mob/living/carbon/xenomorph/update_icons.dm @@ -207,31 +207,46 @@ overlays_standing[X_LEGCUFF_LAYER] = image("icon" = 'icons/mob/xenos/effects.dmi', "icon_state" = "legcuff", "layer" =-X_LEGCUFF_LAYER) apply_overlay(X_LEGCUFF_LAYER) -/mob/living/carbon/xenomorph/proc/create_shriekwave(color = null) - var/image/screech_image - - var/offset_x = 0 - var/offset_y = 0 - if(mob_size <= MOB_SIZE_XENO) - offset_x = -7 - offset_y = -10 - - if (color) - screech_image = image("icon"='icons/mob/xenos/overlay_effects64x64.dmi', "icon_state" = "shriek_waves_greyscale") // For Praetorian screech - screech_image.color = color - else - screech_image = image("icon"='icons/mob/xenos/overlay_effects64x64.dmi', "icon_state" = "shriek_waves") //Ehh, suit layer's not being used. - - screech_image.pixel_x = offset_x - screech_image.pixel_y = offset_y - - screech_image.appearance_flags |= RESET_COLOR - - remove_suit_layer() - - overlays_standing[X_SUIT_LAYER] = screech_image - apply_overlay(X_SUIT_LAYER) - addtimer(CALLBACK(src, PROC_REF(remove_overlay), X_SUIT_LAYER), 30) +/mob/living/carbon/xenomorph/proc/create_shriekwave(shriekwaves_left) + var/offset_y = 8 + if(mob_size == MOB_SIZE_XENO) + offset_y = 24 + if(mob_size == MOB_SIZE_IMMOBILE) + offset_y = 28 + + //the shockwave center is updated eachtime shockwave is called and offset relative to the mob_size. + //due to the speed of the shockwaves, it isn't required to be tied to the exact mob movements + var/epicenter = loc //center of the shockwave, set at the center of the tile that the mob is currently standing on + var/easing = QUAD_EASING | EASE_OUT + var/stage1_radius = rand(11, 12) + var/stage2_radius = rand(9, 11) + var/stage3_radius = rand(8, 10) + var/stage4_radius = 7.5 + + //shockwaves are iterated, counting down once per shriekwave, with the total amount being determined on the respective xeno ability tile + if(shriekwaves_left > 12) + shriekwaves_left-- + new /obj/effect/shockwave(epicenter, stage1_radius, 0.5, easing, offset_y) + addtimer(CALLBACK(src, PROC_REF(create_shriekwave), shriekwaves_left), 2) + return + if(shriekwaves_left > 8) + shriekwaves_left-- + new /obj/effect/shockwave(epicenter, stage2_radius, 0.5, easing, offset_y) + addtimer(CALLBACK(src, PROC_REF(create_shriekwave), shriekwaves_left), 3) + return + if(shriekwaves_left > 4) + shriekwaves_left-- + new /obj/effect/shockwave(epicenter, stage3_radius, 0.5, easing, offset_y) + addtimer(CALLBACK(src, PROC_REF(create_shriekwave), shriekwaves_left), 3) + return + if(shriekwaves_left > 1) + shriekwaves_left-- + new /obj/effect/shockwave(epicenter, stage4_radius, 0.5, easing, offset_y) + addtimer(CALLBACK(src, PROC_REF(create_shriekwave), shriekwaves_left), 3) + return + if(shriekwaves_left == 1) + shriekwaves_left-- + new /obj/effect/shockwave(epicenter, 10.5, 0.6, easing, offset_y) /mob/living/carbon/xenomorph/proc/create_stomp() remove_suit_layer() From 53e721666c8d46b32d9379f3663f789359202c2e Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Sun, 21 Apr 2024 22:43:32 +0100 Subject: [PATCH 04/29] Automatic changelog for PR #5938 [ci skip] --- html/changelogs/AutoChangeLog-pr-5938.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5938.yml diff --git a/html/changelogs/AutoChangeLog-pr-5938.yml b/html/changelogs/AutoChangeLog-pr-5938.yml new file mode 100644 index 000000000000..7a28ba826a5d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5938.yml @@ -0,0 +1,5 @@ +author: "GrrrKitten" +delete-after: True +changes: + - rscadd: "Adds shockwave VFX to powerful explosions" + - rscadd: "Adds shockwave VFX to Queen + Predalien screech" \ No newline at end of file From 3a4e914594fae21b2a171e0399e9a0d9a5b6af8b Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 22 Apr 2024 01:11:38 +0000 Subject: [PATCH 05/29] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-5938.yml | 5 ----- html/changelogs/AutoChangeLog-pr-6124.yml | 4 ---- html/changelogs/AutoChangeLog-pr-6126.yml | 6 ------ html/changelogs/AutoChangeLog-pr-6165.yml | 4 ---- html/changelogs/AutoChangeLog-pr-6166.yml | 4 ---- html/changelogs/AutoChangeLog-pr-6167.yml | 4 ---- html/changelogs/AutoChangeLog-pr-6168.yml | 4 ---- html/changelogs/AutoChangeLog-pr-6171.yml | 4 ---- html/changelogs/archive/2024-04.yml | 21 +++++++++++++++++++++ 9 files changed, 21 insertions(+), 35 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-5938.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6124.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6126.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6165.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6166.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6167.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6168.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6171.yml diff --git a/html/changelogs/AutoChangeLog-pr-5938.yml b/html/changelogs/AutoChangeLog-pr-5938.yml deleted file mode 100644 index 7a28ba826a5d..000000000000 --- a/html/changelogs/AutoChangeLog-pr-5938.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "GrrrKitten" -delete-after: True -changes: - - rscadd: "Adds shockwave VFX to powerful explosions" - - rscadd: "Adds shockwave VFX to Queen + Predalien screech" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6124.yml b/html/changelogs/AutoChangeLog-pr-6124.yml deleted file mode 100644 index 1e02f4897a69..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6124.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "realforest2001" -delete-after: True -changes: - - rscadd: "Added ID Modification Log to the Access Report printout from an ID Console." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6126.yml b/html/changelogs/AutoChangeLog-pr-6126.yml deleted file mode 100644 index 32c18a571e83..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6126.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "LC4492" -delete-after: True -changes: - - rscadd: "Adds a new, better variation of the normal photocopier." - - imageadd: "Adds a new sprite to the new photocopier variation and updates the sprites of both normal, and new photocopiers to look slightly better." - - maptweak: "Adds the new photocopiers to the CC and CL offices." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6165.yml b/html/changelogs/AutoChangeLog-pr-6165.yml deleted file mode 100644 index 0f67210d4ce4..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6165.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Git-Nivrak" -delete-after: True -changes: - - rscdel: "Reverted back to old throw logic" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6166.yml b/html/changelogs/AutoChangeLog-pr-6166.yml deleted file mode 100644 index 273b212dbda3..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6166.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "realforest2001" -delete-after: True -changes: - - bugfix: "Delaying round start now shows on the timer again." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6167.yml b/html/changelogs/AutoChangeLog-pr-6167.yml deleted file mode 100644 index 0406b100623e..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6167.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Zonespace27" -delete-after: True -changes: - - admin: "Unmarked tickets now mark themselves when an admin starts responding to one" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6168.yml b/html/changelogs/AutoChangeLog-pr-6168.yml deleted file mode 100644 index 3f1451a862c5..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6168.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "harryob" -delete-after: True -changes: - - bugfix: "you can bind to space again" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6171.yml b/html/changelogs/AutoChangeLog-pr-6171.yml deleted file mode 100644 index d9cd7b85fa1a..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6171.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "iloveloopers" -delete-after: True -changes: - - bugfix: "custom flamer fuels no longer work for increasing OT assembly's caps" \ No newline at end of file diff --git a/html/changelogs/archive/2024-04.yml b/html/changelogs/archive/2024-04.yml index b3f9ffa64195..5373972976df 100644 --- a/html/changelogs/archive/2024-04.yml +++ b/html/changelogs/archive/2024-04.yml @@ -299,3 +299,24 @@ - rscadd: Added an ARES Log for chambering the OB Cannon. vero5123: - bugfix: toggling ghost vision now keeps the user's mob visible. +2024-04-22: + Git-Nivrak: + - rscdel: Reverted back to old throw logic + GrrrKitten: + - rscadd: Adds shockwave VFX to powerful explosions + - rscadd: Adds shockwave VFX to Queen + Predalien screech + LC4492: + - rscadd: Adds a new, better variation of the normal photocopier. + - imageadd: Adds a new sprite to the new photocopier variation and updates the sprites + of both normal, and new photocopiers to look slightly better. + - maptweak: Adds the new photocopiers to the CC and CL offices. + Zonespace27: + - admin: Unmarked tickets now mark themselves when an admin starts responding to + one + harryob: + - bugfix: you can bind to space again + iloveloopers: + - bugfix: custom flamer fuels no longer work for increasing OT assembly's caps + realforest2001: + - bugfix: Delaying round start now shows on the timer again. + - rscadd: Added ID Modification Log to the Access Report printout from an ID Console. From da476e741408603dc4589b6c41fd7933f7f3540e Mon Sep 17 00:00:00 2001 From: Drathek <76988376+Drulikar@users.noreply.github.com> Date: Mon, 22 Apr 2024 14:16:10 -0700 Subject: [PATCH 06/29] External Bleeding Sealing in Cryo Tubes (#6175) # About the pull request This PR is sort of a follow up to #6058 expanding on the bleeding stop effect for cryotubes allowing them to also seal external bleeding. Since internal bleeding did not cap the reduction in blood loss, it could underflow resulting in blood being added for the last tick. This is now fixed. # Explain why it's good for the game Cryotubes already cure IB when cryo chemicals are used because of the patient reaching low temperatures, so I see little reason why the effect wouldn't also occur for external bleeding if you're in a cryotube. # Testing Photographs and Procedure
Screenshots & Videos https://github.com/cmss13-devs/cmss13/assets/76988376/7dffed9b-051c-4cfc-9c01-7314766d5d15
# Changelog :cl: balance: Cryotubes now also cure external bleeding fix: Fixed internal bleeding granting blood on its last tick /:cl: --- code/datums/effects/bleeding.dm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/code/datums/effects/bleeding.dm b/code/datums/effects/bleeding.dm index 2171580a94db..f56efbb3c69d 100644 --- a/code/datums/effects/bleeding.dm +++ b/code/datums/effects/bleeding.dm @@ -71,6 +71,11 @@ if(affected_mob.reagents.get_reagent_amount("thwei")) blood_loss -= THWEI_BLOOD_REDUCTION + if(affected_mob.bodytemperature < T0C && (affected_mob.reagents.get_reagent_amount("cryoxadone") || affected_mob.reagents.get_reagent_amount("clonexadone"))) + var/obj/structure/machinery/cryo_cell/cryo = affected_mob.loc + if(istype(cryo) && cryo.on && cryo.operable()) + blood_loss -= CRYO_BLOOD_REDUCTION + var/mob/living/carbon/human/affected_human = affected_mob if(istype(affected_human)) if(affected_human.chem_effect_flags & CHEM_EFFECT_NO_BLEEDING) @@ -95,18 +100,19 @@ if(affected_mob.in_stasis == STASIS_IN_BAG) return FALSE - if(affected_mob.bodytemperature < T0C && (affected_mob.reagents && affected_mob.reagents.get_reagent_amount("cryoxadone") || affected_mob.reagents.get_reagent_amount("clonexadone"))) - blood_loss -= CRYO_BLOOD_REDUCTION - if(affected_mob.reagents) // Annoying QC check if(affected_mob.reagents.get_reagent_amount("thwei")) blood_loss -= THWEI_BLOOD_REDUCTION + if(affected_mob.bodytemperature < T0C && (affected_mob.reagents.get_reagent_amount("cryoxadone") || affected_mob.reagents.get_reagent_amount("clonexadone"))) + blood_loss -= CRYO_BLOOD_REDUCTION + var/mob/living/carbon/human/affected_human = affected_mob if(istype(affected_human)) if(affected_human.chem_effect_flags & CHEM_EFFECT_NO_BLEEDING) return FALSE + blood_loss = max(blood_loss, 0) // Bleeding shouldn't give extra blood even if its only 1 tick affected_mob.blood_volume = max(affected_mob.blood_volume - blood_loss, 0) return TRUE From 550f4f4a12354ec59c9878b44a4a35a04e531367 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Mon, 22 Apr 2024 22:21:07 +0100 Subject: [PATCH 07/29] Automatic changelog for PR #6175 [ci skip] --- html/changelogs/AutoChangeLog-pr-6175.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6175.yml diff --git a/html/changelogs/AutoChangeLog-pr-6175.yml b/html/changelogs/AutoChangeLog-pr-6175.yml new file mode 100644 index 000000000000..3adc713a94c4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6175.yml @@ -0,0 +1,5 @@ +author: "Drulikar" +delete-after: True +changes: + - balance: "Cryotubes now also cure external bleeding" + - bugfix: "Fixed internal bleeding granting blood on its last tick" \ No newline at end of file From cb9f8942c3589e73abb46ad168b5e926e1fa820c Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 23 Apr 2024 01:10:25 +0000 Subject: [PATCH 08/29] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-6175.yml | 5 ----- html/changelogs/archive/2024-04.yml | 4 ++++ 2 files changed, 4 insertions(+), 5 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-6175.yml diff --git a/html/changelogs/AutoChangeLog-pr-6175.yml b/html/changelogs/AutoChangeLog-pr-6175.yml deleted file mode 100644 index 3adc713a94c4..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6175.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Drulikar" -delete-after: True -changes: - - balance: "Cryotubes now also cure external bleeding" - - bugfix: "Fixed internal bleeding granting blood on its last tick" \ No newline at end of file diff --git a/html/changelogs/archive/2024-04.yml b/html/changelogs/archive/2024-04.yml index 5373972976df..d376ddccc565 100644 --- a/html/changelogs/archive/2024-04.yml +++ b/html/changelogs/archive/2024-04.yml @@ -320,3 +320,7 @@ realforest2001: - bugfix: Delaying round start now shows on the timer again. - rscadd: Added ID Modification Log to the Access Report printout from an ID Console. +2024-04-23: + Drulikar: + - balance: Cryotubes now also cure external bleeding + - bugfix: Fixed internal bleeding granting blood on its last tick From c7269abde29f33b9d29bd2552533182731ec6c9f Mon Sep 17 00:00:00 2001 From: Git-Nivrak <59925169+Git-Nivrak@users.noreply.github.com> Date: Tue, 23 Apr 2024 08:48:44 +0300 Subject: [PATCH 09/29] Fixes boilers slowing themselves (#6177) # About the pull request Fixes a bug where boilers would slow themselves by using using toggle long-range sight when resting # Explain why it's good for the game Bugs are bad # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: fix: Fixes boilers slowing themselves by using long range sight while resting. /:cl: --------- Co-authored-by: fira --- .../mob/living/carbon/xenomorph/abilities/general_abilities.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm index f62bb9e17421..f36e23394eef 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/general_abilities.dm @@ -296,6 +296,9 @@ /datum/action/xeno_action/onclick/toggle_long_range/use_ability(atom/target) var/mob/living/carbon/xenomorph/xeno = owner + if (!xeno.check_state()) + return + if(xeno.observed_xeno) return From a389eef9f461f53315ed98b374760d8505838bd0 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Tue, 23 Apr 2024 06:53:21 +0100 Subject: [PATCH 10/29] Automatic changelog for PR #6177 [ci skip] --- html/changelogs/AutoChangeLog-pr-6177.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6177.yml diff --git a/html/changelogs/AutoChangeLog-pr-6177.yml b/html/changelogs/AutoChangeLog-pr-6177.yml new file mode 100644 index 000000000000..2395e50fe825 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6177.yml @@ -0,0 +1,4 @@ +author: "Git-Nivrak" +delete-after: True +changes: + - bugfix: "Fixes boilers slowing themselves by using long range sight while resting." \ No newline at end of file From 2e6f6dd036aca80d4ad12774f79b90c9942d8db0 Mon Sep 17 00:00:00 2001 From: iloveloopers <140007537+iloveloopers@users.noreply.github.com> Date: Tue, 23 Apr 2024 01:53:49 -0400 Subject: [PATCH 11/29] alt clicking a reagent tank will now toggle whether its dispensing or filling (#6176) # About the pull request the title # Explain why it's good for the game its QOL better OT speedrunning # Testing Photographs and Procedure testing seems to work fine but I'm not sure if there could be any undesired side effects # Changelog :cl: qol: Alt clicking a reagent tank will now toggle whether its dispensing or filling /:cl: --------- Co-authored-by: Drathek <76988376+Drulikar@users.noreply.github.com> --- .../objects/structures/reagent_dispensers.dm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/code/game/objects/structures/reagent_dispensers.dm b/code/game/objects/structures/reagent_dispensers.dm index a89f35ce38f3..d0f9f513e7f8 100644 --- a/code/game/objects/structures/reagent_dispensers.dm +++ b/code/game/objects/structures/reagent_dispensers.dm @@ -129,6 +129,25 @@ if(N) amount_per_transfer_from_this = N +/obj/structure/reagent_dispensers/clicked(mob/user, list/mods) + if(!Adjacent(user)) + return ..() + + if(!ishuman(user)) + return ..() + + if(!reagents || reagents.locked) + return ..() + + if(mods["alt"]) + dispensing = !dispensing + if(dispensing) + to_chat(user, SPAN_NOTICE("[src] is now dispensing")) + else + to_chat(user, SPAN_NOTICE("[src] is now filling")) + return TRUE + return ..() + /obj/structure/reagent_dispensers/attackby(obj/item/hit_item, mob/living/user) if(istype(hit_item, /obj/item/reagent_container)) return From 10c0b108d40d45776defebeb5142c5b355bc408a Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Tue, 23 Apr 2024 06:58:42 +0100 Subject: [PATCH 12/29] Automatic changelog for PR #6176 [ci skip] --- html/changelogs/AutoChangeLog-pr-6176.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6176.yml diff --git a/html/changelogs/AutoChangeLog-pr-6176.yml b/html/changelogs/AutoChangeLog-pr-6176.yml new file mode 100644 index 000000000000..9a7cef1f0df1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6176.yml @@ -0,0 +1,4 @@ +author: "iloveloopers" +delete-after: True +changes: + - qol: "Alt clicking a reagent tank will now toggle whether its dispensing or filling" \ No newline at end of file From 88955d735d44d1d6b94805663430cd69f330a50b Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 24 Apr 2024 01:11:22 +0000 Subject: [PATCH 13/29] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-6176.yml | 4 ---- html/changelogs/AutoChangeLog-pr-6177.yml | 4 ---- html/changelogs/archive/2024-04.yml | 5 +++++ 3 files changed, 5 insertions(+), 8 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-6176.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-6177.yml diff --git a/html/changelogs/AutoChangeLog-pr-6176.yml b/html/changelogs/AutoChangeLog-pr-6176.yml deleted file mode 100644 index 9a7cef1f0df1..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6176.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "iloveloopers" -delete-after: True -changes: - - qol: "Alt clicking a reagent tank will now toggle whether its dispensing or filling" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6177.yml b/html/changelogs/AutoChangeLog-pr-6177.yml deleted file mode 100644 index 2395e50fe825..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6177.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Git-Nivrak" -delete-after: True -changes: - - bugfix: "Fixes boilers slowing themselves by using long range sight while resting." \ No newline at end of file diff --git a/html/changelogs/archive/2024-04.yml b/html/changelogs/archive/2024-04.yml index d376ddccc565..efa0f73ad350 100644 --- a/html/changelogs/archive/2024-04.yml +++ b/html/changelogs/archive/2024-04.yml @@ -324,3 +324,8 @@ Drulikar: - balance: Cryotubes now also cure external bleeding - bugfix: Fixed internal bleeding granting blood on its last tick +2024-04-24: + Git-Nivrak: + - bugfix: Fixes boilers slowing themselves by using long range sight while resting. + iloveloopers: + - qol: Alt clicking a reagent tank will now toggle whether its dispensing or filling From cba9817e5e75295b8731b520ce9964ab4ae2bb5f Mon Sep 17 00:00:00 2001 From: Steelpoint <6595389+Steelpoint@users.noreply.github.com> Date: Wed, 24 Apr 2024 12:04:56 +0800 Subject: [PATCH 14/29] UPP/CLF Combat Synth Presets (#6183) # About the pull request Adds a UPP and CLF Combat Synthetic preset, allowing staff to spawn in a ready to go combat synthetic. These are admin only, they can not spawn in via regular gameplay. Their loadouts have been slightly tweaked to retain their current setup but with an emphasis on having combat weapons. # Explain why it's good for the game Adds extra options for staff who may want to allow a Combat Synthetic to appear in-game for an event, the preset will make it quicker to spawn one in instead of requiring an admin to fiddle with changing a Synthetic to a combatant and spawning it in gear. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: add: UPP and CLF Combat Synthetic preset is now available for admins to spawn them in. /:cl: --------- Co-authored-by: Steelpoint Co-authored-by: Drathek <76988376+Drulikar@users.noreply.github.com> --- code/modules/gear_presets/clf.dm | 48 +++++++++++++++++++++++++++ code/modules/gear_presets/upp.dm | 56 ++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) diff --git a/code/modules/gear_presets/clf.dm b/code/modules/gear_presets/clf.dm index 9c05ff8fa5fc..143a2271f00e 100644 --- a/code/modules/gear_presets/clf.dm +++ b/code/modules/gear_presets/clf.dm @@ -900,6 +900,54 @@ list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), ) +/datum/equipment_preset/clf/synth/combat + name = "CLF Combat Synthetic" + flags = EQUIPMENT_PRESET_EXTRA + +/datum/equipment_preset/clf/synth/combat/load_skills(mob/living/carbon/human/new_human) + . = ..() + new_human.allow_gun_usage = TRUE + +/datum/equipment_preset/clf/synth/combat/load_gear(mob/living/carbon/human/new_human) + //back + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/engineerpack/ert, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator, WEAR_IN_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/explosive/plastic, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK) + //face + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CLF/command(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/attachable/bayonet/upp, WEAR_FACE) + if(new_human.disabilities & NEARSIGHTED) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/prescription(new_human), WEAR_EYES) + else + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(new_human), WEAR_EYES) + //head + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/jan, WEAR_HEAD) + //body + var/obj/item/clothing/under/colonist/clf/CLF = new() + var/obj/item/clothing/accessory/storage/webbing/webbing = new() + CLF.attach_accessory(new_human, webbing) + new_human.equip_to_slot_or_del(CLF, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/extended, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/extended, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/extended, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/militia, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/extended, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/extended, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/mar40/carbine, WEAR_J_STORE) + //waist + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/full/with_suture_and_graft, WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer(new_human), WEAR_IN_BELT) + //limbs + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat, WEAR_FEET) + //pockets + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/synth, WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/construction/full_barbed_wire, WEAR_R_STORE) + //*****************************************************************************************************/ /datum/equipment_preset/clf/commander diff --git a/code/modules/gear_presets/upp.dm b/code/modules/gear_presets/upp.dm index 39aed17a1fad..cdb955bd9696 100644 --- a/code/modules/gear_presets/upp.dm +++ b/code/modules/gear_presets/upp.dm @@ -2806,6 +2806,62 @@ list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), ) + +/datum/equipment_preset/upp/synth/combat + name = "UPP Combat Synthetic" + flags = EQUIPMENT_PRESET_EXTRA + + assignment = JOB_UPP_COMBAT_SYNTH + rank = JOB_UPP_COMBAT_SYNTH + +/datum/equipment_preset/upp/synth/combat/load_skills(mob/living/carbon/human/new_human) + . = ..() + new_human.allow_gun_usage = TRUE + +/datum/equipment_preset/upp/synth/combat/load_gear(mob/living/carbon/human/new_human) + //back + 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/tool/surgery/surgical_line, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/compact, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/reagent_container/hypospray/epinephrine, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/reagent_container/glass/bottle/epinephrine, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/reagent_container/blood/OMinus, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/roller/surgical, WEAR_IN_BACK) + //face + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/tool/screwdriver, WEAR_R_EAR) + if(new_human.disabilities & NEARSIGHTED) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/prescription(new_human), WEAR_EYES) + else + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(new_human), WEAR_EYES) + //head + var/hat = pick(/obj/item/clothing/head/uppcap, /obj/item/clothing/head/uppcap/beret, /obj/item/clothing/head/uppcap/ushanka) + new_human.equip_to_slot_or_del(new hat, WEAR_HEAD) + //body + var/obj/item/clothing/under/marine/veteran/UPP/UPP = new() + var/obj/item/clothing/accessory/storage/surg_vest/drop_green/upp/webbing = new() + UPP.attach_accessory(new_human, webbing) + new_human.equip_to_slot_or_del(UPP, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/support, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/weapon/telebaton, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/bizon, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/bizon, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/bizon/upp, WEAR_J_STORE) + 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/accessory/patch/upp/naval, WEAR_ACCESSORY) + //waist + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/upp/synth, WEAR_WAIST) + //limbs + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp/knife, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS) + //pockets + var/obj/item/storage/pouch/magazine/large/ppouch = new() + new_human.equip_to_slot_or_del(ppouch, WEAR_L_STORE) + for(var/i = 1 to ppouch.storage_slots) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/bizon, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/tactical/upp, WEAR_R_STORE) + //*****************************************************************************************************/ /datum/equipment_preset/upp/conscript From dc9aa36465d5271a251141647001b75325c35967 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 24 Apr 2024 05:10:39 +0100 Subject: [PATCH 15/29] Automatic changelog for PR #6183 [ci skip] --- html/changelogs/AutoChangeLog-pr-6183.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6183.yml diff --git a/html/changelogs/AutoChangeLog-pr-6183.yml b/html/changelogs/AutoChangeLog-pr-6183.yml new file mode 100644 index 000000000000..5971ec8dae32 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6183.yml @@ -0,0 +1,4 @@ +author: "Steelpoint" +delete-after: True +changes: + - rscadd: "UPP and CLF Combat Synthetic preset is now available for admins to spawn them in." \ No newline at end of file From cc1ba1d2df4d6ccb8892ba91c08b0a33e734f1e6 Mon Sep 17 00:00:00 2001 From: ihatethisengine <115417687+ihatethisengine@users.noreply.github.com> Date: Wed, 24 Apr 2024 20:58:38 +0300 Subject: [PATCH 16/29] Fixes spotlight breaking every time (#6184) # About the pull request Spotlight no longer turns off during transit. Who cares about lighting in space anyway? # Explain why it's good for the game Convenient and clear. # Testing Photographs and Procedure
I tested it
# Changelog :cl: ihatethisengine fix: spotlight no longer breaks after every flight /:cl: --- code/modules/cm_marines/dropship_equipment.dm | 6 ------ 1 file changed, 6 deletions(-) diff --git a/code/modules/cm_marines/dropship_equipment.dm b/code/modules/cm_marines/dropship_equipment.dm index bd40076ea500..af06f468adcd 100644 --- a/code/modules/cm_marines/dropship_equipment.dm +++ b/code/modules/cm_marines/dropship_equipment.dm @@ -524,12 +524,6 @@ if(light_on) set_light(0) -/obj/structure/dropship_equipment/electronics/spotlights/on_launch() - set_light(0) - -/obj/structure/dropship_equipment/electronics/spotlights/on_arrival() - set_light(brightness) - /obj/structure/dropship_equipment/electronics/spotlights/ui_data(mob/user) . = list() var/is_deployed = light_on From e58c905d8a78dbde9d71639c864c64070c2c905c Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 24 Apr 2024 19:03:04 +0100 Subject: [PATCH 17/29] Automatic changelog for PR #6184 [ci skip] --- html/changelogs/AutoChangeLog-pr-6184.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6184.yml diff --git a/html/changelogs/AutoChangeLog-pr-6184.yml b/html/changelogs/AutoChangeLog-pr-6184.yml new file mode 100644 index 000000000000..ed42d160bdee --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6184.yml @@ -0,0 +1,4 @@ +author: "ihatethisengine" +delete-after: True +changes: + - bugfix: "spotlight no longer breaks after every flight" \ No newline at end of file From 6bec1ddce6470251ee61b628c51e76c3d5e52bf8 Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Wed, 24 Apr 2024 20:50:38 +0100 Subject: [PATCH 18/29] Project ARES: Fixes deleting flight logs. (#6186) # About the pull request As title says, this lets you delete flight logs as intended. # Explain why it's good for the game Bugs are bad. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: fix: You can delete flight logs from ARES Interface again as intended. /:cl: --- code/game/machinery/ARES/ARES_interface.dm | 4 ++++ tgui/packages/tgui/interfaces/AresInterface.jsx | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/ARES/ARES_interface.dm b/code/game/machinery/ARES/ARES_interface.dm index 6cc7c220fd04..341e6a05acf4 100644 --- a/code/game/machinery/ARES/ARES_interface.dm +++ b/code/game/machinery/ARES/ARES_interface.dm @@ -368,6 +368,10 @@ new_title = "[record.title] at [record.time]" new_details = record.details datacore.records_tech -= record + if(ARES_RECORD_FLIGHT) + new_title = "[record.title] at [record.time]" + new_details = record.details + datacore.records_flight -= record new_delete.details = new_details new_delete.user = last_login diff --git a/tgui/packages/tgui/interfaces/AresInterface.jsx b/tgui/packages/tgui/interfaces/AresInterface.jsx index be9106e31c25..bcd200d45d74 100644 --- a/tgui/packages/tgui/interfaces/AresInterface.jsx +++ b/tgui/packages/tgui/interfaces/AresInterface.jsx @@ -66,7 +66,7 @@ const Login = (props) => { WY-DOS Executive - Version 8.2.3 + Version 8.3.4 Copyright © 2182, Weyland Yutani Corp.