From 9b0649c752609c14de70838ac57bf846b47c016d Mon Sep 17 00:00:00 2001 From: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Date: Thu, 20 Jun 2024 00:38:29 +0300 Subject: [PATCH 01/75] mothroaches in the wardrobe (#83695) ## About The Pull Request there is a very small chance vendrobes will have mothroaches inside. this will become apparent as the clothes you buy will come out slightly damaged and eaten. hitting the vendrobe with a weapon (or throwing the weapon at it) will cause the mothroaches to come out and scatter everywhere. mothroaches will now also seek out clothes to eat them ## Why It's Good For The Game gives more character and depth to mothroach AI ## Changelog :cl: add: vendrobes may have mothroaches inside them add: mothroaches will now seek out clothes to eat them /:cl: --- code/__DEFINES/ai/pet_commands.dm | 3 ++ code/datums/elements/basic_eating.dm | 1 + .../basic/vermin/{ => mothroach}/mothroach.dm | 14 +++----- .../basic/vermin/mothroach/mothroach_ai.dm | 35 +++++++++++++++++++ code/modules/vending/wardrobes.dm | 30 ++++++++++++++++ tgstation.dme | 3 +- 6 files changed, 75 insertions(+), 11 deletions(-) rename code/modules/mob/living/basic/vermin/{ => mothroach}/mothroach.dm (88%) create mode 100644 code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm diff --git a/code/__DEFINES/ai/pet_commands.dm b/code/__DEFINES/ai/pet_commands.dm index 1e692b9f805aa..7404cb9acda84 100644 --- a/code/__DEFINES/ai/pet_commands.dm +++ b/code/__DEFINES/ai/pet_commands.dm @@ -7,3 +7,6 @@ #define BB_PET_TARGETING_STRATEGY "BB_pet_targeting" /// Typecache of weakrefs to mobs this mob is friends with, will follow their instructions and won't attack them #define BB_FRIENDS_LIST "BB_friends_list" + +///mothroach next meal key! +#define BB_MOTHROACH_NEXT_EAT "mothroach_next_eat" diff --git a/code/datums/elements/basic_eating.dm b/code/datums/elements/basic_eating.dm index 92b303c9be2a0..4f4f493e0ef33 100644 --- a/code/datums/elements/basic_eating.dm +++ b/code/datums/elements/basic_eating.dm @@ -93,4 +93,5 @@ if(isstack(target)) //if stack, only consume 1 var/obj/item/stack/food_stack = target final_target = food_stack.split_stack(eater, 1) + eater.log_message("has eaten [target]!", LOG_ATTACK) qdel(final_target) diff --git a/code/modules/mob/living/basic/vermin/mothroach.dm b/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm similarity index 88% rename from code/modules/mob/living/basic/vermin/mothroach.dm rename to code/modules/mob/living/basic/vermin/mothroach/mothroach.dm index 4c06665a14afc..a0079065de437 100644 --- a/code/modules/mob/living/basic/vermin/mothroach.dm +++ b/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm @@ -36,6 +36,10 @@ /mob/living/basic/mothroach/Initialize(mapload) . = ..() + var/static/list/food_types = list(/obj/item/clothing) + AddElement(/datum/element/basic_eating, food_types = food_types) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(food_types)) + AddElement(/datum/element/ai_retaliate) AddElement(/datum/element/pet_bonus, "squeaks happily!") add_verb(src, /mob/living/proc/toggle_resting) ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) @@ -64,16 +68,6 @@ else playsound(loc, 'sound/voice/moth/scream_moth.ogg', 50, TRUE) -/datum/ai_controller/basic_controller/mothroach - blackboard = list() - - ai_traits = STOP_MOVING_WHEN_PULLED - ai_movement = /datum/ai_movement/basic_avoidance - idle_behavior = /datum/idle_behavior/idle_random_walk - planning_subtrees = list( - /datum/ai_planning_subtree/random_speech/mothroach, - ) - /mob/living/basic/mothroach/bar name = "mothroach bartender" desc = "A mothroach serving drinks. Look at him go." diff --git a/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm b/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm new file mode 100644 index 0000000000000..5ef330cdc64f9 --- /dev/null +++ b/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm @@ -0,0 +1,35 @@ +#define MOTHROACH_EAT_TIMER 1 MINUTES + +/datum/ai_controller/basic_controller/mothroach + blackboard = list( + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + ) + + ai_traits = STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/find_food/mothroach, + /datum/ai_planning_subtree/target_retaliate/to_flee, + /datum/ai_planning_subtree/flee_target/from_flee_key, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/random_speech/mothroach, + ) + +/datum/ai_controller/basic_controller/mothroach/TryPossessPawn(atom/new_pawn) + . = ..() + if(. & AI_CONTROLLER_INCOMPATIBLE) + return + RegisterSignal(new_pawn, COMSIG_MOB_ATE, PROC_REF(on_eaten)) + +/datum/ai_controller/basic_controller/mothroach/proc/on_eaten(datum/source) + SIGNAL_HANDLER + set_blackboard_key(BB_MOTHROACH_NEXT_EAT, world.time + MOTHROACH_EAT_TIMER) + +/datum/ai_planning_subtree/find_food/mothroach/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(world.time < controller.blackboard[BB_MOTHROACH_NEXT_EAT]) + return + return ..() + +#undef MOTHROACH_EAT_TIMER diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index 015c3d6f7e0cb..3f82a219e56c9 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -1,3 +1,7 @@ +GLOBAL_VAR_INIT(roaches_deployed, FALSE) +#define MOTHROACH_START_CHANCE 5 +#define MAX_MOTHROACH_AMOUNT 3 + /obj/item/vending_refill/wardrobe icon_state = "refill_clothes" @@ -8,6 +12,29 @@ panel_type = "panel19" light_mask = "wardrobe-light-mask" +/obj/machinery/vending/wardrobe/Initialize(mapload) + . = ..() + if(!mapload) + return + if(GLOB.roaches_deployed || !is_station_level(z) || !prob(MOTHROACH_START_CHANCE)) + return + for(var/count in 1 to rand(1, MAX_MOTHROACH_AMOUNT)) + new /mob/living/basic/mothroach(src) + GLOB.roaches_deployed = TRUE + + +/obj/machinery/vending/wardrobe/on_dispense(obj/item/clothing/food) + if(!istype(food)) + return + for(var/mob/living/basic/mothroach/roach in contents) + food.take_damage(food.get_integrity() * 0.5) + +/obj/machinery/vending/wardrobe/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + . = ..() + for(var/mob/living/basic/mothroach/roach in contents) + roach.ai_controller.set_blackboard_key(BB_BASIC_MOB_FLEE_TARGET, src) //scatter away! + roach.forceMove(drop_location()) + /obj/machinery/vending/wardrobe/sec_wardrobe name = "\improper SecDrobe" desc = "A vending machine for security and security-related clothing!" @@ -704,3 +731,6 @@ /obj/item/vending_refill/wardrobe/cent_wardrobe machine_name = "CentDrobe" light_color = LIGHT_COLOR_ELECTRIC_GREEN + +#undef MOTHROACH_START_CHANCE +#undef MAX_MOTHROACH_AMOUNT diff --git a/tgstation.dme b/tgstation.dme index 5c2702885460a..f3bdadf367d85 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4959,9 +4959,10 @@ #include "code\modules\mob\living\basic\vermin\crab.dm" #include "code\modules\mob\living\basic\vermin\frog.dm" #include "code\modules\mob\living\basic\vermin\lizard.dm" -#include "code\modules\mob\living\basic\vermin\mothroach.dm" #include "code\modules\mob\living\basic\vermin\mouse.dm" #include "code\modules\mob\living\basic\vermin\space_bat.dm" +#include "code\modules\mob\living\basic\vermin\mothroach\mothroach.dm" +#include "code\modules\mob\living\basic\vermin\mothroach\mothroach_ai.dm" #include "code\modules\mob\living\brain\brain.dm" #include "code\modules\mob\living\brain\brain_cybernetic.dm" #include "code\modules\mob\living\brain\brain_item.dm" From 6f059ffdda33b79ed96f9e1f30403d168ed9a887 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 20 Jun 2024 09:38:47 +1200 Subject: [PATCH 02/75] Automatic changelog for PR #83695 [ci skip] --- html/changelogs/AutoChangeLog-pr-83695.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83695.yml diff --git a/html/changelogs/AutoChangeLog-pr-83695.yml b/html/changelogs/AutoChangeLog-pr-83695.yml new file mode 100644 index 0000000000000..34b0598a26406 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83695.yml @@ -0,0 +1,5 @@ +author: "Ben10Omintrix" +delete-after: True +changes: + - rscadd: "vendrobes may have mothroaches inside them" + - rscadd: "mothroaches will now seek out clothes to eat them" \ No newline at end of file From e4ef6ee680627f2fbc764db696e2d564388f9107 Mon Sep 17 00:00:00 2001 From: FlufflesTheDog Date: Wed, 19 Jun 2024 14:40:37 -0700 Subject: [PATCH 03/75] Fix bodytype bitflag check for prosthetic repair (#84124) ## About The Pull Request bodytype is a bitflag, and can have multiple biotypes selected. Shouldn't use equality comparisons for bitflags. ## Changelog :cl: fix: limbs that are both robotic and something else can be repaired properly /:cl: --- code/modules/mob/living/carbon/human/human_helpers.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 52ffe51bfe68b..1fe6555cddf9c 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -368,7 +368,7 @@ /mob/living/carbon/human/proc/item_heal(mob/user, brute_heal, burn_heal, heal_message_brute, heal_message_burn, required_bodytype) var/obj/item/bodypart/affecting = src.get_bodypart(check_zone(user.zone_selected)) - if (!affecting || !(affecting.bodytype == required_bodytype)) + if (!affecting || !(affecting.bodytype & required_bodytype)) to_chat(user, span_warning("[affecting] is already in good condition!")) return FALSE From 61afe144290ad99f9a5515f8cde7fb685268a4d0 Mon Sep 17 00:00:00 2001 From: lessthanthree <83487515+lessthnthree@users.noreply.github.com> Date: Wed, 19 Jun 2024 14:40:59 -0700 Subject: [PATCH 04/75] Updates fruit bowl description (#84123) ## About The Pull Request Updates the description of the fruit bowl. ## Why It's Good For The Game Foreshadowing. ## Changelog :cl: LT3 spellcheck: Melon fruit bowl now comes with a side of foreshadowing for people who want to experience an explosion of flavour /:cl: --- code/game/objects/items/food/misc.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm index 0e598c6820296..31ac87c0ff690 100644 --- a/code/game/objects/items/food/misc.dm +++ b/code/game/objects/items/food/misc.dm @@ -184,7 +184,7 @@ /obj/item/food/melonfruitbowl name = "melon fruit bowl" - desc = "For people who wants edible fruit bowls." + desc = "For people who want to experience an explosion of flavour." icon_state = "melonfruitbowl" food_reagents = list( /datum/reagent/consumable/nutriment = 6, From 1a1ec79440ad2a898c5078fc6a6c0bf4c3a7b579 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 20 Jun 2024 09:41:03 +1200 Subject: [PATCH 05/75] Automatic changelog for PR #84124 [ci skip] --- html/changelogs/AutoChangeLog-pr-84124.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84124.yml diff --git a/html/changelogs/AutoChangeLog-pr-84124.yml b/html/changelogs/AutoChangeLog-pr-84124.yml new file mode 100644 index 0000000000000..7743692b30a7a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84124.yml @@ -0,0 +1,4 @@ +author: "FlufflesTheDog" +delete-after: True +changes: + - bugfix: "limbs that are both robotic and something else can be repaired properly" \ No newline at end of file From 74efbdf24766cff8d28ca6bf4419346c66d33e80 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 20 Jun 2024 09:41:27 +1200 Subject: [PATCH 06/75] Automatic changelog for PR #84123 [ci skip] --- html/changelogs/AutoChangeLog-pr-84123.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84123.yml diff --git a/html/changelogs/AutoChangeLog-pr-84123.yml b/html/changelogs/AutoChangeLog-pr-84123.yml new file mode 100644 index 0000000000000..3d09db30c03b1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84123.yml @@ -0,0 +1,4 @@ +author: "LT3" +delete-after: True +changes: + - spellcheck: "Melon fruit bowl now comes with a side of foreshadowing for people who want to experience an explosion of flavour" \ No newline at end of file From 0db3d07fcdde9a85c18255198608ad65dfaaf687 Mon Sep 17 00:00:00 2001 From: Rhials <28870487+Rhials@users.noreply.github.com> Date: Wed, 19 Jun 2024 17:45:38 -0400 Subject: [PATCH 07/75] Halves(ish) the energy bola slowdown (#84120) ## About The Pull Request This halves the slowdown incurred by the energy bola, and by extension, the "cyborg energy bear trap" that this item is inexplicably tied to. Before: ![slow ass](https://github.com/tgstation/tgstation/assets/28870487/b715a711-1257-432e-b808-af78036e8589) After: ![halved](https://github.com/tgstation/tgstation/assets/28870487/e8af6dcd-04f0-4531-ac73-0ad1b8fad725) Unrestrained (Control): ![no problem](https://github.com/tgstation/tgstation/assets/28870487/d2fbe055-6e7a-4959-ac7e-dc9b37a8da92) ## Why It's Good For The Game The energy bola is a very important part of the security kit. It's available at roundstart and complements very well with a baton to the face. The slowdown, however, is too extreme. Extreme to the point that anyone hit by one of these is at too far of a disadvantage to even properly fight back. Summarily, if you get hit by one of these, and if you don't have a teleport on-hand, you're cooked. Not even a firearm will save you. They're uncatchable, unblockable, and work on prone targets. Reducing the slowdown, in my opinion, enables it to be a tool used for preventing a criminal from evading you, rather than completely crippling them. It's not the final say in a combat encounter, but rather you forcing that person to stand and fight (at a fair disadvantage) instead of continuing to run away. ## Changelog :cl: Rhials balance: The energy bola slowdown has been (roughly) halved, to allow for more retaliation when used on a criminal. /:cl: --- code/game/objects/items/handcuffs.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index ffcb5d1857cda..d3e8bdd0ad88d 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -523,6 +523,7 @@ /obj/item/restraints/legcuffs/beartrap/energy/cyborg breakouttime = 2 SECONDS // Cyborgs shouldn't have a strong restraint + slowdown = 3 /obj/item/restraints/legcuffs/bola name = "bola" From fca203431641ce7e41bf7a0589741c35a8a1ab26 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 20 Jun 2024 09:46:05 +1200 Subject: [PATCH 08/75] Automatic changelog for PR #84120 [ci skip] --- html/changelogs/AutoChangeLog-pr-84120.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84120.yml diff --git a/html/changelogs/AutoChangeLog-pr-84120.yml b/html/changelogs/AutoChangeLog-pr-84120.yml new file mode 100644 index 0000000000000..9c4bcb7fa60f4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84120.yml @@ -0,0 +1,4 @@ +author: "Rhials" +delete-after: True +changes: + - balance: "The energy bola slowdown has been (roughly) halved, to allow for more retaliation when used on a criminal." \ No newline at end of file From 97a1d7a81f2ed6df77e6c0e163b11f9ebae2286b Mon Sep 17 00:00:00 2001 From: thegrb93 Date: Wed, 19 Jun 2024 17:46:23 -0400 Subject: [PATCH 09/75] Make butt sprites overridable for downstream (#84100) ## About The Pull Request Allows changing the spritesheet for downstreams ## Why It's Good For The Game Small code cleanup and lets downstreams do more butts for other species. --- code/modules/mob/living/basic/alien/_alien.dm | 2 +- code/modules/mob/living/basic/drone/_drone.dm | 2 +- code/modules/mob/living/carbon/alien/adult/adult.dm | 2 +- code/modules/mob/living/silicon/silicon.dm | 2 +- code/modules/paperwork/photocopier.dm | 5 ++--- code/modules/surgery/bodyparts/parts.dm | 6 ++++-- .../surgery/bodyparts/species_parts/lizard_bodyparts.dm | 2 +- .../surgery/bodyparts/species_parts/misc_bodyparts.dm | 6 +++--- .../surgery/bodyparts/species_parts/moth_bodyparts.dm | 2 +- .../surgery/bodyparts/species_parts/plasmaman_bodyparts.dm | 2 +- code/modules/surgery/organs/external/tails.dm | 2 +- 11 files changed, 17 insertions(+), 16 deletions(-) diff --git a/code/modules/mob/living/basic/alien/_alien.dm b/code/modules/mob/living/basic/alien/_alien.dm index 823ab896c0a22..907d28aaa4187 100644 --- a/code/modules/mob/living/basic/alien/_alien.dm +++ b/code/modules/mob/living/basic/alien/_alien.dm @@ -63,7 +63,7 @@ AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_CLAW) /mob/living/basic/alien/get_butt_sprite() - return BUTT_SPRITE_XENOMORPH + return icon('icons/mob/butts.dmi', BUTT_SPRITE_XENOMORPH) ///Places alien weeds on the turf the mob is currently standing on. /mob/living/basic/alien/proc/place_weeds() diff --git a/code/modules/mob/living/basic/drone/_drone.dm b/code/modules/mob/living/basic/drone/_drone.dm index ae72054899b11..6501e35d51dc2 100644 --- a/code/modules/mob/living/basic/drone/_drone.dm +++ b/code/modules/mob/living/basic/drone/_drone.dm @@ -265,7 +265,7 @@ dust() /mob/living/basic/drone/get_butt_sprite() - return BUTT_SPRITE_DRONE + return icon('icons/mob/butts.dmi', BUTT_SPRITE_DRONE) /mob/living/basic/drone/examine(mob/user) . = list("This is [icon2html(src, user)] \a [src]!") diff --git a/code/modules/mob/living/carbon/alien/adult/adult.dm b/code/modules/mob/living/carbon/alien/adult/adult.dm index c15efb77a4a19..ad005888178ac 100644 --- a/code/modules/mob/living/carbon/alien/adult/adult.dm +++ b/code/modules/mob/living/carbon/alien/adult/adult.dm @@ -140,7 +140,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( return TRUE /mob/living/carbon/alien/adult/get_butt_sprite() - return BUTT_SPRITE_XENOMORPH + return icon('icons/mob/butts.dmi', BUTT_SPRITE_XENOMORPH) // Aliens can touch acid /mob/living/carbon/alien/can_touch_acid(atom/acided_atom, acid_power, acid_volume) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 95e2e6ed13379..6d94c2c5be978 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -442,7 +442,7 @@ return // Silicons are always standing by default. /mob/living/silicon/get_butt_sprite() - return BUTT_SPRITE_QR_CODE + return icon('icons/mob/butts.dmi', BUTT_SPRITE_QR_CODE) /** * Records an IC event log entry in the cyborg's internal tablet. diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index b7796ad070a87..72d3ecd85ba03 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -495,10 +495,9 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) /obj/machinery/photocopier/proc/make_ass_copy() if(!check_ass()) return null - var/butt_icon_state = ass.get_butt_sprite() - if(isnull(butt_icon_state)) + var/icon/temp_img = ass.get_butt_sprite() + if(isnull(temp_img)) return null - var/icon/temp_img = icon('icons/mob/butts.dmi', butt_icon_state) var/obj/item/photo/copied_ass = new /obj/item/photo(src) var/datum/picture/toEmbed = new(name = "[ass]'s Ass", desc = "You see [ass]'s ass on the photo.", image = temp_img) toEmbed.psize_x = 128 diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index 03f53c962d59f..97fa50d76c85b 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -74,9 +74,11 @@ if(!ishuman(owner)) return null var/mob/living/carbon/human/human_owner = owner - var/butt_sprite = human_owner.physique == FEMALE ? BUTT_SPRITE_HUMAN_FEMALE : BUTT_SPRITE_HUMAN_MALE var/obj/item/organ/external/tail/tail = human_owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - return tail?.get_butt_sprite() || butt_sprite + if(tail) + return tail.get_butt_sprite() + + return icon('icons/mob/butts.dmi', human_owner.physique == FEMALE ? BUTT_SPRITE_HUMAN_FEMALE : BUTT_SPRITE_HUMAN_MALE) /obj/item/bodypart/chest/monkey icon = 'icons/mob/human/species/monkey/bodyparts.dmi' diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm index 30e91db21373a..157e5b04fe68e 100644 --- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm @@ -11,7 +11,7 @@ wing_types = list(/obj/item/organ/external/wings/functional/dragon) /obj/item/bodypart/chest/lizard/get_butt_sprite() - return BUTT_SPRITE_LIZARD + return icon('icons/mob/butts.dmi', BUTT_SPRITE_LIZARD) /obj/item/bodypart/arm/left/lizard icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index 2730bc362c72c..fa3ab9cc49d39 100644 --- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -59,7 +59,7 @@ wing_types = NONE /obj/item/bodypart/chest/abductor/get_butt_sprite() - return BUTT_SPRITE_GREY + return icon('icons/mob/butts.dmi', BUTT_SPRITE_GREY) /obj/item/bodypart/arm/left/abductor limb_id = SPECIES_ABDUCTOR @@ -97,7 +97,7 @@ wing_types = list(/obj/item/organ/external/wings/functional/slime) /obj/item/bodypart/chest/jelly/get_butt_sprite() - return BUTT_SPRITE_SLIME + return icon('icons/mob/butts.dmi', BUTT_SPRITE_SLIME) /obj/item/bodypart/arm/left/jelly biological_state = (BIO_FLESH|BIO_BLOODED) @@ -216,7 +216,7 @@ wing_types = NONE /obj/item/bodypart/chest/pod/get_butt_sprite() - return BUTT_SPRITE_FLOWERPOT + return icon('icons/mob/butts.dmi', BUTT_SPRITE_FLOWERPOT) /obj/item/bodypart/arm/left/pod limb_id = SPECIES_PODPERSON diff --git a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm index 011ee83368a63..375b37ca434d6 100644 --- a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm @@ -17,7 +17,7 @@ wing_types = list(/obj/item/organ/external/wings/functional/moth/megamoth, /obj/item/organ/external/wings/functional/moth/mothra) /obj/item/bodypart/chest/moth/get_butt_sprite() - return BUTT_SPRITE_FUZZY + return icon('icons/mob/butts.dmi', BUTT_SPRITE_FUZZY) /obj/item/bodypart/arm/left/moth icon = 'icons/mob/human/species/moth/bodyparts.dmi' diff --git a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm index 40bf4a51c042e..b0acf914079f3 100644 --- a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm @@ -27,7 +27,7 @@ wing_types = NONE /obj/item/bodypart/chest/plasmaman/get_butt_sprite() - return BUTT_SPRITE_PLASMA + return icon('icons/mob/butts.dmi', BUTT_SPRITE_PLASMA) /obj/item/bodypart/arm/left/plasmaman icon = 'icons/mob/human/species/plasmaman/bodyparts.dmi' diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm index 56479d0f22a10..977597f90f52f 100644 --- a/code/modules/surgery/organs/external/tails.dm +++ b/code/modules/surgery/organs/external/tails.dm @@ -161,7 +161,7 @@ return SSaccessories.tails_list_human /obj/item/organ/external/tail/cat/get_butt_sprite() - return BUTT_SPRITE_CAT + return icon('icons/mob/butts.dmi', BUTT_SPRITE_CAT) ///Cat tail bodypart overlay /datum/bodypart_overlay/mutant/tail/cat From b43ae13541eb0ae99a9593baa3d860a8671bca35 Mon Sep 17 00:00:00 2001 From: Yaroslav Nurkov <78199449+AnywayFarus@users.noreply.github.com> Date: Thu, 20 Jun 2024 00:48:10 +0300 Subject: [PATCH 10/75] Deleting characters (#83989) ## About The Pull Request Adds a button to delete characters, and when deleted it flips to the nearest character, wow(the last character can't be deleted(I guess)). ### Video: https://github.com/tgstation/tgstation/assets/78199449/3ad1157a-6c1c-4fb2-9b0d-1da791cad989 ## Why It's Good For The Game Once you know how to create characters, you sometimes want to be able to delete them. The reasons for this can be... as simple as freeing up a slot, or deleting them in order to remake them. I think this is quite a useful feature that should have been there before. ## Changelog :cl: Vishenka0704 qol: Ability to delete characters(yourself) /:cl: --- code/modules/client/preferences.dm | 19 ++++++++++ code/modules/client/preferences_savefile.dm | 10 +++++ .../CharacterPreferenceWindow.tsx | 37 ++++++++++++++++--- 3 files changed, 61 insertions(+), 5 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 8eb0def90bfa3..9877fe8869eb5 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -223,6 +223,25 @@ GLOBAL_LIST_EMPTY(preferences_datums) character_preview_view.update_body() + return TRUE + if ("remove_slot") + var/picked_slot = params["slot"] + var/confidence_check = tgui_input_text(usr, "To confirm the deletion of a character, type the name of the character.", "Character Deletion") + if(confidence_check != params["name"]) + return FALSE + + if(!remove_character(picked_slot)) + return FALSE + + if (!load_character(params["slotToJump"])) + randomise_appearance_prefs() + save_character() + + for (var/datum/preference_middleware/preference_middleware as anything in middleware) + preference_middleware.on_new_character(usr) + + tainted_character_profiles = TRUE + character_preview_view.update_body(); return TRUE if ("rotate") character_preview_view.setDir(turn(character_preview_view.dir, -90)) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index aa6b1840c50b2..5750e296a80bc 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -368,6 +368,16 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car return TRUE +/datum/preferences/proc/remove_character(slot) + SHOULD_NOT_SLEEP(TRUE) + if(!slot) + return FALSE + slot = sanitize_integer(slot, 1, max_save_slots, initial(default_slot)) + + var/tree_key = "character[slot]" + savefile.remove_entry(tree_key) + return TRUE + /datum/preferences/proc/sanitize_be_special(list/input_be_special) var/list/output = list() diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx index 1e6f779c847ac..435d7c441d08d 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx @@ -101,15 +101,44 @@ export const CharacterPreferenceWindow = (props) => { profiles={data.character_profiles} /> - + + + {!data.content_unlocked && ( Buy BYOND premium for more slots! )} - - @@ -168,9 +197,7 @@ export const CharacterPreferenceWindow = (props) => { - - {pageContents} From c77eeb3205670045549f2172015e302069172bf5 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 20 Jun 2024 09:48:49 +1200 Subject: [PATCH 11/75] Automatic changelog for PR #83989 [ci skip] --- html/changelogs/AutoChangeLog-pr-83989.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83989.yml diff --git a/html/changelogs/AutoChangeLog-pr-83989.yml b/html/changelogs/AutoChangeLog-pr-83989.yml new file mode 100644 index 0000000000000..f6e4deed9933f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83989.yml @@ -0,0 +1,4 @@ +author: "Vishenka0704" +delete-after: True +changes: + - qol: "Ability to delete characters(yourself)" \ No newline at end of file From daa34b9f192c85c49d410da90119018bbb484c54 Mon Sep 17 00:00:00 2001 From: Joshua Kidder <49173900+Metekillot@users.noreply.github.com> Date: Wed, 19 Jun 2024 18:25:34 -0400 Subject: [PATCH 12/75] [no gbp] Sparks don't ignite furniture (unless you made it out of plasma you fucking lunatic), sparks have a decreasing chance to ignite bigger items, small fix to obj/fire_act() signal (#84111) ## About The Pull Request Even though it's hilarious, sparks currently ignite any flammable thing they touch whatsoever; including gigantic wooden/cloth items, or tables and chairs. Turning areas with wooden furnitures into fields of ash wasn't the intent, so I adjusted sparks to not ignite furniture (you can put welding fuel under them if that's your intent) and items bigger than small items have a steadily decreasing chance to get ignited by sparks (normal is 50%, bulky is 20%, bigger than bulky won't ignite only from sparks) ## Why It's Good For The Game Even in a death trap space station of the future, sparks aren't THAT much of a fire hazard. ## Changelog :cl: fix: Sparks will no longer turn areas with wooden furniture or similar into naught but a field of ashes; they no longer ignite furniture, (unless it's made of plasma(?!)) and have a decreasing chance to ignite items bigger than small size. /:cl: --- .../effects/effect_system/effects_sparks.dm | 25 +++++++++++++++---- code/game/objects/obj_defense.dm | 1 + 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm index f9bb819fd42a1..c715cc1d7457d 100644 --- a/code/game/objects/effects/effect_system/effects_sparks.dm +++ b/code/game/objects/effects/effect_system/effects_sparks.dm @@ -74,12 +74,27 @@ if(isobj(singed)) var/obj/singed_obj = singed - if(singed_obj.resistance_flags & FLAMMABLE && !(singed_obj.resistance_flags & ON_FIRE)) //only fire_act flammable objects instead of burning EVERYTHING - singed_obj.fire_act(1,100) if(singed_obj.reagents) - var/datum/reagents/reagents = singed_obj.reagents - reagents?.expose_temperature(1000) - return + var/datum/reagents/reagents = singed_obj.reagents // heat up things that contain reagents before we check to see if they burn + reagents?.expose_temperature(1000) // we set this at 1000 because that's the max reagent temp for a chem heater, higher temps require more than sparks + if(singed_obj.custom_materials && (GET_MATERIAL_REF(/datum/material/plasma) in singed_obj.custom_materials)) + singed_obj.fire_act(FIRE_MINIMUM_TEMPERATURE_TO_SPREAD,100) + return // if it's made of plasma we just start burning no matter what, even furniture (see right below) + if(isstructure(singed_obj) || ismachinery(singed_obj)) // don't ignite furniture even if it's flammable, leave that to actual fires + return + if(singed_obj.resistance_flags & FLAMMABLE && !(singed_obj.resistance_flags & ON_FIRE)) //only fire_act flammable objects instead of burning EVERYTHING + if(isitem(singed_obj)) + var/obj/item/singed_item = singed_obj + var/ignite_chance = 120 // base chance applies to anything under WEIGHT_CLASS_NORMAL, so burn everything flammable that's small/tiny + if(singed_item.w_class > WEIGHT_CLASS_SMALL) + var/ignite_chance_penalty = (singed_item.w_class * 2 + round(singed_item.w_class * 0.5)) * 10 // size penalties to ignite chance: normal = 70, bulky = 100, + ignite_chance -= ignite_chance_penalty // the bigger the item, the less likely it is to ignite + if(prob(ignite_chance)) + singed_item.fire_act(FIRE_MINIMUM_TEMPERATURE_TO_SPREAD,100) + return + else + singed_obj.fire_act(FIRE_MINIMUM_TEMPERATURE_TO_SPREAD,100) + return if(isliving(singed)) var/mob/living/singed_living = singed if(singed_living.fire_stacks) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 9ebcbb253d20b..d07f7ad21c5f5 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -132,6 +132,7 @@ take_damage(clamp(0.02 * exposed_temperature, 0, 20), BURN, FIRE, 0) if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE) && !(resistance_flags & FIRE_PROOF)) AddComponent(/datum/component/burning, custom_fire_overlay || GLOB.fire_overlay, burning_particles) + SEND_SIGNAL(src, COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume) return TRUE return ..() From cdf36a55547a476510ceb210f28d8ea2948ed91d Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 20 Jun 2024 10:40:50 +1200 Subject: [PATCH 13/75] Automatic changelog for PR #84111 [ci skip] --- html/changelogs/AutoChangeLog-pr-84111.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84111.yml diff --git a/html/changelogs/AutoChangeLog-pr-84111.yml b/html/changelogs/AutoChangeLog-pr-84111.yml new file mode 100644 index 0000000000000..4b3d8e92bbd00 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84111.yml @@ -0,0 +1,4 @@ +author: "Metekillot" +delete-after: True +changes: + - bugfix: "Sparks will no longer turn areas with wooden furniture or similar into naught but a field of ashes; they no longer ignite furniture, (unless it's made of plasma(?!)) and have a decreasing chance to ignite items bigger than small size." \ No newline at end of file From bb40b65e5b71e834b82521d32cfa41a305934067 Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 20 Jun 2024 01:56:16 +0300 Subject: [PATCH 14/75] Compressor UI fix [NO GBP] (#84157) ## About The Pull Request Hotfix for Compressor UI not showing Tank data. Deleted a tag by accident when cleaning up unused variables. ## Why It's Good For The Game Sorry ## Changelog :cl: fix: Fixed new compressor UI /:cl: --- tgui/packages/tgui/interfaces/TankCompressor.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/tgui/packages/tgui/interfaces/TankCompressor.tsx b/tgui/packages/tgui/interfaces/TankCompressor.tsx index 3f516e3c01803..a0d2acc14fb4b 100644 --- a/tgui/packages/tgui/interfaces/TankCompressor.tsx +++ b/tgui/packages/tgui/interfaces/TankCompressor.tsx @@ -70,6 +70,7 @@ const TankCompressorContent = (props) => { return ( +
Date: Thu, 20 Jun 2024 11:05:25 +1200 Subject: [PATCH 15/75] Automatic changelog for PR #84157 [ci skip] --- html/changelogs/AutoChangeLog-pr-84157.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84157.yml diff --git a/html/changelogs/AutoChangeLog-pr-84157.yml b/html/changelogs/AutoChangeLog-pr-84157.yml new file mode 100644 index 0000000000000..721b7fd36b3ef --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84157.yml @@ -0,0 +1,4 @@ +author: "MTandi" +delete-after: True +changes: + - bugfix: "Fixed new compressor UI" \ No newline at end of file From 6d5e5801c3e81d7f976bd4172adf2c8dd5a29588 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 20 Jun 2024 00:23:07 +0000 Subject: [PATCH 16/75] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-83695.yml | 5 --- html/changelogs/AutoChangeLog-pr-83866.yml | 4 -- html/changelogs/AutoChangeLog-pr-83925.yml | 4 -- html/changelogs/AutoChangeLog-pr-83986.yml | 4 -- html/changelogs/AutoChangeLog-pr-83988.yml | 8 ---- html/changelogs/AutoChangeLog-pr-83989.yml | 4 -- html/changelogs/AutoChangeLog-pr-84006.yml | 5 --- html/changelogs/AutoChangeLog-pr-84067.yml | 4 -- html/changelogs/AutoChangeLog-pr-84071.yml | 4 -- html/changelogs/AutoChangeLog-pr-84074.yml | 6 --- html/changelogs/AutoChangeLog-pr-84099.yml | 4 -- html/changelogs/AutoChangeLog-pr-84104.yml | 4 -- html/changelogs/AutoChangeLog-pr-84108.yml | 4 -- html/changelogs/AutoChangeLog-pr-84109.yml | 4 -- html/changelogs/AutoChangeLog-pr-84111.yml | 4 -- html/changelogs/AutoChangeLog-pr-84116.yml | 5 --- html/changelogs/AutoChangeLog-pr-84120.yml | 4 -- html/changelogs/AutoChangeLog-pr-84123.yml | 4 -- html/changelogs/AutoChangeLog-pr-84124.yml | 4 -- html/changelogs/AutoChangeLog-pr-84157.yml | 4 -- html/changelogs/archive/2024-06.yml | 49 ++++++++++++++++++++++ 21 files changed, 49 insertions(+), 89 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-83695.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83866.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83925.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83986.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83988.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83989.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84006.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84067.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84071.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84074.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84099.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84104.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84108.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84109.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84111.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84116.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84120.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84123.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84124.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84157.yml diff --git a/html/changelogs/AutoChangeLog-pr-83695.yml b/html/changelogs/AutoChangeLog-pr-83695.yml deleted file mode 100644 index 34b0598a26406..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83695.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Ben10Omintrix" -delete-after: True -changes: - - rscadd: "vendrobes may have mothroaches inside them" - - rscadd: "mothroaches will now seek out clothes to eat them" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83866.yml b/html/changelogs/AutoChangeLog-pr-83866.yml deleted file mode 100644 index 77c38213c9f14..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83866.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Absolucy" -delete-after: True -changes: - - qol: "Prettied up the Chemical Analyzer's output in chat, making it easier to read, especially when scanning multiple things." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83925.yml b/html/changelogs/AutoChangeLog-pr-83925.yml deleted file mode 100644 index 7698097a45a3a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83925.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Rhials" -delete-after: True -changes: - - bugfix: "Fixes a door in the Fredington Fasting Bear Five Nights and Fnafbears map." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83986.yml b/html/changelogs/AutoChangeLog-pr-83986.yml deleted file mode 100644 index d22b2d9744ab2..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83986.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "GPeckman" -delete-after: True -changes: - - bugfix: "The chaplain altar can once again be buckled to." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83988.yml b/html/changelogs/AutoChangeLog-pr-83988.yml deleted file mode 100644 index 90f0a198682e6..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83988.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "mc-oofert" -delete-after: True -changes: - - bugfix: "wawa centcom interns may actually leave the stationside dock" - - bugfix: "wawa hop office and cap office get keycard auths" - - bugfix: "wawa disposals blast doors work properly" - - bugfix: "wawa med elevator controls on the bottom floor are accessible" - - bugfix: "sci entrance actually has access restrictions" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83989.yml b/html/changelogs/AutoChangeLog-pr-83989.yml deleted file mode 100644 index f6e4deed9933f..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83989.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Vishenka0704" -delete-after: True -changes: - - qol: "Ability to delete characters(yourself)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84006.yml b/html/changelogs/AutoChangeLog-pr-84006.yml deleted file mode 100644 index 54a31eda940c7..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84006.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SyncIt21" -delete-after: True -changes: - - bugfix: "no more runtimes when dragging turfs onto other stuff" - - code_imp: "most actions now properly check for recursive locs & better adjacency" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84067.yml b/html/changelogs/AutoChangeLog-pr-84067.yml deleted file mode 100644 index 2ab2ff078df5a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84067.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SyncIt21" -delete-after: True -changes: - - bugfix: "Techfabs now print 5x cable coil" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84071.yml b/html/changelogs/AutoChangeLog-pr-84071.yml deleted file mode 100644 index 766856faa60c8..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84071.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SyncIt21" -delete-after: True -changes: - - bugfix: "You can move around ui buttons in your action bar" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84074.yml b/html/changelogs/AutoChangeLog-pr-84074.yml deleted file mode 100644 index 3ba774dadd0a4..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84074.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "MTandi" -delete-after: True -changes: - - bugfix: "Made 10 MJ & 20 MJ cells properly correspond to tiers 1 & 2 in lathes." - - image: "Updated cell sprites to correspond to other stock parts of their tiers." - - image: "Updated plasma cell, 500KJ cell and 2.5MJ cell sprites" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84099.yml b/html/changelogs/AutoChangeLog-pr-84099.yml deleted file mode 100644 index da8c2a27966e1..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84099.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "MTandi" -delete-after: True -changes: - - qol: "APC has wires for machinery/lights/environment channels" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84104.yml b/html/changelogs/AutoChangeLog-pr-84104.yml deleted file mode 100644 index 580ba6a7626c3..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84104.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "MTandi" -delete-after: True -changes: - - bugfix: "Fixed techweb app showing wrong designs on Details button click" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84108.yml b/html/changelogs/AutoChangeLog-pr-84108.yml deleted file mode 100644 index f2a3935790775..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84108.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "mc-oofert" -delete-after: True -changes: - - bugfix: "gasping makes sound now" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84109.yml b/html/changelogs/AutoChangeLog-pr-84109.yml deleted file mode 100644 index 8297afe62bb77..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84109.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - bugfix: "mimes can now break their vow while borged or an MMI" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84111.yml b/html/changelogs/AutoChangeLog-pr-84111.yml deleted file mode 100644 index 4b3d8e92bbd00..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84111.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Metekillot" -delete-after: True -changes: - - bugfix: "Sparks will no longer turn areas with wooden furniture or similar into naught but a field of ashes; they no longer ignite furniture, (unless it's made of plasma(?!)) and have a decreasing chance to ignite items bigger than small size." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84116.yml b/html/changelogs/AutoChangeLog-pr-84116.yml deleted file mode 100644 index e11526c56cf50..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84116.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "MTandi" -delete-after: True -changes: - - refactor: "Compressor UI to TypeScript" - - qol: "Simplified Compressor UI layout" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84120.yml b/html/changelogs/AutoChangeLog-pr-84120.yml deleted file mode 100644 index 9c4bcb7fa60f4..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84120.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Rhials" -delete-after: True -changes: - - balance: "The energy bola slowdown has been (roughly) halved, to allow for more retaliation when used on a criminal." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84123.yml b/html/changelogs/AutoChangeLog-pr-84123.yml deleted file mode 100644 index 3d09db30c03b1..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84123.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LT3" -delete-after: True -changes: - - spellcheck: "Melon fruit bowl now comes with a side of foreshadowing for people who want to experience an explosion of flavour" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84124.yml b/html/changelogs/AutoChangeLog-pr-84124.yml deleted file mode 100644 index 7743692b30a7a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84124.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FlufflesTheDog" -delete-after: True -changes: - - bugfix: "limbs that are both robotic and something else can be repaired properly" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84157.yml b/html/changelogs/AutoChangeLog-pr-84157.yml deleted file mode 100644 index 721b7fd36b3ef..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84157.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "MTandi" -delete-after: True -changes: - - bugfix: "Fixed new compressor UI" \ No newline at end of file diff --git a/html/changelogs/archive/2024-06.yml b/html/changelogs/archive/2024-06.yml index c1c7f194b7758..1c03380f14dee 100644 --- a/html/changelogs/archive/2024-06.yml +++ b/html/changelogs/archive/2024-06.yml @@ -843,3 +843,52 @@ by making each tier reduce cooldowns by 25-15-10% for each injector type. jlsnow301: - bugfix: TGUI say will no longer spill your /me contents when you get attacked +2024-06-20: + Absolucy: + - qol: Prettied up the Chemical Analyzer's output in chat, making it easier to read, + especially when scanning multiple things. + Ben10Omintrix: + - rscadd: vendrobes may have mothroaches inside them + - rscadd: mothroaches will now seek out clothes to eat them + FlufflesTheDog: + - bugfix: limbs that are both robotic and something else can be repaired properly + GPeckman: + - bugfix: The chaplain altar can once again be buckled to. + LT3: + - spellcheck: Melon fruit bowl now comes with a side of foreshadowing for people + who want to experience an explosion of flavour + MTandi: + - bugfix: Fixed techweb app showing wrong designs on Details button click + - bugfix: Fixed new compressor UI + - refactor: Compressor UI to TypeScript + - qol: Simplified Compressor UI layout + - bugfix: Made 10 MJ & 20 MJ cells properly correspond to tiers 1 & 2 in lathes. + - image: Updated cell sprites to correspond to other stock parts of their tiers. + - image: Updated plasma cell, 500KJ cell and 2.5MJ cell sprites + - qol: APC has wires for machinery/lights/environment channels + Metekillot: + - bugfix: Sparks will no longer turn areas with wooden furniture or similar into + naught but a field of ashes; they no longer ignite furniture, (unless it's made + of plasma(?!)) and have a decreasing chance to ignite items bigger than small + size. + Rhials: + - bugfix: Fixes a door in the Fredington Fasting Bear Five Nights and Fnafbears + map. + - balance: The energy bola slowdown has been (roughly) halved, to allow for more + retaliation when used on a criminal. + SyncIt21: + - bugfix: Techfabs now print 5x cable coil + - bugfix: no more runtimes when dragging turfs onto other stuff + - code_imp: most actions now properly check for recursive locs & better adjacency + - bugfix: You can move around ui buttons in your action bar + Vishenka0704: + - qol: Ability to delete characters(yourself) + grungussuss: + - bugfix: mimes can now break their vow while borged or an MMI + mc-oofert: + - bugfix: wawa centcom interns may actually leave the stationside dock + - bugfix: wawa hop office and cap office get keycard auths + - bugfix: wawa disposals blast doors work properly + - bugfix: wawa med elevator controls on the bottom floor are accessible + - bugfix: sci entrance actually has access restrictions + - bugfix: gasping makes sound now From 58d6edd8f3da8eabf9946f11ab4d91e373209eef Mon Sep 17 00:00:00 2001 From: r3dj4ck0424 <51569477+r3dj4ck0424@users.noreply.github.com> Date: Thu, 20 Jun 2024 14:31:45 +1200 Subject: [PATCH 17/75] A few minor edits to wawa (#84036) ## About The Pull Request Closes #84022 by adding two tiles under those doors Closes #84021 by moving the fire alarm a few tiles to the left Adds an extra reinforced glass tile to that walkway so the door from the prison showers upper level doesn't send the security guy crashing to the floor below ![Father's Depot Gamma 2024-06-16 180514](https://github.com/tgstation/tgstation/assets/51569477/269d93db-452e-454c-aeb5-8bcf4ec8fe2e) ![Father's Depot Gamma 2024-06-16 180622](https://github.com/tgstation/tgstation/assets/51569477/df8976b7-ad90-4da5-b35a-934d334bc3cd) ## Why It's Good For The Game Closes #84022 and #84021 Makes that specific prison door more useful ## Changelog :cl: fix: puts tiles under the wawa tool storage doors fix: allows you to access a door and a fire alarm on wawa's prison second floor /:cl: --- _maps/map_files/wawastation/wawastation.dmm | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index c02a4b1de4849..693ec5799e2b9 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -9539,6 +9539,7 @@ "duB" = ( /obj/structure/cable, /obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark, /area/station/security/prison) "duS" = ( @@ -22386,10 +22387,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/tile, /area/station/service/bar) -"hWN" = ( -/obj/machinery/firealarm/directional/south, -/turf/open/openspace, -/area/station/security/prison) "hWW" = ( /obj/structure/cable, /obj/effect/landmark/start/atmospheric_technician, @@ -45703,7 +45700,7 @@ /obj/structure/cable, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plating, +/turf/open/floor/iron, /area/station/commons/storage/primary) "qmI" = ( /obj/effect/turf_decal/tile/purple/fourcorners, @@ -46634,6 +46631,10 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/teleporter) +"qFS" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) "qGk" = ( /turf/closed/wall/r_wall, /area/station/hallway/secondary/command) @@ -65281,6 +65282,10 @@ /obj/structure/rack, /turf/open/floor/plating, /area/station/asteroid) +"xbr" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/glass/reinforced, +/area/station/security/prison) "xbs" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -68155,7 +68160,7 @@ name = "Primary Tool Storage" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, +/turf/open/floor/iron, /area/station/commons/storage/primary) "ydC" = ( /obj/effect/decal/cleanable/dirt/dust, @@ -151220,9 +151225,9 @@ hHw uRG oyP dAq +xbr +qFS wSc -rwW -hWN jOV vxX vxX From ba61eb7f79460d8fcc00e97d74221bc716951de9 Mon Sep 17 00:00:00 2001 From: lessthanthree <83487515+lessthnthree@users.noreply.github.com> Date: Wed, 19 Jun 2024 19:32:09 -0700 Subject: [PATCH 18/75] Fixes Icebox NanoDrug airlock access (#84027) ## About The Pull Request Fixes the access for the westmost airlock in the medical hallway (the NanoDrug.) The room should have general med with the inner door being restricted to chemistry, same as the East door. ## Why It's Good For The Game Consistent airlock access into a room. ## Changelog :cl: LT3 fix: Fixed paramedics not having access to the Icebox NanoDrug using the west airlock /:cl: --- _maps/map_files/IceBoxStation/IceBoxStation.dmm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 984cf0ca1298e..644eea8dea0b3 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -23048,7 +23048,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, /obj/effect/turf_decal/tile/yellow/full, /turf/open/floor/iron/large, /area/station/medical/treatment_center) @@ -47295,7 +47295,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry, +/obj/effect/mapping_helpers/airlock/access/all/medical/general, /turf/open/floor/iron/smooth, /area/station/maintenance/department/medical/central) "oiD" = ( From 9ddbe800c2e027a66dbc94bd2dce0fc92298c999 Mon Sep 17 00:00:00 2001 From: Goat <126099705+Goat-Real@users.noreply.github.com> Date: Wed, 19 Jun 2024 20:32:47 -0600 Subject: [PATCH 19/75] Icebox raptor pen radiation proofing (#84055) ## About The Pull Request The raptor pen was using surface areas instead of the proper underground area tiles ## Why It's Good For The Game Shouldn't be hit by radiation since it's not directly part of the station or surface. fix #83917 ## Changelog :cl: Goat fix: Icebox's raptor den is now lined with asbestos and lead and no longer gets hit with radiation. /:cl: --- .../map_files/IceBoxStation/IceBoxStation.dmm | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 644eea8dea0b3..5092980f2699b 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -3845,7 +3845,7 @@ "bil" = ( /obj/structure/railing/wooden_fence, /turf/open/misc/hay/icemoon, -/area/icemoon/surface) +/area/icemoon/underground/explored) "bin" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 @@ -6355,7 +6355,7 @@ dir = 1 }, /turf/open/misc/hay/icemoon, -/area/icemoon/surface) +/area/icemoon/underground/explored) "bPV" = ( /obj/item/kirbyplants/random/dead, /turf/open/floor/plating/snowed/icemoon, @@ -11342,7 +11342,7 @@ /area/icemoon/surface/outdoors/nospawn) "dlu" = ( /turf/closed/wall/mineral/wood/nonmetal, -/area/icemoon/surface) +/area/icemoon/underground/explored) "dlB" = ( /obj/structure/table/wood, /obj/item/storage/photo_album/chapel, @@ -20638,7 +20638,7 @@ dir = 5 }, /turf/open/misc/hay/icemoon, -/area/icemoon/surface) +/area/icemoon/underground/explored) "ghE" = ( /obj/structure/disposalpipe/segment, /obj/machinery/camera/directional/west{ @@ -26929,7 +26929,7 @@ dir = 6 }, /turf/open/misc/hay/icemoon, -/area/icemoon/surface) +/area/icemoon/underground/explored) "idN" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/machinery/door/window/brigdoor/left/directional/south{ @@ -30551,7 +30551,7 @@ dir = 9 }, /turf/open/misc/hay/icemoon, -/area/icemoon/surface) +/area/icemoon/underground/explored) "jkN" = ( /obj/effect/spawner/random/entertainment/arcade, /obj/machinery/status_display/ai/directional/north, @@ -36851,7 +36851,7 @@ /obj/structure/table/wood, /obj/item/flashlight/lantern/on, /turf/open/misc/hay/icemoon, -/area/icemoon/surface) +/area/icemoon/underground/explored) "kZa" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40539,7 +40539,7 @@ dir = 10 }, /turf/open/misc/hay/icemoon, -/area/icemoon/surface) +/area/icemoon/underground/explored) "mhq" = ( /obj/structure/closet, /obj/effect/spawner/random/maintenance, @@ -43322,7 +43322,7 @@ }, /obj/item/soap/deluxe, /turf/open/misc/hay/icemoon, -/area/icemoon/surface) +/area/icemoon/underground/explored) "ncB" = ( /obj/machinery/door/airlock/security/glass{ name = "Brig Walkway" @@ -45443,7 +45443,7 @@ "nEI" = ( /obj/item/flashlight/lantern/on, /turf/open/misc/hay/icemoon, -/area/icemoon/surface) +/area/icemoon/underground/explored) "nEV" = ( /obj/machinery/vending/wardrobe/sec_wardrobe, /obj/structure/cable, @@ -53710,7 +53710,7 @@ "qbM" = ( /obj/structure/ore_container/food_trough/raptor_trough, /turf/open/misc/hay/icemoon, -/area/icemoon/surface) +/area/icemoon/underground/explored) "qbO" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58945,7 +58945,7 @@ }, /obj/item/raptor_dex, /turf/open/misc/hay/icemoon, -/area/icemoon/surface) +/area/icemoon/underground/explored) "rAr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59334,7 +59334,7 @@ dir = 4 }, /turf/open/misc/hay/icemoon, -/area/icemoon/surface) +/area/icemoon/underground/explored) "rEp" = ( /obj/structure/table, /obj/item/hand_labeler, @@ -74902,7 +74902,7 @@ /area/station/service/chapel) "wvu" = ( /turf/open/misc/hay/icemoon, -/area/icemoon/surface) +/area/icemoon/underground/explored) "wvv" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -78456,7 +78456,7 @@ dir = 8 }, /turf/open/misc/hay/icemoon, -/area/icemoon/surface) +/area/icemoon/underground/explored) "xxI" = ( /obj/machinery/airalarm/directional/north, /obj/item/kirbyplants/random, From b229a77f0a8f3cd184bf0699217549c69b9d44ee Mon Sep 17 00:00:00 2001 From: projectkepler-RU <99981766+projectkepler-ru@users.noreply.github.com> Date: Thu, 20 Jun 2024 09:33:24 +0700 Subject: [PATCH 20/75] Fix access in the wawa station bridge and replace the empty medkit (#83778) ## About The Pull Request closes #83772 we really should add a unit test to make sure the access on door or whatever actually exist ## Why It's Good For The Game closes #83772 ## Changelog :cl: fix: Wawastation bridge now has the correct access on their suit storage and medkit now actually starts filled /:cl: --- _maps/map_files/wawastation/wawastation.dmm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index 693ec5799e2b9..91877afd2c8e8 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -59707,7 +59707,7 @@ /area/station/medical/virology) "vay" = ( /obj/structure/table/reinforced, -/obj/item/storage/medkit, +/obj/item/storage/medkit/regular, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 1 }, @@ -61857,7 +61857,7 @@ "vQf" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/machinery/door/window/brigdoor/right/directional/east{ - req_access = list("bridge") + req_access = list("command") }, /obj/effect/turf_decal/bot, /obj/machinery/light/small/dim/directional/west, From be71922bd0f13c22be727330809b5e2ad3c57808 Mon Sep 17 00:00:00 2001 From: jimmyl <70376633+mc-oofert@users.noreply.github.com> Date: Thu, 20 Jun 2024 04:34:24 +0200 Subject: [PATCH 21/75] every engineering lobby starts with a flatpacked flatpacker and multitool (#84107) ## About The Pull Request every engineering lobby starts with a flatpacked flatpacker and multitool ## Why It's Good For The Game flatpackers should be roundstart and they were already but with the new techtree theyre locked behind exp tools this makes them roundstart as intended but limited in quantity per new tech tree, and something traitors could destroy if they wanted ## Changelog :cl: add: every engineering lobby starts with a flatpacked flatpacker and multitool /:cl: --- _maps/map_files/Birdshot/birdshot.dmm | 17 ++++++++----- .../map_files/Deltastation/DeltaStation2.dmm | 9 +++++++ .../map_files/IceBoxStation/IceBoxStation.dmm | 9 +++++-- _maps/map_files/MetaStation/MetaStation.dmm | 13 +++++++--- _maps/map_files/NorthStar/north_star.dmm | 14 ++++++++++- _maps/map_files/tramstation/tramstation.dmm | 7 ++++++ _maps/map_files/wawastation/wawastation.dmm | 9 ++++++- code/game/machinery/flatpacker.dm | 24 ++++++++++++++----- 8 files changed, 83 insertions(+), 19 deletions(-) diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index e26e63400333f..86dd2443803c4 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -12780,6 +12780,9 @@ /area/station/security/checkpoint/science) "fnm" = ( /obj/structure/filingcabinet/chestdrawer, +/obj/item/book/manual/wiki/engineering_guide{ + pixel_y = 6 + }, /turf/open/floor/iron/grimy, /area/station/engineering/main) "fnw" = ( @@ -17534,10 +17537,6 @@ /obj/structure/table/greyscale, /obj/item/clothing/gloves/color/yellow, /obj/item/wrench, -/obj/item/multitool{ - pixel_x = 4; - pixel_y = 5 - }, /turf/open/floor/iron/grimy, /area/station/engineering/main) "gUC" = ( @@ -29651,8 +29650,14 @@ pixel_y = 4 }, /obj/machinery/light/small/directional/south, -/obj/item/book/manual/wiki/engineering_guide{ - pixel_y = 4 +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/multitool{ + pixel_x = 7; + pixel_y = -2 }, /turf/open/floor/iron/grimy, /area/station/engineering/main) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 57ff65acf22af..f399c25d3b148 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -78577,6 +78577,15 @@ /obj/structure/cable, /obj/machinery/firealarm/directional/east, /obj/effect/decal/cleanable/dirt, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/multitool{ + pixel_x = 8 + }, +/obj/structure/table, /turf/open/floor/iron, /area/station/engineering/storage_shared) "tFG" = ( diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 5092980f2699b..09525a5fa06ec 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -74888,8 +74888,13 @@ /obj/effect/turf_decal/siding/yellow/corner, /obj/machinery/status_display/evac/directional/south, /obj/structure/table, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/spawner/random/trash/cigbutt, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -5 + }, +/obj/item/multitool{ + pixel_x = 8 + }, /turf/open/floor/iron, /area/station/engineering/lobby) "wve" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index dc42fb3fe9ce6..24c017ab71bd5 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -9215,6 +9215,9 @@ dir = 4 }, /obj/machinery/light/small/directional/north, +/obj/item/lightreplacer{ + pixel_y = 7 + }, /turf/open/floor/iron/dark/corner{ dir = 1 }, @@ -58915,13 +58918,17 @@ "uJz" = ( /obj/effect/turf_decal/bot, /obj/structure/rack, -/obj/item/lightreplacer{ - pixel_y = 7 - }, /obj/machinery/status_display/evac/directional/east, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -5 + }, +/obj/item/multitool{ + pixel_x = 8 + }, /turf/open/floor/iron/checker, /area/station/engineering/storage_shared) "uJB" = ( diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index 3c8cf0e7cb56c..0f9faf9338b6c 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -53022,7 +53022,19 @@ /obj/effect/turf_decal/trimline/yellow/corner{ dir = 4 }, -/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 8; + pixel_y = -4 + }, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -6; + pixel_y = 5 + }, +/obj/item/multitool{ + pixel_x = 7; + pixel_y = 10 + }, /turf/open/floor/iron/corner{ dir = 4 }, diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index b0c8d17c83315..4015dbf2ad35b 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -49386,6 +49386,13 @@ }, /obj/structure/cable, /obj/structure/table, +/obj/item/multitool{ + pixel_x = 8 + }, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -5 + }, /turf/open/floor/iron, /area/station/engineering/break_room) "qwq" = ( diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index 91877afd2c8e8..17929ae134bf8 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -6901,7 +6901,13 @@ /area/station/cargo/storage) "cAy" = ( /obj/structure/table/glass, -/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/obj/item/flatpack{ + board = /obj/item/circuitboard/machine/flatpacker; + pixel_x = -5 + }, +/obj/item/multitool{ + pixel_x = 8 + }, /turf/open/floor/iron, /area/station/engineering/lobby) "cAC" = ( @@ -39890,6 +39896,7 @@ "omE" = ( /obj/structure/table/glass, /obj/effect/spawner/random/food_or_drink/snack, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, /turf/open/floor/iron, /area/station/engineering/lobby) "omL" = ( diff --git a/code/game/machinery/flatpacker.dm b/code/game/machinery/flatpacker.dm index 9468dacc24c56..03382dce8d81e 100644 --- a/code/game/machinery/flatpacker.dm +++ b/code/game/machinery/flatpacker.dm @@ -242,7 +242,7 @@ /obj/item/flatpack name = "flatpack" - desc = "A box containing a compacted packed machine. Use multitool to deploy." + desc = "A box containing a compactly packed machine. Use multitool to deploy." icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "flatpack" w_class = WEIGHT_CLASS_HUGE //cart time @@ -253,13 +253,25 @@ /// The board we deploy var/obj/item/circuitboard/machine/board -/obj/item/flatpack/Initialize(mapload, obj/item/circuitboard/machine/board) +/obj/item/flatpack/Initialize(mapload, obj/item/circuitboard/machine/new_board) . = ..() - if(!isnull(board)) - src.board = board // i got board + var/static/list/tool_behaviors + if(!tool_behaviors) + tool_behaviors = string_assoc_nested_list(list( + TOOL_MULTITOOL = list( + SCREENTIP_CONTEXT_LMB = "Deploy", + ), + )) + AddElement(/datum/element/contextual_screentip_tools, tool_behaviors) + if(isnull(board) && isnull(new_board)) + return INITIALIZE_HINT_QDEL //how + + board = !isnull(new_board) ? new_board : new board(src) // i got board + if(board.loc != src) board.forceMove(src) - var/obj/machinery/build = initial(board.build_path) - name += " ([initial(build.name)])" + var/obj/machinery/build = initial(board.build_path) + name += " ([initial(build.name)])" + /obj/item/flatpack/Destroy() QDEL_NULL(board) From e313ee383f766fb692efe15fb9d8a4972a73cd8f Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 20 Jun 2024 14:37:36 +1200 Subject: [PATCH 22/75] Automatic changelog for PR #84036 [ci skip] --- html/changelogs/AutoChangeLog-pr-84036.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84036.yml diff --git a/html/changelogs/AutoChangeLog-pr-84036.yml b/html/changelogs/AutoChangeLog-pr-84036.yml new file mode 100644 index 0000000000000..1719aafa28b22 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84036.yml @@ -0,0 +1,5 @@ +author: "r3dj4ck0424" +delete-after: True +changes: + - bugfix: "puts tiles under the wawa tool storage doors" + - bugfix: "allows you to access a door and a fire alarm on wawa's prison second floor" \ No newline at end of file From 09fe8194df4c10fa6fc2e99b909c7c45a10cf9fa Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 20 Jun 2024 14:37:57 +1200 Subject: [PATCH 23/75] Automatic changelog for PR #84027 [ci skip] --- html/changelogs/AutoChangeLog-pr-84027.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84027.yml diff --git a/html/changelogs/AutoChangeLog-pr-84027.yml b/html/changelogs/AutoChangeLog-pr-84027.yml new file mode 100644 index 0000000000000..9af71299e44b8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84027.yml @@ -0,0 +1,4 @@ +author: "LT3" +delete-after: True +changes: + - bugfix: "Fixed paramedics not having access to the Icebox NanoDrug using the west airlock" \ No newline at end of file From 23c71cffe427d5963508fa5347571b44ce153e91 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 20 Jun 2024 14:37:58 +1200 Subject: [PATCH 24/75] Automatic changelog for PR #84055 [ci skip] --- html/changelogs/AutoChangeLog-pr-84055.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84055.yml diff --git a/html/changelogs/AutoChangeLog-pr-84055.yml b/html/changelogs/AutoChangeLog-pr-84055.yml new file mode 100644 index 0000000000000..0ae2635f1ca8c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84055.yml @@ -0,0 +1,4 @@ +author: "Goat" +delete-after: True +changes: + - bugfix: "Icebox's raptor den is now lined with asbestos and lead and no longer gets hit with radiation." \ No newline at end of file From 9512265649588c4df9d6f8a53ff5b2627f838770 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 20 Jun 2024 14:38:17 +1200 Subject: [PATCH 25/75] Automatic changelog for PR #83778 [ci skip] --- html/changelogs/AutoChangeLog-pr-83778.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83778.yml diff --git a/html/changelogs/AutoChangeLog-pr-83778.yml b/html/changelogs/AutoChangeLog-pr-83778.yml new file mode 100644 index 0000000000000..8d8d34e39104f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83778.yml @@ -0,0 +1,4 @@ +author: "projectkepler-ru" +delete-after: True +changes: + - bugfix: "Wawastation bridge now has the correct access on their suit storage and medkit now actually starts filled" \ No newline at end of file From a071f97732438bee73e98a467467b8c1310155e3 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 20 Jun 2024 14:38:37 +1200 Subject: [PATCH 26/75] Automatic changelog for PR #84107 [ci skip] --- html/changelogs/AutoChangeLog-pr-84107.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84107.yml diff --git a/html/changelogs/AutoChangeLog-pr-84107.yml b/html/changelogs/AutoChangeLog-pr-84107.yml new file mode 100644 index 0000000000000..1dda24aba25b0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84107.yml @@ -0,0 +1,4 @@ +author: "mc-oofert" +delete-after: True +changes: + - rscadd: "every engineering lobby starts with a flatpacked flatpacker and multitool" \ No newline at end of file From 5d413f4bec24ddf1d6ad718e3c40d9e7d3151857 Mon Sep 17 00:00:00 2001 From: Xander3359 <66163761+Xander3359@users.noreply.github.com> Date: Wed, 19 Jun 2024 22:48:19 -0400 Subject: [PATCH 27/75] Fix rust heretic not being able to rust walls/floors (#84041) ## About The Pull Request Fix rust heretic not being able to rust walls/floors --- code/game/turfs/turf.dm | 1 - .../spells/spell_types/touch/_touch.dm | 35 ++++++++++++++----- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 515f1513ac754..565adb22dbc00 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -568,7 +568,6 @@ GLOBAL_LIST_EMPTY(station_turfs) if(EXPLODE_LIGHT) SSexplosions.low_mov_atom += movable_thing - /turf/narsie_act(force, ignore_mobs, probability = 20) . = (prob(probability) || force) for(var/I in src) diff --git a/code/modules/spells/spell_types/touch/_touch.dm b/code/modules/spells/spell_types/touch/_touch.dm index 5045ea6522092..1ed5ce49511dd 100644 --- a/code/modules/spells/spell_types/touch/_touch.dm +++ b/code/modules/spells/spell_types/touch/_touch.dm @@ -127,7 +127,8 @@ /datum/action/cooldown/spell/touch/proc/register_hand_signals() SHOULD_CALL_PARENT(TRUE) - RegisterSignal(attached_hand, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_hand_hit)) + RegisterSignal(attached_hand, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(on_hand_hit)) + RegisterSignal(attached_hand, COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY, PROC_REF(on_hand_hit_secondary)) RegisterSignal(attached_hand, COMSIG_ITEM_DROPPED, PROC_REF(on_hand_dropped)) RegisterSignal(attached_hand, COMSIG_QDELETING, PROC_REF(on_hand_deleted)) @@ -140,7 +141,8 @@ SHOULD_CALL_PARENT(TRUE) UnregisterSignal(attached_hand, list( - COMSIG_ITEM_AFTERATTACK, + COMSIG_ITEM_INTERACTING_WITH_ATOM, + COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY, COMSIG_ITEM_DROPPED, COMSIG_QDELETING, COMSIG_ITEM_OFFER_TAKEN, @@ -159,21 +161,34 @@ return ..() /** - * Signal proc for [COMSIG_ITEM_AFTERATTACK] from our attached hand. + * Signal proc for [COMSIG_ITEM_INTERACTING_WITH_ATOM] from our attached hand. * * When our hand hits an atom, we can cast do_hand_hit() on them. */ -/datum/action/cooldown/spell/touch/proc/on_hand_hit(datum/source, atom/victim, mob/caster, click_parameters) +/datum/action/cooldown/spell/touch/proc/on_hand_hit(datum/source, mob/living/caster, atom/target, click_parameters) SIGNAL_HANDLER SHOULD_NOT_OVERRIDE(TRUE) // DEFINITELY don't put effects here, put them in cast_on_hand_hit - if(!can_hit_with_hand(victim, caster)) + if(!can_hit_with_hand(target, caster)) return - if(LAZYACCESS(params2list(click_parameters), RIGHT_CLICK)) - INVOKE_ASYNC(src, PROC_REF(do_secondary_hand_hit), source, victim, caster) - else - INVOKE_ASYNC(src, PROC_REF(do_hand_hit), source, victim, caster) + INVOKE_ASYNC(src, PROC_REF(do_hand_hit), source, target, caster) + return ITEM_INTERACT_SUCCESS + +/** + * Signal proc for [COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY] from our attached hand. + * + * When our hand hits an atom, we can cast do_hand_hit() on them. + */ +/datum/action/cooldown/spell/touch/proc/on_hand_hit_secondary(datum/source, mob/living/caster, atom/target, click_parameters) + SIGNAL_HANDLER + SHOULD_NOT_OVERRIDE(TRUE) + + if(!can_hit_with_hand(target, caster)) + return + + INVOKE_ASYNC(src, PROC_REF(do_secondary_hand_hit), source, target, caster) + return ITEM_INTERACT_SUCCESS /// Checks if the passed victim can be cast on by the caster. /datum/action/cooldown/spell/touch/proc/can_hit_with_hand(atom/victim, mob/caster) @@ -206,6 +221,7 @@ log_combat(caster, victim, "cast the touch spell [name] on", hand) spell_feedback(caster) + caster.do_attack_animation(victim) remove_hand(caster) /** @@ -223,6 +239,7 @@ if(SECONDARY_ATTACK_CONTINUE_CHAIN) log_combat(caster, victim, "cast the touch spell [name] on", hand, "(secondary / alt cast)") spell_feedback(caster) + caster.do_attack_animation(victim) remove_hand(caster) // Call normal will call the normal cast proc From b55d3fc87de65137f37fd1ea228581fcb9f7a842 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 20 Jun 2024 14:48:54 +1200 Subject: [PATCH 28/75] Automatic changelog for PR #84041 [ci skip] --- html/changelogs/AutoChangeLog-pr-84041.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84041.yml diff --git a/html/changelogs/AutoChangeLog-pr-84041.yml b/html/changelogs/AutoChangeLog-pr-84041.yml new file mode 100644 index 0000000000000..f2f0bed84127c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84041.yml @@ -0,0 +1,4 @@ +author: "Xander3359" +delete-after: True +changes: + - bugfix: "Fix rust heretic being unable to rust walls or floors" \ No newline at end of file From 63a31c92468cc59d5c80c2b45a7469df3e2509a8 Mon Sep 17 00:00:00 2001 From: jimmyl <70376633+mc-oofert@users.noreply.github.com> Date: Thu, 20 Jun 2024 07:01:46 +0200 Subject: [PATCH 29/75] [no gbp] wawa floor lights on elevators no longer get destroyed + allows paramed to enter the protolathe room (#83913) ## About The Pull Request wawa floor lights on elevators no longer get destroyed + fixes engi entry wrong access on door ![image](https://github.com/tgstation/tgstation/assets/70376633/bdea7bbe-59ac-4db7-92f4-7066a39ca871) ## Why It's Good For The Game fixes #83888 fixes #83889 ( i think?) ## Changelog :cl: fix: fixed wrong access on one door on wawastation and also made lights on elevators not break (On Wawastation) /:cl: --- _maps/map_files/wawastation/wawastation.dmm | 22 ++++++++------------- code/modules/power/lighting/light.dm | 13 +++++++++--- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index 17929ae134bf8..8bec8ecfae0fd 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -9214,7 +9214,7 @@ /area/station/medical/virology) "dpf" = ( /obj/structure/transport/linear/public, -/obj/machinery/light/floor, +/obj/machinery/light/floor/transport, /turf/open/floor/plating/elevatorshaft, /area/station/medical/treatment_center) "dpj" = ( @@ -16057,9 +16057,7 @@ /area/station/security/breakroom) "fLM" = ( /obj/structure/transport/linear/public, -/obj/machinery/light/floor{ - _status_traits = list("underfloor" = list("innate")) - }, +/obj/machinery/light/floor/transport, /turf/open/floor/plating/elevatorshaft, /area/station/cargo/storage) "fLU" = ( @@ -35473,6 +35471,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/open/floor/iron, /area/station/engineering/lobby) "mBY" = ( @@ -49264,7 +49263,6 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "ryG" = ( -/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, /obj/structure/cable, /obj/machinery/door/airlock/engineering/glass{ name = "Break Room" @@ -49273,6 +49271,8 @@ /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/engineering/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/open/floor/iron, /area/station/engineering/break_room) "ryP" = ( @@ -60993,13 +60993,6 @@ /obj/effect/turf_decal/box, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) -"vBA" = ( -/obj/machinery/light/floor{ - _status_traits = list("underfloor" = list("innate")) - }, -/obj/structure/transport/linear/public, -/turf/open/floor/plating/elevatorshaft, -/area/station/cargo/storage) "vBD" = ( /obj/structure/chair/office/light{ dir = 1 @@ -61606,6 +61599,7 @@ /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, /turf/open/floor/iron, /area/station/engineering/break_room) "vMN" = ( @@ -82693,8 +82687,8 @@ dgR uPg bui yit -yit dpf +yit dKw miD dFY @@ -83678,7 +83672,7 @@ uDB uDB uDB sdc -vBA +fLM soZ jCX jCX diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm index 43713cc49ae0c..9d3eb222fb843 100644 --- a/code/modules/power/lighting/light.dm +++ b/code/modules/power/lighting/light.dm @@ -77,12 +77,13 @@ var/fire_power = 0.5 ///The Light colour to use when working in fire alarm status var/fire_colour = COLOR_FIRE_LIGHT_RED - ///Power usage - W per unit of luminosity var/power_consumption_rate = 20 + ///break if moved, if false also makes it ignore if the wall its on breaks + var/break_if_moved = TRUE /obj/machinery/light/Move() - if(status != LIGHT_BROKEN) + if(status != LIGHT_BROKEN && break_if_moved) break_light_tube(TRUE) return ..() @@ -117,7 +118,8 @@ RegisterSignal(src, COMSIG_LIGHT_EATER_ACT, PROC_REF(on_light_eater)) RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) AddElement(/datum/element/atmos_sensitive, mapload) - find_and_hang_on_wall(custom_drop_callback = CALLBACK(src, PROC_REF(knock_down))) + if(break_if_moved) + find_and_hang_on_wall(custom_drop_callback = CALLBACK(src, PROC_REF(knock_down))) /obj/machinery/light/post_machine_initialize() . = ..() @@ -733,3 +735,8 @@ /obj/machinery/light/floor/broken status = LIGHT_BROKEN icon_state = "floor-broken" + +/obj/machinery/light/floor/transport + name = "transport light" + break_if_moved = FALSE + layer = BELOW_OPEN_DOOR_LAYER From 4945059b0472f3a8edc2649b6d86f474806ef6e7 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 20 Jun 2024 17:02:03 +1200 Subject: [PATCH 30/75] Automatic changelog for PR #83913 [ci skip] --- html/changelogs/AutoChangeLog-pr-83913.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83913.yml diff --git a/html/changelogs/AutoChangeLog-pr-83913.yml b/html/changelogs/AutoChangeLog-pr-83913.yml new file mode 100644 index 0000000000000..e080f9e5aeb4f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83913.yml @@ -0,0 +1,4 @@ +author: "mc-oofert" +delete-after: True +changes: + - bugfix: "fixed wrong access on one door on wawastation and also made lights on elevators not break (On Wawastation)" \ No newline at end of file From 4799324416c8ce9a0061efc6132b70ceab27a5c7 Mon Sep 17 00:00:00 2001 From: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Date: Thu, 20 Jun 2024 01:12:05 -0400 Subject: [PATCH 31/75] Mild QOL updates to vending machine-cargo interactions. (#83933) ## About The Pull Request This Pull makes a few minor improvements to the features I added with vendor cargo (#81582). Changes are as follows: * Vending machines, when restocked with a refill pack and while containing a number of credits, will play a cash register sound to alert you that there's a payout associated with the action. * The Vending Restock app now works on all modular computer platforms, as opposed to just laptops and tablets. * This is actually hilarious because I even made a screen icon for modular consoles, and it's just been unused ever since merge. * The "cargochat" cargo modular console now has the vendor refill app pre-installed. * Vending machines, when determining their missing inventory during the associated station trait, now adds from 1-5 credits per missing item, up from 0-1. The original number was far too low to feel like a strong incentive based on feedback I'd received, and while still lower than providing a flat percentage of the missing item specifically (we ran some numbers on this a few months back), it should at least incentivize players to keep the station better stocked during regular rounds. Also, the UI now shows a difference between if all vending machines are stocked or not. ![image](https://github.com/tgstation/tgstation/assets/41715314/7ea762a6-25d0-4119-87cc-91c1691ba01d) ## Why It's Good For The Game Most of these are just interfacing and ease of use improvements, as having the app pre-installed in a place where players can actually make some use of it's contents should help to improve it's versatility with regards to the restocking app. Audio feedback is always good. In terms of the balance tweak on the stored value on vending machines, basically it's a way to better incentivize it as an option on the station and to better encourage players to do these kinds of minor upkeep tasks for the crew. ## Changelog :cl: qol: Vending machines now give audio feedback when you restock a vending refill and get a payout. qol: The Restock tracker NTOS app for tracking vending machine contents now works on all consoles, and comes pre-installed on the cargochat cargo computers. balance: Vending machines now offer a bit more credits when missing contents at the start of a round after getting restocked. /:cl: --------- Co-authored-by: Jacquerel Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> --- .../computers/machinery/console_presets.dm | 1 + .../file_system/programs/restock_tracker.dm | 2 +- code/modules/vending/_vending.dm | 3 ++- tgui/packages/tgui/interfaces/RestockTracker.jsx | 10 ++++++++++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm index 0ec80da4bbb29..ad87960603c35 100644 --- a/code/modules/modular_computers/computers/machinery/console_presets.dm +++ b/code/modules/modular_computers/computers/machinery/console_presets.dm @@ -137,6 +137,7 @@ starting_programs += /datum/computer_file/program/bounty_board starting_programs += /datum/computer_file/program/budgetorders starting_programs += /datum/computer_file/program/shipping + starting_programs += /datum/computer_file/program/restock_tracker /obj/machinery/modular_computer/preset/cargochat/cargo/setup_starting_software() var/datum/computer_file/program/chatclient/chatprogram = cpu.find_file_by_name("ntnrc_client") diff --git a/code/modules/modular_computers/file_system/programs/restock_tracker.dm b/code/modules/modular_computers/file_system/programs/restock_tracker.dm index 46462c0c6b531..8f2174ce97bbd 100644 --- a/code/modules/modular_computers/file_system/programs/restock_tracker.dm +++ b/code/modules/modular_computers/file_system/programs/restock_tracker.dm @@ -5,7 +5,7 @@ program_open_overlay = "restock" extended_desc = "Nanotrasen IoT network listing all the vending machines found on station, and how well stocked they are each. Profitable!" program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET - can_run_on_flags = PROGRAM_LAPTOP | PROGRAM_PDA + can_run_on_flags = PROGRAM_ALL size = 4 program_icon = "cash-register" tgui_id = "NtosRestock" diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 76d193c80e87f..ed6d085abe593 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -271,7 +271,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) */ var/max_amount = rand(CEILING(product_record.amount * 0.5, 1), product_record.amount) product_record.amount = rand(0, max_amount) - credits_contained += rand(0, 1) //randomly add a few credits to the machine to make it look like it's been used, proportional to the amount missing. + credits_contained += rand(1, 5) //randomly add a few credits to the machine to make it look like it's been used, proportional to the amount missing. if(tiltable && prob(6)) // 1 in 17 chance to start tilted (as an additional hint to the station trait behind it) INVOKE_ASYNC(src, PROC_REF(tilt), loc) credits_contained = 0 // If it's tilted, it's been looted, so no credits for you. @@ -1652,6 +1652,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) return var/credits_to_remove = min(CREDITS_DUMP_THRESHOLD, round(credits_contained)) var/obj/item/holochip/holochip = new(loc, credits_to_remove) + playsound(src, 'sound/effects/cashregister.ogg', 40, TRUE) credits_contained = max(0, credits_contained - credits_to_remove) SSblackbox.record_feedback("amount", "vending machine looted", holochip.credits) diff --git a/tgui/packages/tgui/interfaces/RestockTracker.jsx b/tgui/packages/tgui/interfaces/RestockTracker.jsx index 7df606adffcd3..ab6f1d012edf0 100644 --- a/tgui/packages/tgui/interfaces/RestockTracker.jsx +++ b/tgui/packages/tgui/interfaces/RestockTracker.jsx @@ -81,7 +81,17 @@ export const RestockTracker = (props) => { ))} + {vending_list.length === 0 && }
); }; + +export const RestockTrackerFull = (props) => { + const { data } = useBackend(); + return ( +
+ All vending machines stocked! +
+ ); +}; From d184dfaf0b5f984ed455f9ae563a50824c5a9fa1 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 20 Jun 2024 17:28:12 +1200 Subject: [PATCH 32/75] Automatic changelog for PR #83933 [ci skip] --- html/changelogs/AutoChangeLog-pr-83933.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83933.yml diff --git a/html/changelogs/AutoChangeLog-pr-83933.yml b/html/changelogs/AutoChangeLog-pr-83933.yml new file mode 100644 index 0000000000000..d64620d533ad1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83933.yml @@ -0,0 +1,6 @@ +author: "ArcaneMusic" +delete-after: True +changes: + - qol: "Vending machines now give audio feedback when you restock a vending refill and get a payout." + - qol: "The Restock tracker NTOS app for tracking vending machine contents now works on all consoles, and comes pre-installed on the cargochat cargo computers." + - balance: "Vending machines now offer a bit more credits when missing contents at the start of a round after getting restocked." \ No newline at end of file From 4739cedebc850752cef6add1d60ec2ade7e53d49 Mon Sep 17 00:00:00 2001 From: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Date: Thu, 20 Jun 2024 22:58:21 +1000 Subject: [PATCH 33/75] Event Horizon Anti-Existential Beam Rifle. The ultimate conclusion to the arms race and the sniper's art. (#83934) ## About The Pull Request Replaces the Particle Acceleration Rifle, or the Beam Marksman Rifle, with the Event Horizon Anti-Existential Beam Rifle. In short, it shoots black holes. It takes five cores to make. It pretty much kills everything you point it at and their immediate bystanders as well. You can do this from the relative safety of a whole four screens away thanks to it having a scope. There can only ever be one vortex anomaly made in the round. The recipe, however, always requires the maximum number of cores that can be made in a round. If the number goes up for some reason (maybe someone wants to add more vortex items), so does the total number of cores needed to make an AEBR. ## Why It's Good For The Game Firstly; the beam rifle? Awful. Jank code. Bad performance. Ancient balancing considerations. Just too strong to bring out regularly against specifically blobs, but completely fucking useless against anyone else. So I'm hitting all these problems at once. I reduced a 600 line file to less than 60. I've removed all that bad code. I've also made it specifically unable to combat blobs at all because singularities send blobs off to safety. Secondly; this is maybe the first example of 'more cores = bigger power'. The rifle was already utterly trash to have around, and I just didn't think the way it worked currently could really excite anyone enough to go on a big ol' quest to get it. Solution? You will cause a shuttle call if you get this weapon. ## Changelog :cl: add: Replaces the Particle Acceleration Rifle with the Event Horizon anti-existential beam rifle. It shoots black holes. You can make this in-game. That's right, YOU! balance: Only one vortex anomaly can be made in a round. /:cl: --------- Co-authored-by: Jacquerel --- _maps/deathmatch/arena_station.dmm | 2 +- _maps/virtual_domains/xeno_nest.dmm | 2 +- code/__DEFINES/research/anomalies.dm | 2 +- .../datums/components/crafting/guncrafting.dm | 4 +- .../components/crafting/ranged_weapon.dm | 15 +- .../datums/storage/subtypes/bag_of_holding.dm | 2 +- code/modules/power/cell.dm | 15 - .../{boh_tear.dm => reality_tear.dm} | 35 +- code/modules/projectiles/guns/energy.dm | 17 +- .../projectiles/guns/energy/beam_rifle.dm | 584 +----------------- .../research/designs/weapon_designs.dm | 5 +- tgstation.dme | 2 +- 12 files changed, 86 insertions(+), 599 deletions(-) rename code/modules/power/singularity/{boh_tear.dm => reality_tear.dm} (59%) diff --git a/_maps/deathmatch/arena_station.dmm b/_maps/deathmatch/arena_station.dmm index c7654810360e1..50089df45e8a0 100644 --- a/_maps/deathmatch/arena_station.dmm +++ b/_maps/deathmatch/arena_station.dmm @@ -930,7 +930,7 @@ /area/deathmatch) "LY" = ( /obj/structure/closet/secure_closet, -/obj/item/gun/energy/beam_rifle, +/obj/item/gun/energy/xray, /turf/open/indestructible/vault, /area/deathmatch) "Mc" = ( diff --git a/_maps/virtual_domains/xeno_nest.dmm b/_maps/virtual_domains/xeno_nest.dmm index 907436758c781..65f183d69c401 100644 --- a/_maps/virtual_domains/xeno_nest.dmm +++ b/_maps/virtual_domains/xeno_nest.dmm @@ -140,7 +140,7 @@ /area/ruin/space/has_grav/powered/virtual_domain) "F" = ( /obj/structure/table/greyscale, -/obj/item/gun/energy/beam_rifle, +/obj/item/gun/energy/xray, /obj/item/gun/energy/laser{ pixel_x = 4; pixel_y = -6 diff --git a/code/__DEFINES/research/anomalies.dm b/code/__DEFINES/research/anomalies.dm index db605431c610c..a1e30cd142f00 100644 --- a/code/__DEFINES/research/anomalies.dm +++ b/code/__DEFINES/research/anomalies.dm @@ -2,7 +2,7 @@ #define MAX_CORES_BLUESPACE 3 #define MAX_CORES_GRAVITATIONAL 8 #define MAX_CORES_FLUX 8 -#define MAX_CORES_VORTEX 8 +#define MAX_CORES_VORTEX 1 #define MAX_CORES_PYRO 8 #define MAX_CORES_HALLUCINATION 8 #define MAX_CORES_BIOSCRAMBLER 8 diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm index 6d4f4713f8bb1..dcf42ee47b1a5 100644 --- a/code/datums/components/crafting/guncrafting.dm +++ b/code/datums/components/crafting/guncrafting.dm @@ -84,8 +84,8 @@ desc = "A suitcase containing the necessary gun parts to tranform a standard energy gun into a temperature gun. Fantastic at birthday parties and killing indigenious populations of lizardpeople." /obj/item/weaponcrafting/gunkit/beam_rifle - name = "particle acceleration rifle part kit (lethal)" - desc = "The coup de grace of guncrafting. This suitcase contains the highly experimental rig for a particle acceleration rifle. Requires an energy gun, a stabilized flux anomaly and a stabilized gravity anomaly." + name = "\improper Event Horizon anti-existential beam rifle part kit (DOOMSDAY DEVICE, DO NOT CONSTRUCT)" + desc = "What fevered minds wrought this terrible construction kit? To create a frame to harness the strange energies that flow through the Spinward Sector towards such horrible acts of violence?" /obj/item/weaponcrafting/gunkit/ebow name = "energy crossbow part kit (less lethal)" diff --git a/code/datums/components/crafting/ranged_weapon.dm b/code/datums/components/crafting/ranged_weapon.dm index b646c4472ed98..666e84964c553 100644 --- a/code/datums/components/crafting/ranged_weapon.dm +++ b/code/datums/components/crafting/ranged_weapon.dm @@ -72,21 +72,18 @@ blacklist += subtypesof(/obj/item/gun/energy/e_gun) /datum/crafting_recipe/beam_rifle - name = "Particle Acceleration Rifle" - result = /obj/item/gun/energy/beam_rifle + name = "Event Horizon Anti-Existential Beam Rifle" + result = /obj/item/gun/energy/event_horizon reqs = list( - /obj/item/gun/energy/e_gun = 1, - /obj/item/assembly/signaler/anomaly/flux = 1, + /obj/item/assembly/signaler/anomaly/flux = 2, /obj/item/assembly/signaler/anomaly/grav = 1, + /obj/item/assembly/signaler/anomaly/vortex = MAX_CORES_VORTEX, + /obj/item/assembly/signaler/anomaly/bluespace = 1, /obj/item/weaponcrafting/gunkit/beam_rifle = 1, ) - time = 10 SECONDS + time = 30 SECONDS //Maybe the delay will make you reconsider your choices category = CAT_WEAPON_RANGED -/datum/crafting_recipe/beam_rifle/New() - ..() - blacklist += subtypesof(/obj/item/gun/energy/e_gun) - /datum/crafting_recipe/ebow name = "Energy Crossbow" result = /obj/item/gun/energy/recharge/ebow/large diff --git a/code/datums/storage/subtypes/bag_of_holding.dm b/code/datums/storage/subtypes/bag_of_holding.dm index a4ea699e42e21..aa812f5d1e007 100644 --- a/code/datums/storage/subtypes/bag_of_holding.dm +++ b/code/datums/storage/subtypes/bag_of_holding.dm @@ -38,7 +38,7 @@ user.investigate_log("has been gibbed by a bag of holding recursive insertion.", INVESTIGATE_DEATHS) user.gib() - var/obj/boh_tear/tear = new(rift_loc) + var/obj/reality_tear/tear = new(rift_loc) tear.start_disaster() qdel(to_insert) qdel(parent) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index b55593ec913e7..74352134f59f4 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -480,21 +480,6 @@ charge_light_type = null connector_type = "slimecore" -/obj/item/stock_parts/cell/beam_rifle - name = "beam rifle capacitor" - desc = "A high powered capacitor that can provide huge amounts of energy in an instant." - maxcharge = STANDARD_CELL_CHARGE * 50 - chargerate = STANDARD_CELL_RATE * 2.5 //Extremely energy intensive - -/obj/item/stock_parts/cell/beam_rifle/corrupt() - return - -/obj/item/stock_parts/cell/beam_rifle/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - charge = clamp((charge-(10000/severity)),0,maxcharge) - /obj/item/stock_parts/cell/emergency_light name = "miniature power cell" desc = "A tiny power cell with a very low power capacity. Used in light fixtures to power them in the event of an outage." diff --git a/code/modules/power/singularity/boh_tear.dm b/code/modules/power/singularity/reality_tear.dm similarity index 59% rename from code/modules/power/singularity/boh_tear.dm rename to code/modules/power/singularity/reality_tear.dm index a0089a7c94b35..e43301541a08f 100644 --- a/code/modules/power/singularity/boh_tear.dm +++ b/code/modules/power/singularity/reality_tear.dm @@ -1,4 +1,7 @@ -/obj/boh_tear +/// Tear in the Fabric of Reality /// +// Typically spawned by placing two bags of holding into one another, collapsing into a wandering singularity after a brief period as a stationary singularity. + +/obj/reality_tear name = "tear in the fabric of reality" desc = "As you gaze into the abyss, the only thing you can think is... \"Should I really be this close to it?\"" anchored = TRUE @@ -15,30 +18,36 @@ pixel_y = -32 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF flags_1 = SUPERMATTER_IGNORES_1 + /// Range that our singularity component consumes objects + var/singularity_consume_range = 1 + /// Ranges that the singularity pulls objects + var/singularity_grav_pull = 21 + /// Time before we begin our bagulo spawn + var/collapse_spawn_time = 9 SECONDS -/obj/boh_tear/proc/start_disaster() +/obj/reality_tear/proc/start_disaster() apply_wibbly_filters(src) playsound(loc, 'sound/effects/clockcult_gateway_disrupted.ogg', vary = 200, extrarange = 3, falloff_exponent = 1, frequency = 0.33, pressure_affected = FALSE, ignore_walls = TRUE, falloff_distance = 7) AddComponent( /datum/component/singularity, \ - consume_range = 1, \ - grav_pull = 21, \ + consume_range = singularity_consume_range, \ + grav_pull = singularity_grav_pull, \ roaming = FALSE, \ singularity_size = STAGE_SIX, \ ) - addtimer(CALLBACK(src, PROC_REF(bagulo_time)), 9 SECONDS, TIMER_DELETE_ME) + addtimer(CALLBACK(src, PROC_REF(reality_collapse)), collapse_spawn_time, TIMER_DELETE_ME) animate(src, time = 7.5 SECONDS, transform = transform.Scale(2), flags = ANIMATION_PARALLEL) animate(time = 2 SECONDS, transform = transform.Scale(0.25), easing = ELASTIC_EASING) animate(time = 0.5 SECONDS, alpha = 0) -/obj/boh_tear/proc/bagulo_time() +/obj/reality_tear/proc/reality_collapse() playsound(loc, 'sound/effects/supermatter.ogg', 200, vary = TRUE, extrarange = 3, falloff_exponent = 1, frequency = 0.5, pressure_affected = FALSE, ignore_walls = TRUE, falloff_distance = 7) var/obj/singularity/bagulo = new(loc) bagulo.expand(STAGE_TWO) bagulo.energy = 400 qdel(src) -/obj/boh_tear/attack_tk(mob/user) +/obj/reality_tear/attack_tk(mob/user) if(!isliving(user)) return var/mob/living/jedi = user @@ -47,3 +56,15 @@ jedi.spawn_dust() addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, attack_hand), jedi), 0.5 SECONDS) return COMPONENT_CANCEL_ATTACK_CHAIN + +//The temporary tears in reality. Collapses into nothing, and has a significantly lower gravity pull range, but consumes more widely. + +/obj/reality_tear/temporary + name = "puncture in the fabric of reality" + desc = "Count your lucky stars that this wasn't anywhere near you." + singularity_consume_range = 2 + singularity_grav_pull = 3 + collapse_spawn_time = 2 SECONDS + +/obj/reality_tear/temporary/reality_collapse() + qdel(src) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 4c00e83b0bbc6..b977441e9ae11 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -26,14 +26,23 @@ var/single_shot_type_overlay = TRUE ///Should we give an overlay to empty guns? var/display_empty = TRUE - var/selfcharge = 0 - var/charge_timer = 0 - var/charge_delay = 8 + ///whether the gun's cell drains the cyborg user's cell to recharge var/use_cyborg_cell = FALSE ///set to true so the gun is given an empty cell var/dead_cell = FALSE + // Self charging vars + + /// Whether or not our gun charges its own cell on a timer. + var/selfcharge = 0 + /// The amount of time between instances of cell self recharge + var/charge_timer = 0 + /// The amount of seconds_per_tick during process() before the gun charges itself + var/charge_delay = 8 + /// The amount restored by the gun to the cell per self charge tick + var/self_charge_amount = STANDARD_ENERGY_GUN_SELF_CHARGE_RATE + /obj/item/gun/energy/fire_sounds() // What frequency the energy gun's sound will make var/pitch_to_use = 1 @@ -153,7 +162,7 @@ if(charge_timer < charge_delay) return charge_timer = 0 - cell.give(STANDARD_ENERGY_GUN_SELF_CHARGE_RATE * seconds_per_tick) + cell.give(self_charge_amount * seconds_per_tick) if(!chambered) //if empty chamber we try to charge a new shot recharge_newshot(TRUE) update_appearance() diff --git a/code/modules/projectiles/guns/energy/beam_rifle.dm b/code/modules/projectiles/guns/energy/beam_rifle.dm index e29e1ef4878be..0bda1930c6260 100644 --- a/code/modules/projectiles/guns/energy/beam_rifle.dm +++ b/code/modules/projectiles/guns/energy/beam_rifle.dm @@ -1,588 +1,64 @@ - -#define ZOOM_LOCK_AUTOZOOM_FREEMOVE 0 -#define ZOOM_LOCK_AUTOZOOM_ANGLELOCK 1 -#define ZOOM_LOCK_CENTER_VIEW 2 -#define ZOOM_LOCK_OFF 3 - -#define AUTOZOOM_PIXEL_STEP_FACTOR 48 - -#define AIMING_BEAM_ANGLE_CHANGE_THRESHOLD 0.1 - -/obj/item/gun/energy/beam_rifle - name = "particle acceleration rifle" - desc = "An energy-based anti material marksman rifle that uses highly charged particle beams moving at extreme velocities to decimate whatever is unfortunate enough to be targeted by one." - desc_controls = "Hold down left click while scoped to aim, when weapon is fully aimed (Tracer goes from red to green as it charges), release to fire. Moving while aiming or changing where you're pointing at while aiming will delay the aiming process depending on how much you changed." +/obj/item/gun/energy/event_horizon + name = "\improper Event Horizon anti-existential beam rifle" + desc = "The deranged minds of Nanotrasen, in their great hubris and spite, have birthed forth the definitive conclusion to the arms race. Weaponized black holes, and a platform to deliver them.\ + To look upon this existential maleficence is to know that the pursuit of profit has consigned all life to this pathetic conclusion; the destruction of reality itself." icon = 'icons/obj/weapons/guns/energy.dmi' icon_state = "esniper" inhand_icon_state = null worn_icon_state = null fire_sound = 'sound/weapons/beam_sniper.ogg' slot_flags = ITEM_SLOT_BACK - force = 15 + force = 20 //This is maybe the sanest part of this weapon. custom_materials = null - recoil = 4 + recoil = 2 ammo_x_offset = 3 ammo_y_offset = 3 modifystate = FALSE charge_sections = 1 weapon_weight = WEAPON_HEAVY w_class = WEIGHT_CLASS_BULKY - ammo_type = list(/obj/item/ammo_casing/energy/beam_rifle/hitscan) - actions_types = list(/datum/action/item_action/zoom_lock_action) - cell_type = /obj/item/stock_parts/cell/beam_rifle - var/aiming = FALSE - var/aiming_time = 12 - var/aiming_time_fire_threshold = 5 - var/aiming_time_left = 12 - var/aiming_time_increase_user_movement = 3 - var/scoped_slow = 1 - var/aiming_time_increase_angle_multiplier = 0.3 - var/last_process = 0 - - var/lastangle = 0 - var/aiming_lastangle = 0 - var/mob/current_user = null - var/list/obj/effect/projectile/tracer/current_tracers - - var/structure_piercing = 2 //Amount * 2. For some reason structures aren't respecting this unless you have it doubled. Probably with the objects in question's Bump() code instead of this but I'll deal with this later. - var/structure_bleed_coeff = 0.7 - var/wall_pierce_amount = 0 - var/wall_devastate = 0 - var/aoe_structure_range = 1 - var/aoe_structure_damage = 50 - var/aoe_fire_range = 2 - var/aoe_fire_chance = 40 - var/aoe_mob_range = 1 - var/aoe_mob_damage = 30 - var/impact_structure_damage = 60 - var/projectile_damage = 30 - var/projectile_stun = 0 - var/projectile_setting_pierce = TRUE - var/delay = 25 - var/lastfire = 0 - - //ZOOMING - var/zoom_current_view_increase = 0 - ///The radius you want to zoom by - var/zoom_target_view_increase = 9.5 - var/zooming = FALSE - var/zoom_lock = ZOOM_LOCK_OFF - var/zooming_angle - var/current_zoom_x = 0 - var/current_zoom_y = 0 - - var/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/trace = null - -/obj/item/gun/energy/beam_rifle/apply_fantasy_bonuses(bonus) - . = ..() - delay = modify_fantasy_variable("delay", delay, -bonus * 2) - aiming_time = modify_fantasy_variable("aiming_time", aiming_time, -bonus * 2) - recoil = modify_fantasy_variable("recoil", recoil, round(-bonus / 2)) - -/obj/item/gun/energy/beam_rifle/remove_fantasy_bonuses(bonus) - delay = reset_fantasy_variable("delay", delay) - aiming_time = reset_fantasy_variable("aiming_time", aiming_time) - recoil = reset_fantasy_variable("recoil", recoil) - return ..() - -/obj/item/gun/energy/beam_rifle/debug - delay = 0 - cell_type = /obj/item/stock_parts/cell/infinite - aiming_time = 0 - recoil = 0 - pin = /obj/item/firing_pin - -/obj/item/gun/energy/beam_rifle/equipped(mob/user) - set_user(user) - return ..() - -/obj/item/gun/energy/beam_rifle/pickup(mob/user) - set_user(user) - return ..() - -/obj/item/gun/energy/beam_rifle/dropped(mob/user) - set_user() - return ..() - -/obj/item/gun/energy/beam_rifle/ui_action_click(mob/user, actiontype) - if(istype(actiontype, /datum/action/item_action/zoom_lock_action)) - zoom_lock++ - if(zoom_lock > 3) - zoom_lock = 0 - switch(zoom_lock) - if(ZOOM_LOCK_AUTOZOOM_FREEMOVE) - to_chat(user, span_boldnotice("You switch [src]'s zooming processor to free directional.")) - if(ZOOM_LOCK_AUTOZOOM_ANGLELOCK) - to_chat(user, span_boldnotice("You switch [src]'s zooming processor to locked directional.")) - if(ZOOM_LOCK_CENTER_VIEW) - to_chat(user, span_boldnotice("You switch [src]'s zooming processor to center mode.")) - if(ZOOM_LOCK_OFF) - to_chat(user, span_boldnotice("You disable [src]'s zooming system.")) - reset_zooming() - return - - return ..() + ammo_type = list(/obj/item/ammo_casing/energy/event_horizon) + selfcharge = TRUE + self_charge_amount = STANDARD_ENERGY_GUN_SELF_CHARGE_RATE * 10 -/obj/item/gun/energy/beam_rifle/proc/set_autozoom_pixel_offsets_immediate(current_angle) - if(zoom_lock == ZOOM_LOCK_CENTER_VIEW || zoom_lock == ZOOM_LOCK_OFF) - return - current_zoom_x = sin(current_angle) + sin(current_angle) * AUTOZOOM_PIXEL_STEP_FACTOR * zoom_current_view_increase - current_zoom_y = cos(current_angle) + cos(current_angle) * AUTOZOOM_PIXEL_STEP_FACTOR * zoom_current_view_increase - -/obj/item/gun/energy/beam_rifle/proc/handle_zooming() - if(!zooming || !check_user()) - return - current_user.client.view_size.setTo(zoom_target_view_increase) - zoom_current_view_increase = zoom_target_view_increase - set_autozoom_pixel_offsets_immediate(zooming_angle) - -/obj/item/gun/energy/beam_rifle/proc/start_zooming() - if(zoom_lock == ZOOM_LOCK_OFF) - return - zooming = TRUE - -/obj/item/gun/energy/beam_rifle/proc/stop_zooming(mob/user) - if(zooming) - zooming = FALSE - reset_zooming(user) - -/obj/item/gun/energy/beam_rifle/proc/reset_zooming(mob/user) - if(!user) - user = current_user - if(!user || !user.client) - return FALSE - user.client.view_size.zoomIn() - zoom_current_view_increase = 0 - zooming_angle = 0 - current_zoom_x = 0 - current_zoom_y = 0 - -/obj/item/gun/energy/beam_rifle/attack_self(mob/user) - projectile_setting_pierce = !projectile_setting_pierce - balloon_alert(user, "switched to [projectile_setting_pierce ? "pierce":"impact"] mode") - aiming_beam() - -/obj/item/gun/energy/beam_rifle/proc/update_slowdown() - if(aiming) - slowdown = scoped_slow - else - slowdown = initial(slowdown) - -/obj/item/gun/energy/beam_rifle/Initialize(mapload) +/obj/item/gun/energy/event_horizon/Initialize(mapload) . = ..() - fire_delay = delay - current_tracers = list() - START_PROCESSING(SSfastprocess, src) - -/obj/item/gun/energy/beam_rifle/Destroy() - STOP_PROCESSING(SSfastprocess, src) - set_user(null) - QDEL_LIST(current_tracers) - return ..() - -/obj/item/gun/energy/beam_rifle/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chambered = null - recharge_newshot() - -/obj/item/gun/energy/beam_rifle/proc/aiming_beam(force_update = FALSE) - var/diff = abs(aiming_lastangle - lastangle) - if(!check_user()) - return - if(diff < AIMING_BEAM_ANGLE_CHANGE_THRESHOLD && !force_update) - return - aiming_lastangle = lastangle - // ONLY ONE at once (since fire can sleep) - if(trace) - QDEL_NULL(trace) - trace = new - trace.gun = src - trace.wall_pierce_amount = wall_pierce_amount - trace.structure_pierce_amount = structure_piercing - trace.do_pierce = projectile_setting_pierce - if(aiming_time) - var/percent = ((100/aiming_time)*aiming_time_left) - trace.color = rgb(255 * percent,255 * ((100 - percent) / 100),0) - else - trace.color = rgb(0, 255, 0) - var/turf/curloc = get_turf(src) - - var/atom/target_atom = current_user.client.mouse_object_ref?.resolve() - var/turf/targloc = get_turf(target_atom) - if(!istype(targloc)) - if(!istype(curloc)) - return - targloc = get_turf_in_angle(lastangle, curloc, 10) - var/mouse_modifiers = params2list(current_user.client.mouseParams) - trace.preparePixelProjectile(targloc, current_user, mouse_modifiers, 0) - trace.fire(lastangle) - trace = null + AddComponent(/datum/component/scope, range_modifier = 4) -/obj/item/gun/energy/beam_rifle/process() - if(!aiming) - last_process = world.time - return - check_user() - handle_zooming() - aiming_time_left = max(0, aiming_time_left - (world.time - last_process)) - aiming_beam(TRUE) - last_process = world.time - -/obj/item/gun/energy/beam_rifle/proc/check_user(automatic_cleanup = TRUE) - if(!istype(current_user) || !isturf(current_user.loc) || !(src in current_user.held_items) || current_user.incapacitated()) //Doesn't work if you're not holding it! - if(automatic_cleanup) - stop_aiming() - return FALSE - return TRUE - -/obj/item/gun/energy/beam_rifle/proc/process_aim(params) - var/angle = mouse_angle_from_client(current_user?.client, params) - current_user.setDir(angle2dir_cardinal(angle)) - var/difference = abs(closer_angle_difference(lastangle, angle)) - delay_penalty(difference * aiming_time_increase_angle_multiplier) - lastangle = angle - -/obj/item/gun/energy/beam_rifle/proc/on_mob_move() - SIGNAL_HANDLER - check_user() - if(aiming) - delay_penalty(aiming_time_increase_user_movement) - process_aim(current_user?.client?.mouseParams) - INVOKE_ASYNC(src, PROC_REF(aiming_beam), TRUE) - -/obj/item/gun/energy/beam_rifle/proc/start_aiming(params) - aiming_time_left = aiming_time - aiming = TRUE - process_aim(params) - aiming_beam(TRUE) - zooming_angle = lastangle - start_zooming() - -/obj/item/gun/energy/beam_rifle/proc/stop_aiming(mob/user) - set waitfor = FALSE - aiming_time_left = aiming_time - aiming = FALSE - QDEL_LIST(current_tracers) - QDEL_NULL(trace) - stop_zooming(user) - -/obj/item/gun/energy/beam_rifle/proc/set_user(mob/user) - if(user == current_user) - return - stop_aiming(current_user) - if(istype(current_user)) - unregister_client_signals(current_user) - UnregisterSignal(current_user, list(COMSIG_MOVABLE_MOVED, COMSIG_MOB_LOGIN, COMSIG_MOB_LOGOUT)) - current_user = null - if(!istype(user)) - return - current_user = user - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_mob_move)) - RegisterSignal(user, COMSIG_MOB_LOGIN, PROC_REF(register_client_signals)) - RegisterSignal(user, COMSIG_MOB_LOGOUT, PROC_REF(unregister_client_signals)) - if(user.client) - register_client_signals(user) +/obj/item/gun/energy/event_horizon/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread) -/obj/item/gun/energy/beam_rifle/proc/register_client_signals(mob/source) - SIGNAL_HANDLER - RegisterSignal(source.client, COMSIG_CLIENT_MOUSEDOWN, PROC_REF(on_mouse_down)) - -/obj/item/gun/energy/beam_rifle/proc/unregister_client_signals(mob/source) - SIGNAL_HANDLER - stop_aiming() - if(QDELETED(source.client)) - return - UnregisterSignal(source.client, list(COMSIG_CLIENT_MOUSEDOWN, COMSIG_CLIENT_MOUSEUP, COMSIG_CLIENT_MOUSEDRAG)) - -///change the aiming beam angle to that of the mouse cursor. -/obj/item/gun/energy/beam_rifle/proc/on_mouse_drag(client/source, src_object, over_object, src_location, over_location, src_control, over_control, params) - SIGNAL_HANDLER - if(aiming) - process_aim(params) - INVOKE_ASYNC(src, PROC_REF(aiming_beam)) - if(zoom_lock == ZOOM_LOCK_AUTOZOOM_FREEMOVE) - zooming_angle = lastangle - set_autozoom_pixel_offsets_immediate(zooming_angle) - -///Start aiming and charging the beam -/obj/item/gun/energy/beam_rifle/proc/on_mouse_down(client/source, atom/movable/object, location, control, params) - SIGNAL_HANDLER - if(source.mob.get_active_held_item() != src) - return - if(!object.IsAutoclickable() || (object in source.mob.contents) || (object == source.mob)) + if(!HAS_TRAIT(user, TRAIT_USER_SCOPED)) + balloon_alert(user, "must be scoped!") return - INVOKE_ASYNC(src, PROC_REF(start_aiming), params) - RegisterSignal(source, COMSIG_CLIENT_MOUSEDRAG, PROC_REF(on_mouse_drag)) - RegisterSignal(source, COMSIG_CLIENT_MOUSEUP, PROC_REF(on_mouse_up)) - -///Stop aiming and fire the beam if charged enough -/obj/item/gun/energy/beam_rifle/proc/on_mouse_up(client/source, atom/movable/object, location, control, params) - SIGNAL_HANDLER - if(!object.IsAutoclickable()) - return - process_aim(params) - UnregisterSignal(source, list(COMSIG_CLIENT_MOUSEDRAG, COMSIG_CLIENT_MOUSEUP)) - if(aiming_time_left <= aiming_time_fire_threshold && check_user()) - sync_ammo() - var/atom/target = source.mouse_object_ref?.resolve() - if(target) - INVOKE_ASYNC(src, PROC_REF(try_fire_gun), target, source.mob, source.mouseParams, TRUE) - stop_aiming() - QDEL_LIST(current_tracers) - -/obj/item/gun/energy/beam_rifle/try_fire_gun(atom/target, mob/living/user, params, passthrough = FALSE) - if(user.Adjacent(target)) //It's adjacent, is the user, or is on the user's person - if(target in user.contents) //can't shoot stuff inside us. - return FALSE - if(!ismob(target) || user.combat_mode) //melee attack - return FALSE - if(target == user && user.zone_selected != BODY_ZONE_PRECISE_MOUTH) //so we can't shoot ourselves (unless mouth selected) - return FALSE - if(!passthrough && (aiming_time > aiming_time_fire_threshold)) - return FALSE - if(lastfire > world.time + delay) - return FALSE - if(!..()) - return FALSE - lastfire = world.time - stop_aiming() - return TRUE - -/obj/item/gun/energy/beam_rifle/proc/sync_ammo() - for(var/obj/item/ammo_casing/energy/beam_rifle/AC in contents) - AC.sync_stats() -/obj/item/gun/energy/beam_rifle/proc/delay_penalty(amount) - aiming_time_left = clamp(aiming_time_left + amount, 0, aiming_time) - -/obj/item/ammo_casing/energy/beam_rifle - name = "particle acceleration lens" - desc = "Don't look into barrel!" - var/wall_pierce_amount = 0 - var/wall_devastate = 0 - var/aoe_structure_range = 1 - var/aoe_structure_damage = 30 - var/aoe_fire_range = 2 - var/aoe_fire_chance = 66 - var/aoe_mob_range = 1 - var/aoe_mob_damage = 20 - var/impact_structure_damage = 50 - var/projectile_damage = 40 - var/projectile_stun = 0 - var/structure_piercing = 2 - var/structure_bleed_coeff = 0.7 - var/do_pierce = TRUE - var/obj/item/gun/energy/beam_rifle/host - -/obj/item/ammo_casing/energy/beam_rifle/proc/sync_stats() - var/obj/item/gun/energy/beam_rifle/BR = loc - if(!istype(BR)) - stack_trace("Beam rifle syncing error") - host = BR - do_pierce = BR.projectile_setting_pierce - wall_pierce_amount = BR.wall_pierce_amount - wall_devastate = BR.wall_devastate - aoe_structure_range = BR.aoe_structure_range - aoe_structure_damage = BR.aoe_structure_damage - aoe_fire_range = BR.aoe_fire_range - aoe_fire_chance = BR.aoe_fire_chance - aoe_mob_range = BR.aoe_mob_range - aoe_mob_damage = BR.aoe_mob_damage - impact_structure_damage = BR.impact_structure_damage - projectile_damage = BR.projectile_damage - projectile_stun = BR.projectile_stun - delay = BR.delay - structure_piercing = BR.structure_piercing - structure_bleed_coeff = BR.structure_bleed_coeff - -/obj/item/ammo_casing/energy/beam_rifle/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") . = ..() - var/obj/projectile/beam/beam_rifle/hitscan/HS_BB = loaded_projectile - if(!istype(HS_BB)) - return - HS_BB.impact_direct_damage = projectile_damage - HS_BB.stun = projectile_stun - HS_BB.impact_structure_damage = impact_structure_damage - HS_BB.aoe_mob_damage = aoe_mob_damage - HS_BB.aoe_mob_range = clamp(aoe_mob_range, 0, 15) //Badmin safety lock - HS_BB.aoe_fire_chance = aoe_fire_chance - HS_BB.aoe_fire_range = aoe_fire_range - HS_BB.aoe_structure_damage = aoe_structure_damage - HS_BB.aoe_structure_range = clamp(aoe_structure_range, 0, 15) //Badmin safety lock - HS_BB.wall_devastate = wall_devastate - HS_BB.wall_pierce_amount = wall_pierce_amount - HS_BB.structure_pierce_amount = structure_piercing - HS_BB.structure_bleed_coeff = structure_bleed_coeff - HS_BB.do_pierce = do_pierce - HS_BB.gun = host - -/obj/item/ammo_casing/energy/beam_rifle/throw_proj(atom/target, turf/targloc, mob/living/user, params, spread, atom/fired_from) - var/turf/curloc = get_turf(user) - if(!istype(curloc) || !loaded_projectile) - return FALSE - var/obj/item/gun/energy/beam_rifle/gun = loc - if(!targloc && gun) - targloc = get_turf_in_angle(gun.lastangle, curloc, 10) - else if(!targloc) - return FALSE - var/firing_dir - if(loaded_projectile.firer) - firing_dir = loaded_projectile.firer.dir - if(!loaded_projectile.suppressed && firing_effect_type) - new firing_effect_type(get_turf(src), firing_dir) - var/modifiers = params2list(params) - loaded_projectile.preparePixelProjectile(target, user, modifiers, spread) - loaded_projectile.fire(gun? gun.lastangle : null, null) - loaded_projectile = null - return TRUE + message_admins("[ADMIN_LOOKUPFLW(user)] has fired an anti-existential beam at [ADMIN_VERBOSEJMP(user)].") -/obj/item/ammo_casing/energy/beam_rifle/hitscan - projectile_type = /obj/projectile/beam/beam_rifle/hitscan - select_name = "beam" - e_cost = LASER_SHOTS(5, 50000) // Beam rifle has a custom cell +/obj/item/ammo_casing/energy/event_horizon + projectile_type = /obj/projectile/beam/event_horizon + select_name = "doomsday" + e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE) fire_sound = 'sound/weapons/beam_sniper.ogg' -/obj/projectile/beam/beam_rifle - name = "particle beam" +/obj/projectile/beam/event_horizon + name = "anti-existential beam" icon = null hitsound = 'sound/effects/explosion3.ogg' - damage = 0 //Handled manually. + damage = 100 // Does it matter? damage_type = BURN armor_flag = ENERGY range = 150 jitter = 20 SECONDS - var/obj/item/gun/energy/beam_rifle/gun - var/structure_pierce_amount = 0 //All set to 0 so the gun can manually set them during firing. - var/structure_bleed_coeff = 0 - var/structure_pierce = 0 - var/do_pierce = TRUE - var/wall_pierce_amount = 0 - var/wall_pierce = 0 - var/wall_devastate = 0 - var/aoe_structure_range = 0 - var/aoe_structure_damage = 0 - var/aoe_fire_range = 0 - var/aoe_fire_chance = 0 - var/aoe_mob_range = 0 - var/aoe_mob_damage = 0 - var/impact_structure_damage = 0 - var/impact_direct_damage = 0 - var/list/pierced = list() - -/obj/projectile/beam/beam_rifle/proc/AOE(turf/epicenter) - if(!epicenter) - return - new /obj/effect/temp_visual/explosion/fast(epicenter) - for(var/mob/living/L in range(aoe_mob_range, epicenter)) //handle aoe mob damage - L.adjustFireLoss(aoe_mob_damage) - to_chat(L, span_userdanger("\The [src] sears you!")) - for(var/turf/T in RANGE_TURFS(aoe_fire_range, epicenter)) //handle aoe fire - if(prob(aoe_fire_chance)) - new /obj/effect/hotspot(T) - for(var/obj/O in range(aoe_structure_range, epicenter)) - if(!isitem(O)) - O.take_damage(aoe_structure_damage * get_damage_coeff(O), BURN, LASER, FALSE) - -/obj/projectile/beam/beam_rifle/prehit_pierce(atom/A) - if(isclosedturf(A) && (wall_pierce < wall_pierce_amount)) - if(prob(wall_devastate)) - if(iswallturf(A)) - var/turf/closed/wall/W = A - W.dismantle_wall(TRUE, TRUE) - else - SSexplosions.medturf += A - ++wall_pierce - return PROJECTILE_PIERCE_PHASE // yeah this gun is a snowflakey piece of garbage - if(isobj(A) && (structure_pierce < structure_pierce_amount)) - ++structure_pierce - var/obj/O = A - O.take_damage((impact_structure_damage + aoe_structure_damage) * structure_bleed_coeff * get_damage_coeff(A), BURN, ENERGY, FALSE) - return PROJECTILE_PIERCE_PHASE // ditto and this could be refactored to on_hit honestly - return ..() - -/obj/projectile/beam/beam_rifle/proc/get_damage_coeff(atom/target) - if(istype(target, /obj/machinery/door)) - return 0.4 - if(istype(target, /obj/structure/window)) - return 0.5 - return 1 - -/obj/projectile/beam/beam_rifle/proc/handle_impact(atom/target) - if(isobj(target)) - var/obj/O = target - O.take_damage(impact_structure_damage * get_damage_coeff(target), BURN, LASER, FALSE) - if(isliving(target)) - var/mob/living/L = target - L.adjustFireLoss(impact_direct_damage) - L.emote("scream") - -/obj/projectile/beam/beam_rifle/proc/handle_hit(atom/target, piercing_hit = FALSE) - set waitfor = FALSE - if(!is_hostile_projectile()) - return FALSE - playsound(src, 'sound/effects/explosion3.ogg', 100, TRUE) - if(!do_pierce) - AOE(get_turf(target) || get_turf(src)) - if(!QDELETED(target)) - handle_impact(target) - -/obj/projectile/beam/beam_rifle/on_hit(atom/target, blocked = 0, pierce_hit) - handle_hit(target, pierce_hit) - return ..() - -/obj/projectile/beam/beam_rifle/is_hostile_projectile() - return TRUE // on hit = boom fire - -/obj/projectile/beam/beam_rifle/hitscan - icon_state = "" hitscan = TRUE tracer_type = /obj/effect/projectile/tracer/tracer/beam_rifle - var/constant_tracer = FALSE -/obj/projectile/beam/beam_rifle/hitscan/generate_hitscan_tracers(cleanup = TRUE, duration = 5, impacting = TRUE, highlander) - set waitfor = FALSE - if(isnull(highlander)) - highlander = constant_tracer - if(highlander && istype(gun)) - QDEL_LIST(gun.current_tracers) - for(var/datum/point/p in beam_segments) - gun.current_tracers += generate_tracer_between_points(p, beam_segments[p], tracer_type, color, 0, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity) - else - for(var/datum/point/p in beam_segments) - generate_tracer_between_points(p, beam_segments[p], tracer_type, color, duration, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity) - if(cleanup) - QDEL_LIST(beam_segments) - beam_segments = null - QDEL_NULL(beam_index) - -/obj/projectile/beam/beam_rifle/hitscan/aiming_beam - tracer_type = /obj/effect/projectile/tracer/tracer/aiming - name = "aiming beam" - hitsound = null - hitsound_wall = null - damage = 0 - constant_tracer = TRUE - hitscan_light_range = 0 - hitscan_light_intensity = 0 - hitscan_light_color_override = "#99ff99" - reflectable = REFLECT_FAKEPROJECTILE - -/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/is_hostile_projectile() - return FALSE // just an aiming reticle - -/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/prehit_pierce(atom/target) - return PROJECTILE_DELETE_WITHOUT_HITTING +/obj/projectile/beam/event_horizon/on_hit(atom/target, blocked, pierce_hit) + . = ..() -/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/on_hit(atom/target, blocked = 0, pierce_hit) - SHOULD_CALL_PARENT(FALSE) // This is some snowflake stuff so whatever - qdel(src) - return BULLET_ACT_BLOCK + // Where we droppin' boys? + var/turf/rift_loc = get_turf(target) -#undef AIMING_BEAM_ANGLE_CHANGE_THRESHOLD -#undef AUTOZOOM_PIXEL_STEP_FACTOR -#undef ZOOM_LOCK_AUTOZOOM_ANGLELOCK -#undef ZOOM_LOCK_AUTOZOOM_FREEMOVE -#undef ZOOM_LOCK_CENTER_VIEW -#undef ZOOM_LOCK_OFF + // Spawn our temporary rift, then activate it. + var/obj/reality_tear/temporary/tear = new(rift_loc) + tear.start_disaster() + message_admins("[ADMIN_LOOKUPFLW(target)] has been hit by an anti-existential beam at [ADMIN_VERBOSEJMP(rift_loc)], creating a singularity.") diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 00c7dba3946bd..35d95d82d3047 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -218,8 +218,8 @@ autolathe_exportable = FALSE /datum/design/beamrifle - name = "Beam Marksman Rifle Part Kit (Lethal)" - desc = "The gunkit for a powerful long ranged anti-material rifle that fires charged particle beams to obliterate targets." + name = "Event Horizon Anti-Existential Beam Rifle Part Kit (DOOMSDAY DEVICE)" + desc = "The kit that produces a weapon made to end your foes on an existential level. Why the fuck can you make this?" id = "beamrifle" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/diamond =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 4, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 2.25, /datum/material/gold =SHEET_MATERIAL_AMOUNT * 2.5) @@ -230,7 +230,6 @@ departmental_flags = DEPARTMENT_BITFLAG_SECURITY autolathe_exportable = FALSE - /datum/design/rapidsyringe name = "Rapid Syringe Gun" desc = "A gun that fires many syringes." diff --git a/tgstation.dme b/tgstation.dme index f3bdadf367d85..94efbba308232 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5364,12 +5364,12 @@ #include "code\modules\power\lighting\light_items.dm" #include "code\modules\power\lighting\light_mapping_helpers.dm" #include "code\modules\power\lighting\light_wallframes.dm" -#include "code\modules\power\singularity\boh_tear.dm" #include "code\modules\power\singularity\containment_field.dm" #include "code\modules\power\singularity\dark_matter_singularity.dm" #include "code\modules\power\singularity\emitter.dm" #include "code\modules\power\singularity\field_generator.dm" #include "code\modules\power\singularity\narsie.dm" +#include "code\modules\power\singularity\reality_tear.dm" #include "code\modules\power\singularity\singularity.dm" #include "code\modules\power\supermatter\supermatter.dm" #include "code\modules\power\supermatter\supermatter_extra_effects.dm" From 0ecbf899ecf9ded02740c5e86c99ab01bc55ac8c Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 00:58:41 +1200 Subject: [PATCH 34/75] Automatic changelog for PR #83934 [ci skip] --- html/changelogs/AutoChangeLog-pr-83934.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83934.yml diff --git a/html/changelogs/AutoChangeLog-pr-83934.yml b/html/changelogs/AutoChangeLog-pr-83934.yml new file mode 100644 index 0000000000000..ad3574f8f8cb2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83934.yml @@ -0,0 +1,5 @@ +author: "necromanceranne" +delete-after: True +changes: + - rscadd: "Replaces the Particle Acceleration Rifle with the Event Horizon anti-existential beam rifle. It shoots black holes. You can make this in-game. That's right, YOU!" + - balance: "Only one vortex anomaly can be made in a round." \ No newline at end of file From 24908564f1fd5cae2135ec3775c5344c7f8c4d8b Mon Sep 17 00:00:00 2001 From: _0Steven <42909981+00-Steven@users.noreply.github.com> Date: Thu, 20 Jun 2024 18:48:40 +0200 Subject: [PATCH 35/75] Refactors card attackby chains into item_interaction (#84106) ## About The Pull Request Funnily enough I was already working on this before shit broke, but here we go. This is mostly just the same behaviour but ported to `item_interaction(...)`. Primary changes include splitting off ID recoloring into its own method for clarity, adding more sanity checks when using tgui windows, and slightly improving the comprehensibility of genpop prisoner id interactions (proper time text instead of seconds, actual usage descs). ## Why It's Good For The Game Better to use `item_interaction(...)` than `attackby(...)`. Fixes an interaction bug introduced by the recent afterattack refactor. Nice to have a better idea of how to use genpop. ## Changelog :cl: refactor: Updated cards/ids to use the proper item interaction system instead of attackby, please report any issues. fix: You can no longer recolour an ID at any point if you open the menu but then don't select anything until later. fix: ID cards can be recoloured using crayons/spraycans again. qol: Prisoner IDs show genpop sentence time in hours/minutes/seconds instead of seconds. qol: Prisoner IDs have genpop usage tips in their examine. /:cl: --- code/game/objects/items/cards_ids.dm | 123 +++++++++++++++++---------- 1 file changed, 80 insertions(+), 43 deletions(-) diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index c43f32daacbdf..5dc826e8fd51e 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -552,26 +552,26 @@ if(ispath(trim)) SSid_access.apply_trim_to_card(src, trim) -/obj/item/card/id/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/rupee)) +/obj/item/card/id/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/rupee)) to_chat(user, span_warning("Your ID smartly rejects the strange shard of glass. Who knew, apparently it's not ACTUALLY valuable!")) - return - else if(iscash(W)) - insert_money(W, user) - return - else if(istype(W, /obj/item/storage/bag/money)) - var/obj/item/storage/bag/money/money_bag = W + return ITEM_INTERACT_BLOCKING + else if(iscash(tool)) + return insert_money(tool, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING + else if(istype(tool, /obj/item/storage/bag/money)) + var/obj/item/storage/bag/money/money_bag = tool var/list/money_contained = money_bag.contents var/money_added = mass_insert_money(money_contained, user) - if (money_added) - to_chat(user, span_notice("You stuff the contents into the card! They disappear in a puff of bluespace smoke, adding [money_added] worth of credits to the linked account.")) - return - else - return ..() + if(!money_added) + return ITEM_INTERACT_BLOCKING + to_chat(user, span_notice("You stuff the contents into the card! They disappear in a puff of bluespace smoke, adding [money_added] worth of credits to the linked account.")) + return ITEM_INTERACT_SUCCESS + return NONE /** * Insert credits or coins into the ID card and add their value to the associated bank account. * + * Returns TRUE if the money was successfully inserted, FALSE otherwise. * Arguments: * money - The item to attempt to convert to credits and insert into the card. * user - The user inserting the item. @@ -584,11 +584,11 @@ if(!registered_account) to_chat(user, span_warning("[src] doesn't have a linked account to deposit [money] into!")) - return + return FALSE var/cash_money = money.get_item_credit_value() if(!cash_money) to_chat(user, span_warning("[money] doesn't seem to be worth anything!")) - return + return FALSE registered_account.adjust_money(cash_money, "System: Deposit") SSblackbox.record_feedback("amount", "credits_inserted", cash_money) log_econ("[cash_money] credits were inserted into [src] owned by [src.registered_name]") @@ -599,6 +599,7 @@ to_chat(user, span_notice("The linked account now reports a balance of [registered_account.account_balance] cr.")) qdel(money) + return TRUE /** * Insert multiple money or money-equivalent items at once. @@ -953,20 +954,41 @@ return ..() - -/obj/item/card/id/advanced/attackby(obj/item/W, mob/user, params) +/obj/item/card/id/advanced/item_interaction(mob/living/user, obj/item/tool, list/modifiers) . = ..() - if(istype(W, /obj/item/toy/crayon)) - var/obj/item/toy/crayon/our_crayon = W - if(tgui_alert(usr, "Recolor Department or Subdepartment?", "Recoloring ID...", list("Department", "Subdepartment")) == "Department") - if(!do_after(user, 2 SECONDS)) // Doesn't technically require a spraycan's cap to be off but shhh - return + if(.) + return . + + if(istype(tool, /obj/item/toy/crayon)) + return recolor_id(user, tool) + +/obj/item/card/id/advanced/proc/recolor_id(mob/living/user, obj/item/toy/crayon/our_crayon) + if(our_crayon.is_capped) + balloon_alert(user, "take the cap off first!") + return ITEM_INTERACT_BLOCKING + var/choice = tgui_alert(usr, "Recolor Department or Subdepartment?", "Recoloring ID...", list("Department", "Subdepartment")) + if(isnull(choice) \ + || QDELETED(user) \ + || QDELETED(src) \ + || QDELETED(our_crayon) \ + || !usr.can_perform_action(src, ALLOW_RESTING) \ + || !usr.can_perform_action(our_crayon, ALLOW_RESTING) \ + ) + return ITEM_INTERACT_BLOCKING + + switch(choice) + if("Department") + if(!do_after(user, 2 SECONDS)) + return ITEM_INTERACT_BLOCKING department_color_override = our_crayon.paint_color balloon_alert(user, "recolored") - else if(do_after(user, 1 SECONDS)) + if("Subdepartment") + if(!do_after(user, 1 SECONDS)) + return ITEM_INTERACT_BLOCKING subdepartment_color_override = our_crayon.paint_color balloon_alert(user, "recolored") - update_icon() + update_icon() + return ITEM_INTERACT_SUCCESS /obj/item/card/id/advanced/proc/update_intern_status(datum/source, mob/user, slot) SIGNAL_HANDLER @@ -1275,27 +1297,38 @@ /// Time left on a card till they can leave. var/time_left = 0 -/obj/item/card/id/advanced/prisoner/attackby(obj/item/card/id/C, mob/user) - ..() - var/list/id_access = C.GetAccess() +/obj/item/card/id/advanced/prisoner/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = ..() + if(.) + return . + + if(isidcard(tool)) + return set_sentence_time(user, tool) + +/obj/item/card/id/advanced/prisoner/proc/set_sentence_time(mob/living/user, obj/item/card/id/our_card) + var/list/id_access = our_card.GetAccess() if(!(ACCESS_BRIG in id_access)) - return FALSE - if(loc != user) + balloon_alert(user, "access denied!") + return ITEM_INTERACT_BLOCKING + if(!user.is_holding(src)) to_chat(user, span_warning("You must be holding the ID to continue!")) - return FALSE - if(timed) + return ITEM_INTERACT_BLOCKING + + if(timed) // If we already have a time set, reset the card timed = FALSE time_to_assign = initial(time_to_assign) registered_name = initial(registered_name) STOP_PROCESSING(SSobj, src) - to_chat(user, "Restating prisoner ID to default parameters.") - return + to_chat(user, "Resetting prisoner ID to default parameters.") + return ITEM_INTERACT_SUCCESS + var/choice = tgui_input_number(user, "Sentence time in seconds", "Sentencing") - if(!choice || QDELETED(user) || QDELETED(src) || !usr.can_perform_action(src, FORBID_TELEKINESIS_REACH) || loc != user) - return FALSE + if(isnull(choice) || QDELETED(user) || QDELETED(src) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH) || !user.is_holding(src)) + return ITEM_INTERACT_BLOCKING time_to_assign = choice - to_chat(user, "You set the sentence time to [time_to_assign] seconds.") + to_chat(user, "You set the sentence time to [DisplayTimeText(time_to_assign * 10)].") timed = TRUE + return ITEM_INTERACT_SUCCESS /obj/item/card/id/advanced/prisoner/proc/start_timer() say("Sentence started, welcome to the corporate rehabilitation center!") @@ -1307,10 +1340,15 @@ return if(timed) - if(time_left <= 0) + if(time_to_assign > 0) + . += span_notice("The digital timer on the card is set to [DisplayTimeText(time_to_assign * 10)]. The timer will start once the prisoner passes through the prison gate scanners.") + else if(time_left <= 0) . += span_notice("The digital timer on the card has zero seconds remaining. You leave a changed man, but a free man nonetheless.") else - . += span_notice("The digital timer on the card has [time_left] seconds remaining. Don't do the crime if you can't do the time.") + . += span_notice("The digital timer on the card has [DisplayTimeText(time_left * 10)] remaining. Don't do the crime if you can't do the time.") + + . += span_notice("[EXAMINE_HINT("Swipe")] a security ID on the card to [timed ? "re" : ""]set the genpop sentence time.") + . += span_notice("Remember to [EXAMINE_HINT("swipe")] the card on a genpop locker to link it.") /obj/item/card/id/advanced/prisoner/process(seconds_per_tick) if(!timed) @@ -1761,11 +1799,10 @@ voice_name += " (as [scribbled_name])" stored_name[NAME_PART_INDEX] = voice_name -/obj/item/card/cardboard/attackby(obj/item/item, mob/living/user, params) - if(user.can_write(item, TRUE)) - INVOKE_ASYNC(src, PROC_REF(modify_card), user, item) - return TRUE - return ..() +/obj/item/card/cardboard/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(user.can_write(tool, TRUE)) + INVOKE_ASYNC(src, PROC_REF(modify_card), user, tool) + return ITEM_INTERACT_SUCCESS ///Lets the user write a name, assignment or trim on the card, or reset it. Only the name is important for the component. /obj/item/card/cardboard/proc/modify_card(mob/living/user, obj/item/item) From d8865327e8d208f183036f20ccac7d35411ef1fb Mon Sep 17 00:00:00 2001 From: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Date: Thu, 20 Jun 2024 22:21:26 +0530 Subject: [PATCH 36/75] Broken APC's turn off area power (#84136) ## About The Pull Request - Fixes #84064 - Closes #83392(doesn't occur upstream but should help downstream if they have the problem) ## Changelog :cl: fix: breaking an APC will depower the area /:cl: --- code/modules/power/apc/apc_attack.dm | 18 +--------- code/modules/power/apc/apc_main.dm | 50 +++++++++++++++++++--------- 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/code/modules/power/apc/apc_attack.dm b/code/modules/power/apc/apc_attack.dm index 8c9715f1dcb1c..50f10c47e33c1 100644 --- a/code/modules/power/apc/apc_attack.dm +++ b/code/modules/power/apc/apc_attack.dm @@ -85,7 +85,7 @@ return /obj/machinery/power/apc/blob_act(obj/structure/blob/B) - set_broken() + atom_break() /obj/machinery/power/apc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armor_penetration = 0) // APC being at 0 integrity doesnt delete it outright. Combined with take_damage this might cause runtimes. @@ -100,11 +100,6 @@ return damage_amount . = ..() -/obj/machinery/power/apc/atom_break(damage_flag) - . = ..() - if(.) - set_broken() - /obj/machinery/power/apc/proc/can_use(mob/user, loud = 0) //used by attack_hand() and Topic() if(isAdminGhostAI(user)) return TRUE @@ -120,17 +115,6 @@ balloon_alert(user, "it's disabled!") return . -/obj/machinery/power/apc/proc/set_broken() - if(machine_stat & BROKEN) - return - if(malfai && operating) - malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10,0,1000) - operating = FALSE - atom_break() - if(occupier) - malfvacate(TRUE) - update() - /obj/machinery/power/apc/proc/shock(mob/user, prb) if(!prob(prb)) return FALSE diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index 7e63aff7cbe1b..69732c69b97ac 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -250,38 +250,51 @@ /obj/machinery/power/apc/proc/on_saboteur(datum/source, disrupt_duration) SIGNAL_HANDLER + disrupt_duration *= 0.1 // so, turns out, failure timer is in seconds, not deciseconds; without this, disruptions last 10 times as long as they probably should energy_fail(disrupt_duration) return COMSIG_SABOTEUR_SUCCESS +/obj/machinery/power/apc/on_set_is_operational(old_value) + update_area_power_usage(!old_value) + +/obj/machinery/power/apc/update_name(updates) + . = ..() + if(auto_name) + name = "\improper [get_area_name(area, TRUE)] APC" + /obj/machinery/power/apc/proc/assign_to_area(area/target_area = get_area(src)) if(area == target_area) return disconnect_from_area() area = target_area - area.power_light = TRUE - area.power_equip = TRUE - area.power_environ = TRUE - area.power_change() + update_area_power_usage(TRUE) area.apc = src auto_name = TRUE update_appearance(UPDATE_NAME) -/obj/machinery/power/apc/update_name(updates) - . = ..() - if(auto_name) - name = "\improper [get_area_name(area, TRUE)] APC" +/obj/machinery/power/apc/proc/update_area_power_usage(state) + //apc is non functional so force disable + if(state && (has_electronics != APC_ELECTRONICS_SECURED || (machine_stat & (BROKEN | MAINT)) || QDELETED(cell))) + state = FALSE + + //no change in value + if(state == area.power_light && state == area.power_equip && state == area.power_environ) + return + + area.power_light = state + area.power_equip = state + area.power_environ = state + + area.power_change() /obj/machinery/power/apc/proc/disconnect_from_area() if(isnull(area)) return - area.power_light = FALSE - area.power_equip = FALSE - area.power_environ = FALSE - area.power_change() + update_area_power_usage(FALSE) area.apc = null area = null @@ -318,9 +331,16 @@ else . += "The cover is closed." -/obj/machinery/power/apc/on_deconstruction(disassembled = TRUE) - if(!(machine_stat & BROKEN)) - set_broken() +/obj/machinery/power/apc/atom_break(damage_flag) + . = ..() + if(.) + if(malfai && operating) + malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10, 0, 1000) + operating = FALSE + if(occupier) + malfvacate(TRUE) + update() + if(opened != APC_COVER_REMOVED) opened = APC_COVER_REMOVED coverlocked = FALSE From f92a08642b08f87f0f61e3c5261e8dc46d8a643b Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 04:52:32 +1200 Subject: [PATCH 37/75] Automatic changelog for PR #84106 [ci skip] --- html/changelogs/AutoChangeLog-pr-84106.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84106.yml diff --git a/html/changelogs/AutoChangeLog-pr-84106.yml b/html/changelogs/AutoChangeLog-pr-84106.yml new file mode 100644 index 0000000000000..dc33240181e5f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84106.yml @@ -0,0 +1,8 @@ +author: "00-Steven" +delete-after: True +changes: + - refactor: "Updated cards/ids to use the proper item interaction system instead of attackby, please report any issues." + - bugfix: "You can no longer recolour an ID at any point if you open the menu but then don't select anything until later." + - bugfix: "ID cards can be recoloured using crayons/spraycans again." + - qol: "Prisoner IDs show genpop sentence time in hours/minutes/seconds instead of seconds." + - qol: "Prisoner IDs have genpop usage tips in their examine." \ No newline at end of file From fcaadffa78f988c9f6bb0d664a9f7ec1a779d8ac Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 04:52:43 +1200 Subject: [PATCH 38/75] Automatic changelog for PR #84136 [ci skip] --- html/changelogs/AutoChangeLog-pr-84136.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84136.yml diff --git a/html/changelogs/AutoChangeLog-pr-84136.yml b/html/changelogs/AutoChangeLog-pr-84136.yml new file mode 100644 index 0000000000000..a81b14d088658 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84136.yml @@ -0,0 +1,4 @@ +author: "SyncIt21" +delete-after: True +changes: + - bugfix: "breaking an APC will depower the area" \ No newline at end of file From 24deefde7ee76481802a80f954246f31c2b8ad77 Mon Sep 17 00:00:00 2001 From: Rex9001 <120136161+Rex9001@users.noreply.github.com> Date: Thu, 20 Jun 2024 19:18:14 +0200 Subject: [PATCH 39/75] Lunatics now get their objectives properly and get their hud (and updated look for the heretic master) (#83977) ## About The Pull Request Fixes lunatics getting no obectives by adding the objective before the info panel is generated. The ascended moon heretic now gets a Lunatic Master antag datum so lunatics should no have an easier time seeing their master at a glance. Lunatics should now also get their hud properly fixes https://github.com/tgstation/tgstation/issues/83959 and https://github.com/tgstation/tgstation/issues/82835 ## Why It's Good For The Game All of these issues made moon ascension very buggy and now it should play better. ## Changelog :cl: fix: lunatics now get their hud properly fix: lunatics now get objectives qol: ascended moon heretics are now labelled as ringleaders and are easier for lunatics to spot /:cl: --- .../heretic/knowledge/moon_lore.dm | 4 +- .../antagonists/heretic/moon_lunatic.dm | 41 +++++++++++++++--- icons/mob/huds/antag_hud.dmi | Bin 5381 -> 5607 bytes 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/code/modules/antagonists/heretic/knowledge/moon_lore.dm b/code/modules/antagonists/heretic/knowledge/moon_lore.dm index e2af5390ba810..4b61648329214 100644 --- a/code/modules/antagonists/heretic/knowledge/moon_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/moon_lore.dm @@ -188,7 +188,6 @@ /datum/heretic_knowledge/ultimate/moon_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) priority_announce( text = "[generate_heretic_text()] Laugh, for the ringleader [user.real_name] has ascended! \ The truth shall finally devour the lie! [generate_heretic_text()]", @@ -199,8 +198,7 @@ user.client?.give_award(/datum/award/achievement/misc/moon_ascension, user) ADD_TRAIT(user, TRAIT_MADNESS_IMMUNE, REF(src)) - heretic_datum.add_team_hud(user, /datum/antagonist/lunatic) - + user.mind.add_antag_datum(/datum/antagonist/lunatic/master) RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life)) // Roughly 1/5th of the station will rise up as lunatics to the heretic diff --git a/code/modules/antagonists/heretic/moon_lunatic.dm b/code/modules/antagonists/heretic/moon_lunatic.dm index dbc07a6b5054b..3d877ee962c11 100644 --- a/code/modules/antagonists/heretic/moon_lunatic.dm +++ b/code/modules/antagonists/heretic/moon_lunatic.dm @@ -13,16 +13,27 @@ var/datum/mind/ascended_heretic // The body of the ascended heretic who created us var/mob/living/carbon/human/ascended_body + // Our objective + var/datum/objective/lunatic/lunatic_obj + +/datum/antagonist/lunatic/on_gain() + // Masters gain an objective before so we dont want duplicates + for(var/objective in objectives) + if(!istype(objective, /datum/objective/lunatic)) + continue + return ..() + var/datum/objective/lunatic/loony = new() + objectives += loony + lunatic_obj = loony + return ..() /// Runs when the moon heretic creates us, used to give the lunatic a master /datum/antagonist/lunatic/proc/set_master(datum/mind/heretic_master, mob/living/carbon/human/heretic_body) src.ascended_heretic = heretic_master src.ascended_body = heretic_body - var/datum/objective/lunatic/lunatic_obj = new() lunatic_obj.master = heretic_master lunatic_obj.update_explanation_text() - objectives += lunatic_obj to_chat(owner, span_boldnotice("Ruin the lie, save the truth through obeying [heretic_master] the ringleader!")) @@ -30,8 +41,7 @@ var/mob/living/our_mob = mob_override || owner.current handle_clown_mutation(our_mob, "Ancient knowledge from the moon has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.") our_mob.faction |= FACTION_HERETIC - add_team_hud(our_mob) - add_team_hud(our_mob, /datum/antagonist/heretic) + add_team_hud(our_mob, /datum/antagonist/lunatic) ADD_TRAIT(our_mob, TRAIT_MADNESS_IMMUNE, REF(src)) var/datum/action/cooldown/lunatic_track/moon_track = new /datum/action/cooldown/lunatic_track() @@ -52,7 +62,28 @@ /datum/objective/lunatic explanation_text = "Assist your ringleader. If you are seeing this, scroll up in chat for who that is and report this" var/datum/mind/master + // If the person with this objective is a lunatic master + var/is_master = FALSE /datum/objective/lunatic/update_explanation_text() . = ..() - explanation_text = "Assist your ringleader [master]" + if(is_master) + explanation_text = "Lead your lunatics to further your own goals!" + return + explanation_text = "Assist your ringleader [master], do not harm fellow lunatics" + +// Lunatic master +/datum/antagonist/lunatic/master + name = "\improper Ringleader" + antag_hud_name = "lunatic_master" + +/datum/antagonist/lunatic/master/on_gain() + var/datum/objective/lunatic/loony = new() + objectives += loony + loony.is_master = TRUE + loony.update_explanation_text() + return ..() + +/datum/antagonist/lunatic/master/apply_innate_effects(mob/living/mob_override) + var/mob/living/our_mob = mob_override || owner.current + add_team_hud(our_mob, /datum/antagonist/lunatic) diff --git a/icons/mob/huds/antag_hud.dmi b/icons/mob/huds/antag_hud.dmi index c51fcc5baa8c66c7e63ba22bea8ed94a097d3362..2a916d01d95530e75894a589470372842030b7b9 100644 GIT binary patch literal 5607 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 SqDddPfQf;beuJ)i!v6q?Acdd+ literal 5381 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 Date: Fri, 21 Jun 2024 05:18:33 +1200 Subject: [PATCH 40/75] Automatic changelog for PR #83977 [ci skip] --- html/changelogs/AutoChangeLog-pr-83977.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83977.yml diff --git a/html/changelogs/AutoChangeLog-pr-83977.yml b/html/changelogs/AutoChangeLog-pr-83977.yml new file mode 100644 index 0000000000000..d25e543431a43 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83977.yml @@ -0,0 +1,6 @@ +author: "Rex9001" +delete-after: True +changes: + - bugfix: "lunatics now get their hud properly" + - bugfix: "lunatics now get objectives" + - qol: "ascended moon heretics are now labelled as ringleaders and are easier for lunatics to spot" \ No newline at end of file From 7b1a0daad211339240dc552b00dc2f7d730211cc Mon Sep 17 00:00:00 2001 From: Rhials <28870487+Rhials@users.noreply.github.com> Date: Thu, 20 Jun 2024 13:19:30 -0400 Subject: [PATCH 41/75] DRAGnet snares now use a dedicated beacon instead of the station teleporter (#84118) ## About The Pull Request This sets up an alternative to the DRAGnet snares using the teleporter to determine the destination of their snare teleport -- The DRAGnet beacon. ![drag net](https://github.com/tgstation/tgstation/assets/28870487/0084d4d9-378f-4896-bc88-0685d6407999) Rather than using a convoluted system that routes via the teleporter, DRAGnets can now by synced with a DRAGnet beacon. When snare rounds are fired and successfully teleport a target, they will instead be sent to the synced beacon. Syncing can be done by either pressing the gun to the beacon or vice-versa. These beacons can be wrenched into place, then swiped with a security ID to block them from being unwrenched. An emag will unlock and unwrench the beacon, and fry its access control. To facilitate this change, roundstart DRAGnet armory spawns are now done through spawners (like the other weapons), which includes a single beacon to be used by the two guns. You can print more with basic sec tech, and one is included in the DRAGnet crate from cargo. The teleport is also slightly more accurate, to make it more consistent. As usual, if not synced to a beacon, DRAGnets will just teleport your target willy-nilly. ## Why It's Good For The Game The current system is both clunky and prone to mishaps, dissuading players from engaging with it. The "active" teleporter concept has always been a bit of a mystery to players, and when a system for properly using the DRAGnet teleport is set up, it's incredibly easy to break even on accident. Every time you teleport a prisoner you have to pray that no bumbling space explorer decided to reroute the teleporter to the abandoned satellite. This system is much more clear and reliable. It's also more versatile, allowing for multiple teleport networks to be set up simultaneously. Security is starved for creativity at times. They deserve to be able to do some wacky dynamic stuff with their tools. ## Changelog :cl: Rhials balance: DRAGnets now come with a beacon they can be synced to, which will set the destination for the snare round's teleport ability. /:cl: --- _maps/map_files/Birdshot/birdshot.dmm | 2 +- .../map_files/Deltastation/DeltaStation2.dmm | 5 +- .../map_files/IceBoxStation/IceBoxStation.dmm | 5 +- _maps/map_files/MetaStation/MetaStation.dmm | 3 +- _maps/map_files/NorthStar/north_star.dmm | 2 +- _maps/map_files/tramstation/tramstation.dmm | 3 +- _maps/map_files/wawastation/wawastation.dmm | 3 +- .../objects/effects/spawners/random/armory.dm | 10 ++ code/modules/cargo/packs/security.dm | 7 +- .../projectiles/guns/energy/energy_gun.dm | 27 +++++- .../projectile/energy/net_snare.dm | 87 +++++++++++++++--- code/modules/research/designs/misc_designs.dm | 13 +++ .../research/techweb/nodes/security_nodes.dm | 1 + icons/effects/random_spawners.dmi | Bin 95426 -> 95835 bytes icons/obj/devices/tracker.dmi | Bin 11771 -> 11967 bytes 15 files changed, 134 insertions(+), 34 deletions(-) diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index 86dd2443803c4..ef02944be5751 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -45122,7 +45122,7 @@ /obj/structure/rack, /obj/effect/spawner/random/armory/riot_helmet, /obj/effect/spawner/random/armory/bulletproof_helmet, -/obj/item/gun/energy/e_gun/dragnet, +/obj/effect/spawner/random/armory/dragnet, /turf/open/floor/iron/dark/small, /area/station/ai_monitored/security/armory) "qaV" = ( diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index f399c25d3b148..9f1a266b18575 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -882,11 +882,8 @@ pixel_x = 3 }, /obj/structure/window/reinforced/spawner/directional/north, -/obj/item/gun/energy/e_gun/dragnet{ - pixel_y = 4 - }, -/obj/item/gun/energy/e_gun/dragnet, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/spawner/random/armory/dragnet, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "alG" = ( diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 09525a5fa06ec..9e5ecd8c0486f 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -30518,15 +30518,12 @@ "jko" = ( /obj/structure/railing, /obj/structure/rack, -/obj/item/gun/energy/e_gun/dragnet{ - pixel_y = 4 - }, -/obj/item/gun/energy/e_gun/dragnet, /obj/structure/cable, /obj/machinery/door/firedoor/border_only, /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, +/obj/effect/spawner/random/armory/dragnet, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory/upper) "jkx" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 24c017ab71bd5..6cd01a35c9daf 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -32130,12 +32130,11 @@ /area/station/maintenance/fore) "loY" = ( /obj/structure/rack, -/obj/item/gun/energy/e_gun/dragnet, -/obj/item/gun/energy/e_gun/dragnet, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 }, /obj/machinery/light/small/directional/west, +/obj/effect/spawner/random/armory/dragnet, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "lpo" = ( diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index 0f9faf9338b6c..7ce411f102fc1 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -57668,7 +57668,7 @@ /area/station/science/lower) "oOW" = ( /obj/structure/rack, -/obj/item/gun/energy/e_gun/dragnet, +/obj/effect/spawner/random/armory/dragnet, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "oOY" = ( diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 4015dbf2ad35b..a8b81413f9cb6 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -28696,10 +28696,9 @@ /area/station/cargo/storage) "jlQ" = ( /obj/structure/rack, -/obj/item/gun/energy/e_gun/dragnet, -/obj/item/gun/energy/e_gun/dragnet, /obj/item/radio/intercom/directional/north, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/spawner/random/armory/dragnet, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "jlX" = ( diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index 8bec8ecfae0fd..f06276d3e9fa2 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -13544,12 +13544,11 @@ /area/station/maintenance/department/medical) "eQJ" = ( /obj/structure/rack, -/obj/item/gun/energy/e_gun/dragnet, -/obj/item/gun/energy/e_gun/dragnet, /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, /obj/item/radio/intercom/directional/south, +/obj/effect/spawner/random/armory/dragnet, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "eQQ" = ( diff --git a/code/game/objects/effects/spawners/random/armory.dm b/code/game/objects/effects/spawners/random/armory.dm index 5292ca6ad0986..dfb71ff10d54b 100644 --- a/code/game/objects/effects/spawners/random/armory.dm +++ b/code/game/objects/effects/spawners/random/armory.dm @@ -45,6 +45,16 @@ icon_state = "shotgun" loot = list(/obj/item/gun/ballistic/shotgun/riot) +/obj/effect/spawner/random/armory/dragnet + name = "DRAGnet spawner" + icon_state = "dragnet" + loot = list(/obj/item/gun/energy/e_gun/dragnet) + spawn_loot_count = 2 + +/obj/effect/spawner/random/armory/dragnet/spawn_loot(lootcount_override) + . = ..() + new /obj/item/dragnet_beacon(get_turf(src)) //And give them a beacon too! + // Armor /obj/effect/spawner/random/armory/bulletproof_helmet name = "bulletproof helmet spawner" diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm index e36f9f84cacf1..05360fe913f0a 100644 --- a/code/modules/cargo/packs/security.dm +++ b/code/modules/cargo/packs/security.dm @@ -214,9 +214,12 @@ /datum/supply_pack/security/armory/dragnet name = "DRAGnet Crate" desc = "Contains three \"Dynamic Rapid-Apprehension of the Guilty\" netting devices, \ - a recent breakthrough in law enforcement prisoner management technology." + a recent breakthrough in law enforcement prisoner management technology. Includes a DRAGnet beacon." cost = CARGO_CRATE_VALUE * 5 - contains = list(/obj/item/gun/energy/e_gun/dragnet = 3) + contains = list( + /obj/item/gun/energy/e_gun/dragnet = 3, + /obj/item/dragnet_beacon = 1 + ) crate_name = "\improper DRAGnet crate" /datum/supply_pack/security/armory/energy diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index fec816b1e765f..78e75d1f30665 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -86,7 +86,7 @@ /obj/item/gun/energy/e_gun/dragnet name = "\improper DRAGnet" - desc = "The \"Dynamic Rapid-Apprehension of the Guilty\" net is a revolution in law enforcement technology." + desc = "The \"Dynamic Rapid-Apprehension of the Guilty\" net is a revolution in law enforcement technology. Can by synced with a DRAGnet beacon to set a teleport destination for snare rounds." icon_state = "dragnet" inhand_icon_state = "dragnet" lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' @@ -95,10 +95,35 @@ modifystate = FALSE w_class = WEIGHT_CLASS_NORMAL ammo_x_offset = 1 + ///A dragnet beacon set to be the teleport destination for snare teleport rounds. + var/obj/item/dragnet_beacon/linked_beacon /obj/item/gun/energy/e_gun/dragnet/add_seclight_point() return +/obj/item/gun/energy/e_gun/dragnet/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/dragnet_beacon)) + link_beacon(user, tool) + +///Sets the linked_beacon var on the dragnet, which becomes the snare round's teleport destination. +/obj/item/gun/energy/e_gun/dragnet/proc/link_beacon(mob/living/user, obj/item/dragnet_beacon/our_beacon) + if(linked_beacon) + if(our_beacon == linked_beacon) + balloon_alert(user, "already synced!") + return + else + UnregisterSignal(linked_beacon, COMSIG_QDELETING) //You're getting overridden dude. + + linked_beacon = our_beacon + balloon_alert(user, "beacon synced") + RegisterSignal(our_beacon, COMSIG_QDELETING, PROC_REF(handle_beacon_disable)) + +///Handles clearing the linked_beacon reference in the event that it is deleted. +/obj/item/gun/energy/e_gun/dragnet/proc/handle_beacon_disable(datum/source) + SIGNAL_HANDLER + visible_message(span_warning("A light on the [src] flashes, indicating that it is no longer linked with a DRAGnet beacon!")) + linked_beacon = null + /obj/item/gun/energy/e_gun/dragnet/snare name = "Energy Snare Launcher" desc = "Fires an energy snare that slows the target down." diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm index 1bb7988e4bae4..ac35fb5503e68 100644 --- a/code/modules/projectiles/projectile/energy/net_snare.dm +++ b/code/modules/projectiles/projectile/energy/net_snare.dm @@ -11,10 +11,15 @@ SpinAnimation() /obj/projectile/energy/net/on_hit(atom/target, blocked = 0, pierce_hit) + var/obj/item/dragnet_beacon/destination_beacon = null + var/obj/item/gun/energy/e_gun/dragnet/our_dragnet = fired_from + if(our_dragnet && istype(our_dragnet)) + destination_beacon = our_dragnet.linked_beacon + if(isliving(target)) var/turf/Tloc = get_turf(target) if(!locate(/obj/effect/nettingportal) in Tloc) - new /obj/effect/nettingportal(Tloc) + new /obj/effect/nettingportal(Tloc, destination_beacon) . = ..() /obj/projectile/energy/net/on_range() @@ -29,26 +34,18 @@ light_range = 3 anchored = TRUE -/obj/effect/nettingportal/Initialize(mapload) +/obj/effect/nettingportal/Initialize(mapload, destination_beacon) . = ..() - var/obj/item/beacon/teletarget = null - for(var/obj/machinery/computer/teleporter/com as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/teleporter)) - var/atom/target = com.target_ref?.resolve() - if(target) - if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged) - teletarget = target - else - com.target_ref = null - + var/obj/item/dragnet_beacon/teletarget = destination_beacon addtimer(CALLBACK(src, PROC_REF(pop), teletarget), 3 SECONDS) /obj/effect/nettingportal/proc/pop(teletarget) if(teletarget) - for(var/mob/living/L in get_turf(src)) - do_teleport(L, teletarget, 2, channel = TELEPORT_CHANNEL_BLUESPACE)//teleport what's in the tile to the beacon + for(var/mob/living/living_mob in get_turf(src)) + do_teleport(living_mob, get_turf(teletarget), 1, channel = TELEPORT_CHANNEL_BLUESPACE) //Teleport what's in the tile to the beacon else - for(var/mob/living/L in get_turf(src)) - do_teleport(L, L, 15, channel = TELEPORT_CHANNEL_BLUESPACE) //Otherwise it just warps you off somewhere. + for(var/mob/living/living_mob in get_turf(src)) + do_teleport(living_mob, get_turf(living_mob), 15, channel = TELEPORT_CHANNEL_BLUESPACE) //Otherwise it just warps you off somewhere. qdel(src) @@ -58,6 +55,66 @@ /obj/effect/nettingportal/singularity_pull() return +/obj/item/dragnet_beacon + name = "\improper DRAGnet beacon" + desc = "Can be synced with a DRAGnet to set it as a designated teleporting point." + icon = 'icons/obj/devices/tracker.dmi' + icon_state = "dragnet_beacon" + inhand_icon_state = "beacon" + lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' + ///Has a security ID been used to lock this in place? + var/locked = FALSE + +/obj/item/dragnet_beacon/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/gun/energy/e_gun/dragnet)) + var/obj/item/gun/energy/e_gun/dragnet/dragnet_to_link = tool + dragnet_to_link.link_beacon(user, src) + return + + if(isidcard(tool)) + if(!anchored) + balloon_alert(user, "wrench the beacon first!") + return + + if(obj_flags & EMAGGED) + balloon_alert(user, "the access control is fried!") + return + + var/obj/item/card/id/id_card = tool + if((ACCESS_SECURITY in id_card.GetAccess())) + locked = !locked + balloon_alert(user, "beacon [locked ? "locked" : "unlocked"]") + else + balloon_alert(user, "no access!") + +/obj/item/dragnet_beacon/wrench_act(mob/living/user, obj/item/tool) + if(user.is_holding(src)) + balloon_alert(user, "put it down first!") + return ITEM_INTERACT_BLOCKING + + if(anchored && locked) + balloon_alert(user, "must be unlocked first!") + return ITEM_INTERACT_BLOCKING + + if(isinspace() && !anchored) + balloon_alert(user, "nothing to anchor to!") + return ITEM_INTERACT_BLOCKING + + set_anchored(!anchored) + tool.play_tool_sound(src, 75) + user.balloon_alert_to_viewers("[anchored ? "anchored" : "unanchored"]") + +/obj/item/dragnet_beacon/emag_act(mob/user, obj/item/card/emag/emag_card) + if(obj_flags & EMAGGED) + return FALSE + obj_flags |= EMAGGED + locked = FALSE + set_anchored(FALSE) + do_sparks(3, TRUE, src) + balloon_alert(user, "beacon unlocked") + return TRUE + /obj/projectile/energy/trap name = "energy snare" icon_state = "e_snare" diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index 8ae869220deef..0ea6c41e16448 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -818,6 +818,19 @@ ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/dragnet_beacon + name = "DRAGnet Beacon" + desc = "A beacon that can be used as a teleport destination for DRAGnet snare rounds. Remember to sync it with your DRAGnet first!" + id = "dragnet_beacon" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2) + build_path = /obj/item/dragnet_beacon + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + /datum/design/inspector name = "N-Spect Scanner" desc = "Central Command-issued inspection device. Performs inspections according to Nanotrasen protocols when activated, then prints an encrypted report regarding the maintenance of the station. Definitely not giving you cancer." diff --git a/code/modules/research/techweb/nodes/security_nodes.dm b/code/modules/research/techweb/nodes/security_nodes.dm index 97092f2682a63..8b931fd2273e5 100644 --- a/code/modules/research/techweb/nodes/security_nodes.dm +++ b/code/modules/research/techweb/nodes/security_nodes.dm @@ -32,6 +32,7 @@ "scanner_gate", "turret_control", "pepperspray", + "dragnet_beacon", "inspector", "evidencebag", "handcuffs_s", diff --git a/icons/effects/random_spawners.dmi b/icons/effects/random_spawners.dmi index ddd6fd6f608bd114a92d6210f8bf26e4e9968e71..ed6c0c8702e45438562f6b7aa916f29cd7c1d1b2 100644 GIT binary patch delta 5975 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 diff --git a/icons/obj/devices/tracker.dmi b/icons/obj/devices/tracker.dmi index 59884c0aff8810423f1206e144301f016b54c262..39be63ef4de814e2bfd48b1848367c37cb98b46d 100644 GIT binary patch delta 10423 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 delta 10232 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 From 7299f0d746e997947c9f69d1613e858860caf154 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 05:20:16 +1200 Subject: [PATCH 42/75] Automatic changelog for PR #84118 [ci skip] --- html/changelogs/AutoChangeLog-pr-84118.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84118.yml diff --git a/html/changelogs/AutoChangeLog-pr-84118.yml b/html/changelogs/AutoChangeLog-pr-84118.yml new file mode 100644 index 0000000000000..f91609e8fe3b9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84118.yml @@ -0,0 +1,4 @@ +author: "Rhials" +delete-after: True +changes: + - balance: "DRAGnets now come with a beacon they can be synced to, which will set the destination for the snare round's teleport ability." \ No newline at end of file From 9adf780b5dc029fb06831ef4de24148bda2808ec Mon Sep 17 00:00:00 2001 From: JackEnoff <166665535+JackEnoff@users.noreply.github.com> Date: Thu, 20 Jun 2024 13:32:16 -0400 Subject: [PATCH 43/75] Repurposed Glands (Adrenals) now show the correct chemical cost and duration (#84088) ## About The Pull Request Adrenals now show the actual chemical cost it inquires and its correct duration in its description in the action button and cellular emporium. Also yeah I did kinda forgot to atomize this while working on the ling balance changes, oopsies! ## Why It's Good For The Game Misiformation in the description = new player bait = bad ## Changelog :cl: fix: Repurposed Glands (Adrenals) now show their correct duration and chemical cost in its description. /:cl: --- code/modules/antagonists/changeling/powers/adrenaline.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/antagonists/changeling/powers/adrenaline.dm b/code/modules/antagonists/changeling/powers/adrenaline.dm index 10c06656b2978..3b6a550b18b0f 100644 --- a/code/modules/antagonists/changeling/powers/adrenaline.dm +++ b/code/modules/antagonists/changeling/powers/adrenaline.dm @@ -1,6 +1,6 @@ /datum/action/changeling/adrenaline name = "Repurposed Glands" - desc = "We shift almost all available muscle mass from the arms to the legs, disabling the former but making us unable to be downed for 15 seconds. Costs 10 chemicals." + desc = "We shift almost all available muscle mass from the arms to the legs, disabling the former but making us unable to be downed for 20 seconds. Costs 25 chemicals." helptext = "Disables your arms and retracts bioweaponry, but regenerates your legs, grants you speed, and wakes you up from any stun." button_icon_state = "adrenaline" chemical_cost = 25 // similar cost to biodegrade, as they serve similar purposes From 6502360c9aebd89df1d6aa9742e13820c235f6f8 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 05:38:18 +1200 Subject: [PATCH 44/75] Automatic changelog for PR #84088 [ci skip] --- html/changelogs/AutoChangeLog-pr-84088.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84088.yml diff --git a/html/changelogs/AutoChangeLog-pr-84088.yml b/html/changelogs/AutoChangeLog-pr-84088.yml new file mode 100644 index 0000000000000..1dce6075c2695 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84088.yml @@ -0,0 +1,4 @@ +author: "JackEnoff" +delete-after: True +changes: + - bugfix: "Repurposed Glands (Adrenals) now show their correct duration and chemical cost in its description." \ No newline at end of file From 8dee916d5d39cfcf996ec8f510abbf0241019f76 Mon Sep 17 00:00:00 2001 From: GPeckman <21979502+GPeckman@users.noreply.github.com> Date: Thu, 20 Jun 2024 13:38:33 -0400 Subject: [PATCH 45/75] Fixes cleaning spray being blocked by everything (#83941) ## About The Pull Request Fixes #62873, a very old bug. It looks like someone else added code that affected the lifetime of a chemical spray, so I just took the simple option and removed that bit of code. ## Why It's Good For The Game Bug fix. ## Changelog :cl: fix: When on 'stream' mode, the cleaning spray from a bottle of space cleaner should no longer be blocked by just about everything. /:cl: --- code/modules/reagents/reagent_containers/spray.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 387f3b84d4911..bb426436599c0 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -96,7 +96,6 @@ /obj/item/reagent_containers/spray/proc/do_spray(atom/target, wait_step, obj/effect/decal/chempuff/reagent_puff, range, puff_reagent_left, mob/user) reagent_puff.user = user reagent_puff.sprayer = src - reagent_puff.lifetime = puff_reagent_left reagent_puff.stream = stream_mode var/turf/target_turf = get_turf(target) From de13f1ee5ad3e271a07e6ee1ac826881d5bd1188 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 05:39:13 +1200 Subject: [PATCH 46/75] Automatic changelog for PR #83941 [ci skip] --- html/changelogs/AutoChangeLog-pr-83941.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83941.yml diff --git a/html/changelogs/AutoChangeLog-pr-83941.yml b/html/changelogs/AutoChangeLog-pr-83941.yml new file mode 100644 index 0000000000000..e7aa6d982793b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83941.yml @@ -0,0 +1,4 @@ +author: "GPeckman" +delete-after: True +changes: + - bugfix: "When on 'stream' mode, the cleaning spray from a bottle of space cleaner should no longer be blocked by just about everything." \ No newline at end of file From 10d1740c94ecd714842c66f53f83e2063596aeae Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Thu, 20 Jun 2024 20:47:33 +0300 Subject: [PATCH 47/75] MODsuit welding module protects flash-sensitives from flashes (#84112) ## About The Pull Request ```php desc = "A module installed into the visor of the suit, this projects a \ polarized, holographic overlay in front of the user's eyes. It's rated high enough for \ immunity against extremities such as spot and arc welding, solar eclipses, and handheld flashlights." ``` ## Why It's Good For The Game This module projects a screen on the inside of the MODsuit, why would it not protect flash-sensitives. ## Changelog :cl: grungussuss fix: Welding protection module for MODsuits protect flash-sensitives from welding arcs /:cl: --------- Co-authored-by: san7890 --- code/__DEFINES/mobs.dm | 2 ++ code/modules/mod/modules/modules_engineering.dm | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 6f6a9d209a10e..a0c40856dace1 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -448,6 +448,8 @@ #define FLASH_PROTECTION_NONE 0 #define FLASH_PROTECTION_FLASH 1 #define FLASH_PROTECTION_WELDER 2 +#define FLASH_PROTECTION_WELDER_PLUS 3 +#define FLASH_PROTECTION_MAXIMUM 4 // AI Toggles #define AI_CAMERA_LUMINOSITY 5 diff --git a/code/modules/mod/modules/modules_engineering.dm b/code/modules/mod/modules/modules_engineering.dm index cb830b2128e7e..e1081d0365a9b 100644 --- a/code/modules/mod/modules/modules_engineering.dm +++ b/code/modules/mod/modules/modules_engineering.dm @@ -15,7 +15,8 @@ /obj/item/mod/module/welding/on_suit_activation() var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) || mod.get_part_from_slot(ITEM_SLOT_MASK) || mod.get_part_from_slot(ITEM_SLOT_EYES) if(istype(head_cover)) - head_cover.flash_protect = FLASH_PROTECTION_WELDER + //this is a screen that displays an image, so flash sensitives can use this to protect against flashes. + head_cover.flash_protect = FLASH_PROTECTION_MAXIMUM /obj/item/mod/module/welding/on_suit_deactivation(deleting = FALSE) if(deleting) From 565e6bf944b18ebb958108662bd733f1eb351b57 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 05:48:12 +1200 Subject: [PATCH 48/75] Automatic changelog for PR #84112 [ci skip] --- html/changelogs/AutoChangeLog-pr-84112.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84112.yml diff --git a/html/changelogs/AutoChangeLog-pr-84112.yml b/html/changelogs/AutoChangeLog-pr-84112.yml new file mode 100644 index 0000000000000..9ea4b1d68bf9e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84112.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - bugfix: "Welding protection module for MODsuits protect flash-sensitives from welding arcs" \ No newline at end of file From b68c9677ce7589197ec48171a0089e5b0c34c1ee Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Thu, 20 Jun 2024 21:48:39 +0400 Subject: [PATCH 49/75] Resprited jetpacks (#84126) ## About The Pull Request Resprites absolutely ancient jetpack sprites. ![image](https://github.com/tgstation/tgstation/assets/44720187/9d901fd2-db2a-4fd2-807e-edc5822d0979) ## Why It's Good For The Game Current jetpack sprites are most likely from exadv era and look accordingly, lacking any shading or texture. ## Changelog :cl: image: Resprited all jetpacks /:cl: --- icons/mob/clothing/back.dmi | Bin 128847 -> 111960 bytes .../inhands/equipment/jetpacks_lefthand.dmi | Bin 3182 -> 3664 bytes .../inhands/equipment/jetpacks_righthand.dmi | Bin 3456 -> 3616 bytes icons/obj/canisters.dmi | Bin 17680 -> 15809 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index 52be2d07923e506a1aea2e7d2fb789c654701c5c..eb3f87d9c71f0a0300d7e8ae7be24743f96319d3 100644 GIT binary patch literal 111960 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
{ft#HnWqvy=XHSE?aryLk`3W3C}m&Q)

qsGg~-!SZ$~M7W+w~A3=5IJ&4<# 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 Hr-UW|shL2@ literal 128847 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%0D~fRk!7 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�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 PFbXlL8U~007|R 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 diff --git a/icons/obj/canisters.dmi b/icons/obj/canisters.dmi index 277833976adbb709736e378dd08b7ab814ea2b36..436467648880b3583883cb9bff4075f62a486bb8 100644 GIT binary patch literal 15809 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

y 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 N002ovPDHLkV1j-Oly?9C From 92d1623c32b563aafddc5e8e06f315a435325dec Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 05:48:59 +1200 Subject: [PATCH 50/75] Automatic changelog for PR #84126 [ci skip] --- html/changelogs/AutoChangeLog-pr-84126.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84126.yml diff --git a/html/changelogs/AutoChangeLog-pr-84126.yml b/html/changelogs/AutoChangeLog-pr-84126.yml new file mode 100644 index 0000000000000..633e7a1a2870b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84126.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - image: "Resprited all jetpacks" \ No newline at end of file From 8a8fac1d078b99c7829d3d2575b7100ff275ff68 Mon Sep 17 00:00:00 2001 From: Djiq <42111655+EdgeLordExe@users.noreply.github.com> Date: Thu, 20 Jun 2024 20:13:13 +0200 Subject: [PATCH 51/75] Feast of Owls Heretic Ritual : Forsake your ascension (#83769) ## About The Pull Request This adds a simple ritual that let's a heretic forsake their ascension for immediate power - 5 knowledge points. ## Why It's Good For The Game Heretic suffers from lack of gimmicks and it's not really because of lack of tools that could support them, but rather due to heretics going straight for ascension (who can blame them), this ritual allows a heretic to restrict themself from ascending and in exchange gain a sizeable amount of research points. Not only that, but this will also help with people learning heretic, as it allows a new player to jump immediately into heretic without the struggle of early game (the struggle of early-game justifies late-game power, by rejecting late-game power heretic gets a jump-start with points.) ## Changelog :cl: add: Adds Feast of Owls ritual to heretic which allows one to forsake their ascension in exchange for immediate power. /:cl: --------- Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com> --- .../antagonists/heretic/heretic_antag.dm | 7 +++++- .../heretic/knowledge/starting_lore.dm | 25 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm index 9c41c54e84e09..416dbe390e16f 100644 --- a/code/modules/antagonists/heretic/heretic_antag.dm +++ b/code/modules/antagonists/heretic/heretic_antag.dm @@ -56,6 +56,8 @@ var/static/list/blacklisted_rune_turfs = typecacheof(list(/turf/open/space, /turf/open/openspace, /turf/open/lava, /turf/open/chasm)) /// Controls what types of turf we can spread rust to, increases as we unlock more powerful rust abilites var/rust_strength = 0 + /// Wether we are allowed to ascend + var/feast_of_owls = FALSE /// Static list of what each path converts to in the UI (colors are TGUI colors) var/static/list/path_to_ui_color = list( PATH_START = "grey", @@ -478,7 +480,8 @@ succeeded = FALSE parts += "Objective #[count]: [objective.explanation_text] [objective.get_roundend_success_suffix()]" count++ - + if(feast_of_owls) + parts += span_greentext("Ascension Forsaken") if(ascended) parts += span_greentext(span_big("THE HERETIC ASCENDED!")) @@ -695,6 +698,8 @@ /datum/antagonist/heretic/proc/can_ascend() if(!can_assign_self_objectives) return FALSE // We spurned the offer of the Mansus :( + if(feast_of_owls) + return FALSE // We sold our ambition for immediate power :/ for(var/datum/objective/must_be_done as anything in objectives) if(!must_be_done.check_completion()) return FALSE diff --git a/code/modules/antagonists/heretic/knowledge/starting_lore.dm b/code/modules/antagonists/heretic/knowledge/starting_lore.dm index f1b5f7f55ea19..50b57fd9e96b4 100644 --- a/code/modules/antagonists/heretic/knowledge/starting_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/starting_lore.dm @@ -293,3 +293,28 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) body.do_jitter_animation() body.visible_message(span_danger("An awful ripping sound is heard as [ripped_thing]'s [exterior_text] is ripped straight out, wrapping around [le_book || "the book"], turning into an eldritch shade of blue!")) return ..() + +/datum/heretic_knowledge/feast_of_owls + name = "Feast of Owls" + desc = "Allows you to undergo a ritual that gives you 5 knowledge points but locks you out of ascension. This can only be done once and cannot be reverted." + gain_text = "Under the soft glow of unreason there is a beast that stalks the night. I shall bring it forth and let it enter my presence. It will feast upon my amibitions and leave knowledge in its wake." + route = PATH_START + required_atoms = list() + +/datum/heretic_knowledge/feast_of_owls/can_be_invoked(datum/antagonist/heretic/invoker) + return !invoker.feast_of_owls + +/datum/heretic_knowledge/feast_of_owls/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) + var/alert = tgui_alert(user,"Do you really want to forsake your ascension? This action cannot be reverted.", "Feast of Owls", list("Yes I'm sure", "No"), 30 SECONDS) + if( alert != "Yes I'm sure") + return FALSE + user.set_temp_blindness(5 SECONDS) + user.AdjustParalyzed(5 SECONDS) + var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + for(var/i in 0 to 4) + user.emote("scream") + playsound(loc, 'sound/items/eatfood.ogg', 100, TRUE) + heretic_datum.knowledge_points++ + sleep(1 SECONDS) + to_chat(user,span_danger("You feel different...")) + heretic_datum.feast_of_owls = TRUE From 881dd195f15f50f789bd690babb556958bd60e57 Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 20 Jun 2024 21:15:30 +0300 Subject: [PATCH 52/75] Techweb tweaks [NO GBP] (#84086) ## About The Pull Request PR for collecting techweb feedback post merge and address valid issues of #84024. People seem to dislike the abundance of new experiments in the middle of the tree, so reducing some requirements for those for now. Also updated NT frontier app a bit, as people are confused with the shell experiments. ![image](https://github.com/tgstation/tgstation/assets/3625094/8ce91935-c374-443c-84b4-ebee14d6bac1) ## Why It's Good For The Game Balancing out the new tree. ## Changelog :cl: balance: Added ordnance to extra access of geneticists and roboticists balance: Reduced parts scanning tests' machine count to 4 from 8 balance: Reduced augmented organs scanning tests mob count to 1 from 2 balance: Reduced equipped mech scanning test count to 1 from 2 balance: Added polycrystal option to bluespace crystal scan test fix: Allowed NTNet relay in away circuit imprinter for NT Frontier app qol: NT Frontier app installed on RD and Scientists` PDAs by default qol: Updated NT Frontier app to be more user-friendly /:cl: --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> --- code/datums/id_trim/jobs.dm | 6 +- .../experisci/experiment/experiments.dm | 15 +- .../computers/item/role_tablet_presets.dm | 2 + .../file_system/programs/frontier.dm | 2 +- .../research/designs/machine_designs.dm | 1 - .../research/techweb/nodes/biology_nodes.dm | 2 +- .../research/techweb/nodes/research_nodes.dm | 2 +- .../packages/tgui/interfaces/NtosScipaper.jsx | 255 +++++++++--------- 8 files changed, 148 insertions(+), 137 deletions(-) diff --git a/code/datums/id_trim/jobs.dm b/code/datums/id_trim/jobs.dm index cfa608011bdf9..4d4c44138e0c2 100644 --- a/code/datums/id_trim/jobs.dm +++ b/code/datums/id_trim/jobs.dm @@ -545,11 +545,13 @@ ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_SCIENCE, + ACCESS_XENOBIOLOGY, ) extra_access = list( ACCESS_ROBOTICS, ACCESS_TECH_STORAGE, - ACCESS_XENOBIOLOGY, + ACCESS_ORDNANCE, + ACCESS_ORDNANCE_STORAGE, ) template_access = list( ACCESS_CAPTAIN, @@ -960,6 +962,8 @@ ACCESS_GENETICS, ACCESS_XENOBIOLOGY, ACCESS_MORGUE_SECURE, + ACCESS_ORDNANCE, + ACCESS_ORDNANCE_STORAGE, ) template_access = list( ACCESS_CAPTAIN, diff --git a/code/modules/experisci/experiment/experiments.dm b/code/modules/experisci/experiment/experiments.dm index f0915bdbf77cd..7a7c073b75a6a 100644 --- a/code/modules/experisci/experiment/experiments.dm +++ b/code/modules/experisci/experiment/experiments.dm @@ -335,7 +335,7 @@ name = "Exosuit Materials: Load Strain Test" description = "Exosuit equipment places unique strain upon the structure of the vehicle. Scan exosuits you have assembled from your exosuit fabricator and fully equipped to accelerate our structural stress simulations." possible_types = list(/obj/vehicle/sealed/mecha) - total_requirement = 2 + total_requirement = 1 /// Scan for organs you didn't start the round with /datum/experiment/scanning/people/novel_organs @@ -383,6 +383,7 @@ description = "We need to gather data on how cybernetic vital organs integrate with human biology. Conduct a scan on a human with these implants to help us understand their compatibility" performance_hint = "Perform an organ manipulation surgery to replace one of the vital organs with a cybernetic variant." required_traits_desc = "augmented vital organs" + required_count = 1 /datum/experiment/scanning/people/augmented_organs/is_valid_scan_target(mob/living/carbon/human/check) . = ..() @@ -431,15 +432,19 @@ required_reagent = /datum/reagent/cryostylane min_purity = 0.99 -/datum/experiment/scanning/bluespace_crystal +/datum/experiment/scanning/points/bluespace_crystal name = "Bluespace Crystal Sampling" description = "Investigate the properties of bluespace crystals by scanning either an artificial or naturally occurring variant. This will help us deepen our understanding of bluespace phenomena." - required_atoms = list(/obj/item/stack/ore/bluespace_crystal = 1) + required_points = 1 + required_atoms = list( + /obj/item/stack/ore/bluespace_crystal = 1, + /obj/item/stack/sheet/bluespace_crystal = 1 + ) /datum/experiment/scanning/points/machinery_tiered_scan/tier2_any name = "Upgraded Stock Parts Benchmark" description = "Our newly-designed machinery components require practical application tests for hints at possible further advancements, as well as a general confirmation that we didn't actually design worse parts somehow. Scan any machinery with Upgraded Parts and report the results." - required_points = 8 + required_points = 4 required_atoms = list( /obj/machinery = 1 ) @@ -448,7 +453,7 @@ /datum/experiment/scanning/points/machinery_tiered_scan/tier3_any name = "Advanced Stock Parts Benchmark" description = "Our newly-designed machinery components require practical application tests for hints at possible further advancements, as well as a general confirmation that we didn't actually design worse parts somehow. Scan any machinery with Advanced Parts and report the results." - required_points = 8 + required_points = 4 required_atoms = list( /obj/machinery = 1 ) diff --git a/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/code/modules/modular_computers/computers/item/role_tablet_presets.dm index ee6c9ee68f0af..44392c8c62de9 100644 --- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm @@ -97,6 +97,7 @@ /datum/computer_file/program/crew_manifest, /datum/computer_file/program/robocontrol, /datum/computer_file/program/science, + /datum/computer_file/program/scipaper_program, /datum/computer_file/program/status, /datum/computer_file/program/signal_commander, ) @@ -187,6 +188,7 @@ starting_programs = list( /datum/computer_file/program/atmosscan, /datum/computer_file/program/science, + /datum/computer_file/program/scipaper_program, /datum/computer_file/program/signal_commander, ) diff --git a/code/modules/modular_computers/file_system/programs/frontier.dm b/code/modules/modular_computers/file_system/programs/frontier.dm index c41cf642ffb55..7a65513508d3e 100644 --- a/code/modules/modular_computers/file_system/programs/frontier.dm +++ b/code/modules/modular_computers/file_system/programs/frontier.dm @@ -8,7 +8,7 @@ program_open_overlay = "research" tgui_id = "NtosScipaper" program_icon = "paper-plane" - download_access = list(ACCESS_ORDNANCE) + download_access = list(ACCESS_ORDNANCE, ACCESS_SCIENCE, ACCESS_AWAY_SCIENCE) var/datum/techweb/linked_techweb /// Unpublished, temporary paper datum. diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 7d4f613f05478..ef6c65d183175 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -747,7 +747,6 @@ name = "NTNet Relay Board" desc = "The circuit board for a wireless network relay." id = "ntnet_relay" - build_type = IMPRINTER build_path = /obj/item/circuitboard/machine/ntnet_relay category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS diff --git a/code/modules/research/techweb/nodes/biology_nodes.dm b/code/modules/research/techweb/nodes/biology_nodes.dm index 6a14d7d517c8f..4adc78691835a 100644 --- a/code/modules/research/techweb/nodes/biology_nodes.dm +++ b/code/modules/research/techweb/nodes/biology_nodes.dm @@ -6,6 +6,7 @@ design_ids = list( "healthanalyzer", "autopsyscanner", + "genescanner", "medical_kiosk", "chem_master", "ph_meter", @@ -54,7 +55,6 @@ "scan_console", "dna_disk", "dnainfuser", - "genescanner", "mod_dna_lock", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) diff --git a/code/modules/research/techweb/nodes/research_nodes.dm b/code/modules/research/techweb/nodes/research_nodes.dm index b3af62c72e994..f68086ab5abdd 100644 --- a/code/modules/research/techweb/nodes/research_nodes.dm +++ b/code/modules/research/techweb/nodes/research_nodes.dm @@ -48,7 +48,7 @@ "bluespacebodybag", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) - required_experiments = list(/datum/experiment/scanning/bluespace_crystal) + required_experiments = list(/datum/experiment/scanning/points/bluespace_crystal) /datum/techweb_node/bluespace_travel id = "bluespace_travel" diff --git a/tgui/packages/tgui/interfaces/NtosScipaper.jsx b/tgui/packages/tgui/interfaces/NtosScipaper.jsx index 2af2cd12f43f9..4d12fdc638931 100644 --- a/tgui/packages/tgui/interfaces/NtosScipaper.jsx +++ b/tgui/packages/tgui/interfaces/NtosScipaper.jsx @@ -5,7 +5,6 @@ import { Button, Collapsible, Dropdown, - Icon, Input, LabeledList, NoticeBox, @@ -13,14 +12,13 @@ import { Stack, Table, Tabs, - Tooltip, } from '../components'; import { TableCell, TableRow } from '../components/Table'; import { NtosWindow } from '../layouts'; export const NtosScipaper = (props) => { return ( - + @@ -50,31 +48,132 @@ const PaperPublishing = (props) => { return ( <>

- - + {fileList.length === 0 && ( + + Use the File Manager app to download files from a disk. + + )} + + + } + > + + + act('select_file', { + selected_uid: fileList[ordfile_name], + }) + } + /> + + + + } + > + + + act('select_experiment', { + selected_expath: expList[experiment_name], + }) + } + /> + + + + } + > + + String(number))} + selected={String(tier)} + onSelected={(new_tier) => + act('select_tier', { + selected_tier: Number(new_tier), + }) + } + /> + + + + } + > + + + act('select_partner', { + selected_partner: allowedPartners[new_partner], + }) + } + /> + + + act('et_alia')} + /> + } + > act('rewrite', { - title: value, + author: value, }) } /> - + act('rewrite', { - author: value, + title: value, }) } /> - { } /> - - - - - act('select_file', { - selected_uid: fileList[ordfile_name], - }) - } - /> - - - - - - - - - - - - - act('select_experiment', { - selected_expath: expList[experiment_name], - }) - } - /> - - - - - - - - - - - - String(number))} - selected={String(tier)} - onSelected={(new_tier) => - act('select_tier', { - selected_tier: Number(new_tier), - }) - } - /> - - - - - - - - - - - - - act('select_partner', { - selected_partner: allowedPartners[new_partner], - }) - } - /> - - - - - - - -
- - - +
); @@ -366,7 +367,7 @@ export const NtosScipaperContent = (props) => { Please sync this application to a valid techweb to upload progress! )} - + @@ -385,7 +386,7 @@ export const NtosScipaperContent = (props) => { }) } > - {'View Previous Publications'} + {'Publications'} { }) } > - {'View Available Experiments'} + {'Experiments'} { }) } > - {'View Scientific Partners'} + {'Scientific Partners'} {currentTab === 1 && } From bd5c045acb183c58c1b54d44ef671e1a14fc2302 Mon Sep 17 00:00:00 2001 From: BeagleGaming1 <56142455+BeagleGaming1@users.noreply.github.com> Date: Thu, 20 Jun 2024 14:16:18 -0400 Subject: [PATCH 53/75] Adds proto-kinetic accelerator modkit and proto-kinetic crusher trophy disks to the bitrunning vendor (#83825) ## About The Pull Request Adds disks to the bitrunning vendor that give the pka and pkc additional parts. I have no idea if any of these numbers are balanced, I am not good at balance, and these are just random numbers I came up with. If anyone has any recommendations on how to better order or price it, I would love to know. ## Why It's Good For The Game It gives people a way to test fights against megafauna using unique combinations of accelerator modkits and crusher trophies with less risks. ## Changelog :cl: add: Added disks for accelerator modkits and crusher trophies to the bitrunning vendor /:cl: --- code/modules/bitrunning/objects/disks.dm | 43 ++++++++++++++++++++++++ code/modules/bitrunning/orders/tech.dm | 20 +++++++++++ 2 files changed, 63 insertions(+) diff --git a/code/modules/bitrunning/objects/disks.dm b/code/modules/bitrunning/objects/disks.dm index 6e166d5eb7fdb..17b768c54d08f 100644 --- a/code/modules/bitrunning/objects/disks.dm +++ b/code/modules/bitrunning/objects/disks.dm @@ -142,3 +142,46 @@ /obj/item/dualsaber/green, /obj/item/grenade/syndieminibomb, ) + +///proto-kinetic accelerator mods, to be applied to pka's given inside domains +/obj/item/bitrunning_disk/item/pka_mods + name = "bitrunning gear: proto-kinetic accelerator mods" + selectable_items = list( + /obj/item/borg/upgrade/modkit/range, + /obj/item/borg/upgrade/modkit/damage, + /obj/item/borg/upgrade/modkit/cooldown, + /obj/item/borg/upgrade/modkit/aoe/mobs, + /obj/item/borg/upgrade/modkit/human_passthrough, + ) + +/obj/item/bitrunning_disk/item/pka_mods/premium + name = "bitrunning gear: premium proto-kinetic accelerator mods" + selectable_items = list( + /obj/item/borg/upgrade/modkit/cooldown/repeater, + /obj/item/borg/upgrade/modkit/lifesteal, + /obj/item/borg/upgrade/modkit/resonator_blasts, + /obj/item/borg/upgrade/modkit/bounty, + /obj/item/borg/upgrade/modkit/indoors, + ) + +///proto-kinetic crusher trophies, to be applied to pkc's given inside domains +/obj/item/bitrunning_disk/item/pkc_mods + name = "bitrunning gear: proto-kinetic crusher mods" + selectable_items = list( + /obj/item/crusher_trophy/watcher_wing, + /obj/item/crusher_trophy/blaster_tubes/magma_wing, + /obj/item/crusher_trophy/legion_skull, + /obj/item/crusher_trophy/wolf_ear, + ) + +/obj/item/bitrunning_disk/item/pkc_mods/premium + name = "bitrunning gear: premium proto-kinetic crusher mods" + selectable_items = list( + /obj/item/crusher_trophy/watcher_wing/ice_wing, + /obj/item/crusher_trophy/blaster_tubes, + /obj/item/crusher_trophy/miner_eye, + /obj/item/crusher_trophy/tail_spike, + /obj/item/crusher_trophy/demon_claws, + /obj/item/crusher_trophy/vortex_talisman, + /obj/item/crusher_trophy/ice_demon_cube, + ) diff --git a/code/modules/bitrunning/orders/tech.dm b/code/modules/bitrunning/orders/tech.dm index a4bf59ce18dec..7e987e4818104 100644 --- a/code/modules/bitrunning/orders/tech.dm +++ b/code/modules/bitrunning/orders/tech.dm @@ -34,3 +34,23 @@ /datum/orderable_item/bitrunning_tech/flip_skillchip item_path = /obj/item/skillchip/matrix_flip cost_per_order = 2000 + +/datum/orderable_item/bitrunning_tech/pka_mod + item_path = /obj/item/bitrunning_disk/item/pka_mods + cost_per_order = 750 + desc = "This disk contains a program that lets you equip modkits for the proto-kinetic accelerator. Proto-kinetic accelerator not included." + +/datum/orderable_item/bitrunning_tech/pka_mod/premium + item_path = /obj/item/bitrunning_disk/item/pka_mods/premium + cost_per_order = 1800 + desc = "This disk contains a program that lets you equip stronger modkits for the proto-kinetic accelerator. Proto-kinetic accelerator not included." + +/datum/orderable_item/bitrunning_tech/pkc_mod + item_path = /obj/item/bitrunning_disk/item/pkc_mods + cost_per_order = 750 + desc = "This disk contains a program that lets you equip trophies for the proto-kinetic crusher. Proto-kinetic crusher no included." + +/datum/orderable_item/bitrunning_tech/pkc_mod/premium + item_path = /obj/item/bitrunning_disk/item/pkc_mods/premium + cost_per_order = 1800 + desc = "This disk contains a program that lets you equip stronger trophies for the proto-kinetic crusher. Proto-kinetic crusher not included." From 8da4e142bc0e38ce53e814851705ebd86366640e Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 06:18:13 +1200 Subject: [PATCH 54/75] Automatic changelog for PR #83769 [ci skip] --- html/changelogs/AutoChangeLog-pr-83769.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83769.yml diff --git a/html/changelogs/AutoChangeLog-pr-83769.yml b/html/changelogs/AutoChangeLog-pr-83769.yml new file mode 100644 index 0000000000000..919aa6eb4a078 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83769.yml @@ -0,0 +1,4 @@ +author: "EdgeLordExe" +delete-after: True +changes: + - rscadd: "Adds Feast of Owls ritual to heretic which allows one to forsake their ascension in exchange for immediate power." \ No newline at end of file From d33a66ef7f5765b86c9b466a853502f5a76542ea Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 06:18:26 +1200 Subject: [PATCH 55/75] Automatic changelog for PR #84086 [ci skip] --- html/changelogs/AutoChangeLog-pr-84086.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84086.yml diff --git a/html/changelogs/AutoChangeLog-pr-84086.yml b/html/changelogs/AutoChangeLog-pr-84086.yml new file mode 100644 index 0000000000000..50d8eaac49554 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84086.yml @@ -0,0 +1,11 @@ +author: "MTandi" +delete-after: True +changes: + - balance: "Added ordnance to extra access of geneticists and roboticists" + - balance: "Reduced parts scanning tests' machine count to 4 from 8" + - balance: "Reduced augmented organs scanning tests mob count to 1 from 2" + - balance: "Reduced equipped mech scanning test count to 1 from 2" + - balance: "Added polycrystal option to bluespace crystal scan test" + - bugfix: "Allowed NTNet relay in away circuit imprinter for NT Frontier app" + - qol: "NT Frontier app installed on RD and Scientists` PDAs by default" + - qol: "Updated NT Frontier app to be more user-friendly" \ No newline at end of file From 3d2f82b315c70cb2959e41232ffef09b711f0bc6 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 06:18:31 +1200 Subject: [PATCH 56/75] Automatic changelog for PR #83825 [ci skip] --- html/changelogs/AutoChangeLog-pr-83825.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-83825.yml diff --git a/html/changelogs/AutoChangeLog-pr-83825.yml b/html/changelogs/AutoChangeLog-pr-83825.yml new file mode 100644 index 0000000000000..4a2fb94912a65 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83825.yml @@ -0,0 +1,4 @@ +author: "BeagleGaming1" +delete-after: True +changes: + - rscadd: "Added disks for accelerator modkits and crusher trophies to the bitrunning vendor" \ No newline at end of file From 94cf89f2d73e05535504423848ea06466e167684 Mon Sep 17 00:00:00 2001 From: Joshua Kidder <49173900+Metekillot@users.noreply.github.com> Date: Thu, 20 Jun 2024 15:10:08 -0400 Subject: [PATCH 57/75] Settler partially atomized into traits, ashwalkers given some settler traits (#84090) ## About The Pull Request So my previous PR was to give ashwalker the settler trait so they'd get some of the benefits of settler (better riding, fishing, and taming) but it was suggested that Settler be atomized into different traits instead. I've done that here. Ashwalkers now get TRAIT_ROUGHRIDER TRAIT_BEAST_EMPATHY TRAIT_EXPERT_FISHER which will, respectively, make them better riders, better tamers, and better at fishing. I also made a small change to the riding code that references riding speed boosts for people with the ROUGHRIDER trait (would, at the moment, only be ashwalkers and settlers) that gives ashwalkers the maximum bonus, to represent their primal connection with the beasts in the area. ## Why It's Good For The Game Ashwalkers are described in the lore as being denizens of lavaland, the same as all the other messed up shit down there. This change brings them in line with that. The improvements to the handling of the settler trait will also open up avenues for expanding or improving on related systems ## Changelog :cl: Bisar add: Ashwalkers are now better at riding, taming animals, and fishing. code: Behavior for the settler trait has been partially atomized into several traits instead. /:cl: --------- Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Co-authored-by: Jacquerel --- code/__DEFINES/fish.dm | 4 ++-- code/__DEFINES/traits/declarations.dm | 8 ++++++++ code/_globalvars/traits/_traits.dm | 5 +++++ code/_globalvars/traits/admin_tooling.dm | 5 +++++ code/datums/components/riding/riding_mob.dm | 11 ++++++++--- code/datums/components/tameable.dm | 4 ++-- code/datums/elements/climbable.dm | 2 +- code/datums/quirks/positive_quirks/settler.dm | 12 +++++++++++- code/modules/fishing/sources/_fish_source.dm | 4 ++-- code/modules/mob/living/brain/brain_item.dm | 10 +++++++++- .../carbon/human/species_types/lizardpeople.dm | 1 - code/modules/mob/mob.dm | 4 ++-- 12 files changed, 55 insertions(+), 15 deletions(-) diff --git a/code/__DEFINES/fish.dm b/code/__DEFINES/fish.dm index 24242699e3d01..8e03c920d248d 100644 --- a/code/__DEFINES/fish.dm +++ b/code/__DEFINES/fish.dm @@ -9,8 +9,8 @@ #define FAV_BAIT_DIFFICULTY_MOD -5 /// Difficulty modifier when bait is fish's disliked #define DISLIKED_BAIT_DIFFICULTY_MOD 15 -/// Difficulty modifier when our fisherman has the trait TRAIT_SETTLER -#define SETTLER_DIFFICULTY_MOD -5 +/// Difficulty modifier when our fisherman has the trait TRAIT_EXPERT_FISHER +#define EXPERT_FISHER_DIFFICULTY_MOD -5 #define FISH_TRAIT_MINOR_DIFFICULTY_BOOST 5 diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 8f1c58bc96684..c34e0f2925e9f 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -1151,6 +1151,14 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Does this item bypass ranged armor checks? #define TRAIT_BYPASS_RANGED_ARMOR "bypass_ranged_armor" +/// Traits given by settler, each with their own specific effects for cases where someone would have that trait, but not the other settler effects + +#define TRAIT_EXPERT_FISHER "expert_fisher" // fishing is easier +#define TRAIT_ROUGHRIDER "roughrider" // you can improve speed on mounted animals with a good mood +#define TRAIT_STUBBY_BODY "stubby_body" // you have a stubby body that lessens your agility +#define TRAIT_BEAST_EMPATHY "beast_empathy" // you're good with animals, such as with taming them +#define TRAIT_STURDY_FRAME "sturdy_frame" // you suffer much lesser effects from equipment that slows you down + /// This item cannot be selected for or used by a theft objective (Spies, Traitors, etc.) #define TRAIT_ITEM_OBJECTIVE_BLOCKED "item_objective_blocked" /// This trait lets you attach limbs to any player without surgery. diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 9175b86dc3589..66f32028c6b9c 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -138,6 +138,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_BALD" = TRAIT_BALD, "TRAIT_BALLOON_SUTRA" = TRAIT_BALLOON_SUTRA, "TRAIT_BATON_RESISTANCE" = TRAIT_BATON_RESISTANCE, + "TRAIT_BEAST_EMPATHY" = TRAIT_BEAST_EMPATHY, "TRAIT_BEING_BLADE_SHIELDED" = TRAIT_BEING_BLADE_SHIELDED, "TRAIT_BLOB_ALLY" = TRAIT_BLOB_ALLY, "TRAIT_BLOCK_SHUTTLE_MOVEMENT" = TRAIT_BLOCK_SHUTTLE_MOVEMENT, @@ -208,6 +209,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_EXAMINE_FISHING_SPOT" = TRAIT_EXAMINE_FISHING_SPOT, "TRAIT_EXAMINE_FITNESS" = TRAIT_EXAMINE_FITNESS, "TRAIT_EXPANDED_FOV" = TRAIT_EXPANDED_FOV, + "TRAIT_EXPERT_FISHER" = TRAIT_EXPERT_FISHER, "TRAIT_EXTROVERT" = TRAIT_EXTROVERT, "TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH, "TRAIT_FASTMED" = TRAIT_FASTMED, @@ -414,6 +416,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_ROCK_METAMORPHIC" = TRAIT_ROCK_METAMORPHIC, "TRAIT_ROCK_STONER" = TRAIT_ROCK_STONER, "TRAIT_ROD_SUPLEX" = TRAIT_ROD_SUPLEX, + "TRAIT_ROUGHRIDER" = TRAIT_ROUGHRIDER, "TRAIT_SABRAGE_PRO" = TRAIT_SABRAGE_PRO, "TRAIT_SECURITY_HUD" = TRAIT_SECURITY_HUD, "TRAIT_SEE_GLASS_COLORS" = TRAIT_SEE_GLASS_COLORS, @@ -445,7 +448,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_STIMULATED" = TRAIT_STIMULATED, "TRAIT_STRONG_GRABBER" = TRAIT_STRONG_GRABBER, "TRAIT_STRONG_STOMACH" = TRAIT_STRONG_STOMACH, + "TRAIT_STUBBY_BODY" = TRAIT_STUBBY_BODY, "TRAIT_STUNIMMUNE" = TRAIT_STUNIMMUNE, + "TRAIT_STURDY_FRAME" = TRAIT_STURDY_FRAME, "TRAIT_SUCCUMB_OVERRIDE" = TRAIT_SUCCUMB_OVERRIDE, "TRAIT_SUICIDED" = TRAIT_SUICIDED, "TRAIT_SUPERMATTER_SOOTHER" = TRAIT_SUPERMATTER_SOOTHER, diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index 150a10c108494..d709113d2b175 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -36,6 +36,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_BADTOUCH" = TRAIT_BADTOUCH, "TRAIT_BALD" = TRAIT_BALD, "TRAIT_BATON_RESISTANCE" = TRAIT_BATON_RESISTANCE, + "TRAIT_BEAST_EMPATHY" = TRAIT_BEAST_EMPATHY, "TRAIT_BLOCK_SHUTTLE_MOVEMENT" = TRAIT_BLOCK_SHUTTLE_MOVEMENT, "TRAIT_BLOOD_CLANS" = TRAIT_BLOOD_CLANS, "TRAIT_BLOODSHOT_EYES" = TRAIT_BLOODSHOT_EYES, @@ -72,6 +73,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_EMPATH" = TRAIT_EMPATH, "TRAIT_EXAMINE_FITNESS" = TRAIT_EXAMINE_FITNESS, "TRAIT_EXPANDED_FOV" = TRAIT_EXPANDED_FOV, + "TRAIT_EXPERT_FISHER" = TRAIT_EXPERT_FISHER, "TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH, "TRAIT_FAST_CUFFING" = TRAIT_FAST_CUFFING, "TRAIT_FAT" = TRAIT_FAT, @@ -188,6 +190,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_RESISTHIGHPRESSURE" = TRAIT_RESISTHIGHPRESSURE, "TRAIT_RESISTLOWPRESSURE" = TRAIT_RESISTLOWPRESSURE, "TRAIT_RESTRAINED" = TRAIT_RESTRAINED, + "TRAIT_ROUGHRIDER" = TRAIT_ROUGHRIDER, "TRAIT_SECURITY_HUD" = TRAIT_SECURITY_HUD, "TRAIT_SELF_AWARE" = TRAIT_SELF_AWARE, "TRAIT_SETTLER" = TRAIT_SETTLER, @@ -208,7 +211,9 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_STABLELIVER" = TRAIT_STABLELIVER, "TRAIT_STRONG_GRABBER" = TRAIT_STRONG_GRABBER, "TRAIT_STRONG_STOMACH" = TRAIT_STRONG_STOMACH, + "TRAIT_STUBBY_BODY" = TRAIT_STUBBY_BODY, "TRAIT_STUNIMMUNE" = TRAIT_STUNIMMUNE, + "TRAIT_STURDY_FRAME" = TRAIT_STURDY_FRAME, "TRAIT_SURGEON" = TRAIT_SURGEON, "TRAIT_SURGICALLY_ANALYZED" = TRAIT_SURGICALLY_ANALYZED, "TRAIT_TAGGER" = TRAIT_TAGGER, diff --git a/code/datums/components/riding/riding_mob.dm b/code/datums/components/riding/riding_mob.dm index a808784b815ec..78158c55e8eb7 100644 --- a/code/datums/components/riding/riding_mob.dm +++ b/code/datums/components/riding/riding_mob.dm @@ -110,9 +110,14 @@ last_move_diagonal = ((direction & (direction - 1)) && (living_parent.loc == next)) var/modified_move_cooldown = vehicle_move_cooldown var/modified_move_delay = vehicle_move_delay - if(ishuman(user) && HAS_TRAIT(user, TRAIT_SETTLER)) - var/mob/living/carbon/human/settler_rider = user - switch(settler_rider.mob_mood.sanity_level) + if(ishuman(user) && HAS_TRAIT(user, TRAIT_ROUGHRIDER)) // YEEHAW! + var/mob/living/carbon/human/rough_rider = user + var/ride_benefit = null + if(HAS_TRAIT(rough_rider, TRAIT_PRIMITIVE)) // closer to a beast than a man; you don't need to think to ride! + ride_benefit = SANITY_LEVEL_GREAT + else + ride_benefit = rough_rider.mob_mood.sanity_level + switch(ride_benefit) if(SANITY_LEVEL_GREAT) modified_move_cooldown *= 0.5 modified_move_delay *= 0.5 diff --git a/code/datums/components/tameable.dm b/code/datums/components/tameable.dm index 43f48005bf89e..0d77688a22e7a 100644 --- a/code/datums/components/tameable.dm +++ b/code/datums/components/tameable.dm @@ -42,7 +42,7 @@ var/inform_tamer = FALSE atom_parent.balloon_alert(attacker, "fed") var/modified_tame_chance = current_tame_chance - if(HAS_TRAIT(attacker, TRAIT_SETTLER)) + if(HAS_TRAIT(attacker, TRAIT_BEAST_EMPATHY)) modified_tame_chance += 50 inform_tamer = TRUE if(unique || !already_friends(attacker)) @@ -71,7 +71,7 @@ if(inform_tamer) source.balloon_alert(tamer, "tamed") - if(HAS_TRAIT(tamer, TRAIT_SETTLER)) + if(HAS_TRAIT(tamer, TRAIT_BEAST_EMPATHY)) INVOKE_ASYNC(src, PROC_REF(rename_pet), source, tamer) if(unique) qdel(src) diff --git a/code/datums/elements/climbable.dm b/code/datums/elements/climbable.dm index 533facf709a92..a2c67742a357e 100644 --- a/code/datums/elements/climbable.dm +++ b/code/datums/elements/climbable.dm @@ -69,7 +69,7 @@ if(HAS_TRAIT(user, TRAIT_FREERUNNING)) //do you have any idea how fast I am??? adjusted_climb_time *= 0.8 adjusted_climb_stun *= 0.8 - if(HAS_TRAIT(user, TRAIT_SETTLER)) //hold on, gimme a moment, my tiny legs can't get over the goshdamn table + if(HAS_TRAIT(user, TRAIT_STUBBY_BODY)) //hold on, gimme a moment, my tiny legs can't get over the goshdamn table adjusted_climb_time *= 1.5 adjusted_climb_stun *= 1.5 LAZYADDASSOCLIST(current_climbers, climbed_thing, user) diff --git a/code/datums/quirks/positive_quirks/settler.dm b/code/datums/quirks/positive_quirks/settler.dm index 9b52403404b12..3b4084242b811 100644 --- a/code/datums/quirks/positive_quirks/settler.dm +++ b/code/datums/quirks/positive_quirks/settler.dm @@ -9,17 +9,26 @@ value = 4 mob_trait = TRAIT_SETTLER quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE - medical_record_text = "Patient appears to be abnormally stout." + medical_record_text = "Patient has been exposed to planetary conditions for extended periods, resulting in an excessively stout build." mail_goodies = list( /obj/item/clothing/shoes/workboots/mining, /obj/item/gps, ) + /// Most of the behavior of settler is from these traits, rather than exclusively the quirk + var/list/settler_traits = list( + TRAIT_EXPERT_FISHER, + TRAIT_ROUGHRIDER, + TRAIT_STUBBY_BODY, + TRAIT_BEAST_EMPATHY, + TRAIT_STURDY_FRAME, + ) /datum/quirk/item_quirk/settler/add(client/client_source) var/mob/living/carbon/human/human_quirkholder = quirk_holder human_quirkholder.set_mob_height(HUMAN_HEIGHT_SHORTEST) human_quirkholder.add_movespeed_modifier(/datum/movespeed_modifier/settler) human_quirkholder.physiology.hunger_mod *= 0.5 //good for you, shortass, you don't get hungry nearly as often + human_quirkholder.add_traits(settler_traits, QUIRK_TRAIT) /datum/quirk/item_quirk/settler/add_unique(client/client_source) give_item_to_holder(/obj/item/storage/box/papersack/wheat, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) @@ -32,3 +41,4 @@ human_quirkholder.set_mob_height(HUMAN_HEIGHT_MEDIUM) human_quirkholder.remove_movespeed_modifier(/datum/movespeed_modifier/settler) human_quirkholder.physiology.hunger_mod *= 2 + human_quirkholder.remove_traits(settler_traits, QUIRK_TRAIT) diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm index eb681dc16cbfd..66d2bf0a880e3 100644 --- a/code/modules/fishing/sources/_fish_source.dm +++ b/code/modules/fishing/sources/_fish_source.dm @@ -85,8 +85,8 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list( . = fishing_difficulty // Difficulty modifier added by having the Settler quirk - if(HAS_TRAIT(fisherman, TRAIT_SETTLER)) - . += SETTLER_DIFFICULTY_MOD + if(HAS_TRAIT(fisherman, TRAIT_EXPERT_FISHER)) + . += EXPERT_FISHER_DIFFICULTY_MOD // Difficulty modifier added by the fisher's skill level if(!challenge || !(challenge.special_effects & FISHING_MINIGAME_RULE_NO_EXP)) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 1ef72fd18e600..b0a747ff51d88 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -394,7 +394,15 @@ /obj/item/organ/internal/brain/primitive //No like books and stompy metal men name = "primitive brain" desc = "This juicy piece of meat has a clearly underdeveloped frontal lobe." - organ_traits = list(TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, TRAIT_PRIMITIVE) // No literacy + organ_traits = list( + TRAIT_ADVANCEDTOOLUSER, + TRAIT_CAN_STRIP, + TRAIT_PRIMITIVE, // No literacy + TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION, + TRAIT_EXPERT_FISHER, // live off land, fish from river + TRAIT_ROUGHRIDER, // ride beast, chase down prey, flee from danger + TRAIT_BEAST_EMPATHY, // know the way of beast, calm with food + ) /obj/item/organ/internal/brain/golem name = "crystalline matrix" diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index ba813901b3e87..71a5c4c026193 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -157,7 +157,6 @@ Lizard subspecies: ASHWALKERS inherent_traits = list( TRAIT_MUTANT_COLORS, TRAIT_VIRUSIMMUNE, - TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION, ) species_language_holder = /datum/language_holder/lizard/ash digitigrade_customization = DIGITIGRADE_FORCED diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 80f1b2dfb484d..7dd1cf0d2880f 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1537,8 +1537,8 @@ else speedies += thing.slowdown - //if our movespeed mod is in the negatives, we don't modify it since that's a benefit - if(speedies > 0 && HAS_TRAIT(src, TRAIT_SETTLER)) + //if we have TRAIT_STURDY_FRAME, we reduce our overall speed penalty UNLESS that penalty would be a negative value, and therefore a speed boost. + if(speedies > 0 && HAS_TRAIT(src, TRAIT_STURDY_FRAME)) speedies *= 0.2 if(immutable_speedies) From caa8c1b07b477f464dd1e6ed2d3f8f1addc335b6 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 07:13:17 +1200 Subject: [PATCH 58/75] Automatic changelog for PR #84090 [ci skip] --- html/changelogs/AutoChangeLog-pr-84090.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84090.yml diff --git a/html/changelogs/AutoChangeLog-pr-84090.yml b/html/changelogs/AutoChangeLog-pr-84090.yml new file mode 100644 index 0000000000000..bde4fd47b9183 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84090.yml @@ -0,0 +1,5 @@ +author: "Bisar" +delete-after: True +changes: + - rscadd: "Ashwalkers are now better at riding, taming animals, and fishing." + - code_imp: "Behavior for the settler trait has been partially atomized into several traits instead." \ No newline at end of file From fd693a067dd66a2e52a5aa20c42017ffad8f1dac Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 20 Jun 2024 23:01:36 +0300 Subject: [PATCH 59/75] New gibber and food/slime processor sprites (#84149) --- .../food_and_drinks/machinery/gibber.dm | 31 +++++++++++++----- .../food_and_drinks/machinery/processor.dm | 9 +++-- .../chemistry/machinery/reagentgrinder.dm | 4 +-- icons/obj/machines/kitchen.dmi | Bin 15911 -> 17083 bytes 4 files changed, 31 insertions(+), 13 deletions(-) diff --git a/code/modules/food_and_drinks/machinery/gibber.dm b/code/modules/food_and_drinks/machinery/gibber.dm index e0002817f782e..cd50f29ffe478 100644 --- a/code/modules/food_and_drinks/machinery/gibber.dm +++ b/code/modules/food_and_drinks/machinery/gibber.dm @@ -5,6 +5,7 @@ icon_state = "grinder" density = TRUE circuit = /obj/item/circuitboard/machine/gibber + anchored_tabletop_offset = 8 var/operating = FALSE //Is it on? var/dirty = FALSE // Does it need cleaning? @@ -15,13 +16,15 @@ /obj/machinery/gibber/Initialize(mapload) . = ..() + RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(on_cleaned)) if(prob(5)) name = "meat grinder" desc = "Okay, if I... if I chop you up in a meat grinder, and the only thing that comes out, that's left of you, is your eyeball, \ you'r- you're PROBABLY DEAD! You're probably going to - not you, I'm just sayin', like, if you- if somebody were to, like, \ push you into a meat grinder, and, like, your- one of your finger bones is still intact, they're not gonna pick it up and go, \ Well see, yeah it wasn't deadly, it wasn't an instant kill move! You still got, like, this part of your finger left!" - add_overlay("grjam") + dirty = TRUE + update_appearance(UPDATE_OVERLAYS) /obj/machinery/gibber/RefreshParts() . = ..() @@ -45,16 +48,23 @@ /obj/machinery/gibber/update_overlays() . = ..() if(dirty) - . +="grbloody" - if(machine_stat & (NOPOWER|BROKEN)) + . += "grinder_bloody" + if(machine_stat & (NOPOWER|BROKEN) || panel_open) return if(!occupant) - . += "grjam" + . += "grinder_empty" + . += emissive_appearance(icon, "grinder_empty", src, alpha = src.alpha) return if(operating) - . += "gruse" + . += "grinder_active" + . += emissive_appearance(icon, "grinder_active", src, alpha = src.alpha) + . += "grinder_jaws_active" return - . += "gridle" + . += "grinder_loaded" + . += emissive_appearance(icon, "grinder_loaded", src, alpha = src.alpha) + +/obj/machinery/gibber/on_set_panel_open(old_value) + update_appearance(UPDATE_OVERLAYS) /obj/machinery/gibber/attack_paw(mob/user, list/modifiers) return attack_hand(user, modifiers) @@ -160,8 +170,7 @@ operating = TRUE update_appearance() - var/offset = prob(50) ? -2 : 2 - animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking + Shake(pixelshiftx = 1, pixelshifty = 0, duration = gibtime) var/mob/living/mob_occupant = occupant var/sourcename = mob_occupant.real_name var/sourcejob @@ -223,6 +232,8 @@ /obj/machinery/gibber/proc/make_meat(obj/item/stack/sheet/animalhide/skin, list/obj/item/food/meat/slab/allmeat, meat_produced, gibtype, list/datum/disease/diseases) playsound(src.loc, 'sound/effects/splat.ogg', 50, TRUE) operating = FALSE + if (!dirty && prob(50)) + dirty = TRUE var/turf/T = get_turf(src) var/list/turf/nearby_turfs = RANGE_TURFS(3,T) - T if(skin) @@ -265,3 +276,7 @@ if(victim.loc == input) victim.forceMove(src) victim.gib(DROP_ALL_REMAINS) + +/obj/machinery/gibber/proc/on_cleaned(obj/source_component, obj/source) + dirty = FALSE + update_appearance(UPDATE_OVERLAYS) diff --git a/code/modules/food_and_drinks/machinery/processor.dm b/code/modules/food_and_drinks/machinery/processor.dm index 4a60cdbc26592..78dd71df128d9 100644 --- a/code/modules/food_and_drinks/machinery/processor.dm +++ b/code/modules/food_and_drinks/machinery/processor.dm @@ -4,7 +4,8 @@ name = "food processor" desc = "An industrial grinder used to process meat and other foods. Keep hands clear of intake area while operating." icon = 'icons/obj/machines/kitchen.dmi' - icon_state = "processor1" + base_icon_state = "processor" + icon_state = "processor" layer = BELOW_OBJ_LAYER density = TRUE pass_flags = PASSTABLE @@ -91,7 +92,7 @@ if(processing) to_chat(user, span_warning("[src] is in the process of processing!")) return TRUE - if(default_deconstruction_screwdriver(user, "processor", "processor1", attacking_item) || default_pry_open(attacking_item, close_after_pry = TRUE) || default_deconstruction_crowbar(attacking_item)) + if(default_deconstruction_screwdriver(user, base_icon_state + "_open", base_icon_state, attacking_item) || default_pry_open(attacking_item, close_after_pry = TRUE) || default_deconstruction_crowbar(attacking_item)) return if(istype(attacking_item, /obj/item/storage/bag/tray)) @@ -157,7 +158,7 @@ total_time += recipe.time var/duration = (total_time / rating_speed) - INVOKE_ASYNC(src, TYPE_PROC_REF(/atom, Shake), 2, 2, duration, max(duration*0.02, 0.01)) //initial values work out to duration 4 seconds, interval 0.8 + INVOKE_ASYNC(src, TYPE_PROC_REF(/atom, Shake), 1, 0, duration) sleep(duration) for(var/atom/movable/content_item in processor_contents) var/datum/food_processor_process/recipe = PROCESSOR_SELECT_RECIPE(content_item) @@ -189,6 +190,8 @@ /obj/machinery/processor/slime name = "slime processor" + base_icon_state = "processor_slime" + icon_state = "processor_slime" desc = "An industrial grinder with a sticker saying appropriated for science department. Keep hands clear of intake area while operating." circuit = /obj/item/circuitboard/machine/processor/slime diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index e206ffebbc9f8..a4fa10cb88c63 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -422,7 +422,7 @@ var/duration = time / speed - Shake(duration = duration) + Shake(pixelshiftx = 1, pixelshifty = 0, duration = duration) operating = TRUE if(!juicing) playsound(src, 'sound/machines/blender.ogg', 50, TRUE) @@ -490,7 +490,7 @@ var/duration = time / speed - Shake(duration = duration) + Shake(pixelshiftx = 1, pixelshifty = 0, duration = duration) operating = TRUE playsound(src, 'sound/machines/juicer.ogg', 20, TRUE) diff --git a/icons/obj/machines/kitchen.dmi b/icons/obj/machines/kitchen.dmi index c94afb8d78ad6a8440aa8ef79b477109bbe64574..2142125c5aa5cd1fe87cdd07c01da8825d30d915 100644 GIT binary patch literal 17083 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 P4tgu6DqAZ3A@KhIn6bjB From d104b8021cf373a751695c2897399a82196497d8 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 08:01:56 +1200 Subject: [PATCH 60/75] Automatic changelog for PR #84149 [ci skip] --- html/changelogs/AutoChangeLog-pr-84149.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84149.yml diff --git a/html/changelogs/AutoChangeLog-pr-84149.yml b/html/changelogs/AutoChangeLog-pr-84149.yml new file mode 100644 index 0000000000000..babdfdbcddbde --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84149.yml @@ -0,0 +1,5 @@ +author: "MTandi" +delete-after: True +changes: + - image: "New gibber sprite" + - image: "New food/slime processor sprite" \ No newline at end of file From f6c44181cea46839d205848ff4ed4f5c6d093b1a Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 21 Jun 2024 00:21:28 +0000 Subject: [PATCH 61/75] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-83769.yml | 4 -- html/changelogs/AutoChangeLog-pr-83778.yml | 4 -- html/changelogs/AutoChangeLog-pr-83825.yml | 4 -- html/changelogs/AutoChangeLog-pr-83913.yml | 4 -- html/changelogs/AutoChangeLog-pr-83933.yml | 6 -- html/changelogs/AutoChangeLog-pr-83934.yml | 5 -- html/changelogs/AutoChangeLog-pr-83941.yml | 4 -- html/changelogs/AutoChangeLog-pr-83977.yml | 6 -- html/changelogs/AutoChangeLog-pr-84027.yml | 4 -- html/changelogs/AutoChangeLog-pr-84036.yml | 5 -- html/changelogs/AutoChangeLog-pr-84041.yml | 4 -- html/changelogs/AutoChangeLog-pr-84055.yml | 4 -- html/changelogs/AutoChangeLog-pr-84086.yml | 11 --- html/changelogs/AutoChangeLog-pr-84088.yml | 4 -- html/changelogs/AutoChangeLog-pr-84090.yml | 5 -- html/changelogs/AutoChangeLog-pr-84106.yml | 8 --- html/changelogs/AutoChangeLog-pr-84107.yml | 4 -- html/changelogs/AutoChangeLog-pr-84112.yml | 4 -- html/changelogs/AutoChangeLog-pr-84118.yml | 4 -- html/changelogs/AutoChangeLog-pr-84126.yml | 4 -- html/changelogs/AutoChangeLog-pr-84136.yml | 4 -- html/changelogs/AutoChangeLog-pr-84149.yml | 5 -- html/changelogs/archive/2024-06.yml | 82 ++++++++++++++++++++++ 23 files changed, 82 insertions(+), 107 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-83769.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83778.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83825.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83913.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83933.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83934.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83941.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-83977.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84027.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84036.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84041.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84055.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84086.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84088.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84090.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84106.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84107.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84112.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84118.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84126.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84136.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-84149.yml diff --git a/html/changelogs/AutoChangeLog-pr-83769.yml b/html/changelogs/AutoChangeLog-pr-83769.yml deleted file mode 100644 index 919aa6eb4a078..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83769.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "EdgeLordExe" -delete-after: True -changes: - - rscadd: "Adds Feast of Owls ritual to heretic which allows one to forsake their ascension in exchange for immediate power." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83778.yml b/html/changelogs/AutoChangeLog-pr-83778.yml deleted file mode 100644 index 8d8d34e39104f..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83778.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "projectkepler-ru" -delete-after: True -changes: - - bugfix: "Wawastation bridge now has the correct access on their suit storage and medkit now actually starts filled" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83825.yml b/html/changelogs/AutoChangeLog-pr-83825.yml deleted file mode 100644 index 4a2fb94912a65..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83825.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "BeagleGaming1" -delete-after: True -changes: - - rscadd: "Added disks for accelerator modkits and crusher trophies to the bitrunning vendor" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83913.yml b/html/changelogs/AutoChangeLog-pr-83913.yml deleted file mode 100644 index e080f9e5aeb4f..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83913.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "mc-oofert" -delete-after: True -changes: - - bugfix: "fixed wrong access on one door on wawastation and also made lights on elevators not break (On Wawastation)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83933.yml b/html/changelogs/AutoChangeLog-pr-83933.yml deleted file mode 100644 index d64620d533ad1..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83933.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "ArcaneMusic" -delete-after: True -changes: - - qol: "Vending machines now give audio feedback when you restock a vending refill and get a payout." - - qol: "The Restock tracker NTOS app for tracking vending machine contents now works on all consoles, and comes pre-installed on the cargochat cargo computers." - - balance: "Vending machines now offer a bit more credits when missing contents at the start of a round after getting restocked." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83934.yml b/html/changelogs/AutoChangeLog-pr-83934.yml deleted file mode 100644 index ad3574f8f8cb2..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83934.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "necromanceranne" -delete-after: True -changes: - - rscadd: "Replaces the Particle Acceleration Rifle with the Event Horizon anti-existential beam rifle. It shoots black holes. You can make this in-game. That's right, YOU!" - - balance: "Only one vortex anomaly can be made in a round." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83941.yml b/html/changelogs/AutoChangeLog-pr-83941.yml deleted file mode 100644 index e7aa6d982793b..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83941.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "GPeckman" -delete-after: True -changes: - - bugfix: "When on 'stream' mode, the cleaning spray from a bottle of space cleaner should no longer be blocked by just about everything." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83977.yml b/html/changelogs/AutoChangeLog-pr-83977.yml deleted file mode 100644 index d25e543431a43..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83977.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Rex9001" -delete-after: True -changes: - - bugfix: "lunatics now get their hud properly" - - bugfix: "lunatics now get objectives" - - qol: "ascended moon heretics are now labelled as ringleaders and are easier for lunatics to spot" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84027.yml b/html/changelogs/AutoChangeLog-pr-84027.yml deleted file mode 100644 index 9af71299e44b8..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84027.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LT3" -delete-after: True -changes: - - bugfix: "Fixed paramedics not having access to the Icebox NanoDrug using the west airlock" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84036.yml b/html/changelogs/AutoChangeLog-pr-84036.yml deleted file mode 100644 index 1719aafa28b22..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84036.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "r3dj4ck0424" -delete-after: True -changes: - - bugfix: "puts tiles under the wawa tool storage doors" - - bugfix: "allows you to access a door and a fire alarm on wawa's prison second floor" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84041.yml b/html/changelogs/AutoChangeLog-pr-84041.yml deleted file mode 100644 index f2f0bed84127c..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84041.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Xander3359" -delete-after: True -changes: - - bugfix: "Fix rust heretic being unable to rust walls or floors" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84055.yml b/html/changelogs/AutoChangeLog-pr-84055.yml deleted file mode 100644 index 0ae2635f1ca8c..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84055.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Goat" -delete-after: True -changes: - - bugfix: "Icebox's raptor den is now lined with asbestos and lead and no longer gets hit with radiation." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84086.yml b/html/changelogs/AutoChangeLog-pr-84086.yml deleted file mode 100644 index 50d8eaac49554..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84086.yml +++ /dev/null @@ -1,11 +0,0 @@ -author: "MTandi" -delete-after: True -changes: - - balance: "Added ordnance to extra access of geneticists and roboticists" - - balance: "Reduced parts scanning tests' machine count to 4 from 8" - - balance: "Reduced augmented organs scanning tests mob count to 1 from 2" - - balance: "Reduced equipped mech scanning test count to 1 from 2" - - balance: "Added polycrystal option to bluespace crystal scan test" - - bugfix: "Allowed NTNet relay in away circuit imprinter for NT Frontier app" - - qol: "NT Frontier app installed on RD and Scientists` PDAs by default" - - qol: "Updated NT Frontier app to be more user-friendly" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84088.yml b/html/changelogs/AutoChangeLog-pr-84088.yml deleted file mode 100644 index 1dce6075c2695..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84088.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "JackEnoff" -delete-after: True -changes: - - bugfix: "Repurposed Glands (Adrenals) now show their correct duration and chemical cost in its description." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84090.yml b/html/changelogs/AutoChangeLog-pr-84090.yml deleted file mode 100644 index bde4fd47b9183..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84090.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Bisar" -delete-after: True -changes: - - rscadd: "Ashwalkers are now better at riding, taming animals, and fishing." - - code_imp: "Behavior for the settler trait has been partially atomized into several traits instead." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84106.yml b/html/changelogs/AutoChangeLog-pr-84106.yml deleted file mode 100644 index dc33240181e5f..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84106.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "00-Steven" -delete-after: True -changes: - - refactor: "Updated cards/ids to use the proper item interaction system instead of attackby, please report any issues." - - bugfix: "You can no longer recolour an ID at any point if you open the menu but then don't select anything until later." - - bugfix: "ID cards can be recoloured using crayons/spraycans again." - - qol: "Prisoner IDs show genpop sentence time in hours/minutes/seconds instead of seconds." - - qol: "Prisoner IDs have genpop usage tips in their examine." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84107.yml b/html/changelogs/AutoChangeLog-pr-84107.yml deleted file mode 100644 index 1dda24aba25b0..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84107.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "mc-oofert" -delete-after: True -changes: - - rscadd: "every engineering lobby starts with a flatpacked flatpacker and multitool" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84112.yml b/html/changelogs/AutoChangeLog-pr-84112.yml deleted file mode 100644 index 9ea4b1d68bf9e..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84112.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - bugfix: "Welding protection module for MODsuits protect flash-sensitives from welding arcs" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84118.yml b/html/changelogs/AutoChangeLog-pr-84118.yml deleted file mode 100644 index f91609e8fe3b9..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84118.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Rhials" -delete-after: True -changes: - - balance: "DRAGnets now come with a beacon they can be synced to, which will set the destination for the snare round's teleport ability." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84126.yml b/html/changelogs/AutoChangeLog-pr-84126.yml deleted file mode 100644 index 633e7a1a2870b..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84126.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - image: "Resprited all jetpacks" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84136.yml b/html/changelogs/AutoChangeLog-pr-84136.yml deleted file mode 100644 index a81b14d088658..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84136.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SyncIt21" -delete-after: True -changes: - - bugfix: "breaking an APC will depower the area" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-84149.yml b/html/changelogs/AutoChangeLog-pr-84149.yml deleted file mode 100644 index babdfdbcddbde..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84149.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "MTandi" -delete-after: True -changes: - - image: "New gibber sprite" - - image: "New food/slime processor sprite" \ No newline at end of file diff --git a/html/changelogs/archive/2024-06.yml b/html/changelogs/archive/2024-06.yml index 1c03380f14dee..b77aab2bd31f1 100644 --- a/html/changelogs/archive/2024-06.yml +++ b/html/changelogs/archive/2024-06.yml @@ -892,3 +892,85 @@ - bugfix: wawa med elevator controls on the bottom floor are accessible - bugfix: sci entrance actually has access restrictions - bugfix: gasping makes sound now +2024-06-21: + 00-Steven: + - refactor: Updated cards/ids to use the proper item interaction system instead + of attackby, please report any issues. + - bugfix: You can no longer recolour an ID at any point if you open the menu but + then don't select anything until later. + - bugfix: ID cards can be recoloured using crayons/spraycans again. + - qol: Prisoner IDs show genpop sentence time in hours/minutes/seconds instead of + seconds. + - qol: Prisoner IDs have genpop usage tips in their examine. + ArcaneMusic: + - qol: Vending machines now give audio feedback when you restock a vending refill + and get a payout. + - qol: The Restock tracker NTOS app for tracking vending machine contents now works + on all consoles, and comes pre-installed on the cargochat cargo computers. + - balance: Vending machines now offer a bit more credits when missing contents at + the start of a round after getting restocked. + BeagleGaming1: + - rscadd: Added disks for accelerator modkits and crusher trophies to the bitrunning + vendor + Bisar: + - rscadd: Ashwalkers are now better at riding, taming animals, and fishing. + - code_imp: Behavior for the settler trait has been partially atomized into several + traits instead. + EdgeLordExe: + - rscadd: Adds Feast of Owls ritual to heretic which allows one to forsake their + ascension in exchange for immediate power. + GPeckman: + - bugfix: When on 'stream' mode, the cleaning spray from a bottle of space cleaner + should no longer be blocked by just about everything. + Goat: + - bugfix: Icebox's raptor den is now lined with asbestos and lead and no longer + gets hit with radiation. + JackEnoff: + - bugfix: Repurposed Glands (Adrenals) now show their correct duration and chemical + cost in its description. + LT3: + - bugfix: Fixed paramedics not having access to the Icebox NanoDrug using the west + airlock + MTandi: + - image: New gibber sprite + - image: New food/slime processor sprite + - balance: Added ordnance to extra access of geneticists and roboticists + - balance: Reduced parts scanning tests' machine count to 4 from 8 + - balance: Reduced augmented organs scanning tests mob count to 1 from 2 + - balance: Reduced equipped mech scanning test count to 1 from 2 + - balance: Added polycrystal option to bluespace crystal scan test + - bugfix: Allowed NTNet relay in away circuit imprinter for NT Frontier app + - qol: NT Frontier app installed on RD and Scientists` PDAs by default + - qol: Updated NT Frontier app to be more user-friendly + Rex9001: + - bugfix: lunatics now get their hud properly + - bugfix: lunatics now get objectives + - qol: ascended moon heretics are now labelled as ringleaders and are easier for + lunatics to spot + Rhials: + - balance: DRAGnets now come with a beacon they can be synced to, which will set + the destination for the snare round's teleport ability. + SmArtKar: + - image: Resprited all jetpacks + SyncIt21: + - bugfix: breaking an APC will depower the area + Xander3359: + - bugfix: Fix rust heretic being unable to rust walls or floors + grungussuss: + - bugfix: Welding protection module for MODsuits protect flash-sensitives from welding + arcs + mc-oofert: + - rscadd: every engineering lobby starts with a flatpacked flatpacker and multitool + - bugfix: fixed wrong access on one door on wawastation and also made lights on + elevators not break (On Wawastation) + necromanceranne: + - rscadd: Replaces the Particle Acceleration Rifle with the Event Horizon anti-existential + beam rifle. It shoots black holes. You can make this in-game. That's right, + YOU! + - balance: Only one vortex anomaly can be made in a round. + projectkepler-ru: + - bugfix: Wawastation bridge now has the correct access on their suit storage and + medkit now actually starts filled + r3dj4ck0424: + - bugfix: puts tiles under the wawa tool storage doors + - bugfix: allows you to access a door and a fire alarm on wawa's prison second floor From 7b1b4ec22970f3f2aac75b71711b3733e5a5e637 Mon Sep 17 00:00:00 2001 From: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Date: Thu, 20 Jun 2024 19:10:38 -0700 Subject: [PATCH 62/75] Better delete character ux (#84158) I didn't see https://github.com/tgstation/tgstation/pull/83989 and that is on me. The UX of it is not suitable enough for preferences menu. - New row with only one entry makes the UI look much worse and adds too much blank space - The deleting confirmation prompt is a weird amount of work and also doesn't tell you when you get it wrong - A weird amount was being handled in JavaScript This reverts the PR and just starts over. You can see the UX here. https://github.com/tgstation/tgstation/assets/35135081/8106bca7-8c01-41da-8ede-e33a5a548583 ## Changelog :cl: qol: Dramatically improves delete character UI and UX. /:cl: --- code/modules/client/preferences.dm | 34 ++--------- code/modules/client/preferences_savefile.dm | 43 +++++++++++--- .../CharacterPreferenceWindow.tsx | 32 ----------- .../PreferencesMenu/DeleteCharacterPopup.tsx | 57 +++++++++++++++++++ .../interfaces/PreferencesMenu/MainPage.tsx | 30 +++++++++- 5 files changed, 124 insertions(+), 72 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/PreferencesMenu/DeleteCharacterPopup.tsx diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 9877fe8869eb5..7cd3965718e60 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -211,37 +211,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) if ("change_slot") // Save existing character save_character() - - // SAFETY: `load_character` performs sanitization the slot number - if (!load_character(params["slot"])) - tainted_character_profiles = TRUE - randomise_appearance_prefs() - save_character() - - for (var/datum/preference_middleware/preference_middleware as anything in middleware) - preference_middleware.on_new_character(usr) - - character_preview_view.update_body() - + // SAFETY: `switch_to_slot` performs sanitization on the slot number + switch_to_slot(params["slot"]) return TRUE - if ("remove_slot") - var/picked_slot = params["slot"] - var/confidence_check = tgui_input_text(usr, "To confirm the deletion of a character, type the name of the character.", "Character Deletion") - if(confidence_check != params["name"]) - return FALSE - - if(!remove_character(picked_slot)) - return FALSE - - if (!load_character(params["slotToJump"])) - randomise_appearance_prefs() - save_character() - - for (var/datum/preference_middleware/preference_middleware as anything in middleware) - preference_middleware.on_new_character(usr) - - tainted_character_profiles = TRUE - character_preview_view.update_body(); + if ("remove_current_slot") + remove_current_slot() return TRUE if ("rotate") character_preview_view.setDir(turn(character_preview_view.dir, -90)) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 5750e296a80bc..9a6448e2e6d54 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -368,15 +368,42 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car return TRUE -/datum/preferences/proc/remove_character(slot) - SHOULD_NOT_SLEEP(TRUE) - if(!slot) - return FALSE - slot = sanitize_integer(slot, 1, max_save_slots, initial(default_slot)) +/datum/preferences/proc/switch_to_slot(new_slot) + // SAFETY: `load_character` performs sanitization on the slot number + if (!load_character(new_slot)) + tainted_character_profiles = TRUE + randomise_appearance_prefs() + save_character() + + for (var/datum/preference_middleware/preference_middleware as anything in middleware) + preference_middleware.on_new_character(usr) + + character_preview_view.update_body() + +/datum/preferences/proc/remove_current_slot() + PRIVATE_PROC(TRUE) + + var/closest_slot + for (var/other_slot in default_slot - 1 to 1 step -1) + var/save_data = savefile.get_entry("character[other_slot]") + if (!isnull(save_data)) + closest_slot = other_slot + break + + if (isnull(closest_slot)) + for (var/other_slot in default_slot + 1 to max_save_slots) + var/save_data = savefile.get_entry("character[other_slot]") + if (!isnull(save_data)) + closest_slot = other_slot + break - var/tree_key = "character[slot]" - savefile.remove_entry(tree_key) - return TRUE + if (isnull(closest_slot)) + stack_trace("remove_current_slot() being called when there are no slots to go to, the client should prevent this") + return + + savefile.remove_entry("character[default_slot]") + tainted_character_profiles = TRUE + switch_to_slot(closest_slot) /datum/preferences/proc/sanitize_be_special(list/input_be_special) var/list/output = list() diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx index 435d7c441d08d..8193384e6ae88 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx @@ -101,38 +101,6 @@ export const CharacterPreferenceWindow = (props) => { profiles={data.character_profiles} /> - - - {!data.content_unlocked && ( Buy BYOND premium for more slots! diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/DeleteCharacterPopup.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/DeleteCharacterPopup.tsx new file mode 100644 index 0000000000000..3656465677b21 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/DeleteCharacterPopup.tsx @@ -0,0 +1,57 @@ +import { useEffect, useState } from 'react'; + +import { useBackend } from '../../backend'; +import { Box, Button, Modal, Stack } from '../../components'; +import { PreferencesMenuData } from './data'; + +export const DeleteCharacterPopup = (props: { close: () => void }) => { + const { data, act } = useBackend(); + const [secondsLeft, setSecondsLeft] = useState(3); + + const { close } = props; + + useEffect(() => { + const interval = setInterval(() => { + setSecondsLeft((current) => current - 1); + }, 1000); + + return () => clearInterval(interval); + }); + + return ( + + + + Wait! + + + + {`You're about to delete ${data.character_preferences.names[data.name_to_use]} forever. Are you sure you want to do this?`} + + + + + + {/* Explicit width so that the layout doesn't shift */} + + + + + + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx index c79827d2abe74..35ddf9d2a7326 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx @@ -1,7 +1,7 @@ import { filter, map, sortBy } from 'common/collections'; import { classes } from 'common/react'; import { createSearch } from 'common/string'; -import { useState } from 'react'; +import { ReactNode, useState } from 'react'; import { sendAct, useBackend } from '../../backend'; import { @@ -21,6 +21,7 @@ import { RandomSetting, ServerData, } from './data'; +import { DeleteCharacterPopup } from './DeleteCharacterPopup'; import { MultiNameInput, NameInput } from './names'; import features from './preferences/features'; import { @@ -383,6 +384,7 @@ export const PreferenceList = (props: { preferences: Record; randomizations: Record; maxHeight: string; + children?: ReactNode; }) => { return ( + + {props.children} ); }; @@ -478,6 +482,8 @@ export const MainPage = (props: { openSpecies: () => void }) => { const [currentClothingMenu, setCurrentClothingMenu] = useState( null, ); + const [deleteCharacterPopupOpen, setDeleteCharacterPopupOpen] = + useState(false); const [multiNameInputOpen, setMultiNameInputOpen] = useState(false); const [randomToggleEnabled] = useRandomToggleState(); @@ -549,6 +555,12 @@ export const MainPage = (props: { openSpecies: () => void }) => { /> )} + {deleteCharacterPopupOpen && ( + setDeleteCharacterPopupOpen(false)} + /> + )} + @@ -648,7 +660,21 @@ export const MainPage = (props: { openSpecies: () => void }) => { )} preferences={nonContextualPreferences} maxHeight="auto" - /> + > + + + + From e2efec3e66a71e1dd5ac438682718bff1057de0c Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 14:10:55 +1200 Subject: [PATCH 63/75] Automatic changelog for PR #84158 [ci skip] --- html/changelogs/AutoChangeLog-pr-84158.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84158.yml diff --git a/html/changelogs/AutoChangeLog-pr-84158.yml b/html/changelogs/AutoChangeLog-pr-84158.yml new file mode 100644 index 0000000000000..90e914ceb5428 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84158.yml @@ -0,0 +1,4 @@ +author: "Mothblocks" +delete-after: True +changes: + - qol: "Dramatically improves delete character UI and UX." \ No newline at end of file From a4683217983615fe26b6546ecb23a10d908aae8d Mon Sep 17 00:00:00 2001 From: jimmyl <70376633+mc-oofert@users.noreply.github.com> Date: Fri, 21 Jun 2024 04:19:10 +0200 Subject: [PATCH 64/75] borg factory gives you your preference borg name (#84147) ## About The Pull Request borg factory gives you your preference borg name ## Why It's Good For The Game fixes #82880 ## Changelog :cl: fix: borg factory gives you your preference borg name /:cl: --- code/modules/mob/transform_procs.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 123fb0de82cd7..d186661d87fae 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -140,8 +140,8 @@ new_borg.gender = gender new_borg.SetInvisibility(INVISIBILITY_NONE) - if(client) - new_borg.updatename(client) + if(client?.prefs.read_preference(/datum/preference/name/cyborg) != DEFAULT_CYBORG_NAME) + new_borg.apply_pref_name(/datum/preference/name/cyborg, client) if(mind) //TODO //TODO WHAT if(!transfer_after) From a3204178a354f708851fad635f80406b657bced0 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 14:19:47 +1200 Subject: [PATCH 65/75] Automatic changelog for PR #84147 [ci skip] --- html/changelogs/AutoChangeLog-pr-84147.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84147.yml diff --git a/html/changelogs/AutoChangeLog-pr-84147.yml b/html/changelogs/AutoChangeLog-pr-84147.yml new file mode 100644 index 0000000000000..d8500ff079b4d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84147.yml @@ -0,0 +1,4 @@ +author: "mc-oofert" +delete-after: True +changes: + - bugfix: "borg factory gives you your preference borg name" \ No newline at end of file From 18298332e6c97698bd2a40c9a018b6aad3a01ff1 Mon Sep 17 00:00:00 2001 From: Joshua Kidder <49173900+Metekillot@users.noreply.github.com> Date: Thu, 20 Jun 2024 22:20:01 -0400 Subject: [PATCH 66/75] Felinids no longer get negative moodlets roundstart about their tail (#84163) ## About The Pull Request Felinids receive their tail during creation of their character; the code wasn't accounting for special cases like this and always giving them negative mood events when they received a tail, even if they hadn't lost it yet. This no longer happens. ## Why It's Good For The Game Nanotrasen re-education programs guarantee memory loss for felinid employees from the Tail Wars of 2277, and this bring the code in line with that. Fixes #84048 ## Changelog :cl: Bisar fix: Felinids no longer remember losing their tail and regaining it roundstart; you need to do it during the round to get that mood event. /:cl: --- code/modules/surgery/organs/external/tails.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm index 977597f90f52f..e4cd3f50a4997 100644 --- a/code/modules/surgery/organs/external/tails.dm +++ b/code/modules/surgery/organs/external/tails.dm @@ -23,11 +23,12 @@ /obj/item/organ/external/tail/Insert(mob/living/carbon/receiver, special, movement_flags) . = ..() if(.) - original_owner ||= WEAKREF(receiver) - receiver.clear_mood_event("tail_lost") receiver.clear_mood_event("tail_balance_lost") + if(!special) // if some admin wants to give someone tail moodles for tail shenanigans, they can spawn it and do it by hand + original_owner ||= WEAKREF(receiver) + // If it's your tail, an infinite debuff is replaced with a timed one // If it's not your tail but of same species, I guess it works, but we are more sad // If it's not your tail AND of different species, we are horrified From 1eab8bdae9b581a65f2dedad17dcb05fcf220425 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 14:20:24 +1200 Subject: [PATCH 67/75] Automatic changelog for PR #84163 [ci skip] --- html/changelogs/AutoChangeLog-pr-84163.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84163.yml diff --git a/html/changelogs/AutoChangeLog-pr-84163.yml b/html/changelogs/AutoChangeLog-pr-84163.yml new file mode 100644 index 0000000000000..6dbfc565dcbd0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84163.yml @@ -0,0 +1,4 @@ +author: "Bisar" +delete-after: True +changes: + - bugfix: "Felinids no longer remember losing their tail and regaining it roundstart; you need to do it during the round to get that mood event." \ No newline at end of file From 1e74f4b74011f0d246a84305c20ed9164ec5a4ee Mon Sep 17 00:00:00 2001 From: JupiterJaeden <48777952+JupiterJaeden@users.noreply.github.com> Date: Thu, 20 Jun 2024 22:21:09 -0400 Subject: [PATCH 68/75] Fixes conga lines breaking when going up/down stairs. (#84156) ## About The Pull Request Last PR I fixed ladders and no-grav conga lines, but I couldn't figure out stairs. I have returned to it and after several fucking hours I figured it out. Fixes conga lines of more than 2 breaking when pulling them up and down stairs. You can now go up and down stairs with conga lines of arbitrary length! ## Why It's Good For The Game Bug fix good. ## Changelog :cl: fix: Conga lines of more than 2 no longer break when going up and down stairs. /:cl: --- code/game/atoms_movable.dm | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index d8ae957994794..8135a3af59346 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -595,7 +595,7 @@ stop_pulling() else if(pulling.anchored || pulling.move_resist > move_force) stop_pulling() - if(!only_pulling && pulledby && moving_diagonally != FIRST_DIAG_STEP && (get_dist(src, pulledby) > 1 || z != pulledby.z)) //separated from our puller and not in the middle of a diagonal move. + if(!only_pulling && pulledby && moving_diagonally != FIRST_DIAG_STEP && (get_dist(src, pulledby) > 1 || (z != pulledby.z && !z_allowed))) //separated from our puller and not in the middle of a diagonal move. pulledby.stop_pulling() /atom/movable/proc/set_glide_size(target = 8) @@ -792,7 +792,14 @@ if(target_turf != current_turf || (moving_diagonally != SECOND_DIAG_STEP && ISDIAGONALDIR(pull_dir)) || get_dist(src, pulling) > 1) pulling.move_from_pull(src, target_turf, glide_size) - check_pulling() + if (pulledby) + if (pulledby.currently_z_moving) + check_pulling(z_allowed = TRUE) + //dont call check_pulling() here at all if there is a pulledby that is not currently z moving + //because it breaks stair conga lines, for some fucking reason. + //it's fine because the pull will be checked when this whole proc is called by the mob doing the pulling anyways + else + check_pulling() //glide_size strangely enough can change mid movement animation and update correctly while the animation is playing //This means that if you don't override it late like this, it will just be set back by the movement update that's called when you move turfs. From d621cfd46cf78e2c9bdac9d0628b9f75aee69900 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 14:21:37 +1200 Subject: [PATCH 69/75] Automatic changelog for PR #84156 [ci skip] --- html/changelogs/AutoChangeLog-pr-84156.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84156.yml diff --git a/html/changelogs/AutoChangeLog-pr-84156.yml b/html/changelogs/AutoChangeLog-pr-84156.yml new file mode 100644 index 0000000000000..95d9e31986fb6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84156.yml @@ -0,0 +1,4 @@ +author: "JupiterJaeden" +delete-after: True +changes: + - bugfix: "Conga lines of more than 2 no longer break when going up and down stairs." \ No newline at end of file From ebfd39179dc1b8ff0f15ffcf95b22eedfaac07de Mon Sep 17 00:00:00 2001 From: FlufflesTheDog Date: Thu, 20 Jun 2024 19:22:57 -0700 Subject: [PATCH 70/75] Fix missing sanitization for citation pda alerts (#84091) ## About The Pull Request Sanitizes input sent to pdas when a citation is issued. The text length is +very+ limited so it'd be hard to abuse, but better safe than sorry. ## Why It's Good For The Game be clean... ## Changelog :cl: fix: sanitization on citation pda alerts /:cl: --- code/game/machinery/computer/records/security.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/game/machinery/computer/records/security.dm b/code/game/machinery/computer/records/security.dm index c41779e7384ec..dac62612a4c74 100644 --- a/code/game/machinery/computer/records/security.dm +++ b/code/game/machinery/computer/records/security.dm @@ -176,7 +176,7 @@ return TRUE if("set_note") - var/note = trim(params["note"], MAX_MESSAGE_LEN) + var/note = strip_html_full(params["note"], MAX_MESSAGE_LEN) investigate_log("[user] has changed the security note of record: \"[target]\" from \"[target.security_note]\" to \"[note]\".") target.security_note = note return TRUE @@ -199,7 +199,7 @@ /// Handles adding a crime to a particular record. /obj/machinery/computer/records/security/proc/add_crime(mob/user, datum/record/crew/target, list/params) - var/input_name = trim(params["name"], MAX_CRIME_NAME_LEN) + var/input_name = strip_html_full(params["name"], MAX_CRIME_NAME_LEN) if(!input_name) to_chat(usr, span_warning("You must enter a name for the crime.")) playsound(src, 'sound/machines/terminal_error.ogg', 75, TRUE) @@ -213,7 +213,7 @@ var/input_details if(params["details"]) - input_details = trim(params["details"], MAX_MESSAGE_LEN) + input_details = strip_html_full(params["details"], MAX_MESSAGE_LEN) if(params["fine"] == 0) var/datum/crime/new_crime = new(name = input_name, details = input_details, author = usr) @@ -245,13 +245,13 @@ return FALSE if(params["name"] && length(params["name"]) > 2 && params["name"] != editing_crime.name) - var/new_name = trim(params["name"], MAX_CRIME_NAME_LEN) + var/new_name = strip_html_full(params["name"], MAX_CRIME_NAME_LEN) investigate_log("[user] edited crime: \"[editing_crime.name]\" for target: \"[target.name]\", changing the name to: \"[new_name]\".", INVESTIGATE_RECORDS) editing_crime.name = new_name return TRUE if(params["details"] && length(params["description"]) > 2 && params["name"] != editing_crime.name) - var/new_details = trim(params["details"], MAX_MESSAGE_LEN) + var/new_details = strip_html_full(params["details"], MAX_MESSAGE_LEN) investigate_log("[user] edited crime \"[editing_crime.name]\" for target: \"[target.name]\", changing the details to: \"[new_details]\" from: \"[editing_crime.details]\".", INVESTIGATE_RECORDS) editing_crime.details = new_details return TRUE @@ -327,9 +327,9 @@ playsound(src, 'sound/machines/printer.ogg', 100, TRUE) var/obj/item/printable - var/input_alias = trim(params["alias"], MAX_NAME_LEN) || target.name - var/input_description = trim(params["desc"], MAX_BROADCAST_LEN) || "No further details." - var/input_header = trim(params["head"], 8) || capitalize(params["type"]) + var/input_alias = strip_html_full(params["alias"], MAX_NAME_LEN) || target.name + var/input_description = strip_html_full(params["desc"], MAX_BROADCAST_LEN) || "No further details." + var/input_header = strip_html_full(params["head"], 8) || capitalize(params["type"]) switch(params["type"]) if("missing") From 23cfbd3987139d5d35140ec9155eefc975915625 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 14:23:16 +1200 Subject: [PATCH 71/75] Automatic changelog for PR #84091 [ci skip] --- html/changelogs/AutoChangeLog-pr-84091.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84091.yml diff --git a/html/changelogs/AutoChangeLog-pr-84091.yml b/html/changelogs/AutoChangeLog-pr-84091.yml new file mode 100644 index 0000000000000..58059ae4af9d8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84091.yml @@ -0,0 +1,4 @@ +author: "FlufflesTheDog" +delete-after: True +changes: + - bugfix: "sanitization on citation pda alerts" \ No newline at end of file From b02ff6e94637763bf79836a13b67a85c20efedba Mon Sep 17 00:00:00 2001 From: Aylong <69762909+AyIong@users.noreply.github.com> Date: Fri, 21 Jun 2024 05:45:38 +0300 Subject: [PATCH 72/75] Fullscreen QoL (#84066) ## About The Pull Request Add hotkey for toggling fullscreen (F11) Add toggle fullscreen button to the skin buttons Also, fix little padding on the left and right, maybe that was the intention, so please tell me if this needs to be returned, screenshots bellow | Before | After(With padding) | After(Without padding/final result) | | - | - | - | | ![image](https://github.com/tgstation/tgstation/assets/69762909/3c8863dc-94cf-40e9-9eec-24fe548f1474) | ![image](https://github.com/tgstation/tgstation/assets/69762909/ae167f4d-02e3-4b6d-874f-3b5c38d77bc8) | ![image](https://github.com/tgstation/tgstation/assets/69762909/30a4ed6c-fc0f-468c-ab01-7c4b66551d0f) | ## Why It's Good For The Game It is a little bit not convenient to search for the Toggle Fullscreen button in any of the tabs, I think no one will argue that the hotkey is more convenient ## Changelog :cl: qol: Fullscreen mode can now be toggled by pressing F11 or the button at the top right /:cl: --- code/__DEFINES/keybinding.dm | 1 + code/datums/keybinding/client.dm | 14 +++++++ interface/skin.dmf | 61 +++++++++++++++++------------- tgui/packages/tgui-panel/themes.ts | 4 ++ 4 files changed, 54 insertions(+), 26 deletions(-) diff --git a/code/__DEFINES/keybinding.dm b/code/__DEFINES/keybinding.dm index 2a2a092c6d05b..5f025ad99cffb 100644 --- a/code/__DEFINES/keybinding.dm +++ b/code/__DEFINES/keybinding.dm @@ -26,6 +26,7 @@ //Client #define COMSIG_KB_CLIENT_GETHELP_DOWN "keybinding_client_gethelp_down" #define COMSIG_KB_CLIENT_SCREENSHOT_DOWN "keybinding_client_screenshot_down" +#define COMSIG_KB_CLIENT_FULLSCREEN_DOWN "keybinding_client_fullscreen_down" #define COMSIG_KB_CLIENT_MINIMALHUD_DOWN "keybinding_client_minimalhud_down" //Communication diff --git a/code/datums/keybinding/client.dm b/code/datums/keybinding/client.dm index 81b9bb6c287a3..f36645692c992 100644 --- a/code/datums/keybinding/client.dm +++ b/code/datums/keybinding/client.dm @@ -32,6 +32,20 @@ winset(user, null, "command=.auto") return TRUE +/datum/keybinding/client/toggle_fullscreen + hotkey_keys = list("F11") + name = "toggle_fullscreen" + full_name = "Toggle Fullscreen" + description = "Makes the game window fullscreen." + keybind_signal = COMSIG_KB_CLIENT_FULLSCREEN_DOWN + +/datum/keybinding/client/toggle_fullscreen/down(client/user) + . = ..() + if(.) + return + user.toggle_fullscreen() + return TRUE + /datum/keybinding/client/minimal_hud hotkey_keys = list("F12") name = "minimal_hud" diff --git a/interface/skin.dmf b/interface/skin.dmf index b8d1d82f17558..8388f5107b64c 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -70,8 +70,8 @@ window "mainwindow" menu = "menu" elem "split" type = CHILD - pos = 3,0 - size = 634x440 + pos = 0,0 + size = 640x440 anchor1 = 0,0 anchor2 = 100,100 saved-params = "splitter" @@ -159,58 +159,67 @@ window "infowindow" is-vert = false elem "changelog" type = BUTTON - pos = 16,5 - size = 104x20 - anchor1 = 3,0 - anchor2 = 19,0 + pos = 5,5 + size = 90x20 + anchor1 = 1,0 + anchor2 = 15,0 saved-params = "is-checked" text = "Changelog" command = "changelog" elem "rules" type = BUTTON - pos = 120,5 - size = 100x20 - anchor1 = 19,0 - anchor2 = 34,0 + pos = 95,5 + size = 90x20 + anchor1 = 15,0 + anchor2 = 29,0 saved-params = "is-checked" text = "Rules" command = "rules" elem "wiki" type = BUTTON - pos = 220,5 - size = 100x20 - anchor1 = 34,0 - anchor2 = 50,0 + pos = 185,5 + size = 90x20 + anchor1 = 29,0 + anchor2 = 43,0 saved-params = "is-checked" text = "Wiki" command = "wiki" elem "forum" type = BUTTON - pos = 320,5 - size = 100x20 - anchor1 = 50,0 - anchor2 = 66,0 + pos = 275,5 + size = 90x20 + anchor1 = 43,0 + anchor2 = 57,0 saved-params = "is-checked" text = "Forum" command = "forum" elem "github" type = BUTTON - pos = 420,5 - size = 100x20 - anchor1 = 66,0 - anchor2 = 81,0 + pos = 365,5 + size = 90x20 + anchor1 = 57,0 + anchor2 = 71,0 saved-params = "is-checked" text = "Github" command = "github" elem "report-issue" type = BUTTON - pos = 520,5 - size = 100x20 - anchor1 = 81,0 - anchor2 = 97,0 + pos = 455,5 + size = 90x20 + anchor1 = 71,0 + anchor2 = 85,0 saved-params = "is-checked" text = "Report Issue" command = "report-issue" + elem "fullscreen-toggle" + type = BUTTON + pos = 545,5 + size = 90x20 + anchor1 = 85,0 + anchor2 = 99,0 + saved-params = "is-checked" + text = "Fullscreen" + command = "fullscreen" window "outputwindow" elem "outputwindow" diff --git a/tgui/packages/tgui-panel/themes.ts b/tgui/packages/tgui-panel/themes.ts index d8f0ce50b7974..67061ff1f4cf1 100644 --- a/tgui/packages/tgui-panel/themes.ts +++ b/tgui/packages/tgui-panel/themes.ts @@ -57,6 +57,8 @@ export const setClientTheme = (name) => { 'github.text-color': '#000000', 'report-issue.background-color': 'none', 'report-issue.text-color': '#000000', + 'fullscreen-toggle.background-color': 'none', + 'fullscreen-toggle.text-color': '#000000', // Status and verb tabs 'output.background-color': 'none', 'output.text-color': '#000000', @@ -109,6 +111,8 @@ export const setClientTheme = (name) => { 'github.text-color': COLOR_DARK_TEXT, 'report-issue.background-color': '#492020', 'report-issue.text-color': COLOR_DARK_TEXT, + 'fullscreen-toggle.background-color': '#494949', + 'fullscreen-toggle.text-color': COLOR_DARK_TEXT, // Status and verb tabs 'output.background-color': COLOR_DARK_BG_DARKER, 'output.text-color': COLOR_DARK_TEXT, From c88438ea35a177fc593f0911af1b3db84157e182 Mon Sep 17 00:00:00 2001 From: Thunder12345 Date: Fri, 21 Jun 2024 03:47:30 +0100 Subject: [PATCH 73/75] Removes the locker staff from Ragin' Mages deathmatch (#84060) ## About The Pull Request See title, removes this particular staff from the loot list. ## Why It's Good For The Game Locker staffs only serve to drag out the match unreasonably, while denying everyone involved their time and fun. It's boring to be the person trapped in one having to wait a whole minute to resist out, and it's boring to be the last other person left alive unable to finish the match because you can't find the other guy who is actually stuck in one of the 20 lockers scattered across the arena. ## Changelog :cl: del: Locker staffs have been removed from the Ragin' Mages deathmatch lootcrate pool. /:cl: --- code/game/objects/structures/mystery_box.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/objects/structures/mystery_box.dm b/code/game/objects/structures/mystery_box.dm index ab8a25f04c675..9dc8152f5b7bf 100644 --- a/code/game/objects/structures/mystery_box.dm +++ b/code/game/objects/structures/mystery_box.dm @@ -85,7 +85,6 @@ GLOBAL_LIST_INIT(mystery_magic, list( /obj/item/gun/magic/staff/door, /obj/item/gun/magic/staff/honk, /obj/item/gun/magic/staff/spellblade, - /obj/item/gun/magic/staff/locker, /obj/item/gun/magic/staff/flying, /obj/item/gun/magic/staff/babel, /obj/item/singularityhammer, From 9da1859f4cd2a26f9768b5a7d719b6c873a57358 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 14:50:29 +1200 Subject: [PATCH 74/75] Automatic changelog for PR #84066 [ci skip] --- html/changelogs/AutoChangeLog-pr-84066.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84066.yml diff --git a/html/changelogs/AutoChangeLog-pr-84066.yml b/html/changelogs/AutoChangeLog-pr-84066.yml new file mode 100644 index 0000000000000..0ea603f5e6b4a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84066.yml @@ -0,0 +1,4 @@ +author: "AyIong" +delete-after: True +changes: + - qol: "Fullscreen mode can now be toggled by pressing F11 or the button at the top right" \ No newline at end of file From 7579e0e1734ee40b33ce1fd3fc5c2dd08fe30404 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Fri, 21 Jun 2024 14:50:33 +1200 Subject: [PATCH 75/75] Automatic changelog for PR #84060 [ci skip] --- html/changelogs/AutoChangeLog-pr-84060.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84060.yml diff --git a/html/changelogs/AutoChangeLog-pr-84060.yml b/html/changelogs/AutoChangeLog-pr-84060.yml new file mode 100644 index 0000000000000..1b2f4ac222b39 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84060.yml @@ -0,0 +1,4 @@ +author: "Thunder12345" +delete-after: True +changes: + - rscdel: "Locker staffs have been removed from the Ragin' Mages deathmatch lootcrate pool." \ No newline at end of file