diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm
index 60a78e5ff3..7ddcd1c9f0 100644
--- a/code/_onclick/hud/radial.dm
+++ b/code/_onclick/hud/radial.dm
@@ -261,7 +261,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
//Blank
menu_holder = image(icon='icons/effects/effects.dmi',loc=anchor,icon_state="nothing",layer = ABOVE_HUD_LAYER)
menu_holder.plane = ABOVE_HUD_PLANE
- menu_holder.appearance_flags |= KEEP_APART|NO_CLIENT_COLOR|RESET_ALPHA|RESET_COLOR|RESET_TRANSFORM
+ menu_holder.appearance_flags |= APPEARANCE_UI_IGNORE_ALPHA | KEEP_APART
menu_holder.vis_contents += elements + close_button
current_user.images += menu_holder
diff --git a/code/datums/components/storage/concrete/stack.dm b/code/datums/components/storage/concrete/stack.dm
index d7b118cee4..1e57d2da3a 100644
--- a/code/datums/components/storage/concrete/stack.dm
+++ b/code/datums/components/storage/concrete/stack.dm
@@ -63,7 +63,7 @@
if(!istype(I) || QDELETED(I)) //We're specialized stack storage, just ignore non stacks.
continue
if(!.[I.merge_type])
- .[I.merge_type] = new /datum/numbered_display(I, I.amount)
+ .[I.merge_type] = new /datum/numbered_display(I, I.amount, src)
else
var/datum/numbered_display/ND = .[I.merge_type]
ND.number += I.amount
diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm
index a416766b1b..d846ecdaec 100644
--- a/code/game/objects/effects/countdown.dm
+++ b/code/game/objects/effects/countdown.dm
@@ -9,7 +9,7 @@
anchored = TRUE
layer = GHOST_LAYER
color = "#ff0000" // text color
- appearance_flags = NO_CLIENT_COLOR | RESET_ALPHA | RESET_COLOR | RESET_TRANSFORM
+ appearance_flags = APPEARANCE_UI_IGNORE_ALPHA
vis_flags = VIS_INHERIT_ID
var/text_size = 3 // larger values clip when the displayed text is larger than 2 digits.
var/started = FALSE
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 15bd521834..6b9d1e8018 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -216,7 +216,7 @@
/obj/item/stack/medical/gauze/cyborg
custom_materials = null
- is_cyborg = 1
+ is_cyborg = TRUE
cost = 250
/obj/item/stack/medical/suture
@@ -440,7 +440,7 @@
/obj/item/stack/medical/bone_gel/cyborg
custom_materials = null
- is_cyborg = 1
+ is_cyborg = TRUE
cost = 250
/obj/item/stack/medical/aloe
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index 08f0a6fb7f..6a0ed45e30 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -76,7 +76,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
/obj/item/stack/rods/cyborg
custom_materials = null
- is_cyborg = 1
+ is_cyborg = TRUE
cost = 250
/obj/item/stack/rods/cyborg/ComponentInitialize()
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index bea05f6ef1..1eb49f350c 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -51,7 +51,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
/obj/item/stack/sheet/glass/cyborg
custom_materials = null
- is_cyborg = 1
+ is_cyborg = TRUE
cost = 500
/obj/item/stack/sheet/glass/fifty
@@ -178,6 +178,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
/obj/item/stack/sheet/rglass/cyborg
custom_materials = null
+ is_cyborg = TRUE
var/datum/robot_energy_storage/glasource
var/metcost = 250
var/glacost = 500
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index b3c5cf4293..070c5122c4 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -163,7 +163,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
/obj/item/stack/sheet/metal/cyborg
custom_materials = null
- is_cyborg = 1
+ is_cyborg = TRUE
cost = 500
/obj/item/stack/sheet/metal/get_main_recipes()
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index b2cd0f481b..0f04e1a6e7 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -132,6 +132,16 @@
else
icon_state = "[initial(icon_state)]_3"
+/obj/item/stack/update_overlays()
+ . = ..()
+ if(isturf(loc))
+ return
+ if(locate(/atom/movable/screen/storage/item_holder) in vis_locs) // It's being handled by the storage we're in, forget about it.
+ return
+ var/mutable_appearance/number = mutable_appearance(appearance_flags = APPEARANCE_UI_IGNORE_ALPHA)
+ number.maptext = MAPTEXT(get_amount())
+ . += number
+
/obj/item/stack/examine(mob/user)
. = ..()
if (is_cyborg)
@@ -151,6 +161,14 @@
. += "There is [get_amount()] in the stack."
. += "Alt-click to take a custom amount."
+/obj/item/stack/equipped(mob/user, slot)
+ . = ..()
+ update_icon()
+
+/obj/item/stack/dropped(mob/user, slot)
+ . = ..()
+ update_icon()
+
/obj/item/stack/proc/get_amount()
if(is_cyborg)
. = round(source?.energy / cost)
@@ -491,7 +509,11 @@
F.forceMove(user.drop_location())
add_fingerprint(user)
F.add_fingerprint(user)
- zero_amount()
+ if(!zero_amount())
+ var/atom/movable/screen/storage/item_holder/holder = locate(/atom/movable/screen/storage/item_holder) in vis_locs
+ if(holder.master && istype(holder.master, /datum/component/storage/concrete))
+ var/datum/component/storage/concrete/storage = holder.master
+ storage.refresh_mob_views()
/obj/item/stack/attackby(obj/item/W, mob/user, params)
if(can_merge(W))
diff --git a/code/game/objects/items/stacks/tickets.dm b/code/game/objects/items/stacks/tickets.dm
index 22cb895277..df040a89c7 100644
--- a/code/game/objects/items/stacks/tickets.dm
+++ b/code/game/objects/items/stacks/tickets.dm
@@ -11,7 +11,7 @@
. = ..()
update_icon()
-/obj/item/stack/arcadeticket/update_icon()
+/obj/item/stack/arcadeticket/update_icon_state()
var/amount = get_amount()
if((amount >= 12) && (amount > 0))
icon_state = "arcade-ticket_4"
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index 588e066a41..836ef04f31 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -535,7 +535,7 @@
/obj/item/stack/tile/plasteel/cyborg
custom_materials = null // All other Borg versions of items have no Metal or Glass - RR
- is_cyborg = 1
+ is_cyborg = TRUE
cost = 125
/obj/item/stack/tile/material
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index d45b5ad9e1..725482117b 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -515,7 +515,7 @@ By design, d1 is the smallest direction and d2 is the highest
used_skills = list(/datum/skill/level/job/wiring)
/obj/item/stack/cable_coil/cyborg
- is_cyborg = 1
+ is_cyborg = TRUE
custom_materials = null
cost = 1
@@ -572,7 +572,7 @@ By design, d1 is the smallest direction and d2 is the highest
return ..()
-/obj/item/stack/cable_coil/update_icon()
+/obj/item/stack/cable_coil/update_icon_state()
icon_state = "[initial(item_state)][amount < 3 ? amount : ""]"
name = "cable [amount < 3 ? "piece" : "coil"]"
diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
index 1c7951a2d6..429f556989 100644
--- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
@@ -554,7 +554,7 @@
if(sheets.len > 0)
var/obj/item/stack/sheet/S = pick(sheets)
- S.amount++
+ S.add(1) // Dare var edit directly again and i'll strangle you.
to_chat(owner, "[linked_extract] adds a layer of slime to [S], which metamorphosizes into another sheet of material!")
return ..()
diff --git a/code/modules/unit_tests/merge_type.dm b/code/modules/unit_tests/merge_type.dm
index 1aed82e6a3..373ffa2b66 100644
--- a/code/modules/unit_tests/merge_type.dm
+++ b/code/modules/unit_tests/merge_type.dm
@@ -9,7 +9,9 @@
var/list/paths = subtypesof(/obj/item/stack) - blacklist
- for(var/stackpath in paths)
+ for(var/obj/item/stack/stackpath as anything in paths)
+ if(initial(stackpath.is_cyborg))
+ continue
var/obj/item/stack/stack = new stackpath
if(!stack.merge_type)
Fail("([stack]) lacks set merge_type variable!")
diff --git a/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm b/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
index a2ccc319d0..9ea5a679fd 100644
--- a/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
+++ b/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
@@ -1081,9 +1081,9 @@ GLOBAL_LIST_INIT(hay_recipes, list ( \
attack_verb = list("tickled", "poked", "whipped")
hitsound = 'sound/weapons/grenadelaunch.ogg'
-/obj/item/stack/sheet/hay/Initialize(mapload, new_amount, merge = TRUE)
- recipes = GLOB.hay_recipes
- return ..()
+/obj/item/stack/sheet/hay/get_main_recipes()
+ . = ..()
+ . += GLOB.hay_recipes
/obj/item/stack/sheet/hay/fifty
amount = 50
@@ -1098,7 +1098,7 @@ GLOBAL_LIST_INIT(hay_recipes, list ( \
amount = 5
-/obj/item/stack/sheet/hay/update_icon()
+/obj/item/stack/sheet/hay/update_icon_state()
var/amount = get_amount()
if((amount <= 4) && (amount > 0))
icon_state = "hay[amount]"