From c3d865b5bbd338201aff912544d92fda6ec25673 Mon Sep 17 00:00:00 2001 From: LT3 <83487515+lessthnthree@users.noreply.github.com> Date: Sun, 4 May 2025 15:07:03 -0700 Subject: [PATCH 1/8] Fix station time on stat panel (#3709) ## About The Pull Request Fixes the station time on the stat panel, cleans up the code edit a bit. ## Why It's Good For The Game It kills me inside to see the stat panel clock not match all the other clocks in game. ## Proof Of Testing
Screenshots/Videos ![image](https://github.com/user-attachments/assets/74c5a611-f651-4ef8-98a7-e67416e35ccd)
## Changelog :cl: LT3 fix: Stat panel now shows the correct station time /:cl: --- code/controllers/subsystem/statpanel.dm | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm index a9736751c47..835f1474508 100644 --- a/code/controllers/subsystem/statpanel.dm +++ b/code/controllers/subsystem/statpanel.dm @@ -23,7 +23,7 @@ SUBSYSTEM_DEF(statpanels) if (!resumed) num_fires++ var/datum/map_config/cached = SSmap_vote.next_map_config - /* SKYRAT EDIT CHANGE + /* BUBBER EDIT CHANGE BEGIN - Stat Panel - Original: global_data = list( "Map: [SSmapping.current_map?.map_name || "Loading..."]", cached ? "Next Map: [cached.map_name]" : null, @@ -34,29 +34,25 @@ SUBSYSTEM_DEF(statpanels) "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)" ) */ - var/round_time = world.time - SSticker.round_start_time var/real_round_time = world.timeofday - SSticker.real_round_start_time - //BUBBER EDIT ADDITION: ACTIVE AND OBSERVING PLAYERS var/active_players = get_active_player_count(alive_check = FALSE, afk_check = TRUE, human_check = FALSE) //This is a list of all active players, including players who are dead var/observing_players = length(GLOB.current_observers_list) //This is a list of all players that started as an observer-- dead and lobby players are not included. - //BUBBER EDIT ADDITION: Time in the world (as in, in-game date) - var/timeinworld = "[time2text(world.realtime, "DD of Month,")] [CURRENT_STATION_YEAR]" + var/current_date = "[time2text(world.realtime, "DDD Month DD")], [CURRENT_STATION_YEAR]" + global_data = list( - "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)", "Map: [SSmapping.current_map?.map_name || "Loading..."]", cached ? "Next Map: [cached.map_name]" : null, - "Storyteller: [SSgamemode.storyteller ? SSgamemode.storyteller.name : "N/A"]", // BUBBER EDIT ADDITION "Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]", - "Connected: [GLOB.clients.len] | Active: [active_players]/[CONFIG_GET(number/hard_popcap)] | Observing: [observing_players]", //BUBBER EDIT: ACTIVE AND OBSERVING PLAYERS - " ", + "Connected: [GLOB.clients.len] | Active: [active_players]/[CONFIG_GET(number/hard_popcap)] | Observing: [observing_players]", "OOC: [GLOB.ooc_allowed ? "Enabled" : "Disabled"]", " ", + "Storyteller: [SSgamemode.storyteller ? SSgamemode.storyteller.name : "N/A"]", + "Station Time: [station_time_timestamp(format = "hh:mm")], [current_date]", + "Round Time: [time2text(real_round_time, "hh:mm:ss", 0)]", "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]", - "Station Time: [time_to_twelve_hour(station_time(), format = "hh:mm")], [timeinworld]", //BUBBER EDIT: READABLE STATION TIME - "Round Timer: [round_time > MIDNIGHT_ROLLOVER ? "[round(round_time/MIDNIGHT_ROLLOVER)]:[worldtime2text()]" : worldtime2text()]", - "Actual Round Timer: [time2text(real_round_time, "hh:mm:ss", 0)]" + "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)", ) - // SKYRAT EDIT END + // BUBBER EDIT CHANGE END if(SSshuttle.emergency) var/ETA = SSshuttle.emergency.getModeStr() From 69a5febb960765b8f6571bf174147ea2b7086897 Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Mon, 5 May 2025 00:07:24 +0200 Subject: [PATCH 2/8] Automatic changelog for PR #3709 [ci skip] --- html/changelogs/AutoChangeLog-bubber-pr-3709.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-bubber-pr-3709.yml diff --git a/html/changelogs/AutoChangeLog-bubber-pr-3709.yml b/html/changelogs/AutoChangeLog-bubber-pr-3709.yml new file mode 100644 index 00000000000..125cebb422f --- /dev/null +++ b/html/changelogs/AutoChangeLog-bubber-pr-3709.yml @@ -0,0 +1,4 @@ +author: "LT3" +delete-after: True +changes: + - bugfix: "Stat panel now shows the correct station time" \ No newline at end of file From 6a6f4e8c8cbb1e020cdbd97fc441c001c9f307e7 Mon Sep 17 00:00:00 2001 From: sippykot Date: Mon, 5 May 2025 00:43:37 +0200 Subject: [PATCH 3/8] Cum 3 - Redone as Climax functionality (#3677) ## About The Pull Request Remake of #3427 Redoes the beaker-filling functionality, this time using the climax button. That was the feedback i got from maintainers, that it being an emote is bad. I finally figured out how the climax code works so, yeah. Also now has extra bells and whistles like the game reacting to the container overflowing with cum, etc. ## Why It's Good For The Game "As it currently stands, there is no way to actually cum into beakers. There's the milking machine, but it's extremely awkward to use and doesn't fit most rp scenarios. We already had a code intended for this, it just wasn't used. Tremendous NSFW maintenance bar rp benefits?" - that's what i wrote previously, and i still think it applies ## Proof Of Testing It should work, i tested it on localhost. ## Changelog :cl: add: New Climax option; (You) can cum into open reagent containers if you have a penis. Isn't science wonderful? /:cl: --- .../lewd_items/code/lewd_arousal/climax.dm | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm index 740192df9ef..cb213e23562 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm @@ -4,6 +4,7 @@ #define CLIMAX_ON_FLOOR "On the floor" #define CLIMAX_IN_OR_ON "Climax in or on someone" +#define CLIMAX_OPEN_CONTAINER "Fill reagent container" /mob/living/carbon/human /// Used to prevent nightmare scenarios. @@ -72,15 +73,24 @@ else var/list/interactable_inrange_humans = list() + // monkey see, monkey do + var/list/interactable_inrange_open_containers = list() // Unfortunately prefs can't be checked here, because byond/tgstation moment. for(var/mob/living/carbon/human/iterating_human in (view(1, src) - src)) interactable_inrange_humans[iterating_human.name] = iterating_human + // this should be making a list of cups(?) + for(var/obj/item/reagent_containers/cup/iterating_open_container in (view(1, src) - src)) + interactable_inrange_open_containers[iterating_open_container.name] = iterating_open_container + var/list/buttons = list(CLIMAX_ON_FLOOR) if(interactable_inrange_humans.len) buttons += CLIMAX_IN_OR_ON + if(interactable_inrange_open_containers.len) + buttons += CLIMAX_OPEN_CONTAINER + var/penis_climax_choice = tgui_alert(src, "Choose where to shoot your load.", "Load preference!", buttons) var/create_cum_decal = FALSE @@ -90,6 +100,41 @@ visible_message(span_userlove("[src] shoots [self_their] sticky load onto the floor!"), \ span_userlove("You shoot string after string of hot cum, hitting the floor!")) + else if(penis_climax_choice == CLIMAX_OPEN_CONTAINER) + var/target_choice = tgui_input_list(src, "Choose a container to cum into.", "Choose target!", interactable_inrange_open_containers) + if(!target_choice) + create_cum_decal = TRUE + visible_message(span_userlove("[src] shoots [self_their] sticky load onto the floor!"), \ + span_userlove("You shoot string after string of hot cum, hitting the floor!")) + else + var/obj/item/reagent_containers/cup/target_open_container = interactable_inrange_open_containers[target_choice] + if(target_open_container.is_refillable() && target_open_container.is_drainable()) + // here's where we actually do the cumming(?) + var/obj/item/organ/genital/testicles/src_testicles = src.get_organ_slot(ORGAN_SLOT_TESTICLES) + var/cum_volume = src_testicles.genital_size * 10 + var/total_volume_w_cum = cum_volume + target_open_container.reagents.total_volume + conditional_pref_sound(get_turf(src), SFX_DESECRATION, 50, TRUE, pref_to_check = /datum/preference/toggle/erp/sounds) + if(target_open_container.reagents.holder_full()) + // its full already + add_cum_splatter_floor(get_turf(target_open_container)) + visible_message(span_userlove("[src] tries to cum into the [target_open_container], but it's already full, spilling their hot load onto the floor!"), \ + span_userlove("You try to cum into the [target_open_container], but it's already full, so it all hits the floor instead!")) + else + target_open_container.reagents.add_reagent(/datum/reagent/consumable/cum, cum_volume) + if(total_volume_w_cum > target_open_container.volume) + // overflow, make the decal + add_cum_splatter_floor(get_turf(target_open_container)) + visible_message(span_userlove("[src] shoots [self_their] sticky load into the [target_open_container], it's so full that it overflows!"), \ + span_userlove("You shoot string after string of hot cum into the [target_open_container], making it overflow!")) + else + visible_message(span_userlove("[src] shoots [self_their] sticky load into the [target_open_container]!"), \ + span_userlove("You shoot string after string of hot cum into the [target_open_container]!")) + else + // cum fail + create_cum_decal = TRUE + visible_message(span_userlove("[src] shoots [self_their] sticky load onto the floor!"), \ + span_userlove("You shoot string after string of hot cum, hitting the floor!")) + else var/target_choice = tgui_input_list(src, "Choose a person to cum in or on.", "Choose target!", interactable_inrange_humans) if(!target_choice) @@ -163,3 +208,4 @@ #undef CLIMAX_BOTH #undef CLIMAX_ON_FLOOR #undef CLIMAX_IN_OR_ON +#undef CLIMAX_OPEN_CONTAINER From 4d16744128e281a7a39cda5e3726a5277ef04739 Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Mon, 5 May 2025 00:43:59 +0200 Subject: [PATCH 4/8] Automatic changelog for PR #3677 [ci skip] --- html/changelogs/AutoChangeLog-bubber-pr-3677.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-bubber-pr-3677.yml diff --git a/html/changelogs/AutoChangeLog-bubber-pr-3677.yml b/html/changelogs/AutoChangeLog-bubber-pr-3677.yml new file mode 100644 index 00000000000..c0ab705e1cf --- /dev/null +++ b/html/changelogs/AutoChangeLog-bubber-pr-3677.yml @@ -0,0 +1,4 @@ +author: "sippykot" +delete-after: True +changes: + - rscadd: "New Climax option; (You) can cum into open reagent containers if you have a penis. Isn't science wonderful?" \ No newline at end of file From 366924764f6811d355dfc470ff8b14ec9a2a85c2 Mon Sep 17 00:00:00 2001 From: Ssalty <65713506+KazooBard@users.noreply.github.com> Date: Mon, 5 May 2025 00:59:52 +0200 Subject: [PATCH 5/8] Restricts guns from being able to be held on the security belt (#3675) ## About The Pull Request Wands, syringeguns + variants, the reagent dartgun, AR rifles and the romtech flechette gun are no longer able to be stored on the security belt. ## Why It's Good For The Game The goal of this PR is to prevent egregious cases of gunstacking, return predictability to their storage and by proxy return the syndicate holster to a better position. Firstly, a note: If I knew the PR would go through, as it did not in the past, I would have made this a full security belt weapons removal. The notion, that a person can hold 4 normal sized weapons on their belt slot is simply insane. 80 disabler shots, and whatever it is that the person brings in the backpack - the larger storage item of both. Without further ado, allow me to explain why this item is problematic in it's current state. ---------------------------------------------------------------------------------------------------------- # Issue 1. Intention vs Outcome, the egregious cases of the generic typepath. The largest issue that the item currently has is it being universal. I have manually selected items which cannot be held in it, but I still fear it is not enough. The generic typepath it uses, being /obj/item/gun, means that ANYTHING normal-sized that is a gun can be fit there, even, if it's not technically a gun, nor would it logically make sense from a game design standpoint. **In practise,** Wizard Wands can be fit in the security belt, the belt used to store security equipment. Plasma cutters and PKA's can be stored in the security belt. Syringe guns which aren't bulky, as well, and so can be the reagent dartgun. The reasoning is, that it's not only nonsensical, but a kick to the groin to the unspoken rule that belts generally respect eachother's personal space and a true omnibelt isn't *really* a thing. This applies to crew belts. However, if someone were wise enough to say "well what about X antag belt, it goes against the rule by being universal or allowing gun stacking". Yes. That was the idea. Antagonist tools are always better versions of what the crew has. It's working as intended. This? This is an oversight, nobody would have wanted sec belts to be able to store a rare antagonist's weapons unless it were a clear as day lack of forethought. # Issue 2. Trampling the Security belt(bubber edition's) established rules. Our belts are capable of storing medium sized wepaons, so handguns, mostly handguns and the 2 unique lasers. Clearly, the less firepower a person can keep on the belt at once, the better, as no aces remain hidden up anyone's sleeves ready to deal devastating damage and leave enough space for copies of itself. This helps prevent a single person going munchkin but allows for accessible storage and not having to minmax every slot, letting a player have a comfortable idea of "It'll fit somewhere, surely". Now, anyone can have 4 disablers, that's not very fun, true, but compared to main weapons such as the sol, the laser, the sindano, etc, none of the crew handguns have a comparable damage output. I believe firmly that this is on purpose. Now, the odds of two guns, who do not fit the norm of sidearms with their DPS, however do with their size - being an outlier and deserving exclusion are very high considering that wands can be stored on the belt. The Flechette rifle and the AR's are powerful guns. They do not compare to their neighbours. It doesn't shoot like a sidearm, look like a sidearm, but somehow is classified as one by the belt. # Issue 3, an item killed by the secbelt. As previously stated, not only is being too broad in what you can hold bad because items which by no means fit the category find their way onto it causing powercreep, munchkinism by stacking items which are sized medium for a reason, And not only has this slip-up caused not-so-hypothetical tools to enter it and actively oppose the natural idea the item seems to currently hold in our meta, but also: It kills other items. Why would anyone buy the 2tc syndicate holster, with inbuilt chameleon, if not to save 2 slots off gun storage or keeping it low-profile, when a 4 leather item exists to do the same thing. If normal-sized weapons were to not fit in the belt either, it'd become really apparent really quickly, that storage is CRUCIAL to preparations for combat. Decisions of what should stay and what shouldn't are thrown out the window. To prevent it going off-topic from how gunbelts kill sec to how gunbelts shouldn't exist, I will simply end this, by asking, if you have ever seen the holster used. I've seen it on other servers (tg), rarely. Yet here it is nonexistant, as whilst it's unpopular due to a slim advantage of those two slots, it's job is done better by a piece of leather, and that is NOT how work input vs reward output area supposed to work. I am very much so open to hear ideas of staff, coders, maintainers and players. I will edit the items appropriately. I just need an official version of "what now, boss?" to follow ## Proof Of Testing ## Changelog :cl: balance: A plethora of /obj/item/gun typecache weapons are gone from the secbelt. /:cl: --------- Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com> --- code/game/objects/items/storage/belt.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 07a2de08b2a..79afb37c54f 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -366,7 +366,6 @@ /obj/item/flashlight/seclite, /obj/item/food/donut, /obj/item/grenade, - /obj/item/gun, //SKYRAT EDIT ADDITION /obj/item/holosign_creator/security, /obj/item/knife/combat, /obj/item/melee/baton, From d74904844c58007b1db736801cd5947bb23b34ce Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Mon, 5 May 2025 01:00:19 +0200 Subject: [PATCH 6/8] Automatic changelog for PR #3675 [ci skip] --- html/changelogs/AutoChangeLog-bubber-pr-3675.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-bubber-pr-3675.yml diff --git a/html/changelogs/AutoChangeLog-bubber-pr-3675.yml b/html/changelogs/AutoChangeLog-bubber-pr-3675.yml new file mode 100644 index 00000000000..d735b2ff919 --- /dev/null +++ b/html/changelogs/AutoChangeLog-bubber-pr-3675.yml @@ -0,0 +1,4 @@ +author: "KazooBard" +delete-after: True +changes: + - balance: "A plethora of /obj/item/gun typecache weapons are gone from the secbelt." \ No newline at end of file From 277710625331fc1b2c629434b1f629c34881d464 Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Sun, 4 May 2025 23:23:29 +0000 Subject: [PATCH 7/8] Bubberstation automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-bubber-pr-3618.yml | 4 ---- html/changelogs/AutoChangeLog-bubber-pr-3675.yml | 4 ---- html/changelogs/AutoChangeLog-bubber-pr-3677.yml | 4 ---- html/changelogs/AutoChangeLog-bubber-pr-3688.yml | 4 ---- html/changelogs/AutoChangeLog-bubber-pr-3703.yml | 4 ---- html/changelogs/AutoChangeLog-bubber-pr-3709.yml | 4 ---- html/changelogs/bubber_archive/2025-05.yml | 15 +++++++++++++-- 7 files changed, 13 insertions(+), 26 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-bubber-pr-3618.yml delete mode 100644 html/changelogs/AutoChangeLog-bubber-pr-3675.yml delete mode 100644 html/changelogs/AutoChangeLog-bubber-pr-3677.yml delete mode 100644 html/changelogs/AutoChangeLog-bubber-pr-3688.yml delete mode 100644 html/changelogs/AutoChangeLog-bubber-pr-3703.yml delete mode 100644 html/changelogs/AutoChangeLog-bubber-pr-3709.yml diff --git a/html/changelogs/AutoChangeLog-bubber-pr-3618.yml b/html/changelogs/AutoChangeLog-bubber-pr-3618.yml deleted file mode 100644 index 4df552e4c83..00000000000 --- a/html/changelogs/AutoChangeLog-bubber-pr-3618.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "KazooBard" -delete-after: True -changes: - - qol: "unifies the two existing coco powder related reagents into one" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-bubber-pr-3675.yml b/html/changelogs/AutoChangeLog-bubber-pr-3675.yml deleted file mode 100644 index d735b2ff919..00000000000 --- a/html/changelogs/AutoChangeLog-bubber-pr-3675.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "KazooBard" -delete-after: True -changes: - - balance: "A plethora of /obj/item/gun typecache weapons are gone from the secbelt." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-bubber-pr-3677.yml b/html/changelogs/AutoChangeLog-bubber-pr-3677.yml deleted file mode 100644 index c0ab705e1cf..00000000000 --- a/html/changelogs/AutoChangeLog-bubber-pr-3677.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "sippykot" -delete-after: True -changes: - - rscadd: "New Climax option; (You) can cum into open reagent containers if you have a penis. Isn't science wonderful?" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-bubber-pr-3688.yml b/html/changelogs/AutoChangeLog-bubber-pr-3688.yml deleted file mode 100644 index 398f11762af..00000000000 --- a/html/changelogs/AutoChangeLog-bubber-pr-3688.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "MajManatee" -delete-after: True -changes: - - rscadd: "New job on tarkon, Generic Service Man" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-bubber-pr-3703.yml b/html/changelogs/AutoChangeLog-bubber-pr-3703.yml deleted file mode 100644 index 229f525c85e..00000000000 --- a/html/changelogs/AutoChangeLog-bubber-pr-3703.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Arturlang" -delete-after: True -changes: - - config: "added config options for toggling blinking" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-bubber-pr-3709.yml b/html/changelogs/AutoChangeLog-bubber-pr-3709.yml deleted file mode 100644 index 125cebb422f..00000000000 --- a/html/changelogs/AutoChangeLog-bubber-pr-3709.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LT3" -delete-after: True -changes: - - bugfix: "Stat panel now shows the correct station time" \ No newline at end of file diff --git a/html/changelogs/bubber_archive/2025-05.yml b/html/changelogs/bubber_archive/2025-05.yml index 90695000b5a..84ee78ed0f2 100644 --- a/html/changelogs/bubber_archive/2025-05.yml +++ b/html/changelogs/bubber_archive/2025-05.yml @@ -31,8 +31,19 @@ aggresively. - bugfix: Fixes feed detailed description lying about the time it takes to start feeding + - config: added config options for toggling blinking + KazooBard: + - balance: A plethora of /obj/item/gun typecache weapons are gone from the secbelt. + - qol: unifies the two existing coco powder related reagents into one + LT3: + - bugfix: Stat panel now shows the correct station time + MajManatee: + - rscadd: New job on tarkon, Generic Service Man + sippykot: + - rscadd: New Climax option; (You) can cum into open reagent containers if you have + a penis. Isn't science wonderful? 2025-05-05: LT3: - bugfix: Everyone's chat log no longer bluescreens due to Admins' bad taste in - music. Their fatal attempts to make you listen to king gizzard the lizard - wizard will now fail silently + music. Their fatal attempts to make you listen to king gizzard the lizard wizard + will now fail silently From ff9b029a09a218ae124971f6b921b6f064ac0c73 Mon Sep 17 00:00:00 2001 From: Roxy <75404941+TealSeer@users.noreply.github.com> Date: Sun, 4 May 2025 23:08:12 -0400 Subject: [PATCH 8/8] Fix some runtimes related to null sprite accessory names (#3712) ## About The Pull Request Some of the mutant part prefs had their default sprite accessory set to the parent type which has a name of `null` instead of `None` which made the code "Big Mad" ## Why It's Good For The Game Fix runtime spam about null accessory names ## Proof Of Testing Tested it on a local with an affected save file ## Changelog N/A --- .../code/modules/client/preferences/mutant_parts.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm b/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm index 979978a7873..3daba9697ac 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm @@ -100,7 +100,7 @@ savefile_key = "feature_body_markings" relevant_mutant_bodypart = "body_markings" type_to_check = /datum/preference/toggle/mutant_toggle/body_markings - default_accessory_type = /datum/sprite_accessory/lizard_markings + default_accessory_type = /datum/sprite_accessory/lizard_markings/none /datum/preference/choiced/mutant_choice/body_markings/is_accessible(datum/preferences/preferences) . = ..() // Got to do this because of linters. @@ -213,7 +213,7 @@ savefile_key = "feature_horns" relevant_mutant_bodypart = "horns" type_to_check = /datum/preference/toggle/mutant_toggle/horns - default_accessory_type = /datum/sprite_accessory/horns + default_accessory_type = /datum/sprite_accessory/horns/none /datum/preference/tri_color/horns category = PREFERENCE_CATEGORY_SECONDARY_FEATURES @@ -291,7 +291,7 @@ savefile_key = "feature_frills" relevant_mutant_bodypart = "frills" type_to_check = /datum/preference/toggle/mutant_toggle/frills - default_accessory_type = /datum/sprite_accessory/frills + default_accessory_type = /datum/sprite_accessory/frills/none /datum/preference/tri_color/frills category = PREFERENCE_CATEGORY_SECONDARY_FEATURES @@ -317,7 +317,7 @@ savefile_key = "feature_spines" relevant_mutant_bodypart = "spines" type_to_check = /datum/preference/toggle/mutant_toggle/spines - default_accessory_type = /datum/sprite_accessory/spines + default_accessory_type = /datum/sprite_accessory/spines/none /datum/preference/tri_color/spines category = PREFERENCE_CATEGORY_SECONDARY_FEATURES @@ -399,7 +399,7 @@ savefile_key = "feature_moth_markings" relevant_mutant_bodypart = "moth_markings" type_to_check = /datum/preference/toggle/mutant_toggle/moth_markings - default_accessory_type = /datum/sprite_accessory/moth_markings + default_accessory_type = /datum/sprite_accessory/moth_markings/none /datum/preference/choiced/mutant_choice/moth_markings/is_accessible(datum/preferences/preferences) . = ..() // Got to do this because of linters.