From 09197a6a8b1d3d89719815e943bad6b1d153b939 Mon Sep 17 00:00:00 2001
From: LT3 <83487515+lessthnthree@users.noreply.github.com>
Date: Tue, 5 Aug 2025 11:07:11 -0700
Subject: [PATCH 1/8] Fix decal colors from initializing as randomized garbage
(#4375)
## About The Pull Request
Fix floor tile decals from having a 20% chance of receiving a color.
Disables the proc until I finish fixing it.
## Why It's Good For The Game
I done fucked up
## Changelog
:cl:
fix: Station tile decal color should be back to normal
/:cl:
---
code/modules/holiday/holidays.dm | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm
index 952da44a5a9..679b1709bcc 100644
--- a/code/modules/holiday/holidays.dm
+++ b/code/modules/holiday/holidays.dm
@@ -103,18 +103,13 @@ GLOBAL_LIST_INIT(holiday_mail, list())
if(PATTERN_RAINBOW)
var/datum/holiday/pride_week/rainbow_datum = new()
return rainbow_datum.get_holiday_colors(thing_to_color, PATTERN_DEFAULT)
- //if(!length(GLOB.holidays)) // BUBBER EDIT REMOVAL - Pride Flag Colors
- // return // BUBBER EDIT REMOVAL - Pride Flag Colors
+ if(!length(GLOB.holidays))
+ return
for(var/holiday_key in GLOB.holidays)
var/datum/holiday/holiday_real = GLOB.holidays[holiday_key]
if(!holiday_real.holiday_colors)
continue
return holiday_real.get_holiday_colors(thing_to_color, pattern || holiday_real.holiday_pattern)
- // BUBBER EDIT ADDITION BEGIN - Pride Flag Colors
- if(prob(20))
- var/datum/holiday/pride_week/rainbow_datum = new()
- return rainbow_datum.get_holiday_colors(thing_to_color, pattern)
- // BUBBER EDIT ADDITION END - Pride Flag Colors
// The actual holidays
From d174c4b3407c068760ecad2611fefd299490e304 Mon Sep 17 00:00:00 2001
From: Bubberbot <151680451+Bubberbot@users.noreply.github.com>
Date: Tue, 5 Aug 2025 20:07:35 +0200
Subject: [PATCH 2/8] Automatic changelog for PR #4375 [ci skip]
---
html/changelogs/AutoChangeLog-bubber-pr-4375.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-bubber-pr-4375.yml
diff --git a/html/changelogs/AutoChangeLog-bubber-pr-4375.yml b/html/changelogs/AutoChangeLog-bubber-pr-4375.yml
new file mode 100644
index 00000000000..ebf421ebe60
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-bubber-pr-4375.yml
@@ -0,0 +1,4 @@
+author: "lessthnthree"
+delete-after: True
+changes:
+ - bugfix: "Station tile decal color should be back to normal"
\ No newline at end of file
From d0769a3335dc5f5db80c1e36aac42f7672b52043 Mon Sep 17 00:00:00 2001
From: gavla <96078776+shayoki@users.noreply.github.com>
Date: Tue, 5 Aug 2025 13:08:06 -0500
Subject: [PATCH 3/8] Reduce Vulpkanin hunger drain from 2x to 1.5x (#4348)
## About The Pull Request
By request from the original requester of Vulpkanin traits; Vulpkanin
hunger drain has been reduced from 2x -> 1.5x. (i.e. those with the
``TRAIT_FAST_METABOLISM`` trait suffer less)
## Why It's Good For The Game
2x metabolism was deemed too fast by the community, this lowers the
hunger drain for Vulps to a reasonable 1.5x so the chef still has food
on the table for other crew.
## Proof Of Testing
it compiles
## Changelog
:cl:
balance: Vulpkanin hunger drain reduced from 2x -> 1.5x
/:cl:
---
code/modules/mob/mob.dm | 2 +-
.../modules/mob/living/carbon/human/species/vulpkanin.dm | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index f663e9e04a8..7865daac43c 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1532,7 +1532,7 @@
return
//Bubber edit BEGIN - Allow for people to get hungry faster
if(HAS_TRAIT(src, TRAIT_FAST_METABOLISM) && change < 0)
- change = change * 2
+ change = change * 1.5
//Bubber edit END
nutrition = max(0, nutrition + change)
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm
index aebefb33483..bfde745678b 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm
+++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm
@@ -64,7 +64,7 @@
SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK,
SPECIES_PERK_ICON = "stomach",
SPECIES_PERK_NAME = "Hunger",
- SPECIES_PERK_DESC = "Vulpkanin will get hungry twice as fast as most species",
+ SPECIES_PERK_DESC = "Vulpkanin will get hungrier 50% faster than most species",
))
return to_add
From 848f33638ce0d83960c09c3f2bc41e8c312385ba Mon Sep 17 00:00:00 2001
From: Bubberbot <151680451+Bubberbot@users.noreply.github.com>
Date: Tue, 5 Aug 2025 20:08:29 +0200
Subject: [PATCH 4/8] Automatic changelog for PR #4348 [ci skip]
---
html/changelogs/AutoChangeLog-bubber-pr-4348.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-bubber-pr-4348.yml
diff --git a/html/changelogs/AutoChangeLog-bubber-pr-4348.yml b/html/changelogs/AutoChangeLog-bubber-pr-4348.yml
new file mode 100644
index 00000000000..51b133cda2e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-bubber-pr-4348.yml
@@ -0,0 +1,4 @@
+author: "shayoki"
+delete-after: True
+changes:
+ - balance: "Vulpkanin hunger drain reduced from 2x -> 1.5x"
\ No newline at end of file
From 10681ff8ed2e54d28c3bd31732f05a3f725cb73d Mon Sep 17 00:00:00 2001
From: Bubberbot <151680451+Bubberbot@users.noreply.github.com>
Date: Tue, 5 Aug 2025 18:11:47 +0000
Subject: [PATCH 5/8] Bubberstation automatic changelog compile [ci skip]
---
html/changelogs/AutoChangeLog-bubber-pr-4328.yml | 4 ----
html/changelogs/AutoChangeLog-bubber-pr-4348.yml | 4 ----
html/changelogs/AutoChangeLog-bubber-pr-4375.yml | 4 ----
html/changelogs/bubber_archive/2025-08.yml | 8 ++++++++
4 files changed, 8 insertions(+), 12 deletions(-)
delete mode 100644 html/changelogs/AutoChangeLog-bubber-pr-4328.yml
delete mode 100644 html/changelogs/AutoChangeLog-bubber-pr-4348.yml
delete mode 100644 html/changelogs/AutoChangeLog-bubber-pr-4375.yml
diff --git a/html/changelogs/AutoChangeLog-bubber-pr-4328.yml b/html/changelogs/AutoChangeLog-bubber-pr-4328.yml
deleted file mode 100644
index 79d2128674a..00000000000
--- a/html/changelogs/AutoChangeLog-bubber-pr-4328.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "StrangeWeirdKitten"
-delete-after: True
-changes:
- - rscadd: "MODsuit Remote Module that allows you to remotely control other people's modsuits"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-bubber-pr-4348.yml b/html/changelogs/AutoChangeLog-bubber-pr-4348.yml
deleted file mode 100644
index 51b133cda2e..00000000000
--- a/html/changelogs/AutoChangeLog-bubber-pr-4348.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "shayoki"
-delete-after: True
-changes:
- - balance: "Vulpkanin hunger drain reduced from 2x -> 1.5x"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-bubber-pr-4375.yml b/html/changelogs/AutoChangeLog-bubber-pr-4375.yml
deleted file mode 100644
index ebf421ebe60..00000000000
--- a/html/changelogs/AutoChangeLog-bubber-pr-4375.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "lessthnthree"
-delete-after: True
-changes:
- - bugfix: "Station tile decal color should be back to normal"
\ No newline at end of file
diff --git a/html/changelogs/bubber_archive/2025-08.yml b/html/changelogs/bubber_archive/2025-08.yml
index 4f95e88ada8..ee6d3ecf5ac 100644
--- a/html/changelogs/bubber_archive/2025-08.yml
+++ b/html/changelogs/bubber_archive/2025-08.yml
@@ -43,3 +43,11 @@
Modular Suit Equipment research.
thegrb93:
- rscadd: Added vox hairstyles, vox braids, vox wise braids, vox flowing
+2025-08-05:
+ StrangeWeirdKitten:
+ - rscadd: MODsuit Remote Module that allows you to remotely control other people's
+ modsuits
+ lessthnthree:
+ - bugfix: Station tile decal color should be back to normal
+ shayoki:
+ - balance: Vulpkanin hunger drain reduced from 2x -> 1.5x
From 24f76e3f184767e1b9ca3025872384fec36afef2 Mon Sep 17 00:00:00 2001
From: LT3 <83487515+lessthnthree@users.noreply.github.com>
Date: Tue, 5 Aug 2025 13:29:08 -0700
Subject: [PATCH 6/8] Crew health monitor fixes/cleanup (#4377)
## About The Pull Request
- Typechecks for Protean brain before running a check against it, so it
doesn't crash on an unexpected brain type.
- Deletes unused Skyrat crew monitor TGUI
- Removes duplicate datum override
- Updates crew console TGUI for Bubber health
- Broken sensor mobs don't bounce around the list every update
Closes #4372
## Changelog
:cl: LT3
fix: Fixed edge case of Proteans causing crew health monitor to
bluescreen
qol: Mobs with broken suit sensors now stay in order each screen update
/:cl:
---
code/__DEFINES/~~bubber_defines/misc.dm | 3 +
code/game/machinery/computer/crew.dm | 21 +-
.../modules/blueshield/code/devices/crew.dm | 5 -
.../code/game/machinery/computer/crew.dm | 6 -
.../code/game/machinery/crew_monitor.dm | 2 -
.../tgui/interfaces/CrewConsoleBubbers.tsx | 11 +-
.../tgui/interfaces/CrewConsoleSkyrat.jsx | 202 ------------------
7 files changed, 24 insertions(+), 226 deletions(-)
delete mode 100644 tgui/packages/tgui/interfaces/CrewConsoleSkyrat.jsx
diff --git a/code/__DEFINES/~~bubber_defines/misc.dm b/code/__DEFINES/~~bubber_defines/misc.dm
index 7888ce0ba80..ee1917dfb59 100644
--- a/code/__DEFINES/~~bubber_defines/misc.dm
+++ b/code/__DEFINES/~~bubber_defines/misc.dm
@@ -7,3 +7,6 @@ GLOBAL_DATUM_INIT(noncapital_i, /regex, regex("\\b\[i]\\b", "g")) */ // TODO: RE
/// Used for the trait for when a dragon looses a portal
#define DRAGON_PORTAL_LOSS "dragon_portal_loss"
+
+/// Crew monitoring console update period. Why is this not a global define, why do I have to define it again
+#define SENSORS_UPDATE_PERIOD (7 SECONDS)
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index 529777de388..efcef7453ff 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -1,5 +1,5 @@
-/// How often the sensor data is updated
-#define SENSORS_UPDATE_PERIOD (10 SECONDS) //How often the sensor data updates.
+/// How often the sensor data is updated // BUBBER EDIT REMOVAL - Defined in code/__DEFINES/~~bubber_defines/misc.dm
+// #define SENSORS_UPDATE_PERIOD (10 SECONDS) //How often the sensor data updates.
/// The job sorting ID associated with otherwise unknown jobs
#define UNKNOWN_JOB_ID 998
@@ -182,7 +182,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
/datum/crewmonitor/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if (!ui)
- ui = new(user, src, "CrewConsoleSkyrat")
+ ui = new(user, src, "CrewConsoleBubbers") // BUBBER EDIT CHANGE - Crew Console
ui.open()
/datum/crewmonitor/proc/show(mob/M, source)
@@ -285,7 +285,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
// Broken sensors show garbage data
if (uniform?.has_sensor == BROKEN_SENSORS) // BUBBER EDIT CHANGE - NANITES - Original: if (uniform.has_sensor == BROKEN_SENSORS)
- entry["life_status"] = rand(0,1)
+ entry["life_status"] = 1 // BUBBER EDIT CHANGE - Original: rand(0,1) - Mob stays in consistent list position when sensors are broken
entry["area"] = pick_list (ION_FILE, "ionarea")
entry["oxydam"] = rand(0,175)
entry["toxdam"] = rand(0,175)
@@ -301,12 +301,13 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
if (sensor_mode >= SENSOR_LIVING)
entry["is_dnr"] = tracked_human.get_dnr()
// Current status
- if(!isprotean(tracked_human))
- entry["life_status"] = tracked_living_mob.stat
+ var/obj/item/organ/brain/protean/protean_brain = tracked_human.get_organ_slot(ORGAN_SLOT_BRAIN)
+ if(istype(protean_brain))
+ if(!isprotean(tracked_human))
+ stack_trace("[tracked_human] brain-species mismatch! Species is [tracked_human.dna.species] but brain is Protean")
+ entry["life_status"] = protean_brain?.dead ? DEAD : tracked_living_mob.stat // If brain not dead/no brain then handling as usual
else
- // Check if protean is stuck in suit
- var/obj/item/organ/brain/protean/brain = tracked_human.get_organ_slot(ORGAN_SLOT_BRAIN)
- entry["life_status"] = brain?.dead ? DEAD : tracked_living_mob.stat // If brain not dead/no brain then handling as usual
+ entry["life_status"] = tracked_living_mob.stat
// BUBBERSTATION EDIT END
// Damage
@@ -346,5 +347,5 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
return
AI.ai_tracking_tool.track_name(AI, params["name"])
-#undef SENSORS_UPDATE_PERIOD
+// #undef SENSORS_UPDATE_PERIOD // BUBBER EDIT REMOVAL - Defined in code/__DEFINES/~~bubber_defines/misc.dm
#undef UNKNOWN_JOB_ID
diff --git a/modular_skyrat/modules/blueshield/code/devices/crew.dm b/modular_skyrat/modules/blueshield/code/devices/crew.dm
index fe15297f8f2..dcb1a02533d 100644
--- a/modular_skyrat/modules/blueshield/code/devices/crew.dm
+++ b/modular_skyrat/modules/blueshield/code/devices/crew.dm
@@ -2,9 +2,6 @@
* Trimmed and modified copy of ".../machinery/computer/crew.dm"
* for the sake of modularity. (Blueshield Monitor Console soon?)
*/
-
-#define SENSORS_UPDATE_PERIOD (10 SECONDS)
-
GLOBAL_DATUM_INIT(blueshield_crewmonitor, /datum/crewmonitor/blueshield, new)
//list of all Command/CC jobs
@@ -129,5 +126,3 @@ GLOBAL_DATUM_INIT(blueshield_crewmonitor, /datum/crewmonitor/blueshield, new)
last_update["[z]"] = world.time
return results
-
-#undef SENSORS_UPDATE_PERIOD
diff --git a/modular_zubbers/code/game/machinery/computer/crew.dm b/modular_zubbers/code/game/machinery/computer/crew.dm
index 9e6c9b5fed5..e094d5275e9 100644
--- a/modular_zubbers/code/game/machinery/computer/crew.dm
+++ b/modular_zubbers/code/game/machinery/computer/crew.dm
@@ -113,9 +113,3 @@
JOB_TERRAGOV_LIASON = 903
)
-
-/datum/crewmonitor/ui_interact(mob/user, datum/tgui/ui)
- ui = SStgui.try_update_ui(user, src, ui)
- if (!ui)
- ui = new(user, src, "CrewConsoleBubbers")
- ui.open()
diff --git a/modular_zubbers/code/game/machinery/crew_monitor.dm b/modular_zubbers/code/game/machinery/crew_monitor.dm
index 6a5fea92e0c..e8d28515515 100644
--- a/modular_zubbers/code/game/machinery/crew_monitor.dm
+++ b/modular_zubbers/code/game/machinery/crew_monitor.dm
@@ -1,4 +1,3 @@
-#define SENSORS_UPDATE_PERIOD 15 SECONDS //Why is this not a global define, why do I have to define it again
#define ALARM_PERIOD 45 SECONDS
/obj/machinery/computer/crew
@@ -51,5 +50,4 @@
return canalarm
-#undef SENSORS_UPDATE_PERIOD
#undef ALARM_PERIOD
diff --git a/tgui/packages/tgui/interfaces/CrewConsoleBubbers.tsx b/tgui/packages/tgui/interfaces/CrewConsoleBubbers.tsx
index 1c12c59181f..23624f0c2dd 100644
--- a/tgui/packages/tgui/interfaces/CrewConsoleBubbers.tsx
+++ b/tgui/packages/tgui/interfaces/CrewConsoleBubbers.tsx
@@ -90,6 +90,15 @@ const areaSort = (a: CrewSensor, b: CrewSensor) => {
return 0;
};
+const getHealthLevel = (healthSum: number): number => {
+ if (healthSum <= 74) return 0;
+ if (healthSum <= 95) return 1;
+ if (healthSum <= 116) return 2;
+ if (healthSum <= 137) return 3;
+ if (healthSum <= 158) return 4;
+ return 5; // over 158 (near crit)
+};
+
const healthToAttribute = (
oxy: number,
tox: number,
@@ -98,7 +107,7 @@ const healthToAttribute = (
attributeList: string[],
) => {
const healthSum = oxy + tox + burn + brute;
- const level = Math.min(Math.max(Math.ceil(healthSum / 25), 0), 5);
+ const level = getHealthLevel(healthSum);
return attributeList[level];
};
diff --git a/tgui/packages/tgui/interfaces/CrewConsoleSkyrat.jsx b/tgui/packages/tgui/interfaces/CrewConsoleSkyrat.jsx
deleted file mode 100644
index 6cb80ecfe2d..00000000000
--- a/tgui/packages/tgui/interfaces/CrewConsoleSkyrat.jsx
+++ /dev/null
@@ -1,202 +0,0 @@
-// THIS IS A SKYRAT UI FILE
-import { sortBy } from 'es-toolkit';
-import { Box, Button, Icon, Section, Table } from 'tgui-core/components';
-
-import { useBackend } from '../backend';
-import { COLORS } from '../constants';
-import { Window } from '../layouts';
-
-const HEALTH_COLOR_BY_LEVEL = [
- '#17d568',
- '#c4cf2d',
- '#e67e22',
- '#ed5100',
- '#e74c3c',
- '#801308',
-];
-
-const STAT_LIVING = 0;
-const STAT_DEAD = 4;
-
-const jobIsHead = (jobId) => jobId % 10 === 0;
-
-const jobToColor = (jobId) => {
- if (jobId === 0) {
- return COLORS.department.captain;
- }
- if (jobId >= 10 && jobId < 20) {
- return COLORS.department.security;
- }
- if (jobId >= 20 && jobId < 30) {
- return COLORS.department.medbay;
- }
- if (jobId >= 30 && jobId < 40) {
- return COLORS.department.science;
- }
- if (jobId >= 40 && jobId < 50) {
- return COLORS.department.engineering;
- }
- if (jobId >= 50 && jobId < 60) {
- return COLORS.department.cargo;
- }
- if (jobId >= 60 && jobId < 80) {
- return COLORS.department.service;
- }
- if (jobId >= 200 && jobId < 240) {
- return COLORS.department.centcom;
- }
- return COLORS.department.other;
-};
-
-const healthToAttribute = (oxy, tox, burn, brute, attributeList) => {
- const healthSum = oxy + tox + burn + brute;
- const level = Math.min(Math.max(Math.ceil(healthSum / 50), 0), 5);
- // 200 Default Health, Sum Divided by 50, 6 Health States
- return attributeList[level];
-};
-
-const HealthStat = (props) => {
- const { type, value } = props;
- return (
-