diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 88277514ad95..224b3e674797 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -546,3 +546,10 @@ var/global/list/ghost_others_options = list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE
#define ATTACK_EFFECT_BITE "bite"
#define ATTACK_EFFECT_MECHFIRE "mech_fire"
#define ATTACK_EFFECT_MECHTOXIN "mech_toxin"
+
+
+//different types of atom colorations
+#define ADMIN_COLOUR_PRIORITY 1 //only used by rare effects like greentext coloring mobs and when admins varedit color
+#define TEMPORARY_COLOUR_PRIORITY 2 //e.g. purple effect of the revenant on a mob, black effect when mob electrocuted
+#define WASHABLE_COLOUR_PRIORITY 3 //color splashed onto an atom (e.g. paint on turf)
+#define FIXED_COLOUR_PRIORITY 4 //color inherent to the atom (e.g. blob color)
\ No newline at end of file
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index a4427a96e528..c61184476ee3 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1303,10 +1303,10 @@ proc/pick_closest_path(value)
if(!istype(C))
return
-
+ var/old_color = C.color
C.color = flash_color
spawn(0)
- animate(C, color = initial(C.color), time = flash_time)
+ animate(C, color = old_color, time = flash_time)
#define RANDOM_COLOUR (rgb(rand(0,255),rand(0,255),rand(0,255)))
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index bb874f8bed70..c098493e4d61 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -435,8 +435,70 @@ var/list/blood_splatter_icons = list()
dir = newdir
/atom/on_varedit(modified_var)
+ ..()
if(!Debug2)
admin_spawned = TRUE
+ switch(modified_var)
+ if("color")
+ add_atom_colour(color, ADMIN_COLOUR_PRIORITY)
/atom/proc/mech_melee_attack(obj/mecha/M)
return
+
+
+
+/*
+ Atom Colour Priority System
+ A System that gives finer control over which atom colour to colour the atom with.
+ The "highest priority" one is always displayed as opposed to the default of
+ "whichever was set last is displayed"
+*/
+
+/atom
+ var/list/atom_colours //used to store the different colors on an atom
+ //its inherent color, the colored paint applied on it, special color effect etc...
+
+/*
+ Adds an instance of colour_type to the atom's atom_colours list
+*/
+/atom/proc/add_atom_colour(coloration, colour_priority)
+ if(!atom_colours)
+ atom_colours = list("", "", "", "") //four priority levels currently.
+ if(!coloration)
+ return
+ if(colour_priority > atom_colours.len)
+ return
+ atom_colours[colour_priority] = coloration
+ update_atom_colour()
+
+
+/*
+ Removes an instance of colour_type from the atom's atom_colours list
+*/
+/atom/proc/remove_atom_colour(colour_priority)
+ if(!atom_colours)
+ atom_colours = list("", "", "", "")
+ if(colour_priority > atom_colours.len)
+ return
+ atom_colours[colour_priority] = ""
+ update_atom_colour()
+
+
+/*
+ Resets the atom's color to null, and then sets it to the highest priority
+ colour available
+*/
+/atom/proc/update_atom_colour()
+ if(!atom_colours)
+ atom_colours = list("", "", "", "")
+ color = null
+ for(var/C in atom_colours)
+ if(islist(C))
+ var/list/L = C
+ if(L.len)
+ color = L
+ return
+ else if(C != "")
+ color = C
+ return
+
diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm
index 3e504c397a9d..7bee738d8915 100644
--- a/code/game/gamemodes/antag_spawner.dm
+++ b/code/game/gamemodes/antag_spawner.dm
@@ -288,6 +288,7 @@
icon = 'icons/obj/wizard.dmi'
icon_state = "vial"
color = "#FF69B4" // HOT PINK
+ atom_colours = list("", "", "", "#FF69B4")
veil_msg = "You sense an adorable presence lurking just beyond the veil..."
objective_verb = "Hug and Tickle"
diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm
index bb1d37faa29e..160b4e8ce20d 100644
--- a/code/game/gamemodes/blob/blobs/blob_mobs.dm
+++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm
@@ -20,9 +20,9 @@
/mob/living/simple_animal/hostile/blob/update_icons()
if(overmind)
- color = overmind.blob_reagent_datum.color
+ add_atom_colour(overmind.blob_reagent_datum.color, FIXED_COLOUR_PRIORITY)
else
- color = initial(color)
+ remove_atom_colour(FIXED_COLOUR_PRIORITY)
/mob/living/simple_animal/hostile/blob/Destroy()
if(overmind)
@@ -174,9 +174,9 @@
/mob/living/simple_animal/hostile/blob/blobspore/update_icons()
if(overmind)
- color = overmind.blob_reagent_datum.complementary_color
+ add_atom_colour(overmind.blob_reagent_datum.complementary_color, FIXED_COLOUR_PRIORITY)
else
- color = initial(color)
+ remove_atom_colour(FIXED_COLOUR_PRIORITY)
if(is_zombie)
cut_overlays()
overlays = human_overlays
diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm
index 2bc1f1bb12f2..03ef7f76bb14 100644
--- a/code/game/gamemodes/blob/blobs/core.dm
+++ b/code/game/gamemodes/blob/blobs/core.dm
@@ -1,7 +1,7 @@
/obj/structure/blob/core
name = "blob core"
icon = 'icons/mob/blob.dmi'
- icon_state = "blank_blob"
+ icon_state = "blob"
desc = "A huge, pulsating yellow mass."
obj_integrity = 400
max_integrity = 400
@@ -32,11 +32,7 @@
/obj/structure/blob/core/update_icon()
cut_overlays()
- color = null
- var/image/I = new('icons/mob/blob.dmi', "blob")
- if(overmind)
- I.color = overmind.blob_reagent_datum.color
- add_overlay(I)
+ ..()
var/image/C = new('icons/mob/blob.dmi', "blob_core_overlay")
add_overlay(C)
diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm
index 74954cc2e8b3..14b38148950e 100644
--- a/code/game/gamemodes/blob/blobs/node.dm
+++ b/code/game/gamemodes/blob/blobs/node.dm
@@ -1,7 +1,7 @@
/obj/structure/blob/node
name = "blob node"
icon = 'icons/mob/blob.dmi'
- icon_state = "blank_blob"
+ icon_state = "blob"
desc = "A large, pulsating yellow mass."
obj_integrity = 200
max_integrity = 200
@@ -20,13 +20,9 @@
/obj/structure/blob/node/update_icon()
cut_overlays()
- color = null
- var/image/I = new('icons/mob/blob.dmi', "blob")
- if(overmind)
- I.color = overmind.blob_reagent_datum.color
- src.add_overlay(I)
+ ..()
var/image/C = new('icons/mob/blob.dmi', "blob_node_overlay")
- src.add_overlay(C)
+ add_overlay(C)
/obj/structure/blob/node/Destroy()
blob_nodes -= src
@@ -35,4 +31,4 @@
/obj/structure/blob/node/Life()
Pulse_Area(overmind, 10, 3, 2)
- color = null
+
diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm
index fc5ed905fb87..4fd41868b09e 100644
--- a/code/game/gamemodes/blob/theblob.dm
+++ b/code/game/gamemodes/blob/theblob.dm
@@ -83,9 +83,9 @@
/obj/structure/blob/update_icon() //Updates color based on overmind color if we have an overmind.
if(overmind)
- color = overmind.blob_reagent_datum.color
+ add_atom_colour(overmind.blob_reagent_datum.color, FIXED_COLOUR_PRIORITY)
else
- color = null
+ remove_atom_colour(FIXED_COLOUR_PRIORITY)
/obj/structure/blob/process()
Life()
diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm
index 5dfc3f1f30d8..b8356068e37b 100644
--- a/code/game/gamemodes/clock_cult/clock_scripture.dm
+++ b/code/game/gamemodes/clock_cult/clock_scripture.dm
@@ -365,8 +365,9 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed
L.dizziness = min(L.dizziness + 20, 100)
L.Weaken(1)
invoker.visible_message("[invoker] is suddenly covered with a thin layer of dark purple smoke!")
- invoker.color = "#AF0AAF"
- animate(invoker, color = initial(invoker.color), time = flee_time+grace_period)
+ var/invoker_old_color = invoker.color
+ invoker.add_atom_colour("#AF0AAF", TEMPORARY_COLOUR_PRIORITY)
+ animate(invoker, color = invoker_old_color, time = flee_time+grace_period)
if(chant_number != chant_amount) //if this is the last chant, we don't have a movement period because the chant is over
var/endtime = world.time + flee_time
var/starttime = world.time
@@ -1135,7 +1136,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed
You feel limitless power surging through you!")
playsound(invoker, 'sound/magic/clockwork/invoke_general.ogg', 50, 0)
playsound(invoker, 'sound/magic/lightning_chargeup.ogg', 100, 0)
- animate(invoker, color = list(rgb(255, 255, 255), rgb(255, 255, 255), rgb(255, 255, 255), rgb(0,0,0)), time = 88) //Gradual advancement to extreme brightness
+ animate(invoker, color = "#FFFF00", time = 88) //Gradual advancement to extreme brightness
sleep(88)
if(invoker)
invoker.visible_message("Massive bolts of energy emerge from across [invoker]'s body!", \
@@ -1143,7 +1144,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed
TOO... MUCH! CAN'T... TAKE IT!")
playsound(invoker, 'sound/magic/lightningbolt.ogg', 100, 0)
if(invoker.stat == CONSCIOUS)
- animate(invoker, color = initial(invoker.color), time = 10)
+ invoker.update_atom_colour()
for(var/mob/living/L in view(7, invoker))
if(is_servant_of_ratvar(L))
continue
diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm
index 5f95588ac4d8..a44b36add248 100644
--- a/code/game/gamemodes/miniantags/abduction/gland.dm
+++ b/code/game/gamemodes/miniantags/abduction/gland.dm
@@ -211,6 +211,7 @@
icon = 'icons/effects/effects.dmi'
icon_state = "cocoon_large3"
color = rgb(10,120,10)
+ atom_colours = list("", "", "", rgb(10,120,10))
density = 1
var/hatch_time = 0
diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm
index 161ad5910823..564225126bcc 100644
--- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm
+++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm
@@ -343,16 +343,6 @@
if(iscarbon(mob))
if(ishuman(mob))
var/mob/living/carbon/human/H = mob
- if(H.dna && H.dna.species)
- H.dna.species.handle_mutant_bodyparts(H,"#1d2953")
- H.dna.species.handle_hair(H,"#1d2953")
- var/old_color = H.color
- H.color = "#1d2953"
- spawn(20)
- if(H && H.dna && H.dna.species)
- H.dna.species.handle_mutant_bodyparts(H)
- H.dna.species.handle_hair(H)
- H.color = old_color
var/blightfound = 0
for(var/datum/disease/revblight/blight in H.viruses)
blightfound = 1
@@ -367,11 +357,11 @@
else
mob.adjustToxLoss(5)
for(var/obj/structure/spacevine/vine in T) //Fucking with botanists, the ability.
- vine.color = "#823abb"
+ vine.add_atom_colour("#823abb", TEMPORARY_COLOUR_PRIORITY)
PoolOrNew(/obj/effect/overlay/temp/revenant, vine.loc)
QDEL_IN(vine, 10)
for(var/obj/structure/glowshroom/shroom in T)
- shroom.color = "#823abb"
+ shroom.add_atom_colour("#823abb", TEMPORARY_COLOUR_PRIORITY)
PoolOrNew(/obj/effect/overlay/temp/revenant, shroom.loc)
QDEL_IN(shroom, 10)
for(var/obj/machinery/hydroponics/tray in T)
diff --git a/code/game/gamemodes/miniantags/revenant/revenant_blight.dm b/code/game/gamemodes/miniantags/revenant/revenant_blight.dm
index 9133fa69c22f..9e03b9dc0413 100644
--- a/code/game/gamemodes/miniantags/revenant/revenant_blight.dm
+++ b/code/game/gamemodes/miniantags/revenant/revenant_blight.dm
@@ -14,14 +14,11 @@
severity = BIOHAZARD
var/stagedamage = 0 //Highest stage reached.
var/finalstage = 0 //Because we're spawning off the cure in the final stage, we need to check if we've done the final stage's effects.
- var/old_color = ""
/datum/disease/revblight/cure()
if(affected_mob)
- affected_mob.color = old_color
+ affected_mob.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY)
affected_mob << "You feel better."
- if(affected_mob.dna && affected_mob.dna.species)
- affected_mob.dna.species.handle_mutant_bodyparts(affected_mob)
..()
/datum/disease/revblight/stage_act()
@@ -56,12 +53,8 @@
affected_mob << "You feel like [pick("nothing's worth it anymore", "nobody ever needed your help", "nothing you did mattered", "everything you tried to do was worthless")]."
affected_mob.adjustStaminaLoss(45)
PoolOrNew(/obj/effect/overlay/temp/revenant, affected_mob.loc)
- if(affected_mob.dna && affected_mob.dna.species)
- affected_mob.dna.species.handle_mutant_bodyparts(affected_mob,"#1d2953")
- affected_mob.dna.species.handle_hair(affected_mob,"#1d2953")
- affected_mob.visible_message("[affected_mob] looks terrifyingly gaunt...", "You suddenly feel like your skin is wrong...")
- old_color = affected_mob.color
- affected_mob.color = "#1d2953"
- addtimer(src, "cure", 100, FALSE)
+ affected_mob.visible_message("[affected_mob] looks terrifyingly gaunt...", "You suddenly feel like your skin is wrong...")
+ affected_mob.add_atom_colour("#1d2953", TEMPORARY_COLOUR_PRIORITY)
+ addtimer(src, "cure", 100, FALSE)
else
return
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index 3135d4fd9ed7..2d3cdeb8c9a3 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -516,13 +516,12 @@ This is here to make the tiles around the station mininuke change when it's arme
going delta! It looks like they're comitting suicide.")
playsound(user.loc, 'sound/machines/Alarm.ogg', 50, -1, 1)
var/end_time = world.time + 100
- var/orig_color = user.color
while(world.time < end_time)
if(!user)
return
- user.color = RANDOM_COLOUR
+ user.add_atom_colour(RANDOM_COLOUR, ADMIN_COLOUR_PRIORITY)
sleep(1)
- user.color = orig_color
+ user.remove_atom_colour(ADMIN_COLOUR_PRIORITY)
user.visible_message("[user] was destroyed \
by the nuclear blast!")
return OXYLOSS
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 7cb67847aa8c..8156c85e34ba 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -179,7 +179,7 @@
qdel(src)
/obj/machinery/door/window/narsie_act()
- color = "#7D1919"
+ add_atom_colour("#7D1919", FIXED_COLOUR_PRIORITY)
/obj/machinery/door/window/ratvar_act()
new/obj/machinery/door/window/clockwork(src.loc, dir)
diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index b42f5c8c1960..5a65ac49babc 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -54,7 +54,7 @@ Buildable meters
if(make_from)
src.setDir(make_from.dir)
src.pipename = make_from.name
- src.color = make_from.color
+ add_atom_colour(make_from.color, FIXED_COLOUR_PRIORITY)
if(make_from.type in pipe_types)
src.pipe_type = make_from.type
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index fad928845314..69e747a26a5b 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -65,6 +65,7 @@
name = "Invoker's Shield"
desc = "A weak shield summoned by cultists to protect them while they carry out delicate rituals"
color = "red"
+ atom_colours = list("", "", "", "red")
obj_integrity = 20
max_integrity = 20
mouse_opacity = 0
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index ac5e7ba1e685..2347ed99fb54 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -76,7 +76,7 @@
if(WM.color_source)
if(istype(WM.color_source,/obj/item/toy/crayon))
var/obj/item/toy/crayon/CR = WM.color_source
- color = CR.paint_color
+ add_atom_colour(CR.paint_color, WASHABLE_COLOUR_PRIORITY)
/mob/living/simple_animal/pet/dog/corgi/machine_wash(obj/machinery/washing_machine/WM)
gib()
diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm
index d0b0d00b176b..1fc1fdc92233 100644
--- a/code/game/mecha/combat/reticence.dm
+++ b/code/game/mecha/combat/reticence.dm
@@ -16,6 +16,7 @@
max_equip = 2
step_energy_drain = 3
color = "#87878715"
+ atom_colours = list("", "", "", "#87878715")
stepsound = null
turnsound = null
opacity = 0
diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm
index f60b14f72025..3e03de8ffe6d 100644
--- a/code/game/mecha/mecha_wreckage.dm
+++ b/code/game/mecha/mecha_wreckage.dm
@@ -103,6 +103,7 @@
name = "\improper Reticence wreckage"
icon_state = "reticence-broken"
color = "#87878715"
+ atom_colours = list("", "", "", "#87878715")
/obj/structure/mecha_wreckage/ripley
name = "\improper Ripley wreckage"
diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm
index 4a0175076a14..f65b4aa03187 100644
--- a/code/game/objects/effects/decals/crayon.dm
+++ b/code/game/objects/effects/decals/crayon.dm
@@ -25,6 +25,7 @@
src.transform = M
color = main
+ atom_colours[FIXED_COLOUR_PRIORITY] = main
/obj/effect/decal/cleanable/crayon/gang
@@ -37,14 +38,12 @@
qdel(src)
var/area/territory = get_area(location)
- var/color
-
gang = G
- color = G.color_hex
+ var/newcolor = G.color_hex
icon_state = G.name
G.territory_new |= list(territory.type = territory.name)
- ..(location, color, icon_state, e_name, rotation)
+ ..(location, newcolor, icon_state, e_name, rotation)
/obj/effect/decal/cleanable/crayon/gang/Destroy()
var/area/territory = get_area(src)
diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm
index 9cb25ce13726..52802b33128b 100644
--- a/code/game/objects/effects/effect_system/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/effects_foam.dm
@@ -105,7 +105,7 @@
var/obj/effect/particle_effect/foam/F = PoolOrNew(src.type, T)
F.amount = amount
reagents.copy_to(F, (reagents.total_volume))
- F.color = color
+ F.add_atom_colour(color, FIXED_COLOUR_PRIORITY)
F.metal = metal
@@ -164,7 +164,7 @@
var/obj/effect/particle_effect/foam/F = PoolOrNew(effect_type, location)
var/foamcolor = mix_color_from_reagents(chemholder.reagents.reagent_list)
chemholder.reagents.copy_to(F, chemholder.reagents.total_volume/amount)
- F.color = foamcolor
+ F.add_atom_colour(foamcolor, FIXED_COLOUR_PRIORITY)
F.amount = amount
F.metal = metal
diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm
index b51923eff972..b6e4fc5e0a3d 100644
--- a/code/game/objects/effects/effect_system/effects_smoke.dm
+++ b/code/game/objects/effects/effect_system/effects_smoke.dm
@@ -84,7 +84,7 @@
reagents.copy_to(S, reagents.total_volume)
S.setDir(pick(cardinal))
S.amount = amount-1
- S.color = color
+ S.add_atom_colour(color, FIXED_COLOUR_PRIORITY)
S.lifetime = lifetime
if(S.amount>0)
if(opaque)
@@ -150,6 +150,7 @@
/obj/effect/particle_effect/smoke/freezing
name = "nanofrost smoke"
color = "#B2FFFF"
+ atom_colours= list("", "", "", "#B2FFFF")
opaque = 0
/datum/effect_system/smoke_spread/freezing
@@ -200,6 +201,7 @@
/obj/effect/particle_effect/smoke/sleeping
color = "#9C3636"
+ atom_colours = list("", "", "", "#9C3636")
lifetime = 10
/obj/effect/particle_effect/smoke/sleeping/smoke_mob(mob/living/carbon/M)
@@ -297,7 +299,7 @@
/datum/effect_system/smoke_spread/chem/start()
- var/color = mix_color_from_reagents(chemholder.reagents.reagent_list)
+ var/mixcolor = mix_color_from_reagents(chemholder.reagents.reagent_list)
if(holder)
location = get_turf(holder)
var/obj/effect/particle_effect/smoke/chem/S = new effect_type(location)
@@ -305,8 +307,8 @@
if(chemholder.reagents.total_volume > 1) // can't split 1 very well
chemholder.reagents.copy_to(S, chemholder.reagents.total_volume)
- if(color)
- S.color = color // give the smoke color, if it has any to begin with
+ if(mixcolor)
+ S.add_atom_colour(mixcolor, FIXED_COLOUR_PRIORITY) // give the smoke color, if it has any to begin with
S.amount = amount
if(S.amount)
S.spread_smoke() //calling process right now so the smoke immediately attacks mobs.
diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm
index d6e757523383..712096db455e 100644
--- a/code/game/objects/effects/mines.dm
+++ b/code/game/objects/effects/mines.dm
@@ -115,6 +115,7 @@
desc = "You feel angry just looking at it."
duration = 1200 //2min
color = "red"
+ atom_colours = list("", "", "", "red")
/obj/effect/mine/pickup/bloodbath/mineEffect(mob/living/carbon/victim)
if(!victim.client || !istype(victim))
@@ -149,6 +150,7 @@
name = "Blue Orb"
desc = "You feel better just looking at it."
color = "blue"
+ atom_colours = list("", "", "", "blue")
/obj/effect/mine/pickup/healing/mineEffect(mob/living/carbon/victim)
if(!victim.client || !istype(victim))
@@ -160,6 +162,7 @@
name = "Yellow Orb"
desc = "You feel faster just looking at it."
color = "yellow"
+ atom_colours = list("", "", "", "yellow")
duration = 300
/obj/effect/mine/pickup/speed/mineEffect(mob/living/carbon/victim)
diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm
index f7f4864fbb81..98ec87324eb9 100644
--- a/code/game/objects/items/cardboard_cutouts.dm
+++ b/code/game/objects/items/cardboard_cutouts.dm
@@ -30,7 +30,7 @@
desc = "[initial(desc)] It's been pushed over."
icon = initial(icon)
icon_state = "cutout_pushed_over"
- color = initial(color)
+ remove_atom_colour(FIXED_COLOUR_PRIORITY)
alpha = initial(alpha)
pushed_over = TRUE
@@ -94,7 +94,7 @@
alpha = 255
icon = initial(icon)
if(!deceptive)
- color = "#FFD7A7"
+ add_atom_colour("#FFD7A7", FIXED_COLOUR_PRIORITY)
switch(new_appearance)
if("Assistant")
name = "[pick(first_names_male)] [pick(last_names)]"
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 04b6a7338806..945a2c906446 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -660,7 +660,7 @@
if(istype(target, /obj/structure/window))
if(actually_paints)
- target.color = paint_color
+ target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY)
if(color_hex2num(paint_color) < 255)
target.SetOpacity(255)
else
diff --git a/code/game/objects/items/devices/pipe_painter.dm b/code/game/objects/items/devices/pipe_painter.dm
index 02684707e881..df89ecfd3da5 100644
--- a/code/game/objects/items/devices/pipe_painter.dm
+++ b/code/game/objects/items/devices/pipe_painter.dm
@@ -27,9 +27,9 @@
return
var/obj/machinery/atmospherics/pipe/P = A
- P.color = modes[mode]
+ P.add_atom_colour(modes[mode], FIXED_COLOUR_PRIORITY)
P.pipe_color = modes[mode]
- P.stored.color = modes[mode]
+ P.stored.add_atom_colour(modes[mode], FIXED_COLOUR_PRIORITY)
user.visible_message("[user] paints \the [P] [mode].","You paint \the [P] [mode].")
P.update_node_icon() //updates the neighbors
diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm
index 91f64ccebe55..aded55b852ff 100644
--- a/code/game/objects/items/religion.dm
+++ b/code/game/objects/items/religion.dm
@@ -111,7 +111,7 @@
return
user.visible_message("[user] chants deeply and waves their staff!")
if(do_after(user, 20,1,src))
- target.color = conversion_color //wololo
+ target.add_atom_colour(conversion_color, WASHABLE_COLOUR_PRIORITY) //wololo
staffcooldown = world.time
/obj/item/weapon/godstaff/red
diff --git a/code/game/objects/items/weapons/RPD.dm b/code/game/objects/items/weapons/RPD.dm
index b94e7c416974..d631e1bbcaf5 100644
--- a/code/game/objects/items/weapons/RPD.dm
+++ b/code/game/objects/items/weapons/RPD.dm
@@ -542,9 +542,9 @@ var/global/list/RPD_recipes=list(
return 0
var/obj/machinery/atmospherics/pipe/P = A
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
- P.color = paint_colors[paint_color]
+ P.add_atom_colour(paint_colors[paint_color], FIXED_COLOUR_PRIORITY)
P.pipe_color = paint_colors[paint_color]
- P.stored.color = paint_colors[paint_color]
+ P.stored.add_atom_colour(paint_colors[paint_color], FIXED_COLOUR_PRIORITY)
user.visible_message("[user] paints \the [P] [paint_color].","You paint \the [P] [paint_color].")
//P.update_icon()
P.update_node_icon()
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index ae47d2f0172d..a89449e5a9c3 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -59,6 +59,7 @@
name = "bluespace cryptographic sequencer"
desc = "It's a blue card with a magnetic strip attached to some circuitry. It appears to have some sort of transmitter attached to it."
color = rgb(40, 130, 255)
+ atom_colours = list("", "", "", rgb(40, 130, 255))
origin_tech = "bluespace=4;magnets=4;syndicate=5"
prox_check = FALSE
diff --git a/code/game/objects/items/weapons/chrono_eraser.dm b/code/game/objects/items/weapons/chrono_eraser.dm
index 21533c55cd0e..d7b83a2a8116 100644
--- a/code/game/objects/items/weapons/chrono_eraser.dm
+++ b/code/game/objects/items/weapons/chrono_eraser.dm
@@ -121,7 +121,6 @@
name = "eradication beam"
icon_state = "chronobolt"
range = CHRONO_BEAM_RANGE
- color = null
nodamage = 1
var/obj/item/weapon/gun/energy/chrono_gun/gun = null
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 7b5c25af4f0f..24cee4a20fd9 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -457,7 +457,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/weapon/lighter/greyscale/New()
var/image/I = image(icon,"lighter-overlay")
- I.color = color2hex(randomColor(1))
+ var/newcolor = color2hex(randomColor(1))
+ add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
add_overlay(I)
/obj/item/weapon/lighter/greyscale/ignition_effect(atom/A, mob/user)
diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm
index 723dbea6931f..8c6dda375f7e 100644
--- a/code/game/objects/items/weapons/clown_items.dm
+++ b/code/game/objects/items/weapons/clown_items.dm
@@ -65,13 +65,16 @@
user << "You scrub \the [target.name] out."
qdel(target)
else if(ishuman(target) && user.zone_selected == "mouth")
+ var/mob/living/carbon/human/H = user
user.visible_message("\the [user] washes \the [target]'s mouth out with [src.name]!", "You wash \the [target]'s mouth out with [src.name]!") //washes mouth out with soap sounds better than 'the soap' here
+ H.lip_style = null //removes lipstick
+ H.update_body()
return
else if(istype(target, /obj/structure/window))
user.visible_message("[user] begins to clean \the [target.name] with [src]...", "You begin to clean \the [target.name] with [src]...")
if(do_after(user, src.cleanspeed, target = target))
user << "You clean \the [target.name]."
- target.color = initial(target.color)
+ target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
target.SetOpacity(initial(target.opacity))
else
user.visible_message("[user] begins to clean \the [target.name] with [src]...", "You begin to clean \the [target.name] with [src]...")
@@ -79,6 +82,7 @@
user << "You clean \the [target.name]."
var/obj/effect/decal/cleanable/C = locate() in target
qdel(C)
+ target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
target.clean_blood()
target.wash_cream()
return
diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm
index ac24af721cee..c18f868c444d 100644
--- a/code/game/objects/items/weapons/paint.dm
+++ b/code/game/objects/items/weapons/paint.dm
@@ -86,7 +86,8 @@
return
if(!istype(target) || isspaceturf(target))
return
- target.color = "#" + item_color
+ var/newcolor = "#" + item_color
+ target.add_atom_colour(newcolor, WASHABLE_COLOUR_PRIORITY)
/obj/item/weapon/paint/paint_remover
gender = PLURAL
@@ -97,4 +98,4 @@
if(!proximity)
return
if(istype(target) && target.color != initial(target.color))
- target.color = initial(target.color)
+ target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm
index 62ace83774f7..3381b821b2dc 100644
--- a/code/game/objects/items/weapons/storage/toolbox.dm
+++ b/code/game/objects/items/weapons/storage/toolbox.dm
@@ -55,17 +55,17 @@
/obj/item/weapon/storage/toolbox/electrical/New()
..()
- var/color = pick("red","yellow","green","blue","pink","orange","cyan","white")
+ var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white")
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wirecutters(src)
new /obj/item/device/t_scanner(src)
new /obj/item/weapon/crowbar(src)
- new /obj/item/stack/cable_coil(src,30,color)
- new /obj/item/stack/cable_coil(src,30,color)
+ new /obj/item/stack/cable_coil(src,30,pickedcolor)
+ new /obj/item/stack/cable_coil(src,30,pickedcolor)
if(prob(5))
new /obj/item/clothing/gloves/color/yellow(src)
else
- new /obj/item/stack/cable_coil(src,30,color)
+ new /obj/item/stack/cable_coil(src,30,pickedcolor)
/obj/item/weapon/storage/toolbox/syndicate
name = "suspicious looking toolbox"
@@ -93,12 +93,12 @@
/obj/item/weapon/storage/toolbox/drone/New()
..()
- var/color = pick("red","yellow","green","blue","pink","orange","cyan","white")
+ var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white")
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wrench(src)
new /obj/item/weapon/weldingtool(src)
new /obj/item/weapon/crowbar(src)
- new /obj/item/stack/cable_coil(src,30,color)
+ new /obj/item/stack/cable_coil(src,30,pickedcolor)
new /obj/item/weapon/wirecutters(src)
new /obj/item/device/multitool(src)
diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm
index f199ba021ad3..3f784b538b47 100644
--- a/code/game/objects/items/weapons/tanks/watertank.dm
+++ b/code/game/objects/items/weapons/tanks/watertank.dm
@@ -320,7 +320,7 @@
S.set_up(2, src.loc, blasting=1)
S.start()
var/obj/effect/decal/cleanable/flour/F = new /obj/effect/decal/cleanable/flour(src.loc)
- F.color = "#B2FFFF"
+ F.add_atom_colour("#B2FFFF", FIXED_COLOUR_PRIORITY)
F.name = "nanofrost residue"
F.desc = "Residue left behind from a nanofrost detonation. Perhaps there was a fire here?"
playsound(src,'sound/effects/bamf.ogg',100,1)
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index f4b710244a90..0120e97a2a2f 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -173,35 +173,35 @@ var/highlander_claymores = 0
if(2)
user << "Another falls before you. Another soul fuses with your own. Another notch in the blade."
new_name = "double-notched claymore"
- color = rgb(255, 235, 235)
+ add_atom_colour(rgb(255, 235, 235), ADMIN_COLOUR_PRIORITY)
if(3)
user << "You're beginning to relish the thrill of battle."
new_name = "triple-notched claymore"
- color = rgb(255, 215, 215)
+ add_atom_colour(rgb(255, 215, 215), ADMIN_COLOUR_PRIORITY)
if(4)
user << "You've lost count of how many you've killed."
new_name = "many-notched claymore"
- color = rgb(255, 195, 195)
+ add_atom_colour(rgb(255, 195, 195), ADMIN_COLOUR_PRIORITY)
if(5)
user << "Five voices now echo in your mind, cheering the slaughter."
new_name = "battle-tested claymore"
- color = rgb(255, 175, 175)
+ add_atom_colour(rgb(255, 175, 175), ADMIN_COLOUR_PRIORITY)
if(6)
user << "Is this what the vikings felt like? Visions of glory fill your head as you slay your sixth foe."
new_name = "battle-scarred claymore"
- color = rgb(255, 155, 155)
+ add_atom_colour(rgb(255, 155, 155), ADMIN_COLOUR_PRIORITY)
if(7)
user << "Kill. Butcher. Conquer."
new_name = "vicious claymore"
- color = rgb(255, 135, 135)
+ add_atom_colour(rgb(255, 135, 135), ADMIN_COLOUR_PRIORITY)
if(8)
user << "IT NEVER GETS OLD. THE SCREAMING. THE BLOOD AS IT SPRAYS ACROSS YOUR FACE."
new_name = "bloodthirsty claymore"
- color = rgb(255, 115, 115)
+ add_atom_colour(rgb(255, 115, 115), ADMIN_COLOUR_PRIORITY)
if(9)
user << "ANOTHER ONE FALLS TO YOUR BLOWS. ANOTHER WEAKLING UNFIT TO LIVE."
new_name = "gore-stained claymore"
- color = rgb(255, 95, 95)
+ add_atom_colour(rgb(255, 95, 95), ADMIN_COLOUR_PRIORITY)
if(10)
user.visible_message("[user]'s eyes light up with a vengeful fire!", \
"YOU FEEL THE POWER OF VALHALLA FLOWING THROUGH YOU! THERE CAN BE ONLY ONE!!!")
@@ -209,7 +209,7 @@ var/highlander_claymores = 0
new_name = "GORE-DRENCHED CLAYMORE OF [pick("THE WHIMSICAL SLAUGHTER", "A THOUSAND SLAUGHTERED CATTLE", "GLORY AND VALHALLA", "ANNIHILATION", "OBLITERATION")]"
icon_state = "claymore_valhalla"
item_state = "cultblade"
- color = initial(color)
+ remove_atom_colour(ADMIN_COLOUR_PRIORITY)
name = new_name
playsound(user, 'sound/items/Screwdriver2.ogg', 50, 1)
diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm
index 6494225fedc5..0567b7465eaf 100644
--- a/code/game/objects/structures/beds_chairs/chair.dm
+++ b/code/game/objects/structures/beds_chairs/chair.dm
@@ -128,6 +128,7 @@
desc = "It looks comfy.\nAlt-click to rotate it clockwise."
icon_state = "comfychair"
color = rgb(255,255,255)
+ atom_colours = list("", "", "", rgb(255,255,255))
resistance_flags = FLAMMABLE
obj_integrity = 70
max_integrity = 70
@@ -150,18 +151,23 @@
/obj/structure/chair/comfy/brown
color = rgb(255,113,0)
+ atom_colours = list("", "", "", rgb(255,113,0))
/obj/structure/chair/comfy/beige
color = rgb(255,253,195)
+ atom_colours = list("", "", "", rgb(255,253,195))
/obj/structure/chair/comfy/teal
color = rgb(0,255,255)
+ atom_colours = list("", "", "", rgb(0,255,255))
/obj/structure/chair/comfy/black
color = rgb(167,164,153)
+ atom_colours = list("", "", "", rgb(167,164,153))
/obj/structure/chair/comfy/lime
color = rgb(255,251,0)
+ atom_colours = list("", "", "", rgb(255,251,0))
/obj/structure/chair/office
anchored = 0
diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm
index 76283398d8ed..99f271bb251a 100644
--- a/code/game/objects/structures/crates_lockers/closets/statue.dm
+++ b/code/game/objects/structures/crates_lockers/closets/statue.dm
@@ -85,7 +85,8 @@
S.icon = icon
S.icon_state = icon_state
S.overlays = overlays
- S.color = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
+ var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
+ S.add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
return 1
/mob/living/carbon/monkey/petrify(statue_timer)
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 35f7a4c56f1b..9f22dab9e9bc 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -541,6 +541,7 @@
icon = 'icons/obj/watercloset.dmi'
icon_state = "open"
color = "#ACD1E9" //Default color, didn't bother hardcoding other colors, mappers can and should easily change it.
+ atom_colours = list("", "", "", "#ACD1E9")
alpha = 200 //Mappers can also just set this to 255 if they want curtains that can't be seen through
layer = WALL_OBJ_LAYER
anchored = 1
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index d9c3724f4380..983af14409cb 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -55,9 +55,9 @@
/obj/structure/window/narsie_act()
- color = NARSIE_WINDOW_COLOUR
+ add_atom_colour(NARSIE_WINDOW_COLOUR, FIXED_COLOUR_PRIORITY)
for(var/obj/item/weapon/shard/shard in debris)
- shard.color = NARSIE_WINDOW_COLOUR
+ shard.add_atom_colour(NARSIE_WINDOW_COLOUR, FIXED_COLOUR_PRIORITY)
/obj/structure/window/ratvar_act()
if(!fulltile)
@@ -444,7 +444,7 @@
level = 3
/obj/structure/window/shuttle/narsie_act()
- color = "#3C3434"
+ add_atom_colour("#3C3434", FIXED_COLOUR_PRIORITY)
/obj/structure/window/shuttle/tinted
opacity = TRUE
diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm
index 768c05efd597..b3c038b2f3bc 100644
--- a/code/game/turfs/simulated/floor/misc_floor.dm
+++ b/code/game/turfs/simulated/floor/misc_floor.dm
@@ -159,3 +159,50 @@
desc = "Time seems to flow very slowly around these tiles"
floor_tile = /obj/item/stack/tile/sepia
+
+
+// VINE FLOOR
+
+/turf/open/floor/vines
+ color = "#aa77aa"
+ atom_colours = list("", "", "", "#aa77aa")
+ icon_state = "vinefloor"
+ broken_states = list()
+
+
+//All of this shit is useless for vines
+
+/turf/open/floor/vines/attackby()
+ return
+
+/turf/open/floor/vines/burn_tile()
+ return
+
+/turf/open/floor/vines/break_tile()
+ return
+
+/turf/open/floor/vines/make_plating()
+ return
+
+/turf/open/floor/vines/break_tile_to_plating()
+ return
+
+/turf/open/floor/vines/ex_act(severity, target)
+ ..()
+ if(severity < 3 || target == src)
+ ChangeTurf(src.baseturf)
+
+/turf/open/floor/vines/narsie_act()
+ if(prob(20))
+ ChangeTurf(src.baseturf) //nar sie eats this shit
+
+/turf/open/floor/vines/singularity_pull(S, current_size)
+ if(current_size >= STAGE_FIVE)
+ if(prob(50))
+ ChangeTurf(src.baseturf)
+
+/turf/open/floor/vines/ChangeTurf(turf/open/floor/T)
+ for(var/obj/structure/spacevine/SV in src)
+ qdel(SV)
+ . = ..()
+ UpdateAffectingLights()
\ No newline at end of file
diff --git a/code/game/turfs/simulated/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm
index 8244dea7fc6d..5646d40752f3 100644
--- a/code/game/turfs/simulated/wall/mineral_walls.dm
+++ b/code/game/turfs/simulated/wall/mineral_walls.dm
@@ -200,8 +200,8 @@
T.icon_state = icon_state
if(T.icon != icon)
T.icon = icon
- if(T.color != color)
- T.color = color
+ T.atom_colours = atom_colours.Copy()
+ T.update_atom_colour()
if(T.dir != dir)
T.dir = dir
T.transform = transform
@@ -229,8 +229,8 @@
T.icon_state = icon_state
if(T.icon != icon)
T.icon = icon
- if(T.color != color)
- T.color = color
+ T.atom_colours = atom_colours.Copy()
+ T.update_atom_colour()
if(T.dir != dir)
T.dir = dir
T.transform = transform
diff --git a/code/game/turfs/simulated/wall/shuttle_walls.dm b/code/game/turfs/simulated/wall/shuttle_walls.dm
index 877b915f6613..574423aedf8f 100644
--- a/code/game/turfs/simulated/wall/shuttle_walls.dm
+++ b/code/game/turfs/simulated/wall/shuttle_walls.dm
@@ -57,8 +57,8 @@
T.icon_state = icon_state
if(T.icon != icon)
T.icon = icon
- if(T.color != color)
- T.color = color
+ T.atom_colours = atom_colours.Copy()
+ T.update_atom_colour()
if(T.dir != dir)
T.setDir(dir)
T.transform = transform
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index ac855999943e..a1b17128f5e1 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -363,8 +363,8 @@
T.icon_state = icon_state
if(T.icon != icon)
T.icon = icon
- if(T.color != color)
- T.color = color
+ T.atom_colours = atom_colours.Copy()
+ T.update_atom_colour()
if(T.dir != dir)
T.setDir(dir)
return T
diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm
index 7f13f838ffde..1877439b3fb3 100644
--- a/code/modules/atmospherics/machinery/atmosmachinery.dm
+++ b/code/modules/atmospherics/machinery/atmosmachinery.dm
@@ -216,11 +216,11 @@ Pipelines + Other Objects -> Pipe network
/obj/machinery/atmospherics/on_construction(pipe_type, obj_color)
if(can_unwrench)
- color = obj_color
+ add_atom_colour(obj_color, FIXED_COLOUR_PRIORITY)
pipe_color = obj_color
stored.setDir(src.dir )//need to define them here, because the obj directions...
stored.pipe_type = pipe_type //... were not set at the time the stored pipe was created
- stored.color = obj_color
+ stored.add_atom_colour(obj_color, FIXED_COLOUR_PRIORITY)
var/turf/T = loc
level = T.intact ? 2 : 1
atmosinit()
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm
index 1b400dad2bba..f0079a596287 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm
@@ -14,7 +14,7 @@
if(NODE1)
icon_state = "he_intact"
var/obj/machinery/atmospherics/node = NODE1
- color = node.color
+ add_atom_colour(node.color, FIXED_COLOUR_PRIORITY)
else
icon_state = "he_exposed"
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
index 8f6467cd09a5..a7556aec4ce0 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
@@ -11,7 +11,7 @@
/obj/machinery/atmospherics/pipe/heat_exchanging/New()
..()
- color = "#404040"
+ add_atom_colour("#404040", FIXED_COLOUR_PRIORITY)
/obj/machinery/atmospherics/pipe/heat_exchanging/can_be_node(obj/machinery/atmospherics/pipe/heat_exchanging/target)
if(!istype(target))
diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm
index 32803711f95b..a0f93f31f412 100644
--- a/code/modules/atmospherics/machinery/pipes/pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/pipes.dm
@@ -14,7 +14,7 @@
buckle_lying = -1
/obj/machinery/atmospherics/pipe/New()
- color = pipe_color
+ add_atom_colour(pipe_color, FIXED_COLOUR_PRIORITY)
volume = 35 * device_type
..()
diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm
index 08815bda3fde..17f88eacb51e 100644
--- a/code/modules/awaymissions/mission_code/Academy.dm
+++ b/code/modules/awaymissions/mission_code/Academy.dm
@@ -295,6 +295,7 @@
icon = 'icons/obj/rune.dmi'
icon_state = "1"
color = rgb(0,0,255)
+ atom_colours = list("", "", "", rgb(0,0,255))
/obj/structure/ladder/unbreakable/rune/update_icon()
return
diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm
index e53719692b79..a6afd61d86aa 100644
--- a/code/modules/awaymissions/mission_code/snowdin.dm
+++ b/code/modules/awaymissions/mission_code/snowdin.dm
@@ -216,6 +216,7 @@ obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive/female
minbodytemp = 0
maxbodytemp = 1500
color = rgb(114,228,250)
+ atom_colours = list("", "", "", rgb(114,228,250))
/mob/living/simple_animal/hostile/poison/giant_spider/nurse/ice
name = "giant ice spider"
@@ -223,6 +224,7 @@ obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive/female
minbodytemp = 0
maxbodytemp = 1500
color = rgb(114,228,250)
+ atom_colours = list("", "", "", rgb(114,228,250))
/mob/living/simple_animal/hostile/poison/giant_spider/hunter/ice
name = "giant ice spider"
@@ -230,14 +232,17 @@ obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive/female
minbodytemp = 0
maxbodytemp = 1500
color = rgb(114,228,250)
+ atom_colours = list("", "", "", rgb(114,228,250))
//objs//--
/obj/structure/flora/rock/icy
name = "icy rock"
color = rgb(114,228,250)
+ atom_colours = list("", "", "", rgb(114,228,250))
/obj/structure/flora/rock/pile/icy
name = "icey rocks"
color = rgb(114,228,250)
+ atom_colours = list("", "", "", rgb(114,228,250))
diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm
index 2e4e1101163c..396a506d6191 100644
--- a/code/modules/awaymissions/super_secret_room.dm
+++ b/code/modules/awaymissions/super_secret_room.dm
@@ -100,7 +100,8 @@
materials = list(MAT_GLASS = 500)
/obj/item/rupee/New()
- color = color2hex(pick(10;"green", 5;"blue", 3;"red", 1;"purple"))
+ var/newcolor = color2hex(pick(10;"green", 5;"blue", 3;"red", 1;"purple"))
+ add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
..()
/obj/item/rupee/Crossed(mob/M)
diff --git a/code/modules/clothing/head/beanie.dm b/code/modules/clothing/head/beanie.dm
index bbae5b261fc6..b845df7c25af 100644
--- a/code/modules/clothing/head/beanie.dm
+++ b/code/modules/clothing/head/beanie.dm
@@ -7,6 +7,11 @@
icon_state = "beanie" //Default white
item_color = "beanie"
+/obj/item/clothing/head/beanie/New()
+ ..()
+ if(color)
+ add_atom_colour(color, FIXED_COLOUR_PRIORITY)
+
/obj/item/clothing/head/beanie/black
name = "black beanie"
icon_state = "beanie"
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index 509120945f49..01c2c163e90a 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -132,7 +132,8 @@
name = "kitty ears"
desc = "A pair of kitty ears. Meow!"
icon_state = "kitty"
- color = "#999"
+ color = "#999999"
+ atom_colours = list("", "", "", "#999999")
dog_fashion = /datum/dog_fashion/head/kitty
@@ -143,7 +144,7 @@
/obj/item/clothing/head/kitty/update_icon(mob/living/carbon/human/user)
if(istype(user))
- color = "#[user.hair_color]"
+ add_atom_colour("#[user.hair_color]", FIXED_COLOUR_PRIORITY)
/obj/item/clothing/head/hardhat/reindeer
diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm
index 4ea6592329f8..fc53036a7949 100644
--- a/code/modules/clothing/under/ties.dm
+++ b/code/modules/clothing/under/ties.dm
@@ -268,6 +268,11 @@
item_color = "scarf"
dog_fashion = /datum/dog_fashion/head
+/obj/item/clothing/tie/scarf/New()
+ ..()
+ if(color)
+ add_atom_colour(color, FIXED_COLOUR_PRIORITY)
+
/obj/item/clothing/tie/scarf/black
name = "black scarf"
icon_state = "scarf"
diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm
index 654ea7107115..6aa1830d19ee 100644
--- a/code/modules/events/spacevine.dm
+++ b/code/modules/events/spacevine.dm
@@ -30,7 +30,7 @@
/datum/spacevine_mutation/proc/add_mutation_to_vinepiece(obj/structure/spacevine/holder)
holder.mutations |= src
- holder.color = hue
+ holder.add_atom_colour(hue, FIXED_COLOUR_PRIORITY)
/datum/spacevine_mutation/proc/process_mutation(obj/structure/spacevine/holder)
return
@@ -74,49 +74,6 @@
hue = "#aa77aa"
quality = POSITIVE
-/turf/open/floor/vines
- color = "#aa77aa"
- icon_state = "vinefloor"
- broken_states = list()
-
-
-//All of this shit is useless for vines
-
-/turf/open/floor/vines/attackby()
- return
-
-/turf/open/floor/vines/burn_tile()
- return
-
-/turf/open/floor/vines/break_tile()
- return
-
-/turf/open/floor/vines/make_plating()
- return
-
-/turf/open/floor/vines/break_tile_to_plating()
- return
-
-/turf/open/floor/vines/ex_act(severity, target)
- ..()
- if(severity < 3 || target == src)
- ChangeTurf(src.baseturf)
-
-/turf/open/floor/vines/narsie_act()
- if(prob(20))
- ChangeTurf(src.baseturf) //nar sie eats this shit
-
-/turf/open/floor/vines/singularity_pull(S, current_size)
- if(current_size >= STAGE_FIVE)
- if(prob(50))
- ChangeTurf(src.baseturf)
-
-/turf/open/floor/vines/ChangeTurf(turf/open/floor/T)
- for(var/obj/structure/spacevine/SV in src)
- qdel(SV)
- . = ..()
- UpdateAffectingLights()
-
/datum/spacevine_mutation/space_covering
var/static/list/coverable_turfs
@@ -509,7 +466,8 @@
return
if(parent)
SV.mutations |= parent.mutations
- SV.color = parent.color
+ var/parentcolor = parent.atom_colours[FIXED_COLOUR_PRIORITY]
+ SV.add_atom_colour(parentcolor, FIXED_COLOUR_PRIORITY)
if(prob(mutativness))
var/datum/spacevine_mutation/randmut = pick(mutations_list - SV.mutations)
randmut.add_mutation_to_vinepiece(SV)
diff --git a/code/modules/events/wizard/greentext.dm b/code/modules/events/wizard/greentext.dm
index 1f8827b17701..0aed833be916 100644
--- a/code/modules/events/wizard/greentext.dm
+++ b/code/modules/events/wizard/greentext.dm
@@ -44,14 +44,14 @@
last_holder = user
if(!(user in color_altered_mobs))
color_altered_mobs += user
- user.color = "#00FF00"
+ user.add_atom_colour("#00FF00", ADMIN_COLOUR_PRIORITY)
START_PROCESSING(SSobj, src)
..()
/obj/item/weapon/greentext/dropped(mob/living/user as mob)
if(user in color_altered_mobs)
user << "A sudden wave of failure washes over you..."
- user.color = "#FF0000" //ya blew it
+ user.add_atom_colour("#FF0000", ADMIN_COLOUR_PRIORITY) //ya blew it
last_holder = null
new_holder = null
STOP_PROCESSING(SSobj, src)
@@ -74,7 +74,7 @@
if(last_holder && last_holder != new_holder) //Somehow it was swiped without ever getting dropped
last_holder << "A sudden wave of failure washes over you..."
- last_holder.color = "#FF0000"
+ last_holder.add_atom_colour("#FF0000", ADMIN_COLOUR_PRIORITY)
last_holder = new_holder //long live the king
/obj/item/weapon/greentext/Destroy(force)
@@ -87,7 +87,7 @@
var/message = "A dark temptation has passed from this world"
if(M in color_altered_mobs)
message += " and you're finally able to forgive yourself"
- M.color = initial(M.color)
+ M.remove_atom_colour(ADMIN_COLOUR_PRIORITY)
message += "..."
// can't skip the mob check as it also does the decolouring
if(!quiet)
diff --git a/code/modules/events/wizard/magicarp.dm b/code/modules/events/wizard/magicarp.dm
index aba0bccfb454..8869ad2220ce 100644
--- a/code/modules/events/wizard/magicarp.dm
+++ b/code/modules/events/wizard/magicarp.dm
@@ -46,6 +46,7 @@
name = "chaos magicarp"
desc = "50% carp, 100% magic, 150% horrible."
color = "#00FFFF"
+ atom_colours = list("", "", "", "#00FFFF")
maxHealth = 75
health = 75
diff --git a/code/modules/food_and_drinks/food/snacks_burgers.dm b/code/modules/food_and_drinks/food/snacks_burgers.dm
index 77e046893172..3fb0711b39e4 100644
--- a/code/modules/food_and_drinks/food/snacks_burgers.dm
+++ b/code/modules/food_and_drinks/food/snacks_burgers.dm
@@ -18,6 +18,11 @@
desc = "A bloody burger."
bonus_reagents = list("vitamin" = 4)
+/obj/item/weapon/reagent_containers/food/snacks/burger/New()
+ ..()
+ if(color)
+ add_atom_colour(color, FIXED_COLOUR_PRIORITY)
+
/obj/item/weapon/reagent_containers/food/snacks/burger/human/CheckParts(list/parts_list)
..()
var/obj/item/weapon/reagent_containers/food/snacks/meat/M = locate(/obj/item/weapon/reagent_containers/food/snacks/meat/steak/plain/human) in contents
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index 1a92e9562dd6..00db945132d3 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -316,7 +316,7 @@
/obj/machinery/smartfridge/drying_rack/proc/rack_dry()
for(var/obj/item/weapon/reagent_containers/food/snacks/S in contents)
if(S.dried_type == S.type)//if the dried type is the same as the object's type, don't bother creating a whole new item...
- S.color = "#ad7257"
+ S.add_atom_colour("#ad7257", FIXED_COLOUR_PRIORITY)
S.dry = 1
S.loc = get_turf(src)
else
diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm
index bb8d4e144ebc..1606889944d4 100644
--- a/code/modules/games/cards.dm
+++ b/code/modules/games/cards.dm
@@ -19,17 +19,19 @@
/obj/item/weapon/deck/New()
. = ..()
- var/color
+ var/cardcolor
var/datum/playingcard/card
for (var/suit in list("spades", "clubs", "diamonds", "hearts"))
- if (suit == "spades" || suit == "clubs") color = "black_"
- else color = "red_"
+ if (suit == "spades" || suit == "clubs")
+ cardcolor = "black_"
+ else
+ cardcolor = "red_"
for (var/number in list("ace", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"))
card = new()
card.name = "[number] of [suit]"
- card.card_icon = "[color]num"
+ card.card_icon = "[cardcolor]num"
card.suit = suit
card.number = number
@@ -38,7 +40,7 @@
for (var/number in list("jack", "queen", "king"))
card = new()
card.name = "[number] of [suit]"
- card.card_icon = "[color]col"
+ card.card_icon = "[cardcolor]col"
card.suit = suit
card.number = number
diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm
index fbe73113f1ae..8a373d7ec376 100644
--- a/code/modules/holiday/easter.dm
+++ b/code/modules/holiday/easter.dm
@@ -111,9 +111,9 @@
/obj/item/weapon/reagent_containers/food/snacks/egg/loaded/New()
..()
- var/color = pick("blue","green","mime","orange","purple","rainbow","red","yellow")
- icon_state = "egg-[color]"
- item_color = "[color]"
+ var/eggcolor = pick("blue","green","mime","orange","purple","rainbow","red","yellow")
+ icon_state = "egg-[eggcolor]"
+ item_color = "[eggcolor]"
/obj/item/weapon/reagent_containers/food/snacks/egg/proc/dispensePrize(turf/where)
var/won = pick(/obj/item/clothing/head/bunnyhead,
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 82134306813a..4d5d8fbfeb8d 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -256,7 +256,7 @@
if(self_sustaining)
if(istype(src, /obj/machinery/hydroponics/soil))
- color = rgb(255, 175, 0)
+ add_atom_colour(rgb(255, 175, 0), FIXED_COLOUR_PRIORITY)
else
overlays += image('icons/obj/hydroponics/equipment.dmi', icon_state = "gaia_blessing")
SetLuminosity(3)
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 62ba898d7679..8b867af2ff06 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -720,6 +720,7 @@
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll2"
color = "#FF0000"
+ atom_colours = list("", "", "", "#FF0000")
desc = "Mark your target for death. "
var/used = FALSE
@@ -743,7 +744,7 @@
survive.owner = L.mind
L.mind.objectives += survive
L << "You've been marked for death! Don't let the demons get you!"
- L.color = "#FF0000"
+ L.add_atom_colour("#FF0000", ADMIN_COLOUR_PRIORITY)
spawn()
var/obj/effect/mine/pickup/bloodbath/B = new(L)
B.mineEffect(L)
diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm
index a1ada1800a37..5927ac136de2 100644
--- a/code/modules/mob/living/bloodcrawl.dm
+++ b/code/modules/mob/living/bloodcrawl.dm
@@ -145,15 +145,14 @@
/mob/living/proc/exit_blood_effect(obj/effect/decal/cleanable/B)
playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1)
- var/oldcolor = src.color
//Makes the mob have the color of the blood pool it came out of
if(istype(B, /obj/effect/decal/cleanable/xenoblood))
- src.color = rgb(43, 186, 0)
+ add_atom_colour(rgb(43, 186, 0), TEMPORARY_COLOUR_PRIORITY)
else
- src.color = rgb(149, 10, 10)
+ add_atom_colour(rgb(149, 10, 10), TEMPORARY_COLOUR_PRIORITY)
// but only for a few seconds
spawn(30)
- src.color = oldcolor
+ remove_atom_colour(TEMPORARY_COLOUR_PRIORITY)
/mob/living/proc/phasein(obj/effect/decal/cleanable/B)
if(src.notransform)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index a762540f4d77..0ffa532c01b3 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -712,9 +712,11 @@
/mob/living/carbon/human/proc/electrocution_animation(anim_duration)
//Handle mutant parts if possible
if(dna && dna.species)
+ add_atom_colour("black", TEMPORARY_COLOUR_PRIORITY)
add_overlay("electrocuted_base")
spawn(anim_duration)
if(src)
+ remove_atom_colour(TEMPORARY_COLOUR_PRIORITY)
overlays -= "electrocuted_base"
else //or just do a generic animation
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 7658a71c484c..a8669a4f25f3 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -259,7 +259,7 @@
drying_agent = new(src)
drying_agent.reagents.add_reagent("drying_agent", 250)
drying_agent.name = "drying agent spray"
- drying_agent.color = "#A000A0"
+ drying_agent.add_atom_colour("#A000A0", FIXED_COLOUR_PRIORITY)
modules += drying_agent
emag = new /obj/item/weapon/reagent_containers/spray(src)
diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
index 276d8a4e381a..c4ca476732ad 100644
--- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm
+++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
@@ -26,4 +26,5 @@
/mob/living/simple_animal/butterfly/New()
..()
- color = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
+ var/newcolor = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
+ add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index 79281886fd61..0ccee510e45e 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -46,7 +46,7 @@
M.icon_state = icon_dead
M.name = name
if(toast)
- M.color = "#3A3A3A"
+ M.add_atom_colour("#3A3A3A", FIXED_COLOUR_PRIORITY)
M.desc = "It's toast."
qdel(src)
else
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index d77708e0b2a1..aa895a89b6a4 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -101,7 +101,7 @@ var/global/list/parasites = list() //all currently existing/living guardians
bubble_icon = "[namedatum.bubbleicon]"
if (namedatum.stainself)
- color = namedatum.colour
+ add_atom_colour(namedatum.colour, FIXED_COLOUR_PRIORITY)
//Special case holocarp, because #snowflake code
if(theme == "carp")
diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm
index a81f4b45272a..7bbcb87c079f 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/support.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm
@@ -103,7 +103,7 @@
/obj/structure/recieving_pad/New(loc, mob/living/simple_animal/hostile/guardian/healer/G)
. = ..()
if(G.namedatum)
- color = G.namedatum.colour
+ add_atom_colour(G.namedatum.colour, FIXED_COLOUR_PRIORITY)
/obj/structure/recieving_pad/proc/disappear()
visible_message("[src] vanishes!")
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
index ee1c77a10597..5956e883f99f 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
@@ -347,6 +347,7 @@
icon_aggro = "bloodbrood"
attacktext = "pierces"
color = "#C80000"
+ atom_colours = list("", "", "" ,"#C80000")
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/blood/death()
if(loc) // Splash the turf we are on with blood
@@ -401,7 +402,8 @@
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/blood/proc/link_host(mob/living/carbon/C)
faction = list("\ref[src]", "\ref[C]") // Hostile to everyone except the host.
C.transfer_blood_to(src, 30)
- color = mix_color_from_reagents(reagents.reagent_list)
+ var/newcolor = mix_color_from_reagents(reagents.reagent_list)
+ add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
/mob/living/simple_animal/hostile/asteroid/goliath
name = "goliath"
@@ -947,7 +949,7 @@
/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck/New()
..()
- color = pick("#E39FBB", "#D97D64", "#CF8C4A")
+ add_atom_colour(pick("#E39FBB", "#D97D64", "#CF8C4A"), FIXED_COLOUR_PRIORITY)
resize = 0.85
update_transform()
diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
index f318f7ae15c1..4cf7a07447f3 100644
--- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm
+++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
@@ -79,4 +79,5 @@
maxHealth = 75
health = 75
color = rgb(114,228,250)
+ atom_colours = list("", "", "", rgb(114,228,250))
loot = list(/obj/effect/decal/remains/human{color = rgb(114,228,250)})
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index e1528dea4efe..5950181dbcb1 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -885,11 +885,11 @@
speak += pick("...[longest_survival].", "The things I've seen!", "I have lived many lives!", "What are you before me?")
desc += " Old as sin, and just as loud. Claimed to be [rounds_survived]."
speak_chance = 20 //His hubris has made him more annoying/easier to justify killing
- color = "#EEEE22"
+ add_atom_colour("#EEEE22", FIXED_COLOUR_PRIORITY)
else if(rounds_survived == longest_deathstreak)
speak += pick("What are you waiting for!", "Violence breeds violence!", "Blood! Blood!", "Strike me down if you dare!")
desc += " The squawks of [-rounds_survived] dead parrots ring out in your ears..."
- color = "#BB7777"
+ add_atom_colour("#BB7777", FIXED_COLOUR_PRIORITY)
else if(rounds_survived > 0)
speak += pick("...again?", "No, It was over!", "Let me out!", "It never ends!")
desc += " Over [rounds_survived] shifts without a \"terrible\" \"accident\"!"
@@ -945,6 +945,7 @@
name = "The Ghost of Poly"
desc = "Doomed to squawk the earth."
color = "#FFFFFF77"
+ atom_colours = list("", "", "", "#FFFFFF77")
speak_chance = 20
status_flags = GODMODE
incorporeal_move = 1
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index d4006cc4f16b..e89bed85f586 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -190,9 +190,9 @@ By design, d1 is the smallest direction and d2 is the highest
if("white")
icon = 'icons/obj/power_cond/power_cond_white.dmi'
-/obj/structure/cable/proc/update_stored(var/length = 1, var/color = "red")
+/obj/structure/cable/proc/update_stored(length = 1, colorC = "red")
stored.amount = length
- stored.item_color = color
+ stored.item_color = colorC
stored.update_icon()
////////////////////////////////////////////
diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm
index 1daf68c4d7fc..3e6b6289b11d 100644
--- a/code/modules/projectiles/pins.dm
+++ b/code/modules/projectiles/pins.dm
@@ -121,6 +121,7 @@
name = "hilarious firing pin"
desc = "Advanced clowntech that can convert any firearm into a far more useful object."
color = "yellow"
+ atom_colours = list("", "", "", "yellow")
fail_message = "HONK!"
force_replace = 1
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index 6ad3963adfb5..8cf7f45a7e65 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -346,6 +346,7 @@
S.icon_state = P.icon_state
S.overlays = P.overlays
S.color = P.color
+ S.atom_colours = P.atom_colours.Copy()
if(L.mind)
L.mind.transfer_to(S)
S << "You are an animate statue. You cannot move when monitored, but are nearly invincible and deadly when unobserved! Do not harm [firer.name], your creator."
diff --git a/code/modules/reagents/chemistry/colors.dm b/code/modules/reagents/chemistry/colors.dm
index 05ee15c2936d..8d83f9343a5e 100644
--- a/code/modules/reagents/chemistry/colors.dm
+++ b/code/modules/reagents/chemistry/colors.dm
@@ -2,7 +2,7 @@
if(!istype(reagent_list))
return
- var/color
+ var/mixcolor
var/vol_counter = 0
var/vol_temp
@@ -10,12 +10,12 @@
vol_temp = R.volume
vol_counter += vol_temp
- if(!color)
- color = R.color
+ if(!mixcolor)
+ mixcolor = R.color
- else if (length(color) >= length(R.color))
- color = BlendRGB(color, R.color, vol_temp/vol_counter)
+ else if (length(mixcolor) >= length(R.color))
+ mixcolor = BlendRGB(mixcolor, R.color, vol_temp/vol_counter)
else
- color = BlendRGB(R.color, color, vol_temp/vol_counter)
+ mixcolor = BlendRGB(R.color, mixcolor, vol_temp/vol_counter)
- return color
\ No newline at end of file
+ return mixcolor
\ No newline at end of file
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index c8db6407aba1..8011206af2ba 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -86,11 +86,11 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/beer/green/on_mob_life(mob/living/M)
if(M.color != color)
- M.color = color
+ M.add_atom_colour(color, TEMPORARY_COLOUR_PRIORITY)
return ..()
/datum/reagent/consumable/ethanol/beer/green/on_mob_delete(mob/living/M)
- M.color = initial(M.color)
+ M.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY)
/datum/reagent/consumable/ethanol/kahlua
name = "Kahlua"
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 8aed11ceb15b..ab7470160815 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -843,10 +843,12 @@
qdel(O)
else
if(O)
+ O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
O.clean_blood()
/datum/reagent/space_cleaner/reaction_turf(turf/T, reac_volume)
if(reac_volume >= 1)
+ T.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
T.clean_blood()
for(var/obj/effect/decal/cleanable/C in T)
qdel(C)
@@ -856,6 +858,7 @@
/datum/reagent/space_cleaner/reaction_mob(mob/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
+ M.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
if(iscarbon(M))
var/mob/living/carbon/C = M
if(ishuman(M))
@@ -1180,23 +1183,23 @@
/datum/reagent/colorful_reagent/on_mob_life(mob/living/M)
if(M && isliving(M))
- M.color = pick(random_color_list)
+ M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
..()
return
/datum/reagent/colorful_reagent/reaction_mob(mob/living/M, reac_volume)
if(M && isliving(M))
- M.color = pick(random_color_list)
+ M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
..()
/datum/reagent/colorful_reagent/reaction_obj(obj/O, reac_volume)
if(O)
- O.color = pick(random_color_list)
+ O.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
..()
/datum/reagent/colorful_reagent/reaction_turf(turf/T, reac_volume)
if(T)
- T.color = pick(random_color_list)
+ T.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
..()
/datum/reagent/hair_dye
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index b0ee4fc1f625..4707c92dae41 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -350,7 +350,8 @@
V.vehicle_move_delay = 0
user <<"You slather the red gunk over the [C], making it faster."
- C.color = "#FF0000"
+ C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
+ C.add_atom_colour("#FF0000", FIXED_COLOUR_PRIORITY)
qdel(src)
@@ -375,7 +376,8 @@
return ..()
user <<"You slather the blue gunk over the [C], fireproofing it."
C.name = "fireproofed [C.name]"
- C.color = "#000080"
+ C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
+ C.add_atom_colour("#000080", FIXED_COLOUR_PRIORITY)
C.max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
C.heat_protection = C.body_parts_covered
C.resistance_flags |= FIRE_PROOF
@@ -645,11 +647,13 @@
name = "cerulean prints"
desc = "A one use yet of blueprints made of jelly like organic material. Renaming an area to 'Xenobiology Lab' will extend the reach of the management console."
color = "#2956B2"
+ atom_colours = list("", "", "", "#2956B2")
/obj/item/areaeditor/blueprints/slime/edit_area()
var/success = ..()
var/area/A = get_area(src)
if(success)
for(var/turf/T in A)
- T.color = "#2956B2"
+ T.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
+ T.add_atom_colour("#2956B2", FIXED_COLOUR_PRIORITY)
qdel(src)
diff --git a/code/modules/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/ruins/objects_and_mobs/sin_ruins.dm
index a2de405894fa..9834119f55fe 100644
--- a/code/modules/ruins/objects_and_mobs/sin_ruins.dm
+++ b/code/modules/ruins/objects_and_mobs/sin_ruins.dm
@@ -75,6 +75,7 @@
icon_state = "blob"
icon = 'icons/mob/blob.dmi'
color = rgb(145, 150, 0)
+ atom_colours = list("", "", "", rgb(145, 150, 0))
/obj/effect/gluttony/CanPass(atom/movable/mover, turf/target, height=0)//So bullets will fly over and stuff.
if(height==0)
diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm
index af697b2336f2..f18eb0025169 100644
--- a/code/modules/shuttle/special.dm
+++ b/code/modules/shuttle/special.dm
@@ -95,7 +95,7 @@
// New sleepers
for(var/i in found - sleepers)
var/mob/living/L = i
- L.color = "#800080"
+ L.add_atom_colour("#800080", TEMPORARY_COLOUR_PRIORITY)
L.visible_message("A strange purple glow wraps itself around [L] as [L.p_they()] suddenly fall[L.p_s()] unconscious.",
"[desc]")
// Don't let them sit suround unconscious forever
@@ -109,7 +109,7 @@
// Missing sleepers
for(var/i in sleepers - found)
var/mob/living/L = i
- L.color = initial(L.color)
+ L.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY)
L.visible_message("The glow from [L] fades \
away.")
L.grab_ghost()
diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm
index 75e9d5642ad6..39ecf0a30b51 100644
--- a/code/modules/spells/spell_types/lichdom.dm
+++ b/code/modules/spells/spell_types/lichdom.dm
@@ -126,7 +126,7 @@
stat_allowed = 1
marked_item.name = "Ensouled [marked_item.name]"
marked_item.desc = "A terrible aura surrounds this item, its very existence is offensive to life itself..."
- marked_item.color = "#003300"
+ marked_item.add_atom_colour("#003300", ADMIN_COLOUR_PRIORITY)
M << "With a hideous feeling of emptiness you watch in horrified fascination as skin sloughs off bone! Blood boils, nerves disintegrate, eyes boil in their sockets! As your organs crumble to dust in your fleshless chest you come to terms with your choice. You're a lich!"
M.set_species(/datum/species/skeleton)
current_body = M.mind.current
diff --git a/code/modules/spells/spell_types/spacetime_distortion.dm b/code/modules/spells/spell_types/spacetime_distortion.dm
index 54a820a87b76..da361db34d78 100644
--- a/code/modules/spells/spell_types/spacetime_distortion.dm
+++ b/code/modules/spells/spell_types/spacetime_distortion.dm
@@ -65,6 +65,7 @@
desc = "A distortion in spacetime. You can hear faint music..."
icon_state = "wave1"
color = "#8A2BE2"
+ atom_colours = list("", "", "", "#8A2BE2")
var/obj/effect/cross_action/spacetime_dist/linked_dist
var/busy = FALSE
var/sound
diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm
index a2acadb0f939..d2275efa5ce0 100644
--- a/code/modules/surgery/bodyparts/bodyparts.dm
+++ b/code/modules/surgery/bodyparts/bodyparts.dm
@@ -550,4 +550,5 @@
icon = 'icons/obj/surgery.dmi'
icon_state = "severedtail"
color = "#161"
+ atom_colours = list("", "", "", "#161")
var/markings = "Smooth"
diff --git a/code/modules/surgery/tail_modification.dm b/code/modules/surgery/tail_modification.dm
index 1b60df3f839f..de2f800b3432 100644
--- a/code/modules/surgery/tail_modification.dm
+++ b/code/modules/surgery/tail_modification.dm
@@ -33,7 +33,7 @@
if("spines" in L.dna.features)
L.dna.features -= "spines"
var/obj/item/severedtail/S = new(get_turf(target))
- S.color = "#[L.dna.features["mcolor"]]"
+ S.add_atom_colour("#[L.dna.features["mcolor"]]", FIXED_COLOUR_PRIORITY)
S.markings = "[L.dna.features["tail"]]"
L.update_body()
return 1