From 99af80f708b30036e0cbe01f8ea4083a9912eb24 Mon Sep 17 00:00:00 2001 From: MistChristmas Date: Wed, 20 Aug 2025 09:10:51 +0100 Subject: [PATCH 01/41] Removes Duplicate Flashlight Grip entries in M37 and M37A2 attachment list (#10413) # About the pull request As title. # Explain why it's good for the game Wiki sanity # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: MistChristmas fix: Fix flashlight grip being listed twice for M37. /:cl: --- code/modules/projectiles/guns/shotguns.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/projectiles/guns/shotguns.dm b/code/modules/projectiles/guns/shotguns.dm index d562acb24cb8..21931e57c0bb 100644 --- a/code/modules/projectiles/guns/shotguns.dm +++ b/code/modules/projectiles/guns/shotguns.dm @@ -1213,7 +1213,6 @@ can cause issues with ammo types getting mixed up during the burst. /obj/item/attachable/flashlight/grip, /obj/item/attachable/gyro, /obj/item/attachable/flashlight, - /obj/item/attachable/flashlight/grip, /obj/item/attachable/extended_barrel, /obj/item/attachable/heavy_barrel, /obj/item/attachable/compensator, @@ -1337,7 +1336,6 @@ can cause issues with ammo types getting mixed up during the burst. /obj/item/attachable/flashlight/grip, /obj/item/attachable/gyro, /obj/item/attachable/flashlight, - /obj/item/attachable/flashlight/grip, /obj/item/attachable/extended_barrel, /obj/item/attachable/heavy_barrel, /obj/item/attachable/compensator, From 9a48c3cc960be9535b571b1ac38e81037310a38b Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Wed, 20 Aug 2025 08:26:29 +0000 Subject: [PATCH 02/41] Automatic changelog for PR #10413 [ci skip] --- html/changelogs/AutoChangeLog-pr-10413.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10413.yml diff --git a/html/changelogs/AutoChangeLog-pr-10413.yml b/html/changelogs/AutoChangeLog-pr-10413.yml new file mode 100644 index 000000000000..a6bc174d8030 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10413.yml @@ -0,0 +1,4 @@ +author: "MistChristmas" +delete-after: True +changes: + - bugfix: "Fix flashlight grip being listed twice for M37." \ No newline at end of file From 7304eac74d14bfda2066da672edf3f223627083f Mon Sep 17 00:00:00 2001 From: vandu-jr <57843385+thevandie@users.noreply.github.com> Date: Wed, 20 Aug 2025 04:12:54 -0400 Subject: [PATCH 03/41] Takes The Femboy Description Out Back (And Shoots It) (#10396) # About the pull request Changes the description on the plump helmet. # Explain why it's good for the game The original description was sus as hell. # Testing Photographs and Procedure Untitled correct # Changelog :cl: add: Adds a new description to the plump helmet mushroom. del: Deletes the weird description on the plump helmet mushroom. /:cl: --- code/game/objects/items/reagent_containers/food/snacks/grown.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/reagent_containers/food/snacks/grown.dm b/code/game/objects/items/reagent_containers/food/snacks/grown.dm index 7785ff4b47de..87d345ab84c9 100644 --- a/code/game/objects/items/reagent_containers/food/snacks/grown.dm +++ b/code/game/objects/items/reagent_containers/food/snacks/grown.dm @@ -561,7 +561,7 @@ /obj/item/reagent_container/food/snacks/grown/mushroom/plumphelmet name = "plump-helmet" - desc = "Plumus Hellmus: Plump, soft and s-so inviting~" + desc = "Plumus Hellmus: A purple plump mushroom. Decent for baking." icon_state = "plumphelmet" filling_color = "#F714BE" plantname = "plumphelmet" From c42fe20eccc3ba14a7abcdb5e3e7afc5535ece0e Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Wed, 20 Aug 2025 08:47:26 +0000 Subject: [PATCH 04/41] Automatic changelog for PR #10396 [ci skip] --- html/changelogs/AutoChangeLog-pr-10396.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10396.yml diff --git a/html/changelogs/AutoChangeLog-pr-10396.yml b/html/changelogs/AutoChangeLog-pr-10396.yml new file mode 100644 index 000000000000..07981f0d5fad --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10396.yml @@ -0,0 +1,5 @@ +author: "thevandie" +delete-after: True +changes: + - rscadd: "Adds a new description to the plump helmet mushroom." + - rscdel: "Deletes the weird description on the plump helmet mushroom." \ No newline at end of file From 1a7e4e42efad6b9eeea312b1f740101755ce76a9 Mon Sep 17 00:00:00 2001 From: Spypig23 <007skyfool@gmail.com> Date: Wed, 20 Aug 2025 19:03:47 +1000 Subject: [PATCH 05/41] framework --- .../__DEFINES/dcs/signals/atom/signals_obj.dm | 3 + code/modules/vehicles/blackfoot/blackfoot.dm | 15 +++ code/modules/vehicles/blackfoot/interior.dm | 1 + .../hardpoints/primary/blackfoot_launchers.dm | 9 ++ .../vehicles/hardpoints/secondary/doorgun.dm | 4 + .../hardpoints/support/recon_system.dm | 100 ++++++++++++++++++ colonialmarines.dme | 1 + 7 files changed, 133 insertions(+) create mode 100644 code/modules/vehicles/hardpoints/support/recon_system.dm diff --git a/code/__DEFINES/dcs/signals/atom/signals_obj.dm b/code/__DEFINES/dcs/signals/atom/signals_obj.dm index 3445fe3df55f..d1a8301641fb 100644 --- a/code/__DEFINES/dcs/signals/atom/signals_obj.dm +++ b/code/__DEFINES/dcs/signals/atom/signals_obj.dm @@ -64,3 +64,6 @@ // from /obj/item/device/binoculars/range/designator/acquire_target() #define COMSIG_DESIGNATOR_LASE "comsig_designator_lase" #define COMSIG_DESIGNATOR_LASE_OFF "comsig_designator_lase_off" + +/// from /obj/vehicle/multitile/blackfoot/add_seated_verbs() +#define COMSIG_BLACKFOOT_ACTIONS_UPDATE "comsig_blackfoot_actions_update" diff --git a/code/modules/vehicles/blackfoot/blackfoot.dm b/code/modules/vehicles/blackfoot/blackfoot.dm index 0c84c9abc8d0..b0a694872d67 100644 --- a/code/modules/vehicles/blackfoot/blackfoot.dm +++ b/code/modules/vehicles/blackfoot/blackfoot.dm @@ -23,6 +23,7 @@ bound_y = 0 interior_map = /datum/map_template/interior/blackfoot + var/area/interior_area move_max_momentum = 2.2 move_momentum_build_factor = 1.5 @@ -45,6 +46,7 @@ /obj/item/hardpoint/primary/blackfoot_launchers, /obj/item/hardpoint/support/sensor_array, /obj/item/hardpoint/secondary/doorgun, + /obj/item/hardpoint/support/recon_system, ) entrances = list( @@ -79,6 +81,9 @@ var/state = STATE_STOWED + /// used by the recon_system module to allow the VTOL to 'run dark' + var/stealth_mode = FALSE + COOLDOWN_DECLARE(turn_cooldown) COOLDOWN_DECLARE(flight_sound_cooldown) @@ -357,6 +362,8 @@ give_action(M, /datum/action/human_action/blackfoot/toggle_engines) give_action(M, /datum/action/human_action/blackfoot/toggle_targeting) + SEND_SIGNAL(src, COMSIG_BLACKFOOT_ACTIONS_UPDATE) + for(var/atom/movable/screen/blackfoot/screen_to_add as anything in custom_hud) M.client.add_to_screen(screen_to_add) screen_to_add.update(fuel, max_fuel, health, maxhealth, battery, max_battery) @@ -444,6 +451,8 @@ if(launchers) launchers.safety = TRUE + SEND_SIGNAL(src, COMSIG_BLACKFOOT_ACTIONS_UPDATE, TRUE) + for(var/atom/movable/screen/blackfoot/screen_to_remove as anything in custom_hud) M.client.remove_from_screen(screen_to_remove) @@ -895,6 +904,12 @@ vehicle.toggle_stowed() return +/obj/vehicle/multitile/blackfoot/perform_honk() + if(stealth_mode) + to_chat(seats[VEHICLE_DRIVER], SPAN_WARNING("Perhaps sounding the horn isn't the best way to be stealthy?")) + return + if(honk_sound) + playsound(loc, honk_sound, 75, TRUE, 15) //heard within ~15 tiles /datum/action/human_action/blackfoot/New(Target, obj/item/holder) . = ..() diff --git a/code/modules/vehicles/blackfoot/interior.dm b/code/modules/vehicles/blackfoot/interior.dm index bf7c10e7892a..5dcf2cf3ac08 100644 --- a/code/modules/vehicles/blackfoot/interior.dm +++ b/code/modules/vehicles/blackfoot/interior.dm @@ -63,6 +63,7 @@ if(istype(interior.exterior, /obj/vehicle/multitile/blackfoot)) var/obj/vehicle/multitile/blackfoot/linked_blackfoot = interior.exterior loader.linked_blackfoot = linked_blackfoot + linked_blackfoot.interior_area = get_area(loader) qdel(src) diff --git a/code/modules/vehicles/hardpoints/primary/blackfoot_launchers.dm b/code/modules/vehicles/hardpoints/primary/blackfoot_launchers.dm index 6ec7f25de419..0caeb12e1458 100644 --- a/code/modules/vehicles/hardpoints/primary/blackfoot_launchers.dm +++ b/code/modules/vehicles/hardpoints/primary/blackfoot_launchers.dm @@ -36,10 +36,19 @@ return icon /obj/item/hardpoint/primary/blackfoot_launchers/try_fire(atom/target, mob/living/user, params) + var/obj/vehicle/multitile/blackfoot/blackfoot_owner = owner + + if(!blackfoot_owner) + return + if(safety) to_chat(user, SPAN_WARNING("Targeting mode is not enabled, unable to fire.")) return + if(blackfoot_owner.stealth_mode) + to_chat(user, SPAN_WARNING("Weapons system unavailable while recon mode is active.")) + return + if(ammo && ammo.current_rounds <= 0) reload(user) return diff --git a/code/modules/vehicles/hardpoints/secondary/doorgun.dm b/code/modules/vehicles/hardpoints/secondary/doorgun.dm index 4a98c999a63e..ea38dc8f455d 100644 --- a/code/modules/vehicles/hardpoints/secondary/doorgun.dm +++ b/code/modules/vehicles/hardpoints/secondary/doorgun.dm @@ -48,6 +48,10 @@ if(!blackfoot_owner) return + if(blackfoot_owner.stealth_mode) + to_chat(user, SPAN_WARNING("Weapons system unavailable while recon mode is active.")) + return + if(!blackfoot_owner.back_door || !blackfoot_owner.back_door.open) to_chat(user, SPAN_WARNING("You should probably open the rear door before firing.")) return diff --git a/code/modules/vehicles/hardpoints/support/recon_system.dm b/code/modules/vehicles/hardpoints/support/recon_system.dm new file mode 100644 index 000000000000..0294f2ae62e8 --- /dev/null +++ b/code/modules/vehicles/hardpoints/support/recon_system.dm @@ -0,0 +1,100 @@ +/obj/item/hardpoint/support/recon_system + name = "\improper AQ-133 Acquisition System" + desc = "A short-range Air-to-Ground LIDAR target acquisition system designed to actively track and profile non-IFF signatures in a localized range of detection." + icon = 'icons/obj/vehicles/hardpoints/blackfoot.dmi' + icon_state = "radar" + disp_icon = "blackfoot" + disp_icon_state = "radar" + + health = 250 + + var/active = FALSE + +/datum/action/human_action/blackfoot/recon_mode + name = "Toggle Recon Mode" + action_icon_state = "nightvision" + +/obj/item/hardpoint/support/recon_system/on_install(obj/vehicle/multitile/blackfoot/vehicle) + if(!istype(vehicle)) + return + + RegisterSignal(src, COMSIG_BLACKFOOT_ACTIONS_UPDATE, PROC_REF(handle_action_update)) + +/obj/item/hardpoint/support/recon_system/proc/handle_action_update(should_remove_action = FALSE) + var/obj/vehicle/multitile/blackfoot/blackfoot_owner = owner + + if(!blackfoot_owner) + return + + var/mob/user = blackfoot_owner.seats[VEHICLE_DRIVER] + + if(!user) + return + + if(should_remove_action) + remove_action(user, /datum/action/human_action/blackfoot/recon_mode) + else + give_action(user, /datum/action/human_action/blackfoot/recon_mode) + +/datum/action/human_action/blackfoot/recon_mode/action_activate() + var/obj/vehicle/multitile/blackfoot/vehicle = owner.interactee + + if(!istype(vehicle)) + return + + . = ..() + + for(var/obj/item/hardpoint/support/recon_system/recon_system in vehicle.hardpoints) + if(recon_system.active) + recon_system.deactivate() + else + recon_system.activate() + +/obj/item/hardpoint/support/recon_system/get_icon_image(x_offset, y_offset, new_dir) + var/obj/vehicle/multitile/blackfoot/blackfoot_owner = owner + + if(!blackfoot_owner) + return + + var/image/icon = image(icon = disp_icon, icon_state = "[disp_icon_state]_[blackfoot_owner.get_sprite_state()]", pixel_x = x_offset, pixel_y = y_offset, dir = new_dir) + + return icon + +/obj/item/hardpoint/support/recon_system/deactivate() + var/obj/vehicle/multitile/blackfoot/blackfoot_owner = owner + + if(!blackfoot_owner) + return + + var/mob/user = blackfoot_owner.seats[VEHICLE_DRIVER] + var/area/interior_area = blackfoot_owner.interior_area + + + if(!user) + return + + if(interior_area) + interior_area.set_base_lighting(COLOR_WHITE, 255) + + active = FALSE + +/obj/item/hardpoint/support/recon_system/proc/activate() + set name = "Toggle Recon Mode" + set desc = "Toggle between stowed and deployed mode." + set category = "Vehicle" + + var/obj/vehicle/multitile/blackfoot/blackfoot_owner = owner + + if(!blackfoot_owner) + return + + var/mob/user = blackfoot_owner.seats[VEHICLE_DRIVER] + var/area/interior_area = blackfoot_owner.interior_area + + if(!user) + return + + if(interior_area) + interior_area.set_base_lighting("#BB3F3F", 200) + + active = TRUE diff --git a/colonialmarines.dme b/colonialmarines.dme index 6252acb0dfe7..30d01532a6a0 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -2630,6 +2630,7 @@ #include "code\modules\vehicles\hardpoints\support\flare.dm" #include "code\modules\vehicles\hardpoints\support\iwsa.dm" #include "code\modules\vehicles\hardpoints\support\overdrive.dm" +#include "code\modules\vehicles\hardpoints\support\recon_system.dm" #include "code\modules\vehicles\hardpoints\support\sensor_array.dm" #include "code\modules\vehicles\hardpoints\support\support.dm" #include "code\modules\vehicles\hardpoints\wheels\apc_wheels.dm" From 58ee652c89231808e90846f901075f2a61d433b3 Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Thu, 21 Aug 2025 01:49:05 +0000 Subject: [PATCH 06/41] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-10396.yml | 5 ----- html/changelogs/AutoChangeLog-pr-10413.yml | 4 ---- html/changelogs/archive/2025-08.yml | 6 ++++++ 3 files changed, 6 insertions(+), 9 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-10396.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-10413.yml diff --git a/html/changelogs/AutoChangeLog-pr-10396.yml b/html/changelogs/AutoChangeLog-pr-10396.yml deleted file mode 100644 index 07981f0d5fad..000000000000 --- a/html/changelogs/AutoChangeLog-pr-10396.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "thevandie" -delete-after: True -changes: - - rscadd: "Adds a new description to the plump helmet mushroom." - - rscdel: "Deletes the weird description on the plump helmet mushroom." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-10413.yml b/html/changelogs/AutoChangeLog-pr-10413.yml deleted file mode 100644 index a6bc174d8030..000000000000 --- a/html/changelogs/AutoChangeLog-pr-10413.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "MistChristmas" -delete-after: True -changes: - - bugfix: "Fix flashlight grip being listed twice for M37." \ No newline at end of file diff --git a/html/changelogs/archive/2025-08.yml b/html/changelogs/archive/2025-08.yml index 30f3ab73d557..e5f2da4fd8cb 100644 --- a/html/changelogs/archive/2025-08.yml +++ b/html/changelogs/archive/2025-08.yml @@ -211,3 +211,9 @@ - balance: Adjusted some weapon statistics of the Desert Eagle/M1911. realforest2001: - bugfix: Blended wall shutters can now be used properly in east-west directions. +2025-08-21: + MistChristmas: + - bugfix: Fix flashlight grip being listed twice for M37. + thevandie: + - rscadd: Adds a new description to the plump helmet mushroom. + - rscdel: Deletes the weird description on the plump helmet mushroom. From 3b6a1d4a9f651e180fb617195d41666fbfa3edfd Mon Sep 17 00:00:00 2001 From: MeH0y Date: Thu, 21 Aug 2025 18:38:16 -0700 Subject: [PATCH 07/41] The Overthrall & Blooded Thralls (#9493) # About the pull request --- FOR TEST MERGE ONLY UNTIL YAUTJA COUNCIL REACHES A CONCENSUS --- This PR overhauls many of the existing thrall features and adds blooded thralls, which are thralls capable of hunting alone after proving their roleplay competency. Had to reopen on new fork because mapmerge wouldn't work. - Multiple thrall bugfixes allowing them to properly enjoy the role and removal of the "claim equipment" verb in favor of using vendors. - Five new thrall armor sets replacing the existing rags. - Blooded thrall system which gives them the ability to experience a pred-esque gameplay loop individually. # Explain why it's good for the game Bug fixes, removing outdated systems, and a new medium which the playerbase can interact with the yautja whitelist. # Testing Photographs and Procedure
[ ![image](https://github.com/user-attachments/assets/e1de232d-4462-4038-bd60-9335e1855f9b) ](url) [ ![image](https://github.com/user-attachments/assets/4c8f1b5b-f296-4ba2-bb39-c7b920693142) ](url) [ ![image](https://github.com/user-attachments/assets/a2d95761-3a81-489b-a857-c636e5328a4b) ](url)
# Changelog :cl: add: Blooded Thrall system balance: thralls no longer have access to human weaponry fix: thralls can now interact with their mask functions fix: thralls can now use the combi-stick fix: thrall SD now works properly fix: thralls no longer go bald imageadd: Blooded thrall hud icon, new thrall armor set with 5 material types. maptweak: Added blooded thrall vendor on upper-deck, replaced the lower-deck youngblood showers with thrall quarters. /:cl: --- code/__DEFINES/mode.dm | 3 +- code/datums/mob_hud.dm | 5 +- .../vendor_types/antag/antag_predator.dm | 148 +++++++++- code/modules/cm_preds/huntdata.dm | 55 +++- code/modules/cm_preds/thrall_items.dm | 172 ++++++++++-- code/modules/cm_preds/thrall_procs.dm | 95 +------ code/modules/cm_preds/yaut_actions.dm | 4 +- code/modules/cm_preds/yaut_bracers.dm | 14 - code/modules/cm_preds/yaut_hudprocs.dm | 81 +++++- code/modules/cm_preds/yaut_items.dm | 2 +- code/modules/cm_preds/yaut_mask.dm | 6 +- code/modules/cm_preds/yaut_weapons.dm | 6 +- code/modules/mob/dead/observer/orbit.dm | 2 +- .../mob/living/carbon/human/species/human.dm | 5 + .../sprite_accessories/sprite_accessories.dm | 1 + icons/mob/hud/hud_yautja.dmi | Bin 2505 -> 5526 bytes icons/mob/humans/onmob/hunter/thrall_gear.dmi | Bin 2557 -> 10219 bytes icons/obj/items/hunter/pred_vendor.dmi | Bin 6928 -> 20685 bytes icons/obj/items/hunter/thrall_gear.dmi | Bin 1222 -> 2372 bytes maps/predship/huntership.dmm | 253 +++++++----------- 20 files changed, 519 insertions(+), 333 deletions(-) diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm index 5db9cb8016b3..64fe150e9c9d 100644 --- a/code/__DEFINES/mode.dm +++ b/code/__DEFINES/mode.dm @@ -264,6 +264,7 @@ DEFINE_BITFIELD(whitelist_status, list( #define FACTION_COLONIST "Colonist" #define FACTION_YAUTJA "Yautja" #define FACTION_YAUTJA_YOUNG "Yautja Youngblood" +#define FACTION_BLOODED_HUNTER "Blooded Hunter" #define FACTION_HUNTED "Hunted USCM" #define FACTION_HUNTED_CLF "Hunted CLF" #define FACTION_HUNTED_UPP "Hunted UPP" @@ -295,7 +296,7 @@ DEFINE_BITFIELD(whitelist_status, list( #define FACTION_LIST_MARINE_WY list(FACTION_MARINE, FACTION_PMC, FACTION_WY) #define FACTION_LIST_MARINE_UPP list(FACTION_MARINE, FACTION_UPP) #define FACTION_LIST_MARINE_TWE list(FACTION_MARINE, FACTION_TWE) -#define FACTION_LIST_YAUTJA list(FACTION_YAUTJA, FACTION_YAUTJA_YOUNG) +#define FACTION_LIST_YAUTJA list(FACTION_YAUTJA, FACTION_YAUTJA_YOUNG, FACTION_BLOODED_HUNTER) #define FACTION_LIST_HUNTED list(FACTION_HUNTED, FACTION_HUNTED_CLF, FACTION_HUNTED_UPP, FACTION_HUNTED_TWE, FACTION_HUNTED_MERC) #define FACTION_LIST_COLONY list(FACTION_SURVIVOR, FACTION_COLONIST) #define FACTION_LIST_NEUTRAL list(FACTION_NEUTRAL) diff --git a/code/datums/mob_hud.dm b/code/datums/mob_hud.dm index a53f188b3ffb..d9b5aab29e9f 100644 --- a/code/datums/mob_hud.dm +++ b/code/datums/mob_hud.dm @@ -746,7 +746,7 @@ GLOBAL_DATUM_INIT(hud_icon_hunter_hunted, /image, image('icons/mob/hud/hud_yautj GLOBAL_DATUM_INIT(hud_icon_hunter_dishonored, /image, image('icons/mob/hud/hud_yautja.dmi', src, "hunter_dishonored")) GLOBAL_DATUM_INIT(hud_icon_hunter_honored, /image, image('icons/mob/hud/hud_yautja.dmi', src, "hunter_honored")) GLOBAL_DATUM_INIT(hud_icon_hunter_thralled, /image, image('icons/mob/hud/hud_yautja.dmi', src, "hunter_thralled")) - +GLOBAL_DATUM_INIT(hud_icon_hunter_blooded, /image, image('icons/mob/hud/hud_yautja.dmi', src, "hunter_thrall_blooded")) /mob/living/carbon/hud_set_hunter() var/image/holder = hud_list[HUNTER_HUD] @@ -765,6 +765,9 @@ GLOBAL_DATUM_INIT(hud_icon_hunter_thralled, /image, image('icons/mob/hud/hud_yau else if(hunter_data.gear) holder.overlays += GLOB.hud_icon_hunter_gear + if(hunter_data.blooded) + holder.overlays += GLOB.hud_icon_hunter_blooded + hud_list[HUNTER_HUD] = holder /mob/living/carbon/xenomorph/hud_set_hunter() diff --git a/code/game/machinery/vending/vendor_types/antag/antag_predator.dm b/code/game/machinery/vending/vendor_types/antag/antag_predator.dm index 3e7ca231ee1d..ebe605e28462 100644 --- a/code/game/machinery/vending/vendor_types/antag/antag_predator.dm +++ b/code/game/machinery/vending/vendor_types/antag/antag_predator.dm @@ -111,7 +111,44 @@ GLOBAL_LIST_INIT(cm_vending_young_yautja, list( list("The Skewering Scimitars", 0, list(/obj/item/bracer_attachments/scimitars_alt, /obj/item/bracer_attachments/scimitars_alt), MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED), )) -/obj/structure/machinery/cm_vending/clothing/yautja +GLOBAL_LIST_INIT(cm_vending_thrall, list( + list("Essential Hunting Supplies", 0, null, null, null), + list("Hunting Equipment", 0, list(/obj/item/clothing/under/chainshirt/thrall, /obj/item/storage/backpack/yautja), MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY), + + list("Armor Material (CHOOSE 1)", 0, null, null, null), + list("Ebony", 0, list(/obj/item/clothing/suit/armor/yautja/thrall, /obj/item/clothing/shoes/yautja/thrall, /obj/item/clothing/mask/gas/yautja/thrall, /obj/item/clothing/shoes/yautja/hunter/knife), MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED), + list("Silver", 0, list(/obj/item/clothing/suit/armor/yautja/thrall/silver, /obj/item/clothing/shoes/yautja/thrall/silver, /obj/item/clothing/mask/gas/yautja/thrall/silver, /obj/item/clothing/shoes/yautja/hunter/knife), MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED), + list("Gold", 0, list(/obj/item/clothing/suit/armor/yautja/thrall/gold, /obj/item/clothing/shoes/yautja/thrall/gold, /obj/item/clothing/mask/gas/yautja/thrall/gold, /obj/item/clothing/shoes/yautja/hunter/knife), MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED), + list("Crimson", 0, list(/obj/item/clothing/suit/armor/yautja/thrall/crimson, /obj/item/clothing/shoes/yautja/thrall/crimson, /obj/item/clothing/mask/gas/yautja/thrall/crimson, /obj/item/clothing/shoes/yautja/hunter/knife), MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED), + list("Bone", 0, list(/obj/item/clothing/suit/armor/yautja/thrall/bone, /obj/item/clothing/shoes/yautja/thrall/bone, /obj/item/clothing/mask/gas/yautja/thrall/bone, /obj/item/clothing/shoes/yautja/hunter/knife), MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED), + + list("Main Weapons (CHOOSE 1)", 0, null, null, null), + list("The Primary Hunting Sword", 0, /obj/item/weapon/yautja/sword, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("The Rending Hunting Sword", 0, /obj/item/weapon/yautja/sword/alt_1, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("The Piercing Hunting Sword", 0, /obj/item/weapon/yautja/sword/alt_2, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("The Severing Hunting Sword", 0, /obj/item/weapon/yautja/sword/alt_3, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("The Sundering Chain-Whip", 0, /obj/item/weapon/yautja/chain, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("The Cleaving War-Scythe", 0, /obj/item/weapon/yautja/scythe, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("The Ripping War-Scythe", 0, /obj/item/weapon/yautja/scythe/alt, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("The Adaptive Combi-Stick", 0, /obj/item/weapon/yautja/chained/combistick, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("The Butchering War Axe", 0, /obj/item/weapon/yautja/chained/war_axe, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("The Lumbering Glaive", 0, /obj/item/weapon/twohanded/yautja/glaive, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("The Imposing Glaive", 0, /obj/item/weapon/twohanded/yautja/glaive/alt, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("The Crushing Longaxe", 0, /obj/item/weapon/twohanded/yautja/glaive/longaxe, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + )) + +GLOBAL_LIST_INIT(cm_vending_blooded_thrall, list( + list("Blooded Equipment", 0, null, null, null), + list("Blooded Equipment", 0, list(/obj/item/device/thrall_teleporter, /obj/item/storage/medicomp/full), MARINE_CAN_BUY_KIT, VENDOR_ITEM_REGULAR), + + list("Clothing Accessory (CHOOSE 1)", 0, null, null, null), + list("Third-Cape", 0, /obj/item/clothing/yautja_cape/third, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY), + list("Half-Cape", 0, /obj/item/clothing/yautja_cape/half, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY), + list("Quarter-Cape", 0, /obj/item/clothing/yautja_cape/quarter, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY), + list("Poncho", 0, /obj/item/clothing/yautja_cape/poncho, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY), + )) + +/obj/structure/machinery/cm_vending/clothing/yautja/hunter name = "\improper Yautja Hunting Gear Rack" desc = "A gear rack for hunting." icon = 'icons/obj/items/hunter/pred_vendor.dmi' @@ -121,7 +158,7 @@ GLOBAL_LIST_INIT(cm_vending_young_yautja, list( show_points = FALSE vendor_theme = VENDOR_THEME_YAUTJA -/obj/structure/machinery/cm_vending/clothing/yautja/can_access_to_vend(mob/user, display = TRUE, ignore_hack = FALSE) +/obj/structure/machinery/cm_vending/clothing/yautja/hunter/can_access_to_vend(mob/user, display = TRUE, ignore_hack = FALSE) if(!allowed(user)) if(display) to_chat(user, SPAN_WARNING("Access denied.")) @@ -135,30 +172,35 @@ GLOBAL_LIST_INIT(cm_vending_young_yautja, list( return FALSE return TRUE -/obj/structure/machinery/cm_vending/clothing/yautja/left_centre +/obj/structure/machinery/cm_vending/clothing/yautja/hunter/left_centre icon_state = "pred_vendor_lcenter" -/obj/structure/machinery/cm_vending/clothing/yautja/centre +/obj/structure/machinery/cm_vending/clothing/yautja/hunter/centre icon_state = "pred_vendor_centre" -/obj/structure/machinery/cm_vending/clothing/yautja/right_centre +/obj/structure/machinery/cm_vending/clothing/yautja/hunter/right_centre icon_state = "pred_vendor_rcentre" -/obj/structure/machinery/cm_vending/clothing/yautja/right +/obj/structure/machinery/cm_vending/clothing/yautja/hunter/right icon_state = "pred_vendor_right" -/obj/structure/machinery/cm_vending/clothing/yautja/get_listed_products(mob/user) +/obj/structure/machinery/cm_vending/clothing/yautja/hunter/get_listed_products(mob/user) return GLOB.cm_vending_equipment_yautja -/obj/structure/machinery/cm_vending/clothing/yautja/elder +/obj/structure/machinery/cm_vending/clothing/yautja/hunter/elder name = "\improper Yautja Elder Hunting Gear Rack" + desc = "A gear rack for hunting." + icon = 'icons/obj/items/hunter/pred_vendor.dmi' icon_state = "pred_vendor_elder_left" - req_access = list(ACCESS_YAUTJA_ELITE) + req_one_access = list(ACCESS_YAUTJA_ELITE, ACCESS_YAUTJA_ELDER, ACCESS_YAUTJA_ANCIENT) + vendor_role = list(JOB_PREDATOR) + show_points = FALSE + vendor_theme = VENDOR_THEME_YAUTJA -/obj/structure/machinery/cm_vending/clothing/yautja/elder/right +/obj/structure/machinery/cm_vending/clothing/yautja/hunter/elder/right icon_state = "pred_vendor_elder_right" -/obj/structure/machinery/cm_vending/clothing/yautja/elder/get_listed_products(mob/user) +/obj/structure/machinery/cm_vending/clothing/yautja/hunter/elder/get_listed_products(mob/user) return GLOB.cm_vending_elder_yautja /obj/structure/machinery/cm_vending/clothing/yautja/young_blood @@ -170,6 +212,20 @@ GLOBAL_LIST_INIT(cm_vending_young_yautja, list( show_points = FALSE vendor_theme = VENDOR_THEME_YAUTJA +/obj/structure/machinery/cm_vending/clothing/yautja/young_blood/can_access_to_vend(mob/user, display = TRUE, ignore_hack = FALSE) + if(!allowed(user)) + if(display) + to_chat(user, SPAN_WARNING("Access denied.")) + vend_fail() + return FALSE + + if(LAZYLEN(vendor_role) && !vendor_role.Find(user.job)) + if(display) + to_chat(user, SPAN_WARNING("This machine isn't for you.")) + vend_fail() + return FALSE + return TRUE + /obj/structure/machinery/cm_vending/clothing/yautja/young_blood/left_centre icon_state = "pred_vendor_lcenter" @@ -185,8 +241,76 @@ GLOBAL_LIST_INIT(cm_vending_young_yautja, list( /obj/structure/machinery/cm_vending/clothing/yautja/young_blood/get_listed_products(mob/user) return GLOB.cm_vending_young_yautja +/obj/structure/machinery/cm_vending/clothing/yautja/thrall + name = "\improper Yautja Thrall Gear Rack" + desc = "A gear rack for hunting." + icon = 'icons/obj/items/hunter/pred_vendor.dmi' + icon_state = "pred_vendor_left" + show_points = FALSE + vendor_theme = VENDOR_THEME_YAUTJA + +/obj/structure/machinery/cm_vending/clothing/yautja/thrall/can_access_to_vend(mob/user, display = TRUE, ignore_hack = FALSE) + if(isthrall(user)) + return TRUE + if(!hacked || ignore_hack) + if(!allowed(user)) + if(display) + to_chat(user, SPAN_WARNING("Access denied.")) + vend_fail() + return FALSE + if(!isthrall(user)) + to_chat(user, SPAN_WARNING("Access denied.")) + vend_fail() + return FALSE + +/obj/structure/machinery/cm_vending/clothing/yautja/thrall/left_centre + icon_state = "pred_vendor_lcenter" + +/obj/structure/machinery/cm_vending/clothing/yautja/thrall/centre + icon_state = "pred_vendor_centre" + +/obj/structure/machinery/cm_vending/clothing/yautja/thrall/right_centre + icon_state = "pred_vendor_rcentre" + +/obj/structure/machinery/cm_vending/clothing/yautja/thrall/right + icon_state = "pred_vendor_thrall_right" + +/obj/structure/machinery/cm_vending/clothing/yautja/thrall/get_listed_products(mob/user) + return GLOB.cm_vending_thrall + +/obj/structure/machinery/cm_vending/clothing/yautja/thrall/blooded_thrall + name = "\improper Yautja Blooded Thrall Gear Rack" + desc = "A gear rack for hunting." + icon = 'icons/obj/items/hunter/pred_vendor.dmi' + icon_state = "pred_vendor_left" + show_points = FALSE + vendor_theme = VENDOR_THEME_YAUTJA + +/obj/structure/machinery/cm_vending/clothing/yautja/thrall/blooded_thrall/can_access_to_vend(mob/user, display = TRUE, ignore_hack = FALSE) + if(HAS_TRAIT(user, TRAIT_YAUTJA_TECH)) + return TRUE + if(!hacked || ignore_hack) + if(!allowed(user)) + if(display) + to_chat(user, SPAN_WARNING("Access denied.")) + vend_fail() + return FALSE + if(isyautja(user)) + to_chat(user, SPAN_WARNING("Access denied.")) + vend_fail() + return FALSE + +/obj/structure/machinery/cm_vending/clothing/yautja/thrall/blooded_thrall/left + icon_state = "pred_vendor_blooded_left" + +/obj/structure/machinery/cm_vending/clothing/yautja/thrall/blooded_thrall/right + icon_state = "pred_vendor_blooded_right" + +/obj/structure/machinery/cm_vending/clothing/yautja/thrall/blooded_thrall/get_listed_products(mob/user) + return GLOB.cm_vending_blooded_thrall + //Armour Prefs -/obj/item/clothing/suit/armor/yautja/post_vendor_spawn_hook(mob/living/carbon/human/user) +/obj/item/clothing/suit/armor/yautja/hunter/post_vendor_spawn_hook(mob/living/carbon/human/user) if(!user?.client?.prefs) return var/client/mob_client = user.client diff --git a/code/modules/cm_preds/huntdata.dm b/code/modules/cm_preds/huntdata.dm index 3d90e9f98359..48882624e3b2 100644 --- a/code/modules/cm_preds/huntdata.dm +++ b/code/modules/cm_preds/huntdata.dm @@ -6,30 +6,50 @@ //vars for Hunters targeting prey. var/hunted = FALSE - var/mob/living/carbon/hunter //Target has their hunter variable linked to the Hunter. - var/mob/living/carbon/prey //Hunter has their prey variable linked to their target. + /// Target has their hunter variable linked to the Hunter. + var/mob/living/carbon/hunter + /// Hunter has their prey variable linked to their target. + var/mob/living/carbon/prey //Vars for Hunters marking someone as dishonorable. var/dishonored = FALSE - var/mob/living/carbon/dishonored_set //The Hunter who marked the target as Dishonorable. - var/list/dishonored_targets = list() //The list of people a specific Hunter has marked as Dishonorable. - var/dishonored_reason //The Reason the target was set as dishonorable. + /// The Hunter who marked the target as Dishonorable. + var/mob/living/carbon/dishonored_set + /// The list of people a specific Hunter has marked as Dishonorable. + var/list/dishonored_targets = list() + /// The Reason the target was set as dishonorable. + var/dishonored_reason var/honored = FALSE - var/mob/living/carbon/honored_set //The Hunter who marked the target as Honorable. - var/list/honored_targets = list() //The list of people a specific Hunter has marked as Honorable. - var/honored_reason //The Reason the target was set as Honorable. + /// The Hunter who marked the target as Honorable. + var/mob/living/carbon/honored_set + /// The list of people a specific Hunter has marked as Honorable. + var/list/honored_targets = list() + /// The Reason the target was set as Honorable. + var/honored_reason var/gear = FALSE - var/mob/living/carbon/gear_set //The Hunter who marked the target as having Hunter Gear. - var/list/gear_targets = list() //The list of people a specific Hunter has marked as having Hunter Gear. + /// The Hunter who marked the target as having Hunter Gear. + var/mob/living/carbon/gear_set + /// The list of people a specific Hunter has marked as having Hunter Gear. + var/list/gear_targets = list() var/thralled = FALSE - var/mob/living/carbon/thralled_set //The Hunter who marked a target as their Thrall. - var/thralled_reason //The Reason the target was Thralled. - var/mob/living/carbon/thrall //The Thrall the Hunter marked. + ///The Hunter who marked a target as their Thrall. + var/mob/living/carbon/thralled_set + /// The Reason the target was Thralled. + var/thralled_reason + /// The Thrall the Hunter marked. + var/mob/living/carbon/thrall + var/blooded = FALSE + /// The Yautja that blooded the thrall + var/mob/living/carbon/blooded_set + /// The reason the thrall was blooded + var/blooded_reason + /// The thrall that is now blooded + var/mob/living/carbon/newblood /datum/huntdata/proc/clean_data() if(dishonored) @@ -85,3 +105,12 @@ if(owner) owner = null + + if(blooded) + if(blooded_set) + blooded_set.hunter_data.newblood = null + blooded_set = null + blooded = FALSE + if(newblood) + newblood.hunter_data.blooded_set = null + newblood = null diff --git a/code/modules/cm_preds/thrall_items.dm b/code/modules/cm_preds/thrall_items.dm index 82e9fdf2eac6..5492b8a7f437 100644 --- a/code/modules/cm_preds/thrall_items.dm +++ b/code/modules/cm_preds/thrall_items.dm @@ -1,10 +1,12 @@ +///Thrall Armor & Material Types /obj/item/clothing/suit/armor/yautja/thrall name = "alien armor" - desc = "Armor made from scraps of cloth and a strange alloy. It feels cold with an alien weight. It has been adapted to carry both human and alien melee weaponry." + desc = "Armor made from a strange alloy. It feels cold with an alien weight. It has been adapted to carry both human and alien melee weaponry." icon = 'icons/obj/items/hunter/thrall_gear.dmi' - icon_state = "chest1_cloth" - item_state = "chest1_cloth" + icon_state = "thrallarmor_ebony" + item_state = "thrallarmor_ebony" + item_state_slots = list(WEAR_JACKET = "thrallarmor_ebony") item_icons = list( WEAR_JACKET = 'icons/mob/humans/onmob/hunter/thrall_gear.dmi' ) @@ -24,20 +26,34 @@ /obj/item/weapon, ) -/obj/item/clothing/suit/armor/yautja/thrall/New(mapload, armor_area = pick("shoulders", "chest", "mix"), armor_number = rand(1,3), armor_material = pick("cloth", "bare")) - if(armor_number > 3) - armor_number = 1 - if(armor_number) - icon_state = "[armor_area][armor_number]_[armor_material]" - LAZYSET(item_state_slots, WEAR_JACKET, "[armor_area][armor_number]_[armor_material]") - ..() +/obj/item/clothing/suit/armor/yautja/thrall/silver + icon_state = "thrallarmor_silver" + item_state = "thrallarmor_silver" + item_state_slots = list(WEAR_JACKET = "thrallarmor_silver") + +/obj/item/clothing/suit/armor/yautja/thrall/gold + icon_state = "thrallarmor_gold" + item_state = "thrallarmor_gold" + item_state_slots = list(WEAR_JACKET = "thrallarmor_gold") + +/obj/item/clothing/suit/armor/yautja/thrall/crimson + icon_state = "thrallarmor_crimson" + item_state = "thrallarmor_crimson" + item_state_slots = list(WEAR_JACKET = "thrallarmor_crimson") + +/obj/item/clothing/suit/armor/yautja/thrall/bone + icon_state = "thrallarmor_bone" + item_state = "thrallarmor_bone" + item_state_slots = list(WEAR_JACKET = "thrallarmor_bone") +///Thrall Greaves & Material Types /obj/item/clothing/shoes/yautja/thrall name = "alien greaves" desc = "Greaves made from scraps of cloth and a strange alloy. They feel cold with an alien weight. They have been adapted for compatibility with human equipment." icon = 'icons/obj/items/hunter/thrall_gear.dmi' - icon_state = "greaves1_cloth" + icon_state = "thrallgreaves_ebony" + item_state = "thrallgreaves_ebony" item_icons = list( WEAR_FEET = 'icons/mob/humans/onmob/hunter/thrall_gear.dmi' ) @@ -51,19 +67,53 @@ /obj/item/weapon/straight_razor, ) -/obj/item/clothing/shoes/yautja/thrall/New(mapload, greaves_number = 1, armor_material = pick("cloth", "bare")) - if(greaves_number > 1) - greaves_number = 1 - if(greaves_number) - icon_state = "greaves[greaves_number]_[armor_material]" - LAZYSET(item_state_slots, WEAR_JACKET, "greaves[greaves_number]_[armor_material]") - ..() +/obj/item/clothing/shoes/yautja/thrall/silver + icon_state = "thrallgreaves_silver" + item_state = "thrallgreaves_silver" + item_state_slots = list(WEAR_FEET = "thrallgreaves_silver") + +/obj/item/clothing/shoes/yautja/thrall/gold + icon_state = "thrallgreaves_gold" + item_state = "thrallgreaves_gold" + item_state_slots = list(WEAR_FEET = "thrallgreaves_gold") + +/obj/item/clothing/shoes/yautja/thrall/crimson + icon_state = "thrallgreaves_crimson" + item_state = "thrallgreaves_crimson" + item_state_slots = list(WEAR_FEET = "thrallgreaves_crimson") + +/obj/item/clothing/shoes/yautja/thrall/bone + icon_state = "thrallgreaves_bone" + item_state = "thrallgreaves_bone" + item_state_slots = list(WEAR_FEET = "thrallgreaves_bone") +///Thrall Mask Material Types, original mask & mask code in yaut_mask.dm +/obj/item/clothing/mask/gas/yautja/thrall/silver + icon_state = "thrallmask_silver" + item_state = "thrallmask_silver" + item_state_slots = list(WEAR_FACE = "thrallmask_silver") + +/obj/item/clothing/mask/gas/yautja/thrall/gold + icon_state = "thrallmask_gold" + item_state = "thrallmask_gold" + item_state_slots = list(WEAR_FACE = "thrallmask_gold") + +/obj/item/clothing/mask/gas/yautja/thrall/crimson + icon_state = "thrallmask_crimson" + item_state = "thrallmask_crimson" + item_state_slots = list(WEAR_FACE = "thrallmask_crimson") + +/obj/item/clothing/mask/gas/yautja/thrall/bone + icon_state = "thrallmask_bone" + item_state = "thrallmask_bone" + item_state_slots = list(WEAR_FACE = "thrallmask_bone") + +///Subtype for name & desc /obj/item/clothing/under/chainshirt/thrall name = "alien mesh suit" - color = "#b85440" desc = "A strange alloy weave in the form of a vest. It feels cold with an alien weight. It has been adapted for human physiology." +///Subtype of base bracers, not hunter ones. Different name, desc, & color. /obj/item/clothing/gloves/yautja/thrall name = "thrall bracers" desc = "A pair of strange alien bracers, adapted for human biology." @@ -81,3 +131,87 @@ /obj/item/storage/box/bracer/fill_preset_inventory() new /obj/item/clothing/gloves/yautja/thrall(src) + +///Relay beacon for blooded thralls, only capable of teleporting back to the Yautja Ship +/obj/item/device/thrall_teleporter + name = "simple relay beacon" + desc = "A device covered in sacred text. It whirrs and beeps every couple of seconds." + + icon = 'icons/obj/items/hunter/thrall_gear.dmi' + icon_state = "thrall_teleporter" + + flags_item = ITEM_PREDATOR + w_class = SIZE_TINY + force = 1 + throwforce = 1 + unacidable = TRUE + black_market_value = 100 + var/teleporting = FALSE + +/obj/item/device/thrall_teleporter/attack_self(mob/user) + ..() + + if(!ishuman(user)) + return + + var/mob/living/carbon/human/H = user + var/ship_to_tele = -1 + + if(!HAS_TRAIT(H, TRAIT_YAUTJA_TECH) || should_block_game_interaction(H)) + to_chat(user, SPAN_WARNING("You fiddle with it, but nothing happens!")) + return + + if(H.faction == FACTION_YAUTJA_YOUNG) + to_chat(user, SPAN_WARNING("You have not been shown how to use the relay beacon, best not fiddle with it.")) + return + + if(isthrall(user)) + var/datum/entity/clan_player/clan_info = H.client.clan_info + if(clan_info.permissions & CLAN_PERMISSION_ADMIN_VIEW) + var/list/datum/view_record/clan_view/clan_perm_view = DB_VIEW(/datum/view_record/clan_view/) + for(var/datum/view_record/clan_view/clan_view in clan_perm_view) + if(!SSpredships.is_clanship_loaded(clan_view?.clan_id)) + continue + ship_to_tele += list("[clan_view.name]" = "[clan_view.clan_id]: [clan_view.name]") + if(SSpredships.is_clanship_loaded(clan_info?.clan_id)) + ship_to_tele += list("Your clan" = "[clan_info.clan_id]") + + var/clan = ship_to_tele + if(clan != "Human" && !SSpredships.is_clanship_loaded(clan)) + return // Checking ship is valid + + // Getting an arrival point + var/turf/target_turf + target_turf = SAFEPICK(SSpredships.get_clan_spawnpoints(clan)) + if(!istype(target_turf)) + return + + // Let's go + playsound(src,'sound/ambience/signal.ogg', 25, 1, sound_range = 6) + teleporting = TRUE + user.visible_message(SPAN_INFO("[user] starts becoming shimmery and indistinct...")) + + if(!do_after(user, 10 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC)) + to_chat(user, "You were interrupted!") + teleporting = FALSE + return + // Display fancy animation for you and the person you might be pulling (Legacy) + SEND_SIGNAL(user, COMSIG_MOB_EFFECT_CLOAK_CANCEL) + user.visible_message(SPAN_WARNING("[icon2html(user, viewers(src))][user] disappears!")) + var/tele_time = animation_teleport_quick_out(user) + var/mob/living/passenger = user.pulling + if(istype(passenger)) // Pulled person + SEND_SIGNAL(passenger, COMSIG_MOB_EFFECT_CLOAK_CANCEL) + passenger.visible_message(SPAN_WARNING("[icon2html(passenger, viewers(src))][passenger] disappears!")) + animation_teleport_quick_out(passenger) + + sleep(tele_time) // Animation delay + user.trainteleport(target_turf) // Actually teleports everyone, not just you + pulled + + // Undo animations + animation_teleport_quick_in(user) + if(istype(passenger) && !QDELETED(passenger)) + animation_teleport_quick_in(passenger) + teleporting = FALSE + else + VARSET_CALLBACK(src, teleporting, FALSE) diff --git a/code/modules/cm_preds/thrall_procs.dm b/code/modules/cm_preds/thrall_procs.dm index 55bd09b642b3..e21c2e409c5c 100644 --- a/code/modules/cm_preds/thrall_procs.dm +++ b/code/modules/cm_preds/thrall_procs.dm @@ -1,91 +1,3 @@ -//Claim gear, same as the Hunter's get. -/obj/item/clothing/gloves/yautja/proc/buy_thrall_gear() - set name = "Claim Equipment" - set desc = "When you're on the Predator ship, claim some gear. You can only do this ONCE." - set category = "Thrall.Misc" - set src in usr - - var/mob/living/carbon/human/wearer = usr - if(wearer.gloves != src) - to_chat(wearer, SPAN_WARNING("You need to be wearing your thrall bracers to do this.")) - return - - if(wearer.hunter_data.claimed_equipment) - to_chat(wearer, SPAN_WARNING("You've already claimed your equipment.")) - return - - if(wearer.is_mob_incapacitated() || wearer.body_position == LYING_DOWN /* replace by mobility_flags */ || wearer.buckled) - to_chat(wearer, SPAN_WARNING("You're not able to do that right now.")) - return - - var/area/location = get_area(wearer) - if(!(location.flags_area & AREA_YAUTJA_GROUNDS)) - to_chat(wearer, SPAN_WARNING("Not here. Only on the ship.")) - return - - var/sure = alert("An array of powerful weapons are displayed to you. Pick your gear carefully. If you cancel at any point, you will not claim your equipment.","Sure?","Begin the Hunt","No, not now") - if(sure == "Begin the Hunt") - var/list/hmelee = list(YAUTJA_THRALL_GEAR_MACHETE = image(icon = 'icons/obj/items/weapons/melee/swords.dmi', icon_state = "machete"), YAUTJA_THRALL_GEAR_RAPIER = image(icon = 'icons/obj/items/weapons/melee/knives.dmi', icon_state = "ceremonial"), YAUTJA_THRALL_GEAR_CLAYMORE = image(icon = 'icons/obj/items/weapons/melee/swords.dmi', icon_state = "mercsword"), YAUTJA_THRALL_GEAR_FIREAXE = image(icon = 'icons/obj/items/weapons/melee/axes.dmi', icon_state = "fireaxe")) - var/list/ymelee = list(YAUTJA_GEAR_GLAIVE = image(icon = 'icons/obj/items/hunter/pred_gear.dmi', icon_state = "glaive"), YAUTJA_GEAR_WHIP = image(icon = 'icons/obj/items/hunter/pred_gear.dmi', icon_state = "whip"), YAUTJA_GEAR_SWORD = image(icon = 'icons/obj/items/hunter/pred_gear.dmi', icon_state = "clansword"), YAUTJA_GEAR_SCYTHE = image(icon = 'icons/obj/items/hunter/pred_gear.dmi', icon_state = "predscythe"), YAUTJA_GEAR_STICK = image(icon = 'icons/obj/items/hunter/pred_gear.dmi', icon_state = "combistick"), YAUTJA_GEAR_SPEAR = image(icon = 'icons/obj/items/hunter/pred_gear.dmi', icon_state = "spearhunter")) - - var/main_weapon - var/use_radials = wearer.client.prefs?.no_radials_preference ? FALSE : TRUE - var/type = alert("Do you plan on embracing alien weaponry, or sticking to your human roots?", "Human or Alien?", "Once Human, Always Human", "Let's try Alien") - if(type == "Once Human, Always Human") - main_weapon = use_radials ? show_radial_menu(wearer, wearer, hmelee) : tgui_input_list(wearer, "Which weapon shall you use on your hunt?:", "Melee Weapon", hmelee) - else - main_weapon = use_radials ? show_radial_menu(wearer, wearer, ymelee) : tgui_input_list(wearer, "Which weapon shall you use on your hunt?:", "Melee Weapon", ymelee) - if(!main_weapon) - return //We don't want them to cancel out then get nothing. - - if(wearer.gloves != src) - to_chat(wearer, SPAN_WARNING("You need to be wearing your thrall bracers to do this.")) - return - - if(wearer.hunter_data.claimed_equipment) - to_chat(src, SPAN_WARNING("You've already claimed your equipment.")) - return - - var/obj/item/spawned_weapon - switch(main_weapon) - if(YAUTJA_GEAR_GLAIVE) - spawned_weapon = new /obj/item/weapon/twohanded/yautja/glaive(wearer.loc) - if(YAUTJA_GEAR_SPEAR) - spawned_weapon = new /obj/item/weapon/twohanded/yautja/spear(wearer.loc) - if(YAUTJA_GEAR_WHIP) - spawned_weapon = new /obj/item/weapon/yautja/chain(wearer.loc) - if(YAUTJA_GEAR_SWORD) - spawned_weapon = new /obj/item/weapon/yautja/sword(wearer.loc) - if(YAUTJA_GEAR_SCYTHE) - spawned_weapon = new /obj/item/weapon/yautja/scythe(wearer.loc) - if(YAUTJA_GEAR_STICK) - spawned_weapon = new /obj/item/weapon/yautja/chained/combistick(wearer.loc) - if(YAUTJA_THRALL_GEAR_MACHETE) - spawned_weapon = new /obj/item/weapon/sword/machete(wearer.loc) - if(YAUTJA_THRALL_GEAR_RAPIER) - spawned_weapon = new /obj/item/weapon/sword/ceremonial(wearer.loc) - if(YAUTJA_THRALL_GEAR_CLAYMORE) - spawned_weapon = new /obj/item/weapon/sword(wearer.loc) - if(YAUTJA_THRALL_GEAR_FIREAXE) - spawned_weapon = new /obj/item/weapon/twohanded/fireaxe(wearer.loc) - - if(istype(spawned_weapon, /obj/item/weapon/yautja)) - var/obj/item/weapon/yautja/yautja_melee = spawned_weapon - yautja_melee.human_adapted = TRUE - else if(istype(spawned_weapon, /obj/item/weapon/twohanded/yautja)) - var/obj/item/weapon/twohanded/yautja/yautja_melee = spawned_weapon - yautja_melee.human_adapted = TRUE - spawned_weapon.desc += " It looks like this one has been modified for human use." - - wearer.hunter_data.claimed_equipment = TRUE - - verbs -= /obj/item/clothing/gloves/yautja/proc/buy_thrall_gear - new /obj/item/clothing/suit/armor/yautja/thrall(wearer.loc) - new /obj/item/clothing/shoes/yautja/thrall(wearer.loc) - new /obj/item/clothing/under/chainshirt/thrall(wearer.loc) - new /obj/item/clothing/mask/gas/yautja/thrall(wearer.loc) - - //Link to thrall bracer, enabling most of it's abilities /obj/item/clothing/gloves/yautja/hunter/verb/link_bracer() set name = "Link Thrall Bracer" @@ -124,7 +36,6 @@ linked_bracer = thrall_gloves thrall_gloves.linked_bracer = src thrall_gloves.owner = thrall - thrall_gloves.verbs += /obj/item/clothing/gloves/yautja/proc/buy_thrall_gear thrall.client?.init_verbs() thrall.set_species("Thrall") thrall.allow_gun_usage = FALSE @@ -254,6 +165,12 @@ to_chat(master, SPAN_DANGER("You set the timer. They have failed you.")) explode(thrall) exploding = FALSE + do_after(thrall, (80), INTERRUPT_NONE, BUSY_ICON_HOSTILE) + + if(thrall) + cell_explosion(thrall, 800, 550, EXPLOSION_FALLOFF_SHAPE_LINEAR, null) + thrall.gib() // kills the thrall + qdel(thrall) if(thrall.stat == DEAD) return diff --git a/code/modules/cm_preds/yaut_actions.dm b/code/modules/cm_preds/yaut_actions.dm index 369094f80712..b0089d9ed3c0 100644 --- a/code/modules/cm_preds/yaut_actions.dm +++ b/code/modules/cm_preds/yaut_actions.dm @@ -38,9 +38,9 @@ yautja = mob if(require_bracers) - if(istype(yautja.gloves, /obj/item/clothing/gloves/yautja/hunter)) + if(istype(yautja.gloves, /obj/item/clothing/gloves/yautja)) bracers = yautja.gloves - else if(istype(yautja.get_held_item(), /obj/item/clothing/gloves/yautja/hunter)) + else if(istype(yautja.get_held_item(), /obj/item/clothing/gloves/yautja)) bracers = yautja.get_held_item() if(!bracers) to_chat(yautja, SPAN_WARNING("You don't have bracers.")) diff --git a/code/modules/cm_preds/yaut_bracers.dm b/code/modules/cm_preds/yaut_bracers.dm index 4ad0413541ba..d28c5f16b34e 100644 --- a/code/modules/cm_preds/yaut_bracers.dm +++ b/code/modules/cm_preds/yaut_bracers.dm @@ -220,20 +220,6 @@ notification_sound = !notification_sound to_chat(usr, SPAN_NOTICE("The bracer's sound is now turned [notification_sound ? "on" : "off"].")) -/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/code/modules/cm_preds/yaut_hudprocs.dm b/code/modules/cm_preds/yaut_hudprocs.dm index 7d296b182cb9..b35c2785c51d 100644 --- a/code/modules/cm_preds/yaut_hudprocs.dm +++ b/code/modules/cm_preds/yaut_hudprocs.dm @@ -7,13 +7,14 @@ to_chat(src, SPAN_DANGER("You're not able to do that right now.")) return - var/mob/living/carbon/human/T = src - if(!isyautja(T)) + var/mob/living/carbon/human/target = src + if(!isyautja(target)) return var/list/options = list() var/list/optionsp = list( "Un-Mark as Thralled", + "Mark as Blooded", "Mark as Honored", "Un-Mark as Honored", "Mark as Dishonorable", @@ -22,12 +23,12 @@ "Un-Mark as Gear Carrier" ) - if(!T.hunter_data.prey) + if(!target.hunter_data.prey) options += "Mark as Prey" else options += "Un-Mark as Prey" - if(!T.hunter_data.thrall) + if(!target.hunter_data.thrall) options += "Mark as Thralled" options += optionsp @@ -40,25 +41,27 @@ switch(input) if("Mark as Prey") - T.mark_for_hunt() + target.mark_for_hunt() if("Un-Mark as Prey") - T.remove_from_hunt() + target.remove_from_hunt() if("Mark as Honored") - T.mark_honored() + target.mark_honored() if("Un-Mark as Honored") - T.unmark_honored() + target.unmark_honored() if("Mark as Dishonorable") - T.mark_dishonored() + target.mark_dishonored() if("Un-Mark as Dishonorable") - T.unmark_dishonored() + target.unmark_dishonored() if("Mark as Gear Carrier") - T.mark_gear() + target.mark_gear() if("Un-Mark as Gear Carrier") - T.unmark_gear() + target.unmark_gear() if("Mark as Thralled") - T.mark_thralled() + target.mark_thralled() if("Un-Mark as Thralled") - T.unmark_thralled() + target.unmark_thralled() + if("Mark as Blooded") + target.mark_blooded() return @@ -443,6 +446,56 @@ else to_chat(src, SPAN_YAUTJABOLD("You cannot undo the actions of a living brother or sister!")) +/mob/living/carbon/human/proc/mark_blooded() //No mark_unblooded, once a thrall becomes a blooded hunter, there is no going back. + if(is_mob_incapacitated()) + to_chat(src, SPAN_DANGER("You're not able to do that right now.")) + return + + var/list/target_list = list() + for(var/mob/living/carbon/target in long_range(7, usr)) + if(ishuman_strict(target) && target.stat != DEAD) + target_list += target + + var/mob/living/carbon/newblood = tgui_input_list(usr, "Target", "Choose a target.", target_list) + if(!newblood) + return + if(newblood.hunter_data.blooded) + to_chat(src, SPAN_YAUTJABOLD("[newblood] has already been blooded by [newblood.hunter_data.blooded_set.real_name] for '[newblood.hunter_data.blooded_reason]'!")) + return + if(newblood.faction == FACTION_YAUTJA_YOUNG || newblood.hunter_data.thralled) //Only youngbloods or thralls can become blooded hunters. + + var/reason = stripped_input(usr, "Enter the reason for marking your target as blooded.", "Mark as Blooded", "", 120) + + if(!reason) + return + + log_interact(src, newblood, "[key_name(src)] has blooded [key_name(newblood)] for '[reason]'.") + message_all_yautja("[real_name] has blooded [newblood] for '[reason]'.") + + ADD_TRAIT(newblood, TRAIT_YAUTJA_TECH, "Yautja Tech") + to_chat(newblood, SPAN_YAUTJABOLD("You are a Blooded Thrall. Focus on interacting with Predators and developing your reputation. You should be observant and discreet while exercising discretionary restraint when hunting worthy prey. Learn Yautja lore and their Honor Code. If you have any questions, ask the whitelisted players in LOOC.")) + + newblood.set_skills(/datum/skills/yautja/warrior) //Overrides exsiting skill path to allow for use of the medicomp. SKills never updated to proper hero mob status prior to this. + newblood.hunter_data.blooded_set = src + newblood.hunter_data.blooded = TRUE + newblood.hunter_data.blooded_reason = reason + hunter_data.newblood = newblood + newblood.hud_set_hunter() + + if(newblood.faction == FACTION_YAUTJA_YOUNG) + return + + else if(newblood.hunter_data.thralled) + var/predtitle = (stripped_input(usr, "Enter the newblood's new name.", "Blooded Name", "" , MAX_NAME_LEN)) + change_real_name(newblood, html_decode(predtitle)) + GLOB.yautja_mob_list += newblood + newblood.faction = FACTION_BLOODED_HUNTER + newblood.faction_group = FACTION_LIST_YAUTJA + + else if(!newblood.hunter_data.thralled) + to_chat(src, SPAN_YAUTJABOLD("[newblood] has not proved themselves worthy of blooding.")) + return + /mob/living/carbon/human/proc/call_combi() set name = "Yank combi-stick" set category = "Yautja.Weapons" diff --git a/code/modules/cm_preds/yaut_items.dm b/code/modules/cm_preds/yaut_items.dm index e6ed9aa145ac..01e04cf2ba37 100644 --- a/code/modules/cm_preds/yaut_items.dm +++ b/code/modules/cm_preds/yaut_items.dm @@ -524,7 +524,7 @@ GLOBAL_VAR_INIT(youngblood_timer_yautja, 0) /obj/structure/machinery/hunting_ground_selection/attack_hand(mob/living/user) . = ..() - if(!isyautja(user)) + if(!HAS_TRAIT(user, TRAIT_YAUTJA_TECH)) to_chat(user, SPAN_WARNING("You do not understand how to use this console.")) return diff --git a/code/modules/cm_preds/yaut_mask.dm b/code/modules/cm_preds/yaut_mask.dm index 3a6092e028a0..253cbdbcb3b8 100644 --- a/code/modules/cm_preds/yaut_mask.dm +++ b/code/modules/cm_preds/yaut_mask.dm @@ -229,13 +229,13 @@ /obj/item/clothing/mask/gas/yautja/thrall name = "alien mask" desc = "A simplistic metallic face mask with advanced capabilities." - icon_state = "thrall_mask" - item_state = "thrall_mask" + icon_state = "thrallmask_ebony" + item_state = "thrallmask_ebony" icon = 'icons/obj/items/hunter/thrall_gear.dmi' item_icons = list( WEAR_FACE = 'icons/mob/humans/onmob/hunter/thrall_gear.dmi' ) - item_state_slots = list(WEAR_FACE = "thrall_mask") + item_state_slots = list(WEAR_FACE = "thrallmask_ebony") thrall = TRUE /obj/item/clothing/mask/gas/yautja/thrall/toggle_zoom() diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index 403c2c974ebf..ba79c7ba42cb 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -570,11 +570,11 @@ return var/mob/living/carbon/human/user = chain.affected_atom - if((src in user.contents) || !istype(user.gloves, /obj/item/clothing/gloves/yautja/hunter)) + if((src in user.contents) || !istype(user.gloves, /obj/item/clothing/gloves/yautja)) cleanup_chain() return - var/obj/item/clothing/gloves/yautja/hunter/pred_gloves = user.gloves + var/obj/item/clothing/gloves/yautja/pred_gloves = user.gloves if(user.put_in_hands(src, TRUE)) if(!pred_gloves.drain_power(user, 70)) @@ -700,7 +700,7 @@ add_filter("combistick_charge", 1, list("type" = "outline", "color" = color, "size" = 2)) /obj/item/weapon/yautja/chained/attack_hand(mob/user) //Prevents marines from instantly picking it up via pickup macros. - if(!human_adapted && !HAS_TRAIT(user, TRAIT_SUPER_STRONG)) + if(!HAS_TRAIT(user, TRAIT_YAUTJA_TECH)) user.visible_message(SPAN_DANGER("[user] starts to untangle the chain on \the [src]..."), SPAN_NOTICE("You start to untangle the chain on \the [src]...")) if(do_after(user, 3 SECONDS, INTERRUPT_ALL, BUSY_ICON_HOSTILE, src, INTERRUPT_MOVED, BUSY_ICON_HOSTILE)) ..() diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm index 0748f960f3de..ffc8319f14fb 100644 --- a/code/modules/mob/dead/observer/orbit.dm +++ b/code/modules/mob/dead/observer/orbit.dm @@ -202,7 +202,7 @@ wy += list(serialized) else if(human.faction in FACTION_LIST_HYPERDYNE) hyperdyne += list(serialized) - else if(isyautja(human)) + else if(human.faction in FACTION_LIST_YAUTJA) predators += list(serialized) else if(human.faction in FACTION_LIST_ERT_OTHER) ert_members += list(serialized) diff --git a/code/modules/mob/living/carbon/human/species/human.dm b/code/modules/mob/living/carbon/human/species/human.dm index 836ec87a08bd..8f08467a889d 100644 --- a/code/modules/mob/living/carbon/human/species/human.dm +++ b/code/modules/mob/living/carbon/human/species/human.dm @@ -134,6 +134,11 @@ thrall.universal_understand = FALSE return ..() +/datum/species/human/hero/thrall/handle_death(mob/living/carbon/human/thrall) + GLOB.yautja_mob_list -= thrall + + message_all_yautja("[thrall.real_name] has died at \the [get_area_name(thrall)].") + //Various horrors that spawn in and haunt the living. /datum/species/human/spook name = "Horror" diff --git a/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm index 5420753d635e..68a73a9a0d62 100644 --- a/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm @@ -32,6 +32,7 @@ "Human", "Machine", "Human Hero", + "Thrall", SYNTH_COLONY, SYNTH_COLONY_GEN_ONE, SYNTH_COLONY_GEN_TWO, diff --git a/icons/mob/hud/hud_yautja.dmi b/icons/mob/hud/hud_yautja.dmi index c339c55886bef7ca023a944b88c7235873105c93..50e631318a1053ef75b276c9c46357d2d13d1cca 100644 GIT binary patch literal 5526 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 E2P`F~1poj5 literal 2505 zcmV;)2{!hLP)005u}0{{R3yb+fl0002?P)t-sz`(!; z1_pn2Z~*`STwGj8J~x(@mO?^8>gL=xFDmdV4~$JkV>dC#$jGQ)8vm9vu&}VWEE!cV zDxjdChlhtuOiW+_0a%4tZUO>Wr&yXB8^K-x%K!j?sQ`YQetyh;ttS=Lhcm@qUVgWJ zg64u&2M0!_euDr2U3mbkPXNAV5BZcb+P8z?eH*@y5Awi=*OmZp000hNN-{Du8*f+| z8XU~b%sRJ(Bb;oR|NnS+cs8tfFDZ*Bkpc$}5fy$-@45C`zNJOycY)7ttqxR^GkgT6w8)VU*q(WPYS{zOYiIeMSBsn_Pc4IrO}S)=0)18C)A%3) z#4^3RC*Vb3k>@E(q(&d71xp4LH~7?lc1NdMI^EFenod`ATG44qrv;rZr>Pok0PLL73jzPNK8W zi9YDZ*TU7$os2i<`u$g5K`j^sGT(;U000M=NklSe6xOjk3b;GFt{^&& zAi4~U=nA4Uyu@)PPKUPm|9{Qiq-p6RX;7M`XO3SjI0(O0) zG}1vDd~r34BLek5a0fmV;eoXT`SKckKwyxEC&>K?Pxzh!o^V$$X^HaXFkcSy#k|X7 zfdQUcz#j&7^-9D-8}Q{d_&}Hm@~#DPB+57)1Wdd(kD~;eFAI4r(BZi*&cQ5ahmiz% zW|(mWRybj1<)V_#>L5A3%;r586P^`j=o3N|V#X=?ykkL!=UUJgr&wV`A}-+0_9(EJ7RgfBhcX)aZuYX6bgSslpd=@=wDf6EV%yb_=ENaLwM!gB={_uydec;)k0U|xfRxubSE$mjoogSKGY zKq{~8Il`T_a4#xQBfrxpEEcs$2eSDPf&zDPJ0wKz=*|^?&Fy4|Ck=v680|nMPa5p) zYnl!R#{OQk1C=~&u)nXvLBQ-l9k0Cp_gmBlW9xIOd0~AnEq;f9z0}3l=Q1OZSD#Za zP*9)q^UND0#PbCT>T{}jVdBilTT|tQ^*P!>fM+D$(s*Hgj&{IJ3zOnkV=$a{3hHxW zJ|f^%yiXw0#oYRwm=6nh9nYP`qWYYOUkMQLuM{Y%&uz@ZZDR#eUSvV;G~bkmyKck_ z>vO7kVSP>pufKp7*5_pKjPe^lP>bqwY4Q9(EvV0>#q$HTuRa&MAC%1VO=vjV%FUhksU%kCKLUUoVc zoz7)u1%kG#&K0OsErg5C^F z`u&?5{E@0EABLdq7S17u@88^g`TFJVMwtbNBT#qU9&rWUjqkp~sZQWz3i_rKuE6o^ z{_cJ@Rwi&TpMb#0e8Ayv9>(KunB*01j@T#(}24Nst+au1WJ7V=x@TN&p{{_>D0fjDFny z7!9}<+K}H|;Ak?sg_A4bl{`X837kxyem?P6g4gnfk&r-G2`0ZL{FUIfd}0G5eg7OiaGR#60Ei9k#lkk?^m&m9@*2M&RUM`>GXYYt!MOm2~Ap7~*ju-fgUPW1%B%pZzZmm{F zQC6l5kMt_a%9OzsB+AN^!4o9P%2Z+QeG_G6Z+L?ghy$fstg+On1zMWsk|hvZ)*y(p z@p`Q`kcX2!oB&4qhBVc(oWHm`!(N!ST5MW9WAz@lVT6>%Ab(&Yz6F7!&7|nVTW-jz z*jsMo_zlHu$eqN;@v|I#@c58b#U?E@CFJTe7Yx{ww^SH&C4iYwk2-usU|?mg$+e^S0N=QBs8ljZ7Bs-QBZ(N04a~tVXV6t(Wo$#{a zRx5h*)jnt_)|+`$8oalB<#HOQ=GM95FPWTQ>%_&TJvctof-;}=kEQ68Ra#xU>Y?7j ztf_uHi@Yc?Mo%N}yz$n6di~R;__O;awj;4=uG#Gi?@TJF21DDZd7wfgD1$yoSchUt zVC(x^-YEk&r2W5LawA4Pc0wfmpwl}~tD{9D-(9&$iv&#S&U$zFAT$9$?3?bTi+8;; zHZqwK?tM#YH$EN}S8E&Xij!9EK(Vu4)w_^TS}YP#Ep*MIEfY?+fWE~&Ad=(cs3<10 za6d0$H}q@Xv1Hz}vuAFLubz{ceF({w=Dy2IC)a@mo@mBIrNMVMi2HNo{H1O_>rLMY zwDmH%WVH{s=RfYY>F<9tTXVl#ji|o$l}!iAdZrcf5G44usSGitu4v;VsNZZ>?K`6B z{hdu~#}bJamU`PcHUbs=IU+SO!(AX1$ugUw6}7rD0|Yq>FKo$gGssjM{9zCkMOo2` zSf(e3!%f7gScD$W17T4q10vJrkGmh-2(M+0OnpAro)#-rnG(05);Y0%0ay0A`f>An z#b&RKS)Nb{IRP*MD0T0NGHIWLIhr;!1$!ustIl{VeBB918hd_;OBy3KcPhelx{~-;8QrNdxm(%l{tribrRr>p9m`?^)(f(hLrIwV0#k-Zu=P0)yl9D% zSC_X_?@R@f^y@+msj*XKsdM`rMNaOf`e>#3uUH0pX`QNXns6{*u(R!Pxmf&Jo};sO z;y+7N_QjtJu=)2+B_DsWZ(a-buV;P`zotPI#D-5@Zw1u0!aA&1B+#i>?w6EBK)}Fu z;~v6uI=D+B-66WiJm@GR)?_YH(kocFEv{Um3bZq?C=50eDWM6vIWQBEp6s2J3=x7U zW7@M#Y^pxey4NlurAlv3cdI4))a}9NcRdsqXWGqV&ks4Cs;5}QDGp7PjhX~(x)Wq(9&eBiT`s`fl>&H#|o_>F^qiK@zbr+yrQa zAq?|cpLUKL#0y%8>;zSh)pNK9^-8&G0;;`Ry(|1C+cMi5&Vj;FCQ3W+*`|HF59F1( zr#i25`VP^|C@l0hH{qvafS4Wyl7R|n^4}f2Q*eF~FVIzZQQoR1O8e40^D;@Hq#NLQT>G?@rPSn-mRBh?StGOg= zlzb_YFe`joQp2F-9B~ZYx5KwN$ZhMBUn`&@FuHS*%`Gg259m>vjEwDH?H8QDVP#3f ztMyW#RHHWnvRe)8x?)_W%g}P!4>&6GgeR36C)bxoQkg>6N#vRdr&heJ-vRH@j0j+T zRvD@q{d8f@D z2zkvLCv|9dM0uS0@-gp!tXve!(eAv~$cuXOV0<4zGT+#keEJyMRUuVrVY^Oypiat$ znH*J<{@-MTX$3BQ#e$&!_oX|(N~p@6c<64WH*7`U2xk>uyRi}VGT)7;Snh9JXGeO_ zlbx4^49q>z&KJGTK|@T3V1xXC%&4)UBZeX({=Rr>?TKa!_-)*qrE^Wf!6;~30NQN(;j&id1N%Q(R3Rpw>QS&ji}v3*CfJ+VvU>!I^HiQpNN+mciOkSEhNm$ujLXDV#2APjYWjJSxlf z$%7pc6SF-fyfjMVhnkb?C#MybYA!~a)=kQnbEnq_k~f306&-6Gn?;jN?gz=#O6)bm zm!W>za|jI|y^-ECH_{#(JG?~@Kb|?tX{79op^zak(Tndhzmgku5Eb-;R!d&gfhhqT zEfG-Y-)tw`FcjGi@Z3X=s&DVyS*&5Q|CHMd6s<2VP#hrc(|az~>}FtBg{P(sW{Ris zczX?kbp$kOy0A^09rmCcHjiO^=bc9j?}M@6IA?p`!ijwTUc1pHn*%Z_I9?^^?wF~3r^=qcvGGSuKok4~&qY`LTbPOI{o{;rNbjq$PoL`iKAP)3VgNEf zv>xr+%OT41M1gB8xg27vWuno492>V&mGGzJNZ@|?c0*o<`NXGyU@BoF|q5D&J zGy{?!wHv>k)9dV=`Zab&UCdZjL^Y48$BQ$Setzb10r8WwXA(pz02a_lo}kF6w>rUn zeSOn2pV|F35ji4tyYKAtUkh_}KFxo7$UZTw-ST?mr7L%zgT*-^D^f-AZE5pSP||I= zvqt`2f0G;z7;_^g>%c!bq5fyHncEbol&QYMQo$}&-V)0|uGz95;GQ#=+kb++q5~n4 zCVG=^2H`9K2RlEn!2TObUjO7j+`H*O9BIkiG_hEb0}cy#U}fD6diSTzc;%t4F+=8I za8dg@Q`jWj0lF>ITixA8yrYl&AxYDl&xIWN>(}?CT2+}JBb>sl5v@Qi%4~U74bf~8 zn(ig+9+sQi?{T=hZ6BNdYD<(MSBa6{LNn&YnnOK#-KJpdJuoUiXA_X~@X*At?j}uJ z1Vy7B>K=>{Z8%vJPO*1kO9+dTKA)NlP!dP&*m}H=gOkV4q^W(wcdRVC{8SURBdwhLoN@WYROyfDHmF0ZD26Nte6^mPi^TqIr8W0axu&(5;^ zp=^rYi)4;@A%K{Ql`-sLi;v; z`+)OdjHVYYK=3}(WJ)H!#)ZtaG`Xw~JzC3p5_C}r@dr27MVKEj&0%xD9)0sKki9dy z?Flxvl#>-;bNbs!{)56{QryIZ`wZhtSjV+R-X>b9@%tzOj*?v@4WD!sim47|+sU0L zY8MBeMM^Zc*I&xopHF3Tv6+6QsigAZ_)1_|aY77=plZ`uWU_z8q7mnTPCNcWjoAJ} zaG_u&^o=*&CBP=**~4L8z}mZWPdZ>8Oppzr64tJUX}cRw&3HPy#KJ<+V=NEIn4lRM zsTM9}`507+TL)241kTms56>GrVy^NHwfBS9k40dQ_GvPhwuPeTS@ zU^%(yBIZudO@Eil<$eDtjpu5^(Q=MY)0O_s4(6Hu;Tm$(uyD0HPMgsIMd#l(aAi?6 zh~+WvVj!c)e}mTlf$4YdnF4}-Tf-SO&4EA17Z}h|JP8l!Lzz?n8C&cR@oi7VP%g^n z4=%C&$=c9ooeeaUZ_9Yccj{Tzq%3hd@zcvjUA&BCF`Wt2KTZB{6+loZ|1S}NwaS+) z6(dVo>Ti3c>j(Xg5>7hHo$GBzJw4K_;?>8syYJa#JYiEeoI=}_O2cFY5U4Y=d%N## z6ewxeiumT$J;Wb`(P-&Y!n?)(COj>ld(?@e`_%5t1PEzw(%{(qVp~f5-*dgv;IAa6 zhAn)kL$u@06XfnC#Lm7ba^oT1#~e`-D&^hKY~Sq`%DmAElb=eJ9VPB((^wuPE%e;9 zrv1(9kSQS>g*Q`VOe^U=@nCDN9!6!ar$C#MlsCf%x5-67&HoQfvLn9c>h|M!u#*^Ya3;Ty)6KGT>kidr3 zx%`%0G-~`O*69}2{X4rfv5X-xKb4h?-<73z*e-|XXf|(gILb~i7VQK? z+6C-xd@hsQahCVE81u6ILiUnVB=r^QG&9GIUGfn%L2NJyLz}U-KISA5NG^Aa()x*t z$Zm_j&qXG^tdWMUy)6?{5enIwJ40It!$n}+sr-7lppGL4tF^GJW&%6!{Z!#_su-Y& z)gS=N8&ub2e~}h?qO}Ch0rSB!H!*C;Tf6(XAGXBpfo$GOoTMtHe@33+IY$tgLXrw+*C)&vAbjthV?2M`nJ0_V3KBfKx;<9{-`1u`gPE;i6>- z87C+6Mo+f3mo*|{s<|bt7)MrW^egfzZj>}on(An}*6PFMGiB)sT+DK{kl>~@g;P?sOr=2W$Dp?Du%nT(7KP<}p=FMqxH;_HmdyM$-zSbghh z&{XmpP=zO+;`jMI=zPC6d3W=bTXkb}uispDkIJ>cgqI`T&F@klc74O?F!IT&1?_Op zw>o(Iw3I+2E{qNgZoJ{qb}IJY@VsK!IAM59$+phFqpc#bzCJN~$kC&*WqK&|<3cg=xI>3REdPBC0~Epe8WuayNR7y1|2qg(rtEm88|h&OA$|lEZ%vx3H=m zQn}kw@yFw|L)a+V(BiZd_2$fS9LAiG@GrVm%E8kP@nil)U0G*RHoOqLrI!O`WfpnR z`RSRqCCuk)&?(11ez15mEqiH6seJyd#6!*~Powt`W|m`Xk5`BG0e51q7n7yzEv5b7<8%7O<-d#VgK>jI zDN0yH1_fI*+-L=-c!QW&iRV+pX>VgFdH4iaa|#=mE~S*B9*Bs!O~t)AH*H-^0Gk2h zIjzaO!o}eX$C@_%;@z@_^*zL&2P#uxf6FcFyTatQ3|>*RA$;`(h*_KFLJ%61;L@7L zQ#IxCgGsmQRe^r_jM64Fte$~Ii*hme-7qNGpO0;A?X-HwaXoe0h$R`UkrN1VNcszx zpm(_)%nhgoAT+Yr;ET+tD9vf%YDvF!PkmxUh@S+A!cGn7|B~bX0qy@j zuY;}R&KS0MMTf{6%4W#Fxai_Zk4M#B3l5VCBVsy~ZNs=n=&`Om~jaXwU=lDQuE`7x@P!988UJ0{h8Wj2Rk zI8mJwCl-c_zLv;mw!B1lj6wO*sduFkzKkQgp6Em zm)v}LV)s*r&pMFS$Yw`J=Zb$mfo6R@A#Q_L&I*OiK~MVfq%0lfn^Lo7`-Fs`d`#wT z7R#{)oDw#cPH(?C@CwnxZ4V_o-bWSc+m2)$zFOi{S!fzh!(%9!k#;GfVac4WisqZaA&2#1r^Yr=W zJ-Rc3EgTyB7k!70OIcK@@DgT8!ITc(i%qK1n=04-kZM?veAUjFkq;J1I7NkGl>_~w zbUyPzZ35kM@yQpn8&Y9;)xs>UV%)Zex*Bcqd{)`o*z>DbSA(F`J*fKO&kD(I?H6Lg zcoLnB+~(f!Bsv-S3Lm%e1t*|ETG$eC+NKyJBdiTkE9t|XKsVAGjD~21f+8>WR7g#$ zvY+G*O@Sq{rRQL+p<7F$Lo~92JgWF^lr2lhQ0(f%XmD{uAL8i=;x^{ZX$ef?Kt)A; z6sPSqzTwJp)S-^m;i(m?W5D^=;W67;dm9o2Vj&EAV#$wi|Gu4Z2rXtn)J^nbas|w; zQ*w*W?-$C}jCu+FMk3MGuC?%O<0`mpD5-W|)5zV! zVjX4U%671NpF{d8tJG%|g3^kM&KEoJ|i zVvaXkjGZ@R3-4jwHa*G(y_JRi7kuYu^oHI)rEM}3wF(aDEfrI>uUJ}vrlocN-bt^-Zpf?+l~mwH z8vPC%ns=JF1PjW`cQ6=C?g6GBW70qfyZQVmEMln>C!~MH<(HFiC~HVtD@?Yl1mieW zPF^K$GUmhLU@C0`qx(#h5EY^HwCgkhnlyYixW_ylXLX*w!)GB^ckogqb8~pwPn7f1 zv?sKxjEK;ZhK8=nVI3re)xK|!<%{b!kF;)Q_lopzsZw)3y;hDx=f_n3-h>q!enbB_ zQd>9RGAm%?|60hE2_ffZD;^pLIP&)a5T3!YO;o!cwX%2_a^Qk`FTr&D{na#0LES95 zQT03!96mTE+FDrdf9f317V=NdrBS@&R4W$w>5;dsPvP^d3vtstjGkfH@B^bISzdHi z86ta(XQ8h5pnr$%hVv5d=$6HVqxNQAa2IA{&>tRGH#QvK!z6n6C#8VZZy=~cAH15N zDQAR?W+j?jHL!@Fe@RPWK+^InTJKD`L9(3aj2~SG%J~!ZjnIVq?9PFL?B6K+Nv;p|Lw~ie zSGsMHkMKe@QB{DdS&qfg(b!c5-PxiDGBk0U+v9Pn5nLHGGPG%R9%qGma|(nVzis z4rTFsJYlg=p*%gxbCNqq7F@8Wqx6lIohfFP@>dqv#RAIzzubg@%=PK*i=AB?Tt4{l zy5xK8LftBb9}SddrRAO-54%paaT@Ej@9`~e`nHfQ22ei=m^T%7Q++25-Cj1HI=NT3 zq<04S-$n?~@-PIhFeumNx#Tj^zDKPQ!P3ME;{orbBZS8~$D9b>r2U%B(PwK3VJ+PRt2l$N>GG&O~^ z3p-8~CsB-_g=iB(a94xc3$0UwgTpUEgwdG*L^u{f)Mi3`FJPXYTqJg-#ulLE!qoGC z47KhN56F*A|E5ljZTU;!<~*R2B<+V)wVr)x^_J2a=+p`x;iGgb>gTCrJgB59-MNr^ zHnCLmKm?T60q)nN5Hv-$DDZCvY*}*W>nxO9l7*IGqDVTAXC-u2Jtqh61Y|9yUvG`K z8Lscq%2@8^=#ad-CWY?Fl!_T_-sD_eRau*FN8AAKSQq1&KgYX+JCu8yP>2 zeV$6&G+fF-0}lg2z`pFHH-Ok zx<8^K2SH0Q`%YTy*M;^s!<=0lz6a?=9P3dnK4ZF>>ht;rRm<|4@lyu|o1k|Bc_Bqu z5TndbNWB_dyOmMhQVe%#-U5gT!%udBs+ncjb-5C{-d}xGb#X!sz=B+O97QR|3o0L| ztZnb{X#G@&2*d^c)IGCr1VJH+o+JEsUYa<)bycAPhiT^t5>&&e+N}?8-*wU>x7@gz zmVg9+8m4jL`mG1Fd~13_K-;W~JCln<;(hz@K|N=8j9(UP#z6C-2tSe#|9(VV|In^B zq1R_#LW)ThH2LR;frDTnpy#gr_=!bMjAJPl-C>;E?6R4}?aO^+4Cq(uWbZ%urgirP zZ_t%_>aPac*MkBKKFTbW@v`J`v!6D7UjRoJ-#k$NieRH-rN0dDzubz>jo=MBV|n~o ze6|ZT-A;Ea4Lh{u1D4ggXTBR8W5y`@mnR^tbN7P9sg;ORSu%@V0a}wOr|D2we^_E> za&_=L?8av?Rd=Z5-Kd7wlz4%!!rpoz{-DIK(s0)&k&?wmy1v;q?K_t-u!8@*49Jtd zQ0!sllbFwE$AZGRK51QZ^X(s>=2+U+>P#)*VAk}i{`hI* zAr;!wGp%ZJ)aw2xAL;UAJyu}t)mwGe)x@oEN~+Ayu>4j+5k7IBbd7?-+@ zA?+94_WAU~ZBCAx8YdUjhOhjJmuxJh3_N?ZNoDPP&T;9ZyDgsl1Q1^@r8O=?IhXIp zed>QdH$PvFA^T+A-TruYmuZ3Xbh`N-$$TpY9-Q=_7tx{YgB>-^yYqzHGpCt9-D7~at;D~V~X=ut3JO*xSnqwRGRw6rJe=Km93o{^m1iwXO$Yp{oF@*07i)Q(mmiw7%Xit{IloN{s za@FE3xA~WB-*sSoc>mtBVakD>o6v18Qa|073dgdx9xGr^$}GUSabaJLYT6uK__F2T z!3UOdfur)lGbQY+vx9n(4i5T^B5aWE?YFJD%(*k>t<&IQP<@Skfwx-~$il|zN++IanB)=e=Mal!pjbJYNW*6nvNT~|7o>$3A_iIBkbJpCo zx<~+>rU+m$FYR*))SrJt$$qe?l32!c3fRuq;N|Z=XeO`9juct39rKgjwL^3Zu zR_}aA45_{t1X0nx5k}sOiTNNP(xITlr~gn#{R^|QO?`WXIeUm`-{78$H-LS|h_&1V zpLm;s!$`nQU~ z_YnNjXFCX3Z+IS&k@{8qfS~2#)VBthert~#FiUKg6*=Su2ETd-kUQSl@<%K`@)bj9 zi#_Uh$p+`l7;f{TF2_@C2cXC717(=VJLpQOlE@&R{_wCtVP|hU7lB$x!jQJ|>v)ci z_C~~`7gXD?v-26~K3$n4{LEo9A8fomM@u0xrSb@5`0otd{#DffbKv(sShAF4oUPOJ z7Ddsb(~nMTg&J(*eBuv!b(>`M?!e6sIeMm6`>q1m%F$|;|C~nuKdOX=M}PB)(p&7h zOgink;xkMMs)5;-F94%#zn|~UR!VZ24HtjW^uE6wWFY=hVz*|qb}jTrBx6>2A$auN z6G9iI*?Y%Gxwx5mFCq>6UFvjdww*BLb#T#ou==v|V)UtccVx_`=!55e~{f;Je(SCnTgyLMRKC0XW6_A;qjpY6#=x|}{*RCc3C zt#f6vlcx4! zdm*mQ4SR{|M3S-PXg){~ZNC=%?ILordd6k&X#PPE^M&U-U)c(oD3r*%Bzvyl@zg?c zpv3I|9KesTWEUgQk<;MXVXYh4zndF()QnLQ#Ayo{!9 zYTmprOk?`%THQ7FC6I?jmpjWtMaB%-WtR`yw#viO2SEx!vq7!XYsWd}s%RdRohRd& zQ?PjD9;P^6f1RNveyIB)+V_S)UEe^eJ|uCZlIR1b5Jvj$N);FtQdpv(86#*Z#3*;( z!+hYD8S?!Fo;AYm+R)|}{1?ELvLe_j(a~vj^}`54pgBxI%$gr~()y6yoP~<9+u*r4 zZx!YIoqtkDo`15}D(ahu_jaLk`bhA+HpJQoo5MEm8b*x#xek+E0N{&t;4DX3VSf7J zn(KXS#RIM#xj~&@5<8cB=D3gTru@6k#HqFMZV?zfOBL8#1G};5@oDCyyCxjr@6NAH zC`^xt$<11Lh+pR6nH(7!Kbj=vlRgM{t$o8iemsF>w^?x!{VvG%qu6+g_;$qPm=yTv z^>f_2vf=C{1-$N}NRDw@N(5~Rlz~Zz(Q-^Mehrs+d^4TWLTB6;6|q7oCJT8_Kq_t) z*sjCz>16L(Z~v~RYVhrAUtLdn)L2Xh79UgM-y?p{tMRzNXIrX8fo_JS(CMt%G9}KZ zFFrr|Ja$aNo&B!qGQ^`zP&8j$ZTbLR?Fsa}DL+ Pdw}lco0p2U%tQVQ4f%%r literal 2557 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 Qpg*CQgRQeo8I~CHFM-4zlK=n! literal 6928 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 L8tYVPImiAF`FH*@ diff --git a/icons/obj/items/hunter/thrall_gear.dmi b/icons/obj/items/hunter/thrall_gear.dmi index 958a032658afdba322c42291760313a56358660b..4152400118d7f519b1d9fa956a92bbedf2935ecc 100644 GIT binary patch literal 2372 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 Date: Thu, 21 Aug 2025 21:44:09 -0400 Subject: [PATCH 08/41] Wearable Syringes (#10241) # About the pull request Allows syringes to be worn in the ear, belt, and suit storage slots. This should be identical to how you can wear penlights. Tested to work in game, does _not_ allow injectors to be worn anywhere new. # Explain why it's good for the game It's a neat way to store a syringe for quicker access than you'd have with using a bag or syringe case, as well as just more convenient. # Testing Photographs and Procedure
Screenshots & Videos syringe-test
# Changelog :cl: qol: Allows Syringes to be worn in Suit Storage, Ear Slots, and Belt Slots /:cl: --- code/game/objects/items/reagent_containers/syringes.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/reagent_containers/syringes.dm b/code/game/objects/items/reagent_containers/syringes.dm index ef4b99bea283..d0c84b53cb3e 100644 --- a/code/game/objects/items/reagent_containers/syringes.dm +++ b/code/game/objects/items/reagent_containers/syringes.dm @@ -21,6 +21,7 @@ volume = 15 w_class = SIZE_TINY flags_item = NOBLUDGEON + flags_equip_slot = SLOT_WAIST|SLOT_EAR|SLOT_SUIT_STORE sharp = IS_SHARP_ITEM_SIMPLE transparent = TRUE reagent_desc_override = TRUE //uses display_contents From 0c25b9ff369ced6055a31d0becda66eef2dadf2c Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 02:20:28 +0000 Subject: [PATCH 09/41] Automatic changelog for PR #9493 [ci skip] --- html/changelogs/AutoChangeLog-pr-9493.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-9493.yml diff --git a/html/changelogs/AutoChangeLog-pr-9493.yml b/html/changelogs/AutoChangeLog-pr-9493.yml new file mode 100644 index 000000000000..7c1dce5997e0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9493.yml @@ -0,0 +1,11 @@ +author: "MeH0y" +delete-after: True +changes: + - rscadd: "Blooded Thrall system" + - balance: "thralls no longer have access to human weaponry" + - bugfix: "thralls can now interact with their mask functions" + - bugfix: "thralls can now use the combi-stick" + - bugfix: "thrall SD now works properly" + - bugfix: "thralls no longer go bald" + - imageadd: "Blooded thrall hud icon, new thrall armor set with 5 material types." + - maptweak: "Added blooded thrall vendor on upper-deck, replaced the lower-deck youngblood showers with thrall quarters." \ No newline at end of file From 80f35fe9f99ae5fef98e9ce3cd4096c44afd79be Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 02:20:31 +0000 Subject: [PATCH 10/41] Automatic changelog for PR #10241 [ci skip] --- html/changelogs/AutoChangeLog-pr-10241.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10241.yml diff --git a/html/changelogs/AutoChangeLog-pr-10241.yml b/html/changelogs/AutoChangeLog-pr-10241.yml new file mode 100644 index 000000000000..50802339cb82 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10241.yml @@ -0,0 +1,4 @@ +author: "Icarus-The-Sun" +delete-after: True +changes: + - qol: "Allows Syringes to be worn in Suit Storage, Ear Slots, and Belt Slots" \ No newline at end of file From 694c4add954b600fa34146c0be5823f1339cf027 Mon Sep 17 00:00:00 2001 From: Vicacrov <49321394+Vicacrov@users.noreply.github.com> Date: Fri, 22 Aug 2025 03:46:18 +0200 Subject: [PATCH 11/41] Changes hivelord minimum evolve time from 3 minutes to 4 minutes (#10242) # About the pull request This changes the Hivelord's minimum evolve timer from 3 minutes to 4 minutes. # Explain why it's good for the game Two reasons, one, currently it is at 3 minutes when drones still are at around 120/200, so nobody can evolve into it, it is just unnecessary clutter. After the change, on local, my drone was at 178/200 when the announcement came, still not 200/200, but I don't think having an announcement about defenders and then one about hivelords 10 seconds later is a good idea. Two, now it is at the same time as Defender, so we only get one meaningful announcement instead of one useful one plus one useless one. # Testing Photographs and Procedure image # Changelog :cl: qol: Hivelords can now evolve from 4 minutes instead of 3 minutes, the same time as Defenders (drones should be around at 180/200 evolution when this announcement comes, this is just to cut down on extra announcements). /:cl: --- code/modules/mob/living/carbon/xenomorph/castes/Hivelord.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Hivelord.dm b/code/modules/mob/living/carbon/xenomorph/castes/Hivelord.dm index 39140f8a6a9b..8e2d06571ae2 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Hivelord.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Hivelord.dm @@ -37,7 +37,7 @@ aura_strength = 2.5 - minimum_evolve_time = 3 MINUTES + minimum_evolve_time = 4 MINUTES minimap_icon = "hivelord" From e3c2c7e7764b04f309438cad696888ec94fdb1e6 Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 02:39:47 +0000 Subject: [PATCH 12/41] Automatic changelog for PR #10242 [ci skip] --- html/changelogs/AutoChangeLog-pr-10242.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10242.yml diff --git a/html/changelogs/AutoChangeLog-pr-10242.yml b/html/changelogs/AutoChangeLog-pr-10242.yml new file mode 100644 index 000000000000..8efae8a963af --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10242.yml @@ -0,0 +1,4 @@ +author: "Vicacrov" +delete-after: True +changes: + - qol: "Hivelords can now evolve from 4 minutes instead of 3 minutes, the same time as Defenders (drones should be around at 180/200 evolution when this announcement comes, this is just to cut down on extra announcements)." \ No newline at end of file From a962d66c15f30e6aad8d87845700c0c94b13ccda Mon Sep 17 00:00:00 2001 From: Blue-Fox5 <31245291+Blue-Fox5@users.noreply.github.com> Date: Thu, 21 Aug 2025 23:32:13 -0400 Subject: [PATCH 13/41] Berserker Rav Description Fix (#10410) # About the pull request fixes the description for berserker rav, listing the correct rage meter of five, tested it, it works, correctly displays the number. # Explain why it's good for the game clarifies previous error # Testing Photographs and Procedure image
# Changelog :cl: spellcheck: Fixed berserkers strain description giving out the wrong number of rage you can obtain /:cl: --- .../living/carbon/xenomorph/strains/castes/ravager/berserker.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/ravager/berserker.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/ravager/berserker.dm index 92ca59c6441d..68c0f910a5dd 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/ravager/berserker.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/ravager/berserker.dm @@ -1,6 +1,6 @@ /datum/xeno_strain/berserker name = RAVAGER_BERSERKER - description = "You lose your empower, charge, and scissor cut, decrease your health, and sacrifice a bit of your influence under frenzy pheromones to increase your movement speed, slightly increase your armor, and gain a new set of abilities that make you a terrifying melee monster. By slashing, you heal yourself and gain a stack of rage that increases your armor, movement speed, attack speed, and your heals per slash, to a maximum of six rage. Use your new Appehend ability to increase your movement speed and apply a slow on the next target you slash and use your Clothesline ability to fling your target to heal yourself, even more-so if you have a rage stack that will be used up. Finally, use your Eviscerate to unleash a devastating windmill attack that heals you for every enemy you hit after an immobilizing wind-up." + description = "You lose your empower, charge, and scissor cut, decrease your health, and sacrifice a bit of your influence under frenzy pheromones to increase your movement speed, slightly increase your armor, and gain a new set of abilities that make you a terrifying melee monster. By slashing, you heal yourself and gain a stack of rage that increases your armor, movement speed, attack speed, and your heals per slash, to a maximum of five rage. Use your new Appehend ability to increase your movement speed and apply a slow on the next target you slash and use your Clothesline ability to fling your target to heal yourself, even more-so if you have a rage stack that will be used up. Finally, use your Eviscerate to unleash a devastating windmill attack that heals you for every enemy you hit after an immobilizing wind-up." flavor_description = "Unbridled fury fills this one. You will become an extension of my rage." icon_state_prefix = "Berserker" From b5883eb586dab0263d9c87c722eab083a306845d Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 03:40:35 +0000 Subject: [PATCH 14/41] Automatic changelog for PR #10410 [ci skip] --- html/changelogs/AutoChangeLog-pr-10410.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10410.yml diff --git a/html/changelogs/AutoChangeLog-pr-10410.yml b/html/changelogs/AutoChangeLog-pr-10410.yml new file mode 100644 index 000000000000..ee1fe1affd38 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10410.yml @@ -0,0 +1,4 @@ +author: "Blue-Fox5" +delete-after: True +changes: + - spellcheck: "Fixed berserkers strain description giving out the wrong number of rage you can obtain" \ No newline at end of file From e94496afb8b07f578ffd06e306d44d8ddb428d2e Mon Sep 17 00:00:00 2001 From: NightKnight <88754494+SirNightKnight@users.noreply.github.com> Date: Thu, 21 Aug 2025 23:34:51 -0400 Subject: [PATCH 15/41] fixes light fixture deconstruction getting stuck on removing the light fitting (#10421) # About the pull request fixes getting stuck on removing the light fitting with a screwdriver and not being able to open the fixture. # Explain why it's good for the game bug fix # 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 light fixture deconstruction getting stuck on removing the light fitting. /:cl: --- code/modules/power/lighting.dm | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index bc88cab37e86..9803f23fcd9a 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -400,10 +400,10 @@ to_chat(user, "There is a [fitting] already inserted.") return else - playsound(loc, 'sound/items/Screwdriver.ogg', 25, 1) src.add_fingerprint(user) var/obj/item/light_bulb/L = W if(istype(L, light_type)) + playsound(loc, 'sound/items/Screwdriver.ogg', 25, 1) status = L.status to_chat(user, "You insert the [L.name].") switchcount = L.switchcount @@ -425,11 +425,7 @@ return // attempt to remove light via screwdriver - if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER)) - if(status == LIGHT_EMPTY) - to_chat(user, "There is no [fitting] in this light.") - return - + if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER) && status != LIGHT_EMPTY) to_chat(user, "You remove the light [fitting].") playsound(loc, 'sound/items/Screwdriver.ogg', 25, 1) // create a light tube/bulb item and put it in the user's hand From 599330bb234655d7649dfa96bb047f201ca15f6f Mon Sep 17 00:00:00 2001 From: Red <47158596+Red-byte3D@users.noreply.github.com> Date: Fri, 22 Aug 2025 06:37:58 +0300 Subject: [PATCH 16/41] fixes some vehicle vend code (#10429) # About the pull request title # Explain why it's good for the game title # 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 some broken vending code so you can properly vend apc gear if an apc is "chosen" /:cl: --- .../vending/vendor_types/crew/vehicle_crew.dm | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm index 531d4700187e..1ea972d4e3d2 100644 --- a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm +++ b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm @@ -79,16 +79,17 @@ display_list += GLOB.cm_vending_vehicle_crew_apc return display_list - if(selected_vehicle == "TANK") - if(available_categories) - display_list = GLOB.cm_vending_vehicle_crew_tank + switch(selected_vehicle) + if("TANK") + if(available_categories) + display_list = GLOB.cm_vending_vehicle_crew_tank - else if(selected_vehicle == "ARC") - display_list = GLOB.cm_vending_vehicle_crew_arc + if("ARC") + display_list = GLOB.cm_vending_vehicle_crew_arc - else if(selected_vehicle == "TANK") - if(available_categories) - display_list = GLOB.cm_vending_vehicle_crew_apc + if("APC") + if(available_categories) + display_list = GLOB.cm_vending_vehicle_crew_apc else //APC stuff costs more to prevent 4000 points spent on shitton of ammunition display_list = GLOB.cm_vending_vehicle_crew_apc_spare return display_list From c688a7d87809c1c07c0e192ec127a267d68ac87a Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 04:07:30 +0000 Subject: [PATCH 17/41] Automatic changelog for PR #10421 [ci skip] --- html/changelogs/AutoChangeLog-pr-10421.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10421.yml diff --git a/html/changelogs/AutoChangeLog-pr-10421.yml b/html/changelogs/AutoChangeLog-pr-10421.yml new file mode 100644 index 000000000000..002a8c4d222f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10421.yml @@ -0,0 +1,4 @@ +author: "SirNightKnight" +delete-after: True +changes: + - bugfix: "fixed light fixture deconstruction getting stuck on removing the light fitting." \ No newline at end of file From 7312234e604896231a06e61baee16b8aac980306 Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 04:07:53 +0000 Subject: [PATCH 18/41] Automatic changelog for PR #10429 [ci skip] --- html/changelogs/AutoChangeLog-pr-10429.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10429.yml diff --git a/html/changelogs/AutoChangeLog-pr-10429.yml b/html/changelogs/AutoChangeLog-pr-10429.yml new file mode 100644 index 000000000000..02ccdd8fa239 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10429.yml @@ -0,0 +1,4 @@ +author: "Red-byte3D" +delete-after: True +changes: + - bugfix: "Fixes some broken vending code so you can properly vend apc gear if an apc is \"chosen\"" \ No newline at end of file From 7009ea4bb08e925db66aa8346440832a5d776120 Mon Sep 17 00:00:00 2001 From: CoffeeKat <56778689+jupyterkat@users.noreply.github.com> Date: Fri, 22 Aug 2025 14:14:42 +1000 Subject: [PATCH 19/41] boilers are vulnerable to crossing flames as intended (#10257) # About the pull request boilers are vulnerable to crossing flames as intended # Explain why it's good for the game boilers are unintentionally immune to crossing flames closes #9826 # 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 boiler being immune to crossing flames /:cl: Co-authored-by: Detective-Google <48196179+Detective-Google@users.noreply.github.com> --- code/modules/mob/living/carbon/xenomorph/Xenomorph.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index 81a2f3be1912..0b190b2de278 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -424,7 +424,7 @@ caste = GLOB.xeno_datum_list[caste_type] //Fire immunity signals - if (caste.fire_immunity != FIRE_IMMUNITY_NONE) + if (HAS_FLAG(caste.fire_immunity, FIRE_IMMUNITY_NO_DAMAGE | FIRE_IMMUNITY_NO_IGNITE | FIRE_IMMUNITY_XENO_FRENZY)) if(caste.fire_immunity & FIRE_IMMUNITY_NO_IGNITE) RegisterSignal(src, COMSIG_LIVING_PREIGNITION, PROC_REF(fire_immune)) From aa2213705c94db88080675422000f77998b0214e Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 04:23:09 +0000 Subject: [PATCH 20/41] Automatic changelog for PR #10257 [ci skip] --- html/changelogs/AutoChangeLog-pr-10257.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10257.yml diff --git a/html/changelogs/AutoChangeLog-pr-10257.yml b/html/changelogs/AutoChangeLog-pr-10257.yml new file mode 100644 index 000000000000..2107a1071e54 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10257.yml @@ -0,0 +1,4 @@ +author: "jupyterkat" +delete-after: True +changes: + - bugfix: "fixed boiler being immune to crossing flames" \ No newline at end of file From acea3dfe0dbb411ab33906622c01e29c2380b1bf Mon Sep 17 00:00:00 2001 From: BOBAMAx <49925269+BOBAMAx@users.noreply.github.com> Date: Thu, 21 Aug 2025 23:46:17 -0500 Subject: [PATCH 21/41] CO surv bugfixes bugfixes (#10398) # About the pull request image I am stupid # Explain why it's good for the game #10270 # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: fix: CL on solaris pmc insert won't spawn as a CMB marshal any more /:cl: Co-authored-by: Detective-Google <48196179+Detective-Google@users.noreply.github.com> --- code/game/objects/effects/landmarks/survivor_spawner.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/effects/landmarks/survivor_spawner.dm b/code/game/objects/effects/landmarks/survivor_spawner.dm index 7ccab835732f..eed776b91c22 100644 --- a/code/game/objects/effects/landmarks/survivor_spawner.dm +++ b/code/game/objects/effects/landmarks/survivor_spawner.dm @@ -442,6 +442,7 @@ icon_state = "surv_wy" equipment = /datum/equipment_preset/survivor/corporate/manager synth_equipment = /datum/equipment_preset/synth/survivor/pmc + CO_equipment = /datum/equipment_preset/survivor/corporate/manager intro_text = list("

You are a survivor of a crash landing!

",\ "You are NOT aware of the xenomorph threat.",\ "Your primary objective is to survive. You believe a second dropship crashed somewhere to the north, which was carrying additional supplies.") From 4308c27c69413fcaf60b75129e64caee4e5cdb7e Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 04:54:44 +0000 Subject: [PATCH 22/41] Automatic changelog for PR #10398 [ci skip] --- html/changelogs/AutoChangeLog-pr-10398.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10398.yml diff --git a/html/changelogs/AutoChangeLog-pr-10398.yml b/html/changelogs/AutoChangeLog-pr-10398.yml new file mode 100644 index 000000000000..1594a5cd8275 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10398.yml @@ -0,0 +1,4 @@ +author: "BOBAMAx" +delete-after: True +changes: + - bugfix: "CL on solaris pmc insert won't spawn as a CMB marshal any more" \ No newline at end of file From 83de31f25dda354fb737216a85ff26d06a2115f5 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Fri, 22 Aug 2025 15:48:45 +0200 Subject: [PATCH 23/41] Makes /area/interior NO_TUNNEL (#10449) # About the pull request Fixes #10442 # Explain why it's good for the game Shouldn't be able to burrow inside interiors, especially since they're loaded in a shared z-level, permitting "teleportation" # 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 no longer tunnel in vehicle interiors /:cl: --- code/modules/vehicles/interior/areas.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/vehicles/interior/areas.dm b/code/modules/vehicles/interior/areas.dm index 3afd13a126d2..8f046411dacf 100644 --- a/code/modules/vehicles/interior/areas.dm +++ b/code/modules/vehicles/interior/areas.dm @@ -5,6 +5,7 @@ icon = 'icons/turf/areas_interiors.dmi' icon_state = "interior" base_lighting_alpha = 255 + flags_area = AREA_NOTUNNEL ambience_exterior = 'sound/ambience/vehicle_interior1.ogg' sound_environment = SOUND_ENVIRONMENT_ROOM From 54bcb9ee342787c6d71e0ce91959625dceb9b43f Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 13:57:30 +0000 Subject: [PATCH 24/41] Automatic changelog for PR #10449 [ci skip] --- html/changelogs/AutoChangeLog-pr-10449.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10449.yml diff --git a/html/changelogs/AutoChangeLog-pr-10449.yml b/html/changelogs/AutoChangeLog-pr-10449.yml new file mode 100644 index 000000000000..5ede85724e62 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10449.yml @@ -0,0 +1,4 @@ +author: "TheGamerdk" +delete-after: True +changes: + - bugfix: "You can no longer tunnel in vehicle interiors" \ No newline at end of file From 02eb63bc9ce6bf33b3143ae11a8a6f08f78f3626 Mon Sep 17 00:00:00 2001 From: Blundir <100090741+Blundir@users.noreply.github.com> Date: Fri, 22 Aug 2025 18:16:38 +0300 Subject: [PATCH 25/41] Speech bubble update (#8959) # About the pull request This pr updates visuals and code for the speech bubbles, adding new ones and fixing some issues with existing ones, porting some bubble sprites from https://github.com/tgstation/tgstation Made a bubble for when you finish a message, made a custom animation for it with a fade out, animated all old bubbles
![dreamseeker_fVDIHvHTGc](https://github.com/user-attachments/assets/2eaa218d-18ff-47be-8633-cc89ea1ecbb5)
Working Joes and Dzho Automatons now have unique bubbles
![dreamseeker_cMINf15vae](https://github.com/user-attachments/assets/c16a49fc-5b1d-46cb-8ff0-592907d12589) ![dreamseeker_GrgESfOx9o](https://github.com/user-attachments/assets/4ff3f6a1-312f-4c80-921f-c17e237aafa8)
Resprites all the legacy-looking speech bubbles with new ones
![dreamseeker_ZFUtk0tC7q](https://github.com/user-attachments/assets/af9677e2-286f-4d80-bbe6-d2088dad5415) ![dreamseeker_3z4QHTj1Qx](https://github.com/user-attachments/assets/22af1a49-8c12-4b24-97cf-c1930e823db4) ![dreamseeker_uuTUR6RTR9](https://github.com/user-attachments/assets/5f6aabcd-6953-4395-aede-832a6e9e3978)
Yautja now have a unique custom bubble and unique bubble for translator speech
![dreamseeker_oE49uBKeBw](https://github.com/user-attachments/assets/fdc9d83f-5985-42c6-a017-14b6ef834aae) ![dreamseeker_uhD4g09cbD](https://github.com/user-attachments/assets/1b3d6a71-bd67-40d8-9753-34a82b390dfd)
Provost now have a uniqe bubble
![dreamseeker_trU4jCaedJ](https://github.com/user-attachments/assets/0eff6238-47c0-4924-8875-2840ca692d85)
Speech bubbles now render over huds like sec or med hud
![dreamseeker_xffQ1MFJef](https://github.com/user-attachments/assets/d0ee408e-7066-447f-b6dc-d3911949ff9a)
Yautja bubble and translator bubbles by **Crow** , discord tag **sir.crow** All the animations, resprites and code by me # Explain why it's good for the game Visuals good # Changelog :cl: add: yautja, working joes, provost now have unique bubbles types to them add: yautja translator now has a unique speech and typing bubble add: speech bubbles now render over huds like med/sec huds add: whisper now shows runechat message above your head (if you are in range) imageadd: a lot of new bubble icons, resprite of old ones, adding a smooth fade out animation to all of them fix: whispering while laying down (like in crit) no longer shows your speech bubble under your legs /:cl: --------- Co-authored-by: Red <47158596+Red-byte3D@users.noreply.github.com> Co-authored-by: kiVts <48099872+kiVts@users.noreply.github.com> --- code/datums/langchat/langchat.dm | 1 + code/modules/cm_preds/yaut_bracers.dm | 43 ++++++++++-------- code/modules/gear_presets/synths.dm | 5 ++ code/modules/gear_presets/uscm_event.dm | 2 + code/modules/gear_presets/yautja.dm | 1 + code/modules/mob/living/carbon/human/emote.dm | 27 ++++++----- .../mob/living/carbon/human/whisper.dm | 17 ++----- code/modules/mob/living/say.dm | 27 +++++++---- code/modules/mob/say.dm | 2 +- code/modules/tgui/tgui-say/typing.dm | 4 ++ icons/mob/effects/talk.dmi | Bin 12588 -> 83060 bytes 11 files changed, 74 insertions(+), 55 deletions(-) diff --git a/code/datums/langchat/langchat.dm b/code/datums/langchat/langchat.dm index 317f80642c45..a1409bca2cee 100644 --- a/code/datums/langchat/langchat.dm +++ b/code/datums/langchat/langchat.dm @@ -62,6 +62,7 @@ langchat_image.layer = 20 langchat_image.plane = RUNECHAT_PLANE langchat_image.appearance_flags = NO_CLIENT_COLOR|KEEP_APART|RESET_COLOR|RESET_TRANSFORM + langchat_image.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA langchat_image.maptext_y = langchat_height langchat_image.maptext_height = 64 langchat_image.maptext_y -= LANGCHAT_MESSAGE_POP_Y_SINK diff --git a/code/modules/cm_preds/yaut_bracers.dm b/code/modules/cm_preds/yaut_bracers.dm index d28c5f16b34e..7c8b48ffaeea 100644 --- a/code/modules/cm_preds/yaut_bracers.dm +++ b/code/modules/cm_preds/yaut_bracers.dm @@ -1249,7 +1249,7 @@ set src in usr . = translate_internal(usr, FALSE) -/obj/item/clothing/gloves/yautja/hunter/proc/translate_internal(mob/user, forced = FALSE) +/obj/item/clothing/gloves/yautja/hunter/proc/translate_internal(mob/living/user, forced = FALSE) if(!user || user.stat) return @@ -1261,21 +1261,24 @@ to_chat(user, SPAN_DANGER("You cannot translate (muted).")) return - user.create_typing_indicator() - var/msg = sanitize(input(user, "Your bracer beeps and waits patiently for you to input your message.", "Translator", "") as text) - user.remove_typing_indicator() - if(!msg || !user.client) + var/list/heard = get_mobs_in_view(7, user) + for(var/mob/heard_mob in heard) + if(heard_mob.ear_deaf) + heard -= heard_mob + + var/image/translator_bubble = image('icons/mob/effects/talk.dmi', src, "pred_translator", TYPING_LAYER) + user.show_speech_bubble(heard, looping_bubble = TRUE, animated = FALSE, speech_bubble = translator_bubble) + var/message = tgui_input_text(user, "The bracer beeps and is awaiting to translate", "Translator", multiline = TRUE) + user.remove_speech_bubble(translator_bubble) + if(!message || !user.client) return if(!drain_power(user, 50)) return - log_say("[user.name != "Unknown" ? user.name : "([user.real_name])"] \[Yautja Translator\]: [msg] (CKEY: [user.key]) (JOB: [user.job]) (AREA: [get_area_name(user)])") + user.show_speech_bubble(heard, "pred_translator1") - var/list/heard = get_mobs_in_view(7, user) - for(var/mob/M in heard) - if(M.ear_deaf) - heard -= M + log_say("[user.name != "Unknown" ? user.name : "([user.real_name])"] \[Yautja Translator\]: [message] (CKEY: [user.key]) (JOB: [user.job]) (AREA: [get_area_name(user)])") var/overhead_color = "#ff0505" var/span_class = "yautja_translator" @@ -1283,22 +1286,22 @@ if(translator_type == PRED_TECH_RETRO) overhead_color = "#FFFFFF" span_class = "retro_translator" - msg = replacetext(msg, "a", "@") - msg = replacetext(msg, "e", "3") - msg = replacetext(msg, "i", "1") - msg = replacetext(msg, "o", "0") - msg = replacetext(msg, "s", "5") - msg = replacetext(msg, "l", "1") + message = replacetext(message, "a", "@") + message = replacetext(message, "e", "3") + message = replacetext(message, "i", "1") + message = replacetext(message, "o", "0") + message = replacetext(message, "s", "5") + message = replacetext(message, "l", "1") - user.langchat_speech(msg, heard, GLOB.all_languages, overhead_color, TRUE) + user.langchat_speech(message, heard, GLOB.all_languages, overhead_color, TRUE) var/voice_name = "A strange voice" if(user.name == user.real_name && user.alpha == initial(user.alpha)) voice_name = "[user.name]" - for(var/mob/Q as anything in heard) - if(Q.stat && !isobserver(Q)) + for(var/mob/heard_human as anything in heard) + if(heard_human.stat && !isobserver(heard_human)) continue //Unconscious - to_chat(Q, "[SPAN_INFO("[voice_name] says,")] '[msg]'") + to_chat(heard_human, "[SPAN_INFO("[voice_name] says,")] '[message]'") /obj/item/clothing/gloves/yautja/hunter/verb/bracername() set name = "Toggle Bracer Name" diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm index 2cb340f29285..88b16f36bac4 100644 --- a/code/modules/gear_presets/synths.dm +++ b/code/modules/gear_presets/synths.dm @@ -766,6 +766,7 @@ /datum/equipment_preset/synth/working_joe/load_race(mob/living/carbon/human/new_human) . = ..() new_human.set_species(joe_type) + new_human.bubble_icon = "robot" new_human.gender = MALE new_human.flavor_text = "" new_human.h_style = "Bald" @@ -874,6 +875,10 @@ . = ..() new_human.allow_gun_usage = TRUE +/datum/equipment_preset/synth/working_joe/upp/load_race(mob/living/carbon/human/new_human) + . = ..() + new_human.bubble_icon = "syndibot" + /datum/equipment_preset/synth/working_joe/load_name(mob/living/carbon/human/new_human, randomise) if(src.faction == FACTION_UPP) new_human.change_real_name(new_human, "Dzho Automaton â„–[rand(9)][rand(9)][ascii2text(rand(65, 90))][ascii2text(rand(65, 90))]") diff --git a/code/modules/gear_presets/uscm_event.dm b/code/modules/gear_presets/uscm_event.dm index fbd27861fab7..efd2fa40c179 100644 --- a/code/modules/gear_presets/uscm_event.dm +++ b/code/modules/gear_presets/uscm_event.dm @@ -309,6 +309,7 @@ if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1)) back_item = /obj/item/storage/backpack/security + new_human.bubble_icon = "lawyer" new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/provost(new_human), WEAR_L_EAR) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/mp/provost/chief(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) @@ -347,6 +348,7 @@ if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1)) back_item = /obj/item/storage/backpack/security + new_human.bubble_icon = "lawyer" new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/provost(new_human), WEAR_L_EAR) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/mp/provost/chief(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) diff --git a/code/modules/gear_presets/yautja.dm b/code/modules/gear_presets/yautja.dm index 75350163f288..3cd79deb65cb 100644 --- a/code/modules/gear_presets/yautja.dm +++ b/code/modules/gear_presets/yautja.dm @@ -16,6 +16,7 @@ /datum/equipment_preset/yautja/load_race(mob/living/carbon/human/new_human, client/mob_client) new_human.set_species(SPECIES_YAUTJA) new_human.skin_color = pick(PRED_SKIN_COLOR) + new_human.bubble_icon = "pred" new_human.body_type = "pred" //can be removed in future for body types if(!mob_client) mob_client = new_human.client diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index b7f90f625743..83d16f3ab03e 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -169,14 +169,13 @@ if(!.) return FALSE - user.show_speech_bubble("medic") - -/datum/emote/living/carbon/human/medic/run_langchat(mob/user, group) +/datum/emote/living/carbon/human/medic/run_langchat(mob/living/user, group) if(!ishuman_strict(user)) return var/medic_message = pick("Corpsman!", "Doc!", "Help!") user.langchat_speech(medic_message, group, GLOB.all_languages, skip_language_check = TRUE, animation_style = LANGCHAT_FAST_POP, additional_styles = list("langchat_bolded")) + user.show_speech_bubble(group, "medic") /datum/emote/living/carbon/human/moan key = "moan" @@ -219,14 +218,13 @@ if(!.) return FALSE - user.show_speech_bubble("pain") - -/datum/emote/living/carbon/human/pain/run_langchat(mob/user, group) +/datum/emote/living/carbon/human/pain/run_langchat(mob/living/user, group) if(!ishuman_strict(user)) return var/pain_message = pick("OW!!", "AGH!!", "ARGH!!", "OUCH!!", "ACK!!", "OUF!") user.langchat_speech(pain_message, group, GLOB.all_languages, skip_language_check = TRUE, animation_style = LANGCHAT_FAST_POP, additional_styles = list("langchat_yell")) + user.show_speech_bubble(group, "pain") /datum/emote/living/carbon/human/salute key = "salute" @@ -259,14 +257,13 @@ if(!.) return FALSE - user.show_speech_bubble("scream") - -/datum/emote/living/carbon/human/scream/run_langchat(mob/user, group) +/datum/emote/living/carbon/human/scream/run_langchat(mob/living/user, group) if(!ishuman_strict(user)) return var/scream_message = pick("FUCK!!!", "AGH!!!", "ARGH!!!", "AAAA!!!", "HGH!!!", "NGHHH!!!", "NNHH!!!", "SHIT!!!") user.langchat_speech(scream_message, group, GLOB.all_languages, skip_language_check = TRUE, animation_style = LANGCHAT_PANIC_POP, additional_styles = list("langchat_yell")) + user.show_speech_bubble(group, "scream") /datum/emote/living/carbon/human/shakehead key = "shakehead" @@ -365,7 +362,9 @@ if(!.) return FALSE - user.show_speech_bubble("warcry") +/datum/emote/living/carbon/human/warcry/run_langchat(mob/living/user, list/group) + . = ..() + user.show_speech_bubble(group, "warcry") /datum/emote/living/carbon/human/warcry/get_sound(mob/living/user) if(ishumansynth_strict(user)) @@ -385,7 +384,9 @@ if(!.) return - user.show_speech_bubble("scream") +/datum/emote/living/carbon/human/whimper/run_langchat(mob/living/user, list/group) + . = ..() + user.show_speech_bubble(group, "scream") /datum/emote/living/carbon/human/burstscream key = "burstscream" @@ -406,4 +407,6 @@ if(!.) return FALSE - user.show_speech_bubble("pain") +/datum/emote/living/carbon/human/burstscream/run_langchat(mob/living/user, list/group) + . = ..() + user.show_speech_bubble(group, "pain") diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm index 451dfada77a4..62270f2ccddf 100644 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ b/code/modules/mob/living/carbon/human/whisper.dm @@ -100,33 +100,22 @@ //now mobs var/speech_bubble_test = say_test(message) - var/image/speech_bubble = image('icons/mob/effects/talk.dmi',src,"[bubble_icon][speech_bubble_test]") - speech_bubble.appearance_flags = NO_CLIENT_COLOR|KEEP_APART|RESET_COLOR + show_speech_bubble(listening, "[bubble_icon][speech_bubble_test]") var/not_dead_speaker = (stat != DEAD) for(var/mob/M in listening) - if(not_dead_speaker) - M << speech_bubble M.hear_say(message, verb, speaking, alt_name, italics, src) + langchat_speech(message, listening, speaking, langchat_color, FALSE, LANGCHAT_DEFAULT_POP, list("langchat_italic")) if (length(eavesdropping)) var/new_message = stars(message) //hopefully passing the message twice through stars() won't hurt... I guess if you already don't understand the language, when they speak it too quietly to hear normally you would be able to catch even less. for(var/mob/M in eavesdropping) - if(not_dead_speaker) - M << speech_bubble M.hear_say(new_message, verb, speaking, alt_name, italics, src) + langchat_speech(message, listening, speaking, langchat_color, FALSE, LANGCHAT_DEFAULT_POP, list("langchat_italic")) spawn(30) - if(client) - client.images -= speech_bubble if(not_dead_speaker) log_say("[name != "Unknown" ? name : "([real_name])"] \[Whisper\]: [message] (CKEY: [key]) (JOB: [job]) (AREA: [get_area_name(loc)])") - for(var/mob/M in listening) - if(M.client) - M.client.images -= speech_bubble - for(var/mob/M in eavesdropping) - if(M.client) - M.client.images -= speech_bubble if (length(watching)) var/rendered = "[src.name] whispers something." diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 51ed235f568d..7809ad9d381b 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -62,15 +62,29 @@ GLOBAL_LIST_INIT(department_radio_keys, list( return TRUE ///Shows custom speech bubbles for screaming, *warcry etc. -/mob/living/proc/show_speech_bubble(bubble_name, bubble_type = bubble_icon) +/mob/living/proc/show_speech_bubble(list/viewers, bubble_image, looping_bubble = FALSE, bubble_prefix = FALSE, animated = TRUE, image/speech_bubble) + var/list/speech_bubble_recipients = list() + for(var/mob/listener in viewers) + if(listener.client) + speech_bubble_recipients.Add(listener.client) + if(!speech_bubble) + if(bubble_prefix) + speech_bubble = image('icons/mob/effects/talk.dmi', src, "[bubble_icon][bubble_image]", TYPING_LAYER) + else + speech_bubble = image('icons/mob/effects/talk.dmi', src, "[bubble_image]", TYPING_LAYER) - var/mutable_appearance/speech_bubble = mutable_appearance('icons/mob/effects/talk.dmi', "[bubble_icon][bubble_name]", TYPING_LAYER) speech_bubble.pixel_x = bubble_icon_x_offset speech_bubble.pixel_y = bubble_icon_y_offset + speech_bubble.appearance_flags = RESET_TRANSFORM + speech_bubble.plane = ABOVE_GAME_PLANE - overlays += speech_bubble + if(animated) + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(flick_overlay_to_clients), speech_bubble, speech_bubble_recipients, 3 SECONDS) + else + overlays += speech_bubble - addtimer(CALLBACK(src, PROC_REF(remove_speech_bubble), speech_bubble), 3 SECONDS) + if(!looping_bubble) + addtimer(CALLBACK(src, PROC_REF(remove_speech_bubble), speech_bubble), 3 SECONDS) /mob/living/proc/remove_speech_bubble(mutable_appearance/speech_bubble, list_of_mobs) overlays -= speech_bubble @@ -151,16 +165,13 @@ GLOBAL_LIST_INIT(department_radio_keys, list( listening |= M var/speech_bubble_test = say_test(message) - var/image/speech_bubble = image('icons/mob/effects/talk.dmi', src, "[bubble_type][speech_bubble_test]", FLY_LAYER) + show_speech_bubble(listening, speech_bubble_test, bubble_prefix = TRUE) var/not_dead_speaker = (stat != DEAD) if(not_dead_speaker) langchat_speech(message, listening, speaking) for(var/mob/M as anything in listening) M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol) - overlays += speech_bubble - - addtimer(CALLBACK(src, PROC_REF(remove_speech_bubble), speech_bubble), 3 SECONDS) for(var/obj/hearing_obj as anything in listening_obj) if(hearing_obj) //It's possible that it could be deleted in the meantime. diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index ce849fc96ce5..d0937d53328f 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -153,7 +153,7 @@ for it but just ignore it. return "1" else if (ending == "!") return "2" - return "0" + return "4" //parses the message mode code (e.g. :h, :w) from text, such as that supplied to say. //returns the message mode string or null for no message mode. diff --git a/code/modules/tgui/tgui-say/typing.dm b/code/modules/tgui/tgui-say/typing.dm index 048b808750eb..7cf5873346ab 100644 --- a/code/modules/tgui/tgui-say/typing.dm +++ b/code/modules/tgui/tgui-say/typing.dm @@ -73,6 +73,8 @@ CLIENT_VERB(typing_indicator) active_thinking_indicator = mutable_appearance('icons/mob/effects/talk.dmi', "[bubble_icon]3", TYPING_LAYER) active_thinking_indicator.pixel_x = bubble_icon_x_offset active_thinking_indicator.pixel_y = bubble_icon_y_offset + active_thinking_indicator.appearance_flags = RESET_TRANSFORM + active_thinking_indicator.plane = ABOVE_GAME_PLANE overlays += active_thinking_indicator /mob/living/remove_thinking_indicator() @@ -89,6 +91,8 @@ CLIENT_VERB(typing_indicator) active_typing_indicator = mutable_appearance('icons/mob/effects/talk.dmi', "[bubble_icon]0", TYPING_LAYER) active_typing_indicator.pixel_x = bubble_icon_x_offset active_typing_indicator.pixel_y = bubble_icon_y_offset + active_typing_indicator.appearance_flags = RESET_TRANSFORM + active_typing_indicator.plane = ABOVE_GAME_PLANE overlays += active_typing_indicator /mob/living/remove_typing_indicator() diff --git a/icons/mob/effects/talk.dmi b/icons/mob/effects/talk.dmi index 110ca5769484b4cb07fa1c8c3b3db11d6ae792c1..f93baf0e053d3edf1cc62223a745ba05471b4c95 100644 GIT binary patch literal 83060 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 z∋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 z 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 literal 12588 zcmd^ld0Z1&+HN5>VOkK=_6W!l8+x==6lr8pmbgT4N81GyBsQq1C}H18;noBZ(mk!x zwz5epDoaEfK`<1^rl9N)S%V<51PH-|K$5DurvmnTbMM^W{rp4feR9W_5+`Z)wanme}BzJs87rNlpVHSkT6X@wAiR1Crox&+cr26+0P@eMq~ z@PVMvJMrI@`CMA3VfQoVafkQizkk``?tkmS@`Ynmm)?Z!D)&ndi=;LU*_&Q1J#w}0 z{Q!5m-8IyPJE;A#Zi9R|@77Zl%^fB#f#xUa7k-F(arf$L$5!?Zo~Kjl_XnE(ikvgG zG+7ld*mUVcW9#>O3{G1=dGK|d>gl(BGkONIoq+q3{OnNoFd&Go~kbq<|^augbpo^{ZN!LlCqK+CkfVF!at?H+-&38pRhC=$}*% zdFgRsub0{CK=-UA?IT}4TDASqalwa<2WAJ)YoZ5QTzq}^<$q>^f0eE>FWd0LUh{@h zS^27?2e%%2ais$@UY{LZs&YsCwf3X=dlsKMsrlV<^D7pC`x5Vsjo*jRa``2hK4RPb zQ;X^3xSVMVZT&jv@4^{7EVMhZy7~UzjKvW2V`Y?H)MpTM+)fv4>~9{BD)i%36%A<9 zDz$YG^ibzd@@373$t{_!MIGlXi_6zq+u3owqH>z58aQ+W`yS!Y@o@JP$$dIph3!e& zo1u+&cylzLH;^cii|Xy9Zs)ZwGEtdCz@xI5sIF|q3cg|Zt(lpav+c;U*0aarS>ti0 zB|5GJKHTAXQa%jZPL!&~vxc5_jx7kXQI|=oKSwF}bTvM9bB(M0WG8}lGER=xGvxwa zN;dArlx2iC(%ha$&Uny%6R=%u)#!2=&-BzY)OjgFCjb01!?76MHzu><1YeN$M3@?R z3_TQW4Ey-Ts=v{Za%}49ZuHQA%ZV{lOhmy&aFisI9#4^_Q96b)pM3R%kI5vCPcTjt zD$q7I3Kn)flULO~lx2R~gWbv+j_LJzzPQC5pI-As>}ax(&l;#UI)G1&b?T9KRe$9% zE#GEv0~_&s87g;%-?Y$sgqg^x5qK~u#7Aav0N!6W&+)xXLBDRJLf#v3?2vJV@6gG!@~ysPa?;+xpAKgRN!q$Gjug)6o_cH|IasUU!X&rYR?vtQa#j zE==&c;H+Ot-bG4lKi9UFxkfC|Qf@PcdaFpv*%++?rS7#|F#k^!#($d3I=9yJ_oLaF zZ%*aej9zSRZjNXhTy_3hRJJz8phX6}6{d_m|4x9777#lr(UM1@GTuj7RzVgD_GPar zHrD7YeY_iEAl)n$YY+9A_`<|H zm_ei2iW|0e7xiHG@O+-T-n5(&IkDMR+7*x=h4bd(=3xN-0Yr&~(P4d%K8*UkRa?iV zt`r$u22W>yjpc(+qvEIOqHb?Tqu^wht{3EDX}){mz5;SrFYTUCT`4BCe>OId}Y9n03BGV^8*HE*NTM%A_lq@8nA7iK&cMWo z6;8?e;kOdq!yi5s;xb7L6OENSCEGshdzDlqt$+PG(AdZjjIN?6$|zldCL$2@-r)_86|D0cf#z?dQKt3HK12|;= zhGriY;M*!(TU8XJdG%|HcOR3xX185ov2NYE#d6V)zHNEFXc$e+LCJB|$4{MF{*=M* z36*w-6sIWOuP`=Rx_>70fj7*6w3^^kh2zGB{3qt+ZH6( zhv)MoaZIGCn>x>2?A)2Dx^8R4el=fOMFE12O}D3@?d#Fi*dn)#=CH4gmfr63FB0jI z{hofTxz9RX5j%8B4B7yU%%ch?W>H_i?XoX;whgR%Z-vx9qhOAxM5xjZPUf9#&!04w&tbjmMlAEzxXYz zX5D$DG|LMUnJj{~o>cU?{K}7#b}K`Lc>f>MihsFvYdCpBz^QajRnc(ZMmCW-odpah z3DdoBYf7SuM%IoGre9jsY50g+U7Um9FBGec*9ogF!@|_(moCz+haBHWsL%hAtt_k9 z$`cUuof!b9?Uj%kwCt~{I#BdMjpP3TUvB4sYJ0w*Q@c$zRrIQj0l3D){8b0xt9mdw1|W zdu!XjEdFDC3s9L{UVmr9V!2evX5B&Q*kocq4@P;$MqW4v?ch`jv2mdTtq!X;jL7mE z?|S9~K93f__v_(pfOLc(ul{MgrQ*cvV=45hhy#m%7GV-f#j`7m&1`HsPg~yZE;3+W zLvMr3X=M$SO!vj*1_|13ul2=IX|<}BZ3BztQ`}v$FJ@>JDof|!Z>;#&E|IjVZZk@B z!4o<0;J%7j>)=tBJJxP zxaLl)Xkf&*Bw>*#0Sdx_YbZ&}aFlx|7k``U$xSq$0vIC>H=puC(7Y&Yb-%DQ!B`X< z%dT9}=c#HMGCZ2kVuhZoEwe80y=&=JL6X29<@~FZhzaxBwa(R;1-hs!UhCrTPm~Y5 zKg!M(uIM}Rqmd^byLd&osn;m+X2e}v>s55+d3@}aJq|Y8(de$9tfrC0n*Ja~EGGN| zc!T}%JmlDIk+WDzp~8iYRHpGrJ2Il%d#mrv7_&pA4=EJ9jxfdw%pi%ypWM|{MHs4 zzdL^zMkW{fPQHJYme`n*iM#S;ha*3j?@Ce6lie9JG{RQXuSz(;zJ;)Z!DDOf*tGgZBf<&a&+bQm(NpXc{I08XPNh(rXg z=?N^`n{nXw(B>MO7mxWo4s5`wD*|;yETG)2L+^2$hevhSs~azI{N8|coHma2G^cJG zNJ8p_qY!lIAnALFWOC7kjrJ6uL-(;B>SYzE)c@ps%iC`{t|6}bc}yjgw29ZBhM;}g ze=7d|ZzDeb&5%$2QRhxTA@WPOK4Jk_^lS!4k06S4L1%UM6P2#B`8i+>$LrSA(=3AD zb_yJntcMtxU%=a=)D$a>ZaO;9+}y46M=#nG*e*`g-diaai<2cKe-~_?9nJ=P0zPz1 z9-(UOAzG&Y*6%kP3o~61%8AE(&w6~@gJ73H))<}g^3nse%eCOr9F-OD==YFhlpC{& zs4IY-(2PIi)K^oV;~{1iX6!C_1F-C?q3fc)6;cf+elz2j1RAN)RRdP*_QyO z4e->#8+i?zrbwSKu}tPzZ42E!<=0=X738?Jqir`<7iTPA?#U}TFUmw(uU0?R&pL#E zVBMQmwMnR0vD|)13X5Gy+|laTbW^)GnJjvH^OB#>JKFiZFB{63*<)*__OXo-+0u2aA~9b(S7Eq`R*}Z7_Sq=cCD)D{w7hzZ zVKyr5GC5yMEZ`WUtEGwcmyXD5IY(r*W8Jv-P3-$`#ad@gye+kN*lu&XNRXh%L%Un#*4^?CGM;VAsQeES)!fh(f#9p z?Xq5G6&077P)~BcM~8>Nuf!kf*$%2Nr1jmxEqU!(dlcCXpRUAC05bOhPy{H*mp`Jd z0!7Q#{U?%y|AhM# zA=k;RE1%(NtC((MnL5z!4B0;&IQ~1~Em*6Q%jI#$pJOCqT6q2!9+@;vE^vo%=%pqACb zF}t>;VtaZmCI=ecnA~U$awKqLlHI_-Gr>oq&iBAU`E3}O)zVT{)U!Y-b7a8a5Dy0xuXmzkatb`NslS*%js4(W9dRZf+Zw?Ra#k#;>Uxr~d36od}4Qb)A0Bp-TucMWHgDz0uOdyAcP|fH*A?BkIJ99g)RomKK^_G?zG&j(;r>$`6Oq{*JM_D0q2GF8oGS=VgZMN@}>n z?{zI<}D2#7L=KZkQyl)PKPBw_9~g=aa*ng=us}eQ|$4cKxxJ zQ&%QFno>?bUy|XCS{Hs#lm>upMTvFpoxmWMj&!Pp=R=|rVBAO!^>-T9_vWDAlPK6BK^t!v$W^@jC2%tbZIt9x;al$_(*BToe ztu?)KG`K9uH959+L54?oczAs{{gotj)~Ip>FoitILAfgWxuJ^|j#@V*fglHoP`lO| z&;ubI-+af_nw*!H7k?_RJ-f4P&OVa}I8F3=?9IRxr592(AOTQxQky`MNSTOaT%tqv zyDJA(x)I=F%e!SXqPB&N}utvqH5Hjnh+&ishg%#i~r@x+`=f7fC?vgkmH?A)&y6~7%I3ZPE9=mYMb zJ9dFSguyiOb;u%+y~&$N?|-No3{miWx)*LDwsAIa1Wql; z=$VGABPtI|vTdE*3{tdmcFvhrHJyNM&^g!z)zDx37ma)YXU?(@EWTu|9*BS<3BL(= z3(fxp7mU!WpY4@(%DSaP}T_d zj=!gaNzVj%m(}z-RH!~s@9u7Gv4s88oJ}nen2rG3f|DxSyDuxa92CiH>EyjUUbs-5 zZ02u;ot@i;EeLkwnkz!N=(-s=S|@^opY9*8%o?bIr$yOZJb0|LO>UkZ+RvF28f=#c zoL&d73BrYn%0vl!2YA)hLkQ{j4x3FCZ=}&z0bCf%_Y(Fuz#k+Zqt2ut6lA)e-oQbm zQ@c@9cz{}!$b5%f+lF{uD6D;C7487kz)db*No9To))HxS_AI}SWeG`uT^vASHg#Pb z=|9ru(Uttg2@4q`8z(X+BJhyqWvo@6Dg3A_2N8uhI-lG+1i~?9Q&wNFp?VMFpcBry zf^`b0=F+pm-7Zft^8ilO=;*nAP+7ZKk?6o;uor~2NNHtyMKj8?yB4oXT;sGfij&hE z-h_n1K?;ZWBYdhv@x+NqekRibRH2oFgdZVDk2~?!I%2ob)`%^YsS&jPN!!rXe=I!v z0Uc3!esu&n-h`W`Wo>&_<|v_WIif^tg80DQGR@x320UROH}SyrkRSIKR|i-T$uvt- z*bGD^lJrA&<}lnF8b;C`2)W!j7g<{2#o(dSyBQGQ_!2YRzeT9oy@$YgaBUhLe<0B- zmF|m%myKnYSg46(ls$M-&aYLoIGd)Az zcB(+fyTsVa_aiUkS%9FPZU2l&22fy@zJlv@A*k(}wbh>oMdt?4X|!2?HiM(j9Zu6a1UQJmPUFS&XV7u| zZtdKsz+Z*-k!~B^wPHHaH!LNSPpV5(G<|60?R4;-9Z{_@RDv$;5BsJ9(3MQw!ctZ< z4=PPMI<@}vwy^CL@teCMT*H!&*ON4$(!!rJ%$R=w z8Og}VVJ*|*AK|}K%y!1FQs?uA0}XE_C7r+iSLEh&428cG`KV1#AU+gNofn|D_FtpV zb(Kp;SMyx6M7$4GyO8IPIWPg$}(o75sC!>dL zkQ#xb^5HmLbhYDcn2|Re=61Rb+k#I^_!3yXpJ2hZxdVw2qIQDoIKjA+o!2M;lSp9@ zD$AR734k{T17D%aS_&#)j(xJ{FaC^m9>Xo6$Fkb^c;z}*80KIysWX4je9C#4hcpTL zfg)nA9^?8A(M2)6Mn1v|4S##yWe!vy^$A<$NIaG=aju^~RNud^v!?)z!EfXwnvgMXLv6zfk9tWY7@Eemfb(@7k>;2Nt$ZY3JEzI#oBAgvPO zEC49foEeP?q9{)KSM;iyZU0LSW)~8f&HL%o1qc={0j*5ZFm+Mu4f=J}^=IR7A7$r? zFnk0&KEqAM@P@R@4@cqs4mB!E2UPuR=E~4!23V&p_%~91BjmmV-^|iMBUD3vo}HQw z77_kkCTxciT$qn+J=P0Vx^@vW(%r!i#+>@_W)9pU7Y-9dVt)V+C;ApTC;weU;{URN zcw5*;Z}}(IQY?`sfKCEvn}OBG9q8b^0cXusZMlb;t;fpHUoh4E*yzBO1D+xsvNAY`TD1k{%6Nflg*3-3 z!xC@))1F!awhdS;ooCanb8NFR6(hWg;^zuIy6i>e^Jn5rtBDW5!jNFEzp0ufG|mE3cEoBF-hk&HM7Ir_;wOh- zRH0X#(jl*?%$TzG6Iqpruf!oUlR{x#3xzCd=~=PX!6bptkDQT)z(Cy`kZ3FKo(os1 z*bW(%?p&M1UBaKKvJqi&VRcA}XfFXJMoYBZ!b-(S^Z|*|6e{Sz3t)M{LwPNHL`J9L zRpUwn2KbpGQOU`-m*_NeQmq{}!&USB)e9gV59il6oXE)sL_qV>vcp z1qa6nrlUk}Ssbj`0zTP45ld@Zj@4m@;rP(Lz7hC|{mml6eq57Gyxwjh>ClnlI6nb$ zZ%_r`kFk+Ycum}7cEk4^b}@#vhD(4Pl-Z}`A|2Ork#M;b#$3lFemq>1vImA|+TfY| z@xw)^xxT6p2L?5PNNrP_h9OXzFmnT$-=2padlfLGPP@h+fU ziSh?GbV>$Cgz(Ev-Qn`qG(16VVyBF%ZZs0c@YR_e0ty(8b)tvy2llky!||@wcEGi( zb-Ll$A~ft(5^>~t4oFmRFz6;Xr7^^b1bEKDL&9a}TawaUWr@Au%v09}RpO*m-G7_B z{aKGk{h!eBT!|~ZfA0JgnM|Db7;od-tR>(?NlEmg2r?@gMbgbnfhn@3;yVTChE!k= z2O}6nCJ@|4xwHLku&Y;eW*IRkEDVVHy4T$B0#5(SKZrVyT7u3V-Z4oVxE?H7AM%&v zVtWdi4EQRU%;lMy-nq)U*Zl5(mS7xYA-a|18#Ivk3#)R1b+7k(nHFs(4>VfhD?MqS z?k`(_N=E3-y1ic*Lio!M@~BC!*8hboyR{rnDRxsj<|Qo zFU+v;#vELi%baCpss0}_iAr=DP>8P<5nEbQ+xmc2*?{4X9>Kxa|5yzz0VUWnOBM_` zk~q=pf=(iKD1{XIBL;uL!54c-&ZjSl{D)8?y=tS^T^{c!Sc8p9@Sk#U(5i_i3>D*> zDKiEVtTTM+?|U;oZm;OOz_PZO;9pJ9L8m)Ge?w^or;OBrGNGpV!US!FzfRLAWx1i% z^%Ng{qJa~&^zm*qX39`t2uvN&{sCQepNdd1Q66txce>cW2sS0&55A9K@AS+J>5B0m zFxaGbFhv#{Dq_>OH`32j0@WUmSEu6i9hnP(ky>fpjfJ3;7vD%1K562>>6~(hnhtu2 zj##U#NY4^7*I5slCUM*3u~I)BD5N&kJi7g$5IWHSsO(Cw3&uA~KANrVx9T(0IKC{y zgg;Mcb$b3OolR=JU#K=fCRJyko`(a~#~ZEl884x_>GNCs*UgJBy=L41t%nw@#n}mByw>YGd ze>pjSX>=HpTvqsTtFItcwyke+OS0)AqI*WDZ;h=FQpl(0`@9Dcq_%8b!no`swDoc| zqS-HGE?eT$L`Q=PCI6%%%RgtS|Su89TpCZ4b^0?vxoY9qiSKB=I+A2sc_GV&ru-l1ZQ;jrjT z_TbCy2=@B$2+^(eG~m?ypwmLHV&vo5Y^=S=og?}70TL<7oMLw#_$s?K75kR?2!*G4 zrr83?QPWGZ+Ue{mo+O}bX8|m+tPhkYvhk5>g>{sI-{ct`mmj(M_p=9`U|>VJ3i$bq z&OK7%L|Oesacu+WLtWwE)-AcnwJ!e;Rz}Y7jFEF4c*YS^%@3hx&;R4#oIWHQ$O3$KD6{m%V3w@|CR_iY1gMcGSS;{rC`Ggo3IAHVVmfo>-VY z6VqGs@mY58vPY_qO>mDdQ%F94D`?_Vq3VIKiNpSx1#pnEwWD~oX;ub+Xk;J7f31g{ zoScL!O&v|Biw0bc%GHib>Jz?G9L>t7dYpj_!Eu2Q{ck1Om&PTn&)~n!#Rb+Vpa&7h z>z1i$mOfE9u9^0EFa>5%17}|%d0hA{Y0G_VgxiG`04s4*ftwx{2{>;a#c2-K=QpTB0;6og{wg;3971G pgYNQ$pmnotrvLxWy3ODgH{$2z+}m&jw9lX&+xF6Owj96sKLBp2eKG(5 From d7e638fde7de140ac6f9a0d7d558d3c055c95b57 Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 15:25:10 +0000 Subject: [PATCH 26/41] Automatic changelog for PR #8959 [ci skip] --- html/changelogs/AutoChangeLog-pr-8959.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-8959.yml diff --git a/html/changelogs/AutoChangeLog-pr-8959.yml b/html/changelogs/AutoChangeLog-pr-8959.yml new file mode 100644 index 000000000000..6c2013f9f8c1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8959.yml @@ -0,0 +1,9 @@ +author: "Blundir" +delete-after: True +changes: + - rscadd: "yautja, working joes, provost now have unique bubbles types to them" + - rscadd: "yautja translator now has a unique speech and typing bubble" + - rscadd: "speech bubbles now render over huds like med/sec huds" + - rscadd: "whisper now shows runechat message above your head (if you are in range)" + - imageadd: "a lot of new bubble icons, resprite of old ones, adding a smooth fade out animation to all of them" + - bugfix: "whispering while laying down (like in crit) no longer shows your speech bubble under your legs" \ No newline at end of file From c8803b20bbc2792ca8b3ff7d308e1977269c6d0f Mon Sep 17 00:00:00 2001 From: Red <47158596+Red-byte3D@users.noreply.github.com> Date: Fri, 22 Aug 2025 20:50:40 +0300 Subject: [PATCH 27/41] Fixes spec guns blowing up (#10268) # About the pull request Fixes spec guns blowing up because wielded (offhand) was not explosion proof # Explain why it's good for the game bugfix # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: fix: Spec weapons no longer become null when you are wielding them near an explosion /:cl: --- code/modules/projectiles/gun.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 0cd966bcbed8..400a274cc2c1 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -2172,7 +2172,8 @@ not all weapons use normal magazines etc. load_into_chamber() itself is designed addtimer(CALLBACK(src, PROC_REF(icon_reset)),(speed*loop_amount)-0.8, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_NO_HASH_WAIT) /obj/item/weapon/gun/proc/icon_reset() - icon = temp_icon + if(temp_icon) + icon = temp_icon temp_icon = null /obj/item/weapon/gun/ex_act(severity, explosion_direction) From 8ad83b419dafdc8998f5e3b9cf6ce8b1a94d99c2 Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 17:59:00 +0000 Subject: [PATCH 28/41] Automatic changelog for PR #10268 [ci skip] --- html/changelogs/AutoChangeLog-pr-10268.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10268.yml diff --git a/html/changelogs/AutoChangeLog-pr-10268.yml b/html/changelogs/AutoChangeLog-pr-10268.yml new file mode 100644 index 000000000000..494e8759e3ae --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10268.yml @@ -0,0 +1,4 @@ +author: "Red-byte3D" +delete-after: True +changes: + - bugfix: "Spec weapons no longer become null when you are wielding them near an explosion" \ No newline at end of file From efc3470360af6def4943b29541c827b61b0d07db Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Fri, 22 Aug 2025 19:57:17 +0200 Subject: [PATCH 29/41] Prevents climbing with C4 and subtypes in-hand (#10452) # About the pull request This means you don't try to climb + plant C4 at the same time. You could accomplish this before by being on harm-intent, but if you're holding C4 you're likely trying to plant it, and not climb. Fixes #10415 # Explain why it's good for the game Maybe it isn't, let me know and we can close this or find a different solution. (The easiest of course being 'just be on harm-intent', but :/) The code for this isn't very elegant either. Climbing happens before C4's afterattack, and I don't see a good way to cancel an in-progress climb via the C4 afterattack. (Not sure we'd even want that to be fair) # Testing Photographs and Procedure Tested by trying to climb a wall with C4 in my hands. Didn't climb, could plant C4 # Changelog :cl: qol: You can no longer climb with C4 in your hands, as you're more likely to want to plant it on the wall. /:cl: --- code/game/turfs/closed.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index e124a399e580..903d2aabf682 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -23,6 +23,11 @@ if(possible_blocker.density) return + var/obj/item/held_item = user.get_held_item() + if(istype(held_item, /obj/item/explosive/plastic)) + to_chat(user, SPAN_DANGER("You cannot climb while holding [held_item]!")) + return + if(user.action_busy) return From 448c55e2f9f6121768cc253940dbc04c0172ff21 Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 18:13:11 +0000 Subject: [PATCH 30/41] Automatic changelog for PR #10452 [ci skip] --- html/changelogs/AutoChangeLog-pr-10452.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10452.yml diff --git a/html/changelogs/AutoChangeLog-pr-10452.yml b/html/changelogs/AutoChangeLog-pr-10452.yml new file mode 100644 index 000000000000..7ed7a886f4c0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10452.yml @@ -0,0 +1,4 @@ +author: "TheGamerdk" +delete-after: True +changes: + - qol: "You can no longer climb with C4 in your hands, as you're more likely to want to plant it on the wall." \ No newline at end of file From 1d5fca2835fd1b35298872b60a4c88b1d14c45c3 Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Fri, 22 Aug 2025 22:44:19 +0200 Subject: [PATCH 31/41] Fixes an infinite metal glitch involving walls (#10460) # About the pull request Fixes #9261 Turns into /turf/open/plating then runtimes for every click past the first one, but not before generating 1 metal rod. # 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: Can no longer extract infinite metal from walls /:cl: --- code/game/turfs/walls/walls.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/turfs/walls/walls.dm b/code/game/turfs/walls/walls.dm index f9e93493d88f..654ebd2df87f 100644 --- a/code/game/turfs/walls/walls.dm +++ b/code/game/turfs/walls/walls.dm @@ -563,6 +563,8 @@ playsound(src, 'sound/items/Crowbar.ogg', 25, 1) if(!do_after(user, 60 * user.get_skill_duration_multiplier(SKILL_CONSTRUCTION), INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) return + if(!istype(src, /turf/closed/wall)) + return user.visible_message(SPAN_NOTICE("[user] pries apart the connecting rods."), SPAN_NOTICE("You pry apart the connecting rods.")) new /obj/item/stack/rods(src) dismantle_wall() From ce9564319ad25507d7f5373f5e9c681191a54861 Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 20:53:14 +0000 Subject: [PATCH 32/41] Automatic changelog for PR #10460 [ci skip] --- html/changelogs/AutoChangeLog-pr-10460.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10460.yml diff --git a/html/changelogs/AutoChangeLog-pr-10460.yml b/html/changelogs/AutoChangeLog-pr-10460.yml new file mode 100644 index 000000000000..8514384c384c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10460.yml @@ -0,0 +1,4 @@ +author: "TheGamerdk" +delete-after: True +changes: + - bugfix: "Can no longer extract infinite metal from walls" \ No newline at end of file From 5fcf156e1d0c3d3e863bafc39d34d2e231faab3d Mon Sep 17 00:00:00 2001 From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> Date: Sat, 23 Aug 2025 01:41:19 +0200 Subject: [PATCH 33/41] Fixes CL briefcase typo (#10455) # About the pull request Fixes #10418 # 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: spellcheck: Stationary -> Stationery in the CL's briefcase /:cl: --- code/game/objects/items/devices/portable_vendor.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/portable_vendor.dm b/code/game/objects/items/devices/portable_vendor.dm index 12b91977044a..c2e41182b922 100644 --- a/code/game/objects/items/devices/portable_vendor.dm +++ b/code/game/objects/items/devices/portable_vendor.dm @@ -298,7 +298,7 @@ list("Drinking Glass", 1, /obj/item/reagent_container/food/drinks/drinkingglass, "white", "A Drinking Glass, because you have class."), list("Weyland-Yutani Coffee Mug", 1, /obj/item/reagent_container/food/drinks/coffeecup/wy, "white", "A Weyland-Yutani coffee mug, for any Marines who want a Company souvenir."), - list("STATIONARY", 0, null, null, null), + list("STATIONERY", 0, null, null, null), list("WY pen, black", 1, /obj/item/tool/pen/clicky, "white", "A WY pen, for writing formally on the go."), list("WY pen, blue", 1, /obj/item/tool/pen/blue/clicky, "white", "A WY pen, for writing with a flourish on the go."), list("WY pen, red", 1, /obj/item/tool/pen/red/clicky, "white", "A WY pen, for writing angrily on the go."), From 4b0dcf15a04bc433b347fa8b7a652f7ab407dbda Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 23:49:57 +0000 Subject: [PATCH 34/41] Automatic changelog for PR #10455 [ci skip] --- html/changelogs/AutoChangeLog-pr-10455.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-10455.yml diff --git a/html/changelogs/AutoChangeLog-pr-10455.yml b/html/changelogs/AutoChangeLog-pr-10455.yml new file mode 100644 index 000000000000..8b03ceff66ac --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10455.yml @@ -0,0 +1,4 @@ +author: "TheGamerdk" +delete-after: True +changes: + - spellcheck: "Stationary -> Stationery in the CL's briefcase" \ No newline at end of file From a758517dd002d53cba9de1eefa9fbf5f495917a7 Mon Sep 17 00:00:00 2001 From: "cmss13-ci[bot]" <180991813+cmss13-ci[bot]@users.noreply.github.com> Date: Sat, 23 Aug 2025 01:46:41 +0000 Subject: [PATCH 35/41] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-10241.yml | 4 -- html/changelogs/AutoChangeLog-pr-10242.yml | 4 -- html/changelogs/AutoChangeLog-pr-10257.yml | 4 -- html/changelogs/AutoChangeLog-pr-10268.yml | 4 -- html/changelogs/AutoChangeLog-pr-10398.yml | 4 -- html/changelogs/AutoChangeLog-pr-10410.yml | 4 -- html/changelogs/AutoChangeLog-pr-10421.yml | 4 -- html/changelogs/AutoChangeLog-pr-10429.yml | 4 -- html/changelogs/AutoChangeLog-pr-10449.yml | 4 -- html/changelogs/AutoChangeLog-pr-10452.yml | 4 -- html/changelogs/AutoChangeLog-pr-10455.yml | 4 -- html/changelogs/AutoChangeLog-pr-10460.yml | 4 -- html/changelogs/AutoChangeLog-pr-8959.yml | 9 ----- html/changelogs/AutoChangeLog-pr-9493.yml | 11 ----- html/changelogs/archive/2025-08.yml | 47 ++++++++++++++++++++++ 15 files changed, 47 insertions(+), 68 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-10241.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-10242.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-10257.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-10268.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-10398.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-10410.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-10421.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-10429.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-10449.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-10452.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-10455.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-10460.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-8959.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-9493.yml diff --git a/html/changelogs/AutoChangeLog-pr-10241.yml b/html/changelogs/AutoChangeLog-pr-10241.yml deleted file mode 100644 index 50802339cb82..000000000000 --- a/html/changelogs/AutoChangeLog-pr-10241.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Icarus-The-Sun" -delete-after: True -changes: - - qol: "Allows Syringes to be worn in Suit Storage, Ear Slots, and Belt Slots" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-10242.yml b/html/changelogs/AutoChangeLog-pr-10242.yml deleted file mode 100644 index 8efae8a963af..000000000000 --- a/html/changelogs/AutoChangeLog-pr-10242.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Vicacrov" -delete-after: True -changes: - - qol: "Hivelords can now evolve from 4 minutes instead of 3 minutes, the same time as Defenders (drones should be around at 180/200 evolution when this announcement comes, this is just to cut down on extra announcements)." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-10257.yml b/html/changelogs/AutoChangeLog-pr-10257.yml deleted file mode 100644 index 2107a1071e54..000000000000 --- a/html/changelogs/AutoChangeLog-pr-10257.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "jupyterkat" -delete-after: True -changes: - - bugfix: "fixed boiler being immune to crossing flames" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-10268.yml b/html/changelogs/AutoChangeLog-pr-10268.yml deleted file mode 100644 index 494e8759e3ae..000000000000 --- a/html/changelogs/AutoChangeLog-pr-10268.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Red-byte3D" -delete-after: True -changes: - - bugfix: "Spec weapons no longer become null when you are wielding them near an explosion" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-10398.yml b/html/changelogs/AutoChangeLog-pr-10398.yml deleted file mode 100644 index 1594a5cd8275..000000000000 --- a/html/changelogs/AutoChangeLog-pr-10398.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "BOBAMAx" -delete-after: True -changes: - - bugfix: "CL on solaris pmc insert won't spawn as a CMB marshal any more" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-10410.yml b/html/changelogs/AutoChangeLog-pr-10410.yml deleted file mode 100644 index ee1fe1affd38..000000000000 --- a/html/changelogs/AutoChangeLog-pr-10410.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Blue-Fox5" -delete-after: True -changes: - - spellcheck: "Fixed berserkers strain description giving out the wrong number of rage you can obtain" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-10421.yml b/html/changelogs/AutoChangeLog-pr-10421.yml deleted file mode 100644 index 002a8c4d222f..000000000000 --- a/html/changelogs/AutoChangeLog-pr-10421.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SirNightKnight" -delete-after: True -changes: - - bugfix: "fixed light fixture deconstruction getting stuck on removing the light fitting." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-10429.yml b/html/changelogs/AutoChangeLog-pr-10429.yml deleted file mode 100644 index 02ccdd8fa239..000000000000 --- a/html/changelogs/AutoChangeLog-pr-10429.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Red-byte3D" -delete-after: True -changes: - - bugfix: "Fixes some broken vending code so you can properly vend apc gear if an apc is \"chosen\"" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-10449.yml b/html/changelogs/AutoChangeLog-pr-10449.yml deleted file mode 100644 index 5ede85724e62..000000000000 --- a/html/changelogs/AutoChangeLog-pr-10449.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TheGamerdk" -delete-after: True -changes: - - bugfix: "You can no longer tunnel in vehicle interiors" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-10452.yml b/html/changelogs/AutoChangeLog-pr-10452.yml deleted file mode 100644 index 7ed7a886f4c0..000000000000 --- a/html/changelogs/AutoChangeLog-pr-10452.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TheGamerdk" -delete-after: True -changes: - - qol: "You can no longer climb with C4 in your hands, as you're more likely to want to plant it on the wall." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-10455.yml b/html/changelogs/AutoChangeLog-pr-10455.yml deleted file mode 100644 index 8b03ceff66ac..000000000000 --- a/html/changelogs/AutoChangeLog-pr-10455.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TheGamerdk" -delete-after: True -changes: - - spellcheck: "Stationary -> Stationery in the CL's briefcase" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-10460.yml b/html/changelogs/AutoChangeLog-pr-10460.yml deleted file mode 100644 index 8514384c384c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-10460.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TheGamerdk" -delete-after: True -changes: - - bugfix: "Can no longer extract infinite metal from walls" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-8959.yml b/html/changelogs/AutoChangeLog-pr-8959.yml deleted file mode 100644 index 6c2013f9f8c1..000000000000 --- a/html/changelogs/AutoChangeLog-pr-8959.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: "Blundir" -delete-after: True -changes: - - rscadd: "yautja, working joes, provost now have unique bubbles types to them" - - rscadd: "yautja translator now has a unique speech and typing bubble" - - rscadd: "speech bubbles now render over huds like med/sec huds" - - rscadd: "whisper now shows runechat message above your head (if you are in range)" - - imageadd: "a lot of new bubble icons, resprite of old ones, adding a smooth fade out animation to all of them" - - bugfix: "whispering while laying down (like in crit) no longer shows your speech bubble under your legs" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-9493.yml b/html/changelogs/AutoChangeLog-pr-9493.yml deleted file mode 100644 index 7c1dce5997e0..000000000000 --- a/html/changelogs/AutoChangeLog-pr-9493.yml +++ /dev/null @@ -1,11 +0,0 @@ -author: "MeH0y" -delete-after: True -changes: - - rscadd: "Blooded Thrall system" - - balance: "thralls no longer have access to human weaponry" - - bugfix: "thralls can now interact with their mask functions" - - bugfix: "thralls can now use the combi-stick" - - bugfix: "thrall SD now works properly" - - bugfix: "thralls no longer go bald" - - imageadd: "Blooded thrall hud icon, new thrall armor set with 5 material types." - - maptweak: "Added blooded thrall vendor on upper-deck, replaced the lower-deck youngblood showers with thrall quarters." \ No newline at end of file diff --git a/html/changelogs/archive/2025-08.yml b/html/changelogs/archive/2025-08.yml index e5f2da4fd8cb..b2e7380d6aee 100644 --- a/html/changelogs/archive/2025-08.yml +++ b/html/changelogs/archive/2025-08.yml @@ -217,3 +217,50 @@ thevandie: - rscadd: Adds a new description to the plump helmet mushroom. - rscdel: Deletes the weird description on the plump helmet mushroom. +2025-08-23: + BOBAMAx: + - bugfix: CL on solaris pmc insert won't spawn as a CMB marshal any more + Blue-Fox5: + - spellcheck: Fixed berserkers strain description giving out the wrong number of + rage you can obtain + Blundir: + - rscadd: yautja, working joes, provost now have unique bubbles types to them + - rscadd: yautja translator now has a unique speech and typing bubble + - rscadd: speech bubbles now render over huds like med/sec huds + - rscadd: whisper now shows runechat message above your head (if you are in range) + - imageadd: a lot of new bubble icons, resprite of old ones, adding a smooth fade + out animation to all of them + - bugfix: whispering while laying down (like in crit) no longer shows your speech + bubble under your legs + Icarus-The-Sun: + - qol: Allows Syringes to be worn in Suit Storage, Ear Slots, and Belt Slots + MeH0y: + - rscadd: Blooded Thrall system + - balance: thralls no longer have access to human weaponry + - bugfix: thralls can now interact with their mask functions + - bugfix: thralls can now use the combi-stick + - bugfix: thrall SD now works properly + - bugfix: thralls no longer go bald + - imageadd: Blooded thrall hud icon, new thrall armor set with 5 material types. + - maptweak: Added blooded thrall vendor on upper-deck, replaced the lower-deck youngblood + showers with thrall quarters. + Red-byte3D: + - bugfix: Fixes some broken vending code so you can properly vend apc gear if an + apc is "chosen" + - bugfix: Spec weapons no longer become null when you are wielding them near an + explosion + SirNightKnight: + - bugfix: fixed light fixture deconstruction getting stuck on removing the light + fitting. + TheGamerdk: + - spellcheck: Stationary -> Stationery in the CL's briefcase + - bugfix: You can no longer tunnel in vehicle interiors + - qol: You can no longer climb with C4 in your hands, as you're more likely to want + to plant it on the wall. + - bugfix: Can no longer extract infinite metal from walls + Vicacrov: + - qol: Hivelords can now evolve from 4 minutes instead of 3 minutes, the same time + as Defenders (drones should be around at 180/200 evolution when this announcement + comes, this is just to cut down on extra announcements). + jupyterkat: + - bugfix: fixed boiler being immune to crossing flames From 5e81a4fe2c8a740e965315c5414d340ea76c4ad0 Mon Sep 17 00:00:00 2001 From: forest2001 <41653574+realforest2001@users.noreply.github.com> Date: Sat, 23 Aug 2025 11:47:44 +0300 Subject: [PATCH 36/41] Logo floor decals (#9579) # About the pull request As title, adds floor logo decals for the USCM and WY, so they're not reliant on static turfs # Explain why it's good for the game Makes it much easier for mappers to include logos # 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 floor logo decals for the USCM and WY /:cl: --------- Co-authored-by: forest2001 --- .../objects/effects/decals/floor_symbol.dm | 102 ++++++++++++++---- icons/turf/faction_flags.dmi | Bin 0 -> 8600 bytes maps/templates/Chinook.dmm | 85 +++++++++++---- maps/templates/ssv_rostock.dmm | 60 +++++------ 4 files changed, 181 insertions(+), 66 deletions(-) create mode 100644 icons/turf/faction_flags.dmi diff --git a/code/game/objects/effects/decals/floor_symbol.dm b/code/game/objects/effects/decals/floor_symbol.dm index af8488938a8c..e1c6e77d3409 100644 --- a/code/game/objects/effects/decals/floor_symbol.dm +++ b/code/game/objects/effects/decals/floor_symbol.dm @@ -1,54 +1,120 @@ /obj/effect/decal/floor_symbol + icon = 'icons/turf/faction_flags.dmi' + layer = WEED_LAYER + anchored = TRUE + +/obj/effect/decal/floor_symbol/upp icon = 'icons/turf/upp_floor.dmi' icon_state = "upp_c" name = "\improper UPP Logo" - layer = WEED_LAYER - anchored = TRUE -/obj/effect/decal/floor_symbol/westface +/obj/effect/decal/floor_symbol/upp/westface icon_state = "upp_directional" -/obj/effect/decal/floor_symbol/westface/southwest +/obj/effect/decal/floor_symbol/upp/westface/southwest dir = SOUTHWEST -/obj/effect/decal/floor_symbol/westface/north +/obj/effect/decal/floor_symbol/upp/westface/north dir = NORTH -/obj/effect/decal/floor_symbol/westface/east +/obj/effect/decal/floor_symbol/upp/westface/east dir = EAST -/obj/effect/decal/floor_symbol/westface/west +/obj/effect/decal/floor_symbol/upp/westface/west dir = WEST -/obj/effect/decal/floor_symbol/westface/northeast +/obj/effect/decal/floor_symbol/upp/westface/northeast dir = NORTHEAST -/obj/effect/decal/floor_symbol/westface/southeast +/obj/effect/decal/floor_symbol/upp/westface/southeast dir = SOUTHEAST -/obj/effect/decal/floor_symbol/westface/northwest +/obj/effect/decal/floor_symbol/upp/westface/northwest dir = NORTHWEST -/obj/effect/decal/floor_symbol/northface/ +/obj/effect/decal/floor_symbol/upp/northface icon_state = "upp_directional1" -/obj/effect/decal/floor_symbol/northface/southwest +/obj/effect/decal/floor_symbol/upp/northface/southwest + dir = SOUTHWEST + +/obj/effect/decal/floor_symbol/upp/northface/north + dir = NORTH + +/obj/effect/decal/floor_symbol/upp/northface/east + dir = EAST + +/obj/effect/decal/floor_symbol/upp/northface/west + dir = WEST + +/obj/effect/decal/floor_symbol/upp/northface/northeast + dir = NORTHEAST + +/obj/effect/decal/floor_symbol/upp/northface/southeast + dir = SOUTHEAST + +/obj/effect/decal/floor_symbol/upp/northface/northwest + dir = NORTHWEST + + +/obj/effect/decal/floor_symbol/wy_3x1 + name = "\improper Wey-Yu Logo" + icon_state = "wy_left" + +/obj/effect/decal/floor_symbol/wy_3x1/mid + icon_state = "wy_mid" + +/obj/effect/decal/floor_symbol/wy_3x1/right + icon_state = "wy_right" + +/obj/effect/decal/floor_symbol/uscm_3x3 + name = "\improper USCM Logo" + icon_state = "uscm_center" + +/obj/effect/decal/floor_symbol/uscm_3x3/northface + icon_state = "uscm_north" + +/obj/effect/decal/floor_symbol/uscm_3x3/northface/southwest + dir = SOUTHWEST + +/obj/effect/decal/floor_symbol/uscm_3x3/northface/north + dir = NORTH + +/obj/effect/decal/floor_symbol/uscm_3x3/northface/east + dir = EAST + +/obj/effect/decal/floor_symbol/uscm_3x3/northface/west + dir = WEST + +/obj/effect/decal/floor_symbol/uscm_3x3/northface/northeast + dir = NORTHEAST + +/obj/effect/decal/floor_symbol/uscm_3x3/northface/southeast + dir = SOUTHEAST + +/obj/effect/decal/floor_symbol/uscm_3x3/northface/northwest + dir = NORTHWEST + +/obj/effect/decal/floor_symbol/uscm_3x3/westface + icon_state = "uscm_west" + +/obj/effect/decal/floor_symbol/uscm_3x3/westface/southwest dir = SOUTHWEST -/obj/effect/decal/floor_symbol/northface/north +/obj/effect/decal/floor_symbol/uscm_3x3/westface/north dir = NORTH -/obj/effect/decal/floor_symbol/northface/east +/obj/effect/decal/floor_symbol/uscm_3x3/westface/east dir = EAST -/obj/effect/decal/floor_symbol/northface/west +/obj/effect/decal/floor_symbol/uscm_3x3/westface/west dir = WEST -/obj/effect/decal/floor_symbol/northface/northeast +/obj/effect/decal/floor_symbol/uscm_3x3/westface/northeast dir = NORTHEAST -/obj/effect/decal/floor_symbol/northface/southeast +/obj/effect/decal/floor_symbol/uscm_3x3/westface/southeast dir = SOUTHEAST -/obj/effect/decal/floor_symbol/northface/northwest +/obj/effect/decal/floor_symbol/uscm_3x3/westface/northwest dir = NORTHWEST diff --git a/icons/turf/faction_flags.dmi b/icons/turf/faction_flags.dmi new file mode 100644 index 0000000000000000000000000000000000000000..9ddddfdae27f42c52713594ac8fa8184e9615845 GIT binary patch literal 8600 zcmV;JA!pu+P)V=-0C=2@&#?}IFc<{jxqXTY>_(KqrHg?W26zR6@I#x}LfT)6Z|~rsCMt}V ze7VcTIOeCKLRJ>?Mn0I)K_T62rI<~}8VdWJ6q?MS`56K?Oi+mCdwrpvBPlxL0~Asz zdf!+IP)I(UHQgHK&7hb2T$q{{O1`7ko)^tEw6>lpyiFedNH==c>u5`k$^Uv1Bd;=K zWg#Dklx+W4tgf{H03ZNKL_t(|ob8=?kY!b!=RfD%`?g#v*UHK)3Mi;zonjGC9558< zumLG(Kv5$UM{%TC6eoI|?ui(UcBUsfM!W49wZWcdq>V;L-05)y9Y+Mi4N(RWgvO$f zf})D7tSz^<-h1Yc$4y?oy!XDl-}~~tZ$t(~=K1~3@0|1d-Lw6Ezat)e@Im_MqgSB= zJbdR)W%tMPKk&arvf`{y*!6FF-%d_V*^WUg=4NMY$HQs-I>D0R;X8LKx3PAUZEki} zbo#r~-#XQs1a!AQCM95)0Sr5MLF)B`plxf1ovcxgPtwY0^-Eae2|NDMtDsp%R%MJ^ z`J><+H_tfgX{QgvucHBktsp66O~!6hemCAhXUaHaccKr<*OLK+sUS&2Ie1aa5d=vq zzgr!C`!THSLFj|X?b!gl2#^J&Z3Nw}{BCu5?Z-5f->saR+`bIJk05>!_2w%rBj_gO z_tNJ<`Y}!AcPsBCw{HUoB9Iq!yAg!#leyVhVf{qSyB&V|+D|`bLHXV2?Dz*V0H+GV zqFaq1=}l=E1nFZh{g@@?ccX8wC$IrHRS*{4W(4b9`Q2o(`Z0^j@5ZOKzEB1b7rM;| z;y{*^-$Iy;s1uS{^0|$FBnHr}GeMU4#mPI$z6^2{872Ry`9?Ma^pX+us`6Wi`Z6ji z`XKxxT>|xj5%jw9TZqyfAqx7S^@wh9hj#L)4C@J*6@+yNwEKN{sggm|ZTCtGEe6ob z1K{Y%bmL^dtV9-8~di=fA2jOEG!t#*qzX-y} z3Ei+K=!9-smxtw@RNqD|XBd8KHo<)(con^*{896Xi@y_nP`bd&N&fh5M?j-Qt}XutCKm3w6d=vE`hx{TfO<&Sgx<4}H!KCIlU zmO#C31ih;K7UCHHIF;XxpI5op>;Zb!2$E3#$*C!2{Y1?>DnvQ{NhrVD@4d)vy9w?! zBS=d5{hJkVm6)j@*zoxIkA^2a^?9r!1nAh%T~x+Wf=k3QmnYkKrfaI)MmslNM2 z9=$yNI)qy$*!lf;${BBmH1p#ph4mOX6xH~rg-8NolIVn}^W$eh`5~J8_(9}}vi(tv ze_9`h$O2;G%)JwJ?wG77e^&TKfjGuLiFQUB5EDly^p!teeo>+ujUe)Xm?%4;mz6)s z^ypD9huVLaWg~FB2us@t`pO?2KQHK2BXGS5j>8C?Qh>LY^TN+7`pUl=ak(QNhk6XME`-&g+Ch$F7n32`WF)I4Jkh)FYLUYtQGcIbBH_gl^jvTg*4 z1jK~7UkF-foIW~sSTD*Sw7eU#Yy^n~#P}7sul&&=3zvmiHG)I~V!R66Ey|zOL2X5r z+?2C;htV+}AZa7$D}Qu|Gp$KbWUb#k1;iv}1byX?4pE(Em6WQ`=WRoAWWT6A<9|MPd{|r z10;1bo3`(fU;bebhoUC=Ma{bWe#Xny0Frh~$f6PSl|Q*U(=Y-@14zp!Crd`qSN`OY zv=P`EK-vyzSuldE=L^k>;%D8cJB{NS14vu>!_q-`Bj_u?KXkJZNXV`$avDa^SN>q= zRwHoT1ZTk&Imw`$zVe4dHyVMX0VM5~kakc`U-_d!P&wlo|8}&Gv#kN7?UR$XD|T4) zs`6V1D{qoUu*Lw=R(?0SZZLvgSAGlKVg%Cemq8GRH)gjPL6$u*(?HgZ09p(nYs&A& zCyPeVSAKhB-3UTuhjtPsYCrtRsVUWdY7@pO%g&K6Os96D?UWziFTZX>6h;u`__rc6 z@c@07?A}INDa| z@ZbLOYE{rd>VT4{hP*QHWLruzv5go=&rg^#!)3b2oTV zL@Bk7U;R$>e(DPfr~dQOuXb$+WB~Wwb)y>0D;RA4f3<3I-(5GVx7_gevCjhk{Zm(~ z4Ml}1C7KYJ7-&KRVRHK?u2#4HS#TqW0zn5q&ct0#MhTtQ=6>YL!k)$nPVMk)0N?$> ztty`rT=K5J6&IW}!S{dmA{)nx0L&h)@W%5t1Mq_{eo)mLip$=6d*IIayHCAURm%;8 zCeQ^)U7~9eO*a@S3WO9?s)|NkA$18tplceXqRE~A^%?~l)w)5oVxj=Ep%@;L+#F(t z2m?1I^6~|bLl$cW=~T`OqEh_0J_2rhJsZGf@4a0tKK4+lCwKaP3e_P+-JmceSgx9Axwk zHl}g(u)&cdbqu3{DHY^EnF_5S$mN{t3-X?s*Hevdc`Ocs$?E5HCyVg41bX&`1x`I- z1c1TPtEASyhX!kKhyLeHYN#aGFqr4X167VJ)EOJjvs`IF z1xAPSm`X9fSm)TO0>8TV7PYu+a@mEO85+=e!`YKO{+$o2Gq3ox0J#6I8`S(_jd$Gk zMcYo+bCO(6P&Xw1{QCy?{L>;sgOWlXbX}uV0Hp+1T{Xts!8#8;bP%aY>UEQ9Ls6@m zlq-tYom*mLKv1cIaxj2a_*nyQnwe2vzCPXZXmr{N@3)Wq90R-2>j3Y#?Tg~c`#z|i z{@!issoh7|KUe08H*KX_Gb!XH7o0uCy$|eR>r9D>4H^&s<^boMHpzpJ>;>S0vuF6( zuV6AgX z^!D=@LKh!kKpU|>k2UKI?ENXEu=j^8qXVJNCK1Cax%6wBoXi}MD$Z1C)Jih*K! zaK`pAwjVppFQ3@Yz5`{hy!Zr;n;zuqOOE4P4?NHD zn@Sj_LX(pD#To#mf{tM-8ir!`-ZEFd=~yO5^X#81^Of)IVsf;|j%}l8vbhdFbhK_S z4RFUNu2qGCU}S@&T2tuCpfsRUubb$)hR~r}RtO1F0YXx5n9U8Z4z-Gjp%hA)Ai)$m zdA&iSZt{iCUZ>vsp|9C?zG)hsE>k*{>$FUAq7PetRPuMi_~e9=Qd{!{_EWzdf*M6w z0~YVOe6!lIeT1P`PIB_OS2v5xl?J_#$8Z_B=yFIfhD-4J8e&00p6gCNNCc`Ib=@7Y%;)^94+^c_eC@CY6dowV{|_ zFi-;Cx^s{{&s9)L(J(dMb@Qu65OxY}{hiyFuYDGXY6?$E{wV9u)C}ZmGOS@h-B2u- ztK9L4tJN*9+!(hyM)`r=pu6#D_i(i6!`2^`-m5of)b+O`s5fmG`R8V5SGz-h^)uJ2 zu?=|+%~#n!x6Fp2Jf@-8Fq~&_$KFZjfP@jvB4Rq z7nna>p;}c`>jt%&z*K^N^B>Z6o5%vf>`j91ZR}=%pnSs0zv>wD?YG@6o`2}ysp*N* zs)C1(R#~nzm_1aXVOF{F;u9Di$WhEoMu(dl-77CTf#>!vU?`0((}SG6b)1=vO+M9H z^9bhUgJq6;(_gJ={P;+L!D90mGoRBy3Z#UgA)TQ?NvWt&ENVz0$>*CtrVkA#N^Ny;g>Lpxh2QKt%=AQwv0;tz4S5bPRC)T@ zGPQ=m&JTP+{I9?NfEpRnFn@QGy7=9Hw`LZ&`6J&HcYXR=HCB-13V@Q_^`#>W4{Hn- zG=>H=^qfRWNnRHyByYZC0}G1=zj$N`O#`E$sG9=QG+C-B$`unKC6`{3M@oS}VIX+V z2fyz5bjEABwCOv+nr+(YTQ|a93@8fuo#g9CY=h9JKyD$C-@M~J>dceIcxi5#-|jxb zg=f!j?507!^qptWb9pvzY~BFx*}p`!Qsr%zZfEc8GLJs_GH0AT#^gwmr=LH{wKxBx zXCc4zxwop(5y?{7WaD%JsWm-4^EpXQ7f7j*FK8&G7$3`1uNf>ZgTSO=3X}n+f|}91 z5YuuRdv?uHEC`M+z`Ji+eGHoRDNK~7IN*E?+pgT5yg{AN?oHbDr$BChGz`TLe(@5U zCQ7{jn$sBHkmtXA{xMEFag>8cYrME`9)PLwA`>Hn-21?8uHShIXKWwi{vSWjZ=N~K z)Og9QiZyuG&EF7TyYpIAt3zH2s)j<>O-v;~N)XMH9@P*Srb3D4egPyp&E=43f`%ZM z*U0Bhlv2o?Sfl*w5pgS*mw1988`D&8f}Kz*YTWP#r!hRBlhY-)-}3}-Ja?LB_AIe| z%P_Tiv*PVrhS~j6nTyYx;hy_{$2%`SiR=Dw8;i>g9(?3Q-@?`FO-H!BFIG6b1W!Lx zr&!b&D7>Q7x`q%YJFgh$@DYPwJiLq&0)@gbBn?AQtt-wuZv?Y^gnj+-82pdZ{( zy!M<8xg=$oNPB zXdZK3_?iiR{OHR_A$a|n8~NT(p6AjFk7s(K$V&&7dFF)$&hjW!E)R{mfl^RiQp_D_ zU?|Bm&(W(_?ywfK6{!gCg(l=~n*9(hWcZ-YjTN@gNqEwKWrlMSd##{p}uQ>nwL4NSV zGDqeOG)VBd?2CIl({1S=MGu6p-Z6G=-FbPA5j5615oIOsiq zlWcbFk78Ex+82KFB006+b_S>$CO?0Cj;V?JVL8K|Dm~qYsy-}2d5I^%!*%{5ADiosHIx%AFI{zlhM!%@uuQN$y3QeHnd!9ffm zt{I@6zeV5iv;4%a!(QaE#gn`Jt^NJrU;oLsM6F_AnxdT@S~{Kiu_$)kJmr?z{d#zGt!)#A(#--kQA_NAZx@8o9T_ID@VQH}q~9-vcx z^-deCDD&RC8H}I&@SSqq_pusY;{p8qzMW_5X%W2og>R*IlOyQ+08Ttt3?OKJbqjV! zXb}C8Sf~8(meThXKOT6=&u^^??DWMd*S@rA=WEfok7Jnk0c`2~5_Fmg0!a}wuRfAR zlu5wiPAC@WcFL;}q@l#tmm{m0*!sv80$ob~rY zA4K*JBh z4H4`{^cBA|B6~Kan~cCKx>r3*rnw1%#o0mIYkyIPIak&yzzu2|i?HyL$oRV{*@T;7wGK`cM&K7|1rCKN8YQH zI?-AG&Wb<19io1pz>PkTfDs~zc#15aG&;ruxcOLH(~jNr(}~VPm}x6+B=J5$R@xs{ z{%(Jt!BaedpD$IXvO!KO+BbDpX1DeXZ&7XjqI#boOu3{H*C|XEW;r*k7(lB(yH!hi$2bH1h@W+>I6lp7i$iFH#XjtZ*%B&~wRDSzPLh>PzN!67Vggx$zvVJe2pkeFt3qSICfuBBG6A_jK zdesQB-0rN)7Z*}bjo2w9Gb&_daN95K+~B7#f~KxX+a21j{wNXWHKYo_sW&HZ@1N6~H2y~1GXg#iL{eA27q-mNb8oT!a(uxPL$|R8=zqL+F zCOdz2KWPG6>4T&fwCFFo=pw(Q>k78-1GKK2oR$i1@c?!-lT%a5Zn=_HJV1Lp{33`y zerq4J`m?u&7kWMIu%q{b^}1~G3*YeoVUg8%fGosAgvsjA?e7z$g%tyE+C@j59j?6| zYblcCDUe;@celK9xL)5UNDGb^VSXRN2uhbmdhAwtvU(KSM>0tL7&HrLovGIIZE7p} zhTlZr0NT*$ZG&z`w_l9Kfu1*j)>9Na1?i+TS^kpt6}~fE4Zu1M4f0-=)%o4@1&uoe zh#kTjkY9SMjqP_gy^5Zn0Xo6SfGq_Ia}K{=-w5a?^t=Hi6_DeEum+UWE1T;TJ#PT* z@Vn&cre#EbPp}p%29T6Le$@WlQPrOolHLRKu^Ou~!zF>NWrj;@3DVz$W&?VwhoT$W zou{1qvAz1_`|;Oqsq@;)b>i)15WMpATepR< zo5*gb?`7D=1GK`)C*LU^z^hMwR^kCH`TfFe=IJ*2UWRQvfF0V)IK=~a^~p~=9>9tT z4!aBpOP^#sf*pOYqkjsNGWw@L>7wUPf!g6GBCCH2)cxrBi?FnBQjwnXgk~z8T2ap2GD{uzL0V50s78xosn4s2;)xe$Bny_0(P@EsGULgjbb$f9eyML z005v#L_t(CYXE6sJ$Zu$3GnGP^bLUZ`&DdjS6}(pqUQ}D?Ngv6(P|KVV`w7rH^MBq zt$%|~-Tf)wJJLu;lSN1?9beL!+1dvn>KDMBXtSIdE=~GgMaRr=kyn_}o8Tlev(3%U zihgFeY(WQaj!{X)19^j>2#EIPmS+tK$r`tJku eIC?!j`u_(^ne{V?Hu*9D0000