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

## 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.