diff --git a/_maps/RandomRuins/SpaceRuins/spacehermit.dmm b/_maps/RandomRuins/SpaceRuins/spacehermit.dmm
index 8113c586ff..dd7e700146 100644
--- a/_maps/RandomRuins/SpaceRuins/spacehermit.dmm
+++ b/_maps/RandomRuins/SpaceRuins/spacehermit.dmm
@@ -145,9 +145,6 @@
"aE" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/powered)
-"aF" = (
-/turf/open/floor/plating/asteroid,
-/area/ruin/powered)
"aG" = (
/obj/structure/sink/puddle,
/turf/open/floor/plating/asteroid,
@@ -241,7 +238,7 @@
/turf/closed/mineral/random/low_chance/earth_like,
/area/ruin/powered)
"bb" = (
-/turf/closed/mineral/random/earth_like,
+/turf/closed/mineral/random/no_caves/earth_like,
/area/ruin/powered)
"bc" = (
/obj/item/circuitboard/machine/circuit_imprinter,
@@ -1137,7 +1134,7 @@ ao
ao
ak
af
-aF
+am
bb
bb
bb
@@ -1189,7 +1186,7 @@ an
an
ae
ae
-aF
+am
bb
bb
bb
@@ -1223,8 +1220,8 @@ bb
bb
bb
ba
-aF
-aF
+am
+am
ba
ba
ba
@@ -1241,7 +1238,7 @@ ar
af
at
at
-aF
+am
bb
fp
bb
@@ -1275,10 +1272,10 @@ bb
bb
bb
ad
-aF
-aF
-aF
-aF
+am
+am
+am
+am
ba
aH
aJ
@@ -1286,13 +1283,13 @@ aL
bb
bb
aT
-aF
-aF
-aF
-aF
-aF
-aF
-aF
+am
+am
+am
+am
+am
+am
+am
aR
bb
bb
@@ -1328,23 +1325,23 @@ bb
bb
ad
au
-aF
+am
aB
-aF
-aF
-aF
-aF
-aF
+am
+am
+am
+am
+am
ba
bb
-aF
-aF
-aF
-aF
-aF
-aF
-aF
-aF
+am
+am
+am
+am
+am
+am
+am
+am
bg
bb
fp
@@ -1384,19 +1381,19 @@ bs
aC
bC
WH
-aF
-aF
-aF
+am
+am
+am
ba
bb
bb
-aF
-aF
-aF
-aF
-aF
-aF
-aF
+am
+am
+am
+am
+am
+am
+am
bb
bb
bb
@@ -1432,23 +1429,23 @@ bb
bb
ad
ax
-aF
+am
aD
-aF
-aF
-aF
-aF
+am
+am
+am
+am
bb
bb
bb
aU
bd
-aF
-aF
+am
+am
bl
bm
-aF
-aF
+am
+am
bb
bb
bb
@@ -1484,20 +1481,20 @@ bb
bb
ad
ay
-aF
-aF
-aF
+am
+am
+am
aG
-aF
-aF
+am
+am
bb
bb
ba
av
be
-aF
-aF
-aF
+am
+am
+am
bn
bo
bo
@@ -1535,24 +1532,24 @@ bb
bb
bb
ba
-aF
-aF
-aF
-aF
-aF
-aF
-aF
+am
+am
+am
+am
+am
+am
+am
bb
bb
bb
bc
bf
-aF
-aF
-aF
-aF
-aF
-aF
+am
+am
+am
+am
+am
+am
br
bb
bb
@@ -1590,22 +1587,22 @@ bb
bb
bb
bb
-aF
-aF
-aF
-aF
-aF
+am
+am
+am
+am
+am
bb
bb
-aF
-aF
-aF
-aF
-aF
-aF
-aF
-aF
-aF
+am
+am
+am
+am
+am
+am
+am
+am
+am
bb
bb
bb
@@ -1642,21 +1639,21 @@ bb
bb
bb
bb
-aF
-aF
-aF
-aF
-aF
+am
+am
+am
+am
+am
aN
-aF
-aF
-aF
-aF
+am
+am
+am
+am
aR
-aF
-aF
-aF
-aF
+am
+am
+am
+am
bb
bb
fp
@@ -1695,22 +1692,22 @@ bb
bb
bb
ba
-aF
-aF
-aF
+am
+am
+am
ba
ba
-aF
-aF
-aF
-aF
-aF
-aF
-aF
-aF
-aF
-aF
-aF
+am
+am
+am
+am
+am
+am
+am
+am
+am
+am
+am
ba
ba
ba
@@ -1752,16 +1749,16 @@ ba
aK
ba
ba
-aF
-aF
-aF
-aF
-aF
-aF
-aF
+am
+am
+am
+am
+am
+am
+am
bp
-aF
-aF
+am
+am
aR
ba
ba
@@ -1805,15 +1802,15 @@ ba
fp
ba
aP
-aF
-aF
-aF
-aF
-aF
-aF
-aF
-aF
-aF
+am
+am
+am
+am
+am
+am
+am
+am
+am
aR
ba
ba
@@ -1858,15 +1855,15 @@ ba
ba
aQ
aP
-aF
-aF
+am
+am
aR
-aF
-aF
-aF
-aF
+am
+am
+am
+am
bb
-aF
+am
ba
ba
aZ
@@ -1910,12 +1907,12 @@ ba
ba
ba
ba
-aF
-aF
-aF
-aF
+am
+am
+am
+am
aP
-aF
+am
bg
bb
bb
@@ -1962,12 +1959,12 @@ bb
bb
ba
ba
-aF
-aF
-aF
-aF
-aF
-aF
+am
+am
+am
+am
+am
+am
aS
bb
fp
@@ -2015,11 +2012,11 @@ bb
bb
ba
bg
-aF
-aF
-aF
-aF
-aF
+am
+am
+am
+am
+am
aS
bb
fp
@@ -2066,12 +2063,12 @@ bb
bb
fp
ba
-aF
-aF
+am
+am
bj
-aF
-aF
-aF
+am
+am
+am
aS
fp
bb
@@ -2120,9 +2117,9 @@ ba
ba
aS
bi
-aF
-aF
-aF
+am
+am
+am
aS
aS
bb
@@ -2171,10 +2168,10 @@ ba
aZ
ba
aS
-aF
-aF
-aF
-aF
+am
+am
+am
+am
aS
aS
ba
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index f1380ec2f5..bdbce36c9c 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -21324,7 +21324,7 @@
"aYm" = (
/obj/structure/closet/crate/wooden/toy,
/obj/item/lipstick/random,
-/obj/item/clothing/gloves/color/rainbow/clown,
+/obj/item/clothing/gloves/color/rainbow,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index e75f832df3..2ab04cb37f 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -179,7 +179,7 @@
// #define SPEECH_FORCED 7
#define COMSIG_MOB_ANTAG_ON_GAIN "mob_antag_on_gain" //from base of /datum/antagonist/on_gain(): (antag_datum)
-#define COMSIG_MOB_SPELL_CAST_CHECK "mob_spell_cast_check" //called from base of /obj/effect/proc_holder/spell/cast_check(): (spell)
+#define COMSIG_MOB_SPELL_CAN_CAST "mob_spell_can_cast" //called from base of /obj/effect/proc_holder/spell/can_cast(): (spell)
// /mob/living signals
#define COMSIG_LIVING_REGENERATE_LIMBS "living_regenerate_limbs" //from base of /mob/living/regenerate_limbs(): (noheal, excluded_limbs)
diff --git a/code/__DEFINES/dye_keys.dm b/code/__DEFINES/dye_keys.dm
new file mode 100644
index 0000000000..133f9c47d3
--- /dev/null
+++ b/code/__DEFINES/dye_keys.dm
@@ -0,0 +1,28 @@
+#define DYE_REGISTRY_UNDER "under"
+#define DYE_REGISTRY_JUMPSKIRT "jumpskirt"
+#define DYE_REGISTRY_GLOVES "gloves"
+#define DYE_REGISTRY_SNEAKERS "sneakers"
+#define DYE_REGISTRY_FANNYPACK "fannypack"
+#define DYE_REGISTRY_BEDSHEET "bedsheet"
+
+#define DYE_RED "red"
+#define DYE_ORANGE "orange"
+#define DYE_YELLOW "yellow"
+#define DYE_GREEN "green"
+#define DYE_BLUE "blue"
+#define DYE_PURPLE "purple"
+#define DYE_BLACK "black"
+#define DYE_WHITE "white"
+#define DYE_RAINBOW "rainbow"
+#define DYE_MIME "mime"
+#define DYE_COSMIC "cosmic"
+#define DYE_QM "qm"
+#define DYE_LAW "law"
+#define DYE_CAPTAIN "captain"
+#define DYE_HOP "hop"
+#define DYE_HOS "hos"
+#define DYE_CE "ce"
+#define DYE_RD "rd"
+#define DYE_CMO "cmo"
+#define DYE_REDCOAT "redcoat"
+#define DYE_CLOWN "clown"
diff --git a/code/__DEFINES/movespeed_modification.dm b/code/__DEFINES/movespeed_modification.dm
index 76c326cec0..bc1e6f7d5f 100644
--- a/code/__DEFINES/movespeed_modification.dm
+++ b/code/__DEFINES/movespeed_modification.dm
@@ -78,4 +78,6 @@
#define MOVESPEED_ID_COLD "COLD"
#define MOVESPEED_ID_HUNGRY "HUNGRY"
#define MOVESPEED_ID_DAMAGE_SLOWDOWN "DAMAGE"
-#define MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING "FLYING"
\ No newline at end of file
+#define MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING "FLYING"
+
+#define MOVESPEED_ID_CIRRHOSIS "CIRRHOSIS"
\ No newline at end of file
diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index 38e25b04c5..0c45a746d8 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -89,6 +89,14 @@
INVOKE_ASYNC(GLOBAL_PROC, /proc/init_ref_coin_values) //so the current procedure doesn't sleep because of UNTIL()
+ for(var/path in subtypesof(/area/holodeck))
+ var/area/holodeck/A = path
+ var/list/compatibles = initial(A.compatible_holodeck_comps)
+ if(!compatibles || initial(A.abstract_type) == path)
+ continue
+ for(var/comp in compatibles)
+ LAZYADD(GLOB.holodeck_areas_prototypes[comp], A)
+
//creates every subtype of prototype (excluding prototype) and adds it to list L.
//if no list/L is provided, one is created.
/proc/init_subtypes(prototype, list/L)
diff --git a/code/__HELPERS/radiation.dm b/code/__HELPERS/radiation.dm
index abdfe7e8d3..1570eededb 100644
--- a/code/__HELPERS/radiation.dm
+++ b/code/__HELPERS/radiation.dm
@@ -27,12 +27,20 @@
return
var/area/A = get_area(source)
var/atom/nested_loc = source.loc
+ var/spawn_waves = TRUE
while(nested_loc != A)
if(nested_loc.rad_flags & RAD_PROTECT_CONTENTS)
- return
+ spawn_waves = FALSE
+ break
nested_loc = nested_loc.loc
- for(var/dir in GLOB.cardinals)
- new /datum/radiation_wave(source, dir, intensity, range_modifier, can_contaminate)
+ if(spawn_waves)
+ for(var/dir in GLOB.cardinals)
+ new /datum/radiation_wave(source, dir, intensity, range_modifier, can_contaminate)
+
+ var/static/last_huge_pulse = 0
+ if(intensity > 3000 && world.time > last_huge_pulse + 200)
+ last_huge_pulse = world.time
+ log = TRUE
var/list/things = get_rad_contents(source) //copypasta because I don't want to put special code in waves to handle their origin
for(var/k in 1 to things.len)
@@ -41,11 +49,7 @@
continue
thing.rad_act(intensity)
- var/static/last_huge_pulse = 0
- if(intensity > 3000 && world.time > last_huge_pulse + 200)
- last_huge_pulse = world.time
- log = TRUE
if(log)
- var/turf/_source_T = isturf(source) ? source : get_turf(source)
- log_game("Radiation pulse with intensity: [intensity] and range modifier: [range_modifier] in [loc_name(_source_T)] ")
+ var/turf/_source_T = get_turf(source)
+ log_game("Radiation pulse with intensity: [intensity] and range modifier: [range_modifier] in [loc_name(_source_T)][spawn_waves ? "" : " (contained by [nested_loc.name])"]")
return TRUE
diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm
index e416396991..7cbfbd040a 100644
--- a/code/__HELPERS/roundend.dm
+++ b/code/__HELPERS/roundend.dm
@@ -513,7 +513,7 @@
if(owner && GLOB.common_report && SSticker.current_state == GAME_STATE_FINISHED)
SSticker.show_roundend_report(owner.client, FALSE)
-/datum/action/report/IsAvailable()
+/datum/action/report/IsAvailable(silent = FALSE)
return 1
/datum/action/report/Topic(href,href_list)
diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm
index fb8863ebe7..bcf35859c3 100644
--- a/code/_globalvars/lists/mapping.dm
+++ b/code/_globalvars/lists/mapping.dm
@@ -50,3 +50,5 @@ GLOBAL_LIST_EMPTY_TYPED(areas_by_type, /area)
GLOBAL_LIST_EMPTY(all_abstract_markers)
GLOBAL_LIST_EMPTY(stationroom_landmarks) //List of all spawns for stationrooms
+
+GLOBAL_LIST_EMPTY(holodeck_areas_prototypes) //List of holodeck area prototypes per holodeck computer type
\ No newline at end of file
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index bdc6ea2980..7c116cc606 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -334,7 +334,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
return
var/datum/antagonist/cult/antag = mob_viewer.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
- if(!antag)
+ if(!antag?.cult_team)
return
var/datum/objective/sacrifice/sac_objective = locate() in antag.cult_team.objectives
diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm
index 5b350a7917..0a60c6e5d3 100644
--- a/code/controllers/subsystem/persistence.dm
+++ b/code/controllers/subsystem/persistence.dm
@@ -192,7 +192,8 @@ SUBSYSTEM_DEF(persistence)
if(!json)
return
saved_storytellers = json["data"]
- average_dynamic_threat = saved_storytellers[4]
+ if(saved_storytellers.len > 3)
+ average_dynamic_threat = saved_storytellers[4]
saved_storytellers.len = 3
/datum/controller/subsystem/persistence/proc/LoadRecentMaps()
diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm
index 7d72951278..a202afd905 100644
--- a/code/controllers/subsystem/vote.dm
+++ b/code/controllers/subsystem/vote.dm
@@ -763,7 +763,7 @@ SUBSYSTEM_DEF(vote)
remove_from_client()
Remove(owner)
-/datum/action/vote/IsAvailable()
+/datum/action/vote/IsAvailable(silent = FALSE)
return 1
/datum/action/vote/proc/remove_from_client()
diff --git a/code/datums/action.dm b/code/datums/action.dm
index 6c08a33f33..4be3c9b1e7 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -95,7 +95,7 @@
/datum/action/proc/Process()
return
-/datum/action/proc/IsAvailable()
+/datum/action/proc/IsAvailable(silent = FALSE)
if(!owner)
return FALSE
var/mob/living/L = owner
@@ -134,7 +134,7 @@
ApplyIcon(button, force)
- if(!IsAvailable())
+ if(!IsAvailable(TRUE))
button.color = transparent_when_unavailable ? rgb(128,0,0,128) : rgb(128,0,0)
else
button.color = rgb(255,255,255,255)
@@ -308,7 +308,7 @@
icon_icon = 'icons/mob/actions/actions_items.dmi'
button_icon_state = "vortex_recall"
-/datum/action/item_action/vortex_recall/IsAvailable()
+/datum/action/item_action/vortex_recall/IsAvailable(silent = FALSE)
if(istype(target, /obj/item/hierophant_club))
var/obj/item/hierophant_club/H = target
if(H.teleporting)
@@ -320,7 +320,7 @@
background_icon_state = "bg_clock"
buttontooltipstyle = "clockcult"
-/datum/action/item_action/clock/IsAvailable()
+/datum/action/item_action/clock/IsAvailable(silent = FALSE)
if(!is_servant_of_ratvar(owner))
return 0
return ..()
@@ -329,7 +329,7 @@
name = "Create Judicial Marker"
desc = "Allows you to create a stunning Judicial Marker at any location in view. Click again to disable."
-/datum/action/item_action/clock/toggle_visor/IsAvailable()
+/datum/action/item_action/clock/toggle_visor/IsAvailable(silent = FALSE)
if(!is_servant_of_ratvar(owner))
return 0
if(istype(target, /obj/item/clothing/glasses/judicial_visor))
@@ -408,7 +408,7 @@
/datum/action/item_action/jetpack_stabilization
name = "Toggle Jetpack Stabilization"
-/datum/action/item_action/jetpack_stabilization/IsAvailable()
+/datum/action/item_action/jetpack_stabilization/IsAvailable(silent = FALSE)
var/obj/item/tank/jetpack/J = target
if(!istype(J) || !J.on)
return 0
@@ -465,7 +465,7 @@
/datum/action/item_action/organ_action
check_flags = AB_CHECK_CONSCIOUS
-/datum/action/item_action/organ_action/IsAvailable()
+/datum/action/item_action/organ_action/IsAvailable(silent = FALSE)
var/obj/item/organ/I = target
if(!I.owner)
return 0
@@ -634,32 +634,32 @@
return FALSE
if(target)
var/obj/effect/proc_holder/S = target
- S.Click()
+ S.Trigger(usr)
return TRUE
-/datum/action/spell_action/IsAvailable()
+/datum/action/spell_action/IsAvailable(silent = FALSE)
if(!target)
return FALSE
return TRUE
/datum/action/spell_action/spell
-/datum/action/spell_action/spell/IsAvailable()
+/datum/action/spell_action/spell/IsAvailable(silent = FALSE)
if(!target)
return FALSE
var/obj/effect/proc_holder/spell/S = target
if(owner)
- return S.can_cast(owner, FALSE, TRUE)
+ return S.can_cast(owner, FALSE, silent)
return FALSE
/datum/action/spell_action/alien
-/datum/action/spell_action/alien/IsAvailable()
+/datum/action/spell_action/alien/IsAvailable(silent = FALSE)
if(!target)
return FALSE
var/obj/effect/proc_holder/alien/ab = target
if(owner)
- return ab.cost_check(ab.check_turf,owner,1)
+ return ab.cost_check(ab.check_turf,owner,silent)
return FALSE
@@ -701,7 +701,7 @@
button.maptext_width = 24
button.maptext_height = 12
-/datum/action/cooldown/IsAvailable()
+/datum/action/cooldown/IsAvailable(silent = FALSE)
return next_use_time <= world.time
/datum/action/cooldown/proc/StartCooldown()
diff --git a/code/datums/dash_weapon.dm b/code/datums/dash_weapon.dm
index 8eda936bb7..c31139dcd7 100644
--- a/code/datums/dash_weapon.dm
+++ b/code/datums/dash_weapon.dm
@@ -19,7 +19,7 @@
dashing_item = dasher
holder = user
-/datum/action/innate/dash/IsAvailable()
+/datum/action/innate/dash/IsAvailable(silent = FALSE)
if(current_charges > 0)
return TRUE
else
diff --git a/code/datums/elements/mob_holder.dm b/code/datums/elements/mob_holder.dm
index 220aee4608..a5c6e2725d 100644
--- a/code/datums/elements/mob_holder.dm
+++ b/code/datums/elements/mob_holder.dm
@@ -71,7 +71,7 @@
name = "bugged mob"
desc = "Yell at coderbrush."
icon = null
- alternate_worn_icon = 'icons/mob/animals_held.dmi'
+ mob_overlay_icon = 'icons/mob/animals_held.dmi'
righthand_file = 'icons/mob/animals_held_rh.dmi'
lefthand_file = 'icons/mob/animals_held_lh.dmi'
icon_state = ""
@@ -86,7 +86,7 @@
assimilate(target)
if(alt_worn)
- alternate_worn_icon = alt_worn
+ mob_overlay_icon = alt_worn
if(worn_state)
item_state = worn_state
icon_state = worn_state
diff --git a/code/datums/elements/spellcasting.dm b/code/datums/elements/spellcasting.dm
index a917108bf1..69d628d9d2 100644
--- a/code/datums/elements/spellcasting.dm
+++ b/code/datums/elements/spellcasting.dm
@@ -12,7 +12,7 @@
RegisterSignal(target, COMSIG_ITEM_EQUIPPED, .proc/on_equip)
RegisterSignal(target, COMSIG_ITEM_DROPPED, .proc/on_drop)
else if(ismob(target))
- RegisterSignal(target, COMSIG_MOB_SPELL_CAST_CHECK, .proc/on_cast)
+ RegisterSignal(target, COMSIG_MOB_SPELL_CAN_CAST, .proc/on_cast)
stacked_spellcasting_by_user[target]++
else
return ELEMENT_INCOMPATIBLE
@@ -21,24 +21,24 @@
/datum/element/spellcasting/Detach(datum/target)
. = ..()
- UnregisterSignal(target, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, COMSIG_MOB_SPELL_CAST_CHECK))
+ UnregisterSignal(target, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, COMSIG_MOB_SPELL_CAN_CAST))
if(users_by_item[target])
var/mob/user = users_by_item[target]
stacked_spellcasting_by_user[user]--
if(!stacked_spellcasting_by_user[user])
stacked_spellcasting_by_user -= user
- UnregisterSignal(user, COMSIG_MOB_SPELL_CAST_CHECK)
+ UnregisterSignal(user, COMSIG_MOB_SPELL_CAN_CAST)
else if(ismob(target))
stacked_spellcasting_by_user[target]--
if(!stacked_spellcasting_by_user[target])
stacked_spellcasting_by_user -= target
/datum/element/spellcasting/proc/on_equip(datum/source, mob/equipper, slot)
- if(!(slot in cast_slots))
+ if(!(slot & cast_slots))
return
users_by_item[source] = equipper
if(!stacked_spellcasting_by_user[equipper])
- RegisterSignal(equipper, COMSIG_MOB_SPELL_CAST_CHECK, .proc/on_cast)
+ RegisterSignal(equipper, COMSIG_MOB_SPELL_CAN_CAST, .proc/on_cast)
stacked_spellcasting_by_user[equipper]++
/datum/element/spellcasting/proc/on_drop(datum/source, mob/user)
@@ -48,7 +48,7 @@
stacked_spellcasting_by_user[user]--
if(!stacked_spellcasting_by_user[user])
stacked_spellcasting_by_user -= user
- UnregisterSignal(user, COMSIG_MOB_SPELL_CAST_CHECK)
+ UnregisterSignal(user, COMSIG_MOB_SPELL_CAN_CAST)
/datum/element/spellcasting/proc/on_cast(mob/caster, obj/effect/proc_holder/spell)
return cast_flags
diff --git a/code/datums/mutations/combined.dm b/code/datums/mutations/combined.dm
index d3cc83f9c0..465706c897 100644
--- a/code/datums/mutations/combined.dm
+++ b/code/datums/mutations/combined.dm
@@ -26,3 +26,7 @@
/datum/generecipe/tonguechem
required = "/datum/mutation/human/tongue_spike; /datum/mutation/human/stimmed"
result = TONGUESPIKECHEM
+
+/datum/generecipe/hulk
+ required = "/datum/mutation/human/strong; /datum/mutation/human/radioactive"
+ result = HULK
diff --git a/code/game/area/areas/holodeck.dm b/code/game/area/areas/holodeck.dm
index d32091f98b..75ed2b656c 100644
--- a/code/game/area/areas/holodeck.dm
+++ b/code/game/area/areas/holodeck.dm
@@ -6,6 +6,8 @@
hidden = TRUE
var/obj/machinery/computer/holodeck/linked
+ var/list/compatible_holodeck_comps
+ var/abstract_type = /area/holodeck
var/restricted = 0 // if true, program goes on emag list
/*
@@ -53,6 +55,8 @@
*/
/area/holodeck/rec_center
name = "\improper Recreational Holodeck"
+ compatible_holodeck_comps = list(/obj/machinery/computer/holodeck)
+ abstract_type = /area/holodeck/rec_center
/area/holodeck/rec_center/offline
name = "Holodeck - Offline"
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index 4db8f4129a..8029685bf7 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -119,7 +119,6 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th
C.appearance = chosen_prof.appearance_list[slot]
C.name = chosen_prof.name_list[slot]
C.flags_cover = chosen_prof.flags_cover_list[slot]
- C.item_color = chosen_prof.item_color_list[slot]
C.item_state = chosen_prof.item_state_list[slot]
if(equip)
user.equip_to_slot_or_del(C, GLOB.slot2slot[slot])
diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm
index 15d7744205..7b798f19e4 100644
--- a/code/game/gamemodes/clock_cult/clock_cult.dm
+++ b/code/game/gamemodes/clock_cult/clock_cult.dm
@@ -45,8 +45,11 @@ Credit where due:
// PROCS //
///////////
-/proc/is_servant_of_ratvar(mob/M)
- return istype(M) && !isobserver(M) && M.mind && M.mind.has_antag_datum(/datum/antagonist/clockcult)
+/proc/is_servant_of_ratvar(mob/M, require_full_power = FALSE, holy_water_check = FALSE)
+ if(!istype(M) || isobserver(M))
+ return FALSE
+ var/datum/antagonist/clockcult/D = M?.mind?.has_antag_datum(/datum/antagonist/clockcult)
+ return D && (!require_full_power || !D.neutered) && (!holy_water_check || !D.ignore_holy_water)
/proc/is_eligible_servant(mob/M)
if(!istype(M))
@@ -70,12 +73,14 @@ Credit where due:
return TRUE
return FALSE
-/proc/add_servant_of_ratvar(mob/L, silent = FALSE, create_team = TRUE)
+/proc/add_servant_of_ratvar(mob/L, silent = FALSE, create_team = TRUE, override_type)
if(!L || !L.mind)
return
var/update_type = /datum/antagonist/clockcult
if(silent)
update_type = /datum/antagonist/clockcult/silent
+ if(override_type) //prioritizes
+ update_type = override_type
var/datum/antagonist/clockcult/C = new update_type(L.mind)
C.make_team = create_team
C.show_in_roundend = create_team //tutorial scarabs begone
@@ -105,9 +110,6 @@ Credit where due:
L.playsound_local(get_turf(L), 'sound/ambience/antag/clockcultalr.ogg', 40, TRUE, frequency = 100000, pressure_affected = FALSE)
flash_color(L, flash_color = list("#BE8700", "#BE8700", "#BE8700", rgb(0,0,0)), flash_time = 5)
-
-
-
/proc/remove_servant_of_ratvar(mob/L, silent = FALSE)
if(!L || !L.mind)
return
diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm
index 0a231a5ff1..4d3ea2d02e 100644
--- a/code/game/gamemodes/clown_ops/clown_weapons.dm
+++ b/code/game/gamemodes/clown_ops/clown_weapons.dm
@@ -63,7 +63,7 @@
attack_verb_on = list("slipped")
clumsy_check = FALSE
sharpness = IS_BLUNT
- item_color = "yellow"
+ sword_color = "yellow"
heat = 0
light_color = "#ffff00"
var/next_trombone_allowed = 0
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index 497cc2f1c3..8ec4123201 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -3,8 +3,11 @@
/datum/game_mode
var/list/datum/mind/cult = list()
-/proc/iscultist(mob/living/M)
- return istype(M) && M.mind && M.mind.has_antag_datum(/datum/antagonist/cult)
+/proc/iscultist(mob/living/M, require_full_power = FALSE, holy_water_check = FALSE)
+ if(!istype(M))
+ return FALSE
+ var/datum/antagonist/cult/D = M?.mind?.has_antag_datum(/datum/antagonist/cult)
+ return D && (!require_full_power || !D.neutered) && (!holy_water_check || !D.ignore_holy_water)
/datum/team/cult/proc/is_sacrifice_target(datum/mind/mind)
for(var/datum/objective/sacrifice/sac_objective in objectives)
@@ -93,7 +96,7 @@
add_cultist(cult_mind, 0, equip=TRUE)
if(!main_cult)
var/datum/antagonist/cult/C = cult_mind.has_antag_datum(/datum/antagonist/cult,TRUE)
- if(C && C.cult_team)
+ if(C?.cult_team)
main_cult = C.cult_team
..()
diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm
index b869235c69..d548f373db 100644
--- a/code/game/gamemodes/dynamic/dynamic.dm
+++ b/code/game/gamemodes/dynamic/dynamic.dm
@@ -205,7 +205,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
if(threatadd > 0)
create_threat(threatadd)
else
- spend_threat(-threatadd)
+ remove_threat(threatadd)
else if (href_list["injectlate"])
latejoin_injection_cooldown = 0
forced_injection = TRUE
@@ -247,6 +247,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
. += "Peaceful Waypoint
"
. += "Your station orbits deep within controlled, core-sector systems and serves as a waypoint for routine traffic through Nanotrasen's trade empire. Due to the combination of high security, interstellar traffic, and low strategic value, it makes any direct threat of violence unlikely. Your primary enemies will be incompetence and bored crewmen: try to organize team-building events to keep staffers interested and productive. However, even deep in our territory there may be subversive elements, especially for such a high-value target as your station. Keep an eye out, but don't expect much trouble."
set_security_level(SEC_LEVEL_GREEN)
+ station_goals.len = 0
for(var/T in subtypesof(/datum/station_goal))
var/datum/station_goal/G = new T
if(!(G in station_goals))
@@ -257,6 +258,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
. += "Core Territory
"
. += "Your station orbits within reliably mundane, secure space. Although Nanotrasen has a firm grip on security in your region, the valuable resources and strategic position aboard your station make it a potential target for infiltrations. Monitor crew for non-loyal behavior, but expect a relatively tame shift free of large-scale destruction. We expect great things from your station."
set_security_level(SEC_LEVEL_GREEN)
+ station_goals.len = 0
for(var/T in subtypesof(/datum/station_goal))
var/datum/station_goal/G = new T
if(!(G in station_goals))
@@ -496,7 +498,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
starting_rule = pickweight(drafted_rules)
// Check if the ruleset is highlander and if a highlander ruleset has been executed
else if(starting_rule.flags & HIGHLANDER_RULESET) // Should already be filtered out, but making sure. Check filtering at end of proc if reported.
- if(threat_level > GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking)
+ if(threat_level <= GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking)
if(highlander_executed)
drafted_rules -= starting_rule
if(drafted_rules.len <= 0)
@@ -723,7 +725,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic)
threat = storyteller.calculate_threat() + added_threat
if(threat_average_weight)
var/cur_sample_weight = world.time - last_threat_sample_time
- threat_average = ((threat_average * threat_average_weight) + threat) / (threat_average_weight + cur_sample_weight)
+ threat_average = ((threat_average * threat_average_weight) + (threat * cur_sample_weight)) / (threat_average_weight + cur_sample_weight)
threat_average_weight += cur_sample_weight
last_threat_sample_time = world.time
else
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
index cec6f31e99..da33da5f43 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
@@ -222,6 +222,26 @@
message_admins("[M.name] was made into a bloodsucker by dynamic.")
return TRUE
+//////////////////////////////////////////////
+// //
+// CHANGELINGS //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/latejoin/changeling
+ name = "Changeling Infiltrator"
+ config_tag = "latejoin_changeling"
+ antag_flag = ROLE_CHANGELING
+ antag_datum = /datum/antagonist/changeling
+ restricted_roles = list("AI", "Cyborg")
+ protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
+ required_candidates = 1
+ weight = 3
+ cost = 15
+ requirements = list(101,101,101,101,101,101,101,101,101,101)
+ property_weights = list("trust" = -2, "valid" = 2)
+ high_population_requirement = 101
+
//////////////////////////////////////////////
// //
// COLLECTOR //
diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm
index 0f5e51215d..d01f7e3e40 100644
--- a/code/game/machinery/launch_pad.dm
+++ b/code/game/machinery/launch_pad.dm
@@ -57,7 +57,7 @@
var/turf/target = locate(target_x, target_y, z)
ghost.forceMove(target)
-/obj/machinery/launchpad/proc/isAvailable()
+/obj/machinery/launchpad/proc/isAvailable(silent = FALSE)
if(stat & NOPOWER)
return FALSE
if(panel_open)
@@ -198,7 +198,7 @@
QDEL_NULL(briefcase)
return ..()
-/obj/machinery/launchpad/briefcase/isAvailable()
+/obj/machinery/launchpad/briefcase/isAvailable(silent = FALSE)
if(closed)
return FALSE
return ..()
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index ff5ba14810..26220d4d89 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -1,3 +1,111 @@
+//dye registry, add dye colors and their resulting output here if you want the sprite to change instead of just the color.
+GLOBAL_LIST_INIT(dye_registry, list(
+ DYE_REGISTRY_UNDER = list(
+ DYE_RED = /obj/item/clothing/under/color/red,
+ DYE_ORANGE = /obj/item/clothing/under/color/orange,
+ DYE_YELLOW = /obj/item/clothing/under/color/yellow,
+ DYE_GREEN = /obj/item/clothing/under/color/green,
+ DYE_BLUE = /obj/item/clothing/under/color/blue,
+ DYE_PURPLE = /obj/item/clothing/under/color/lightpurple,
+ DYE_BLACK = /obj/item/clothing/under/color/black,
+ DYE_WHITE = /obj/item/clothing/under/color/white,
+ DYE_RAINBOW = /obj/item/clothing/under/color/rainbow,
+ DYE_MIME = /obj/item/clothing/under/rank/civilian/mime,
+ DYE_CLOWN = /obj/item/clothing/under/rank/civilian/clown,
+ DYE_QM = /obj/item/clothing/under/rank/cargo/qm,
+ DYE_LAW = /obj/item/clothing/under/suit/black,
+ DYE_CAPTAIN = /obj/item/clothing/under/rank/captain,
+ DYE_HOP = /obj/item/clothing/under/rank/civilian/head_of_personnel,
+ DYE_HOS = /obj/item/clothing/under/rank/security/head_of_security,
+ DYE_CE = /obj/item/clothing/under/rank/engineering/chief_engineer,
+ DYE_RD = /obj/item/clothing/under/rank/rnd/research_director,
+ DYE_CMO = /obj/item/clothing/under/rank/medical/chief_medical_officer,
+ DYE_REDCOAT = /obj/item/clothing/under/costume/redcoat
+ ),
+ DYE_REGISTRY_JUMPSKIRT = list(
+ DYE_RED = /obj/item/clothing/under/color/jumpskirt/red,
+ DYE_ORANGE = /obj/item/clothing/under/color/jumpskirt/orange,
+ DYE_YELLOW = /obj/item/clothing/under/color/jumpskirt/yellow,
+ DYE_GREEN = /obj/item/clothing/under/color/jumpskirt/green,
+ DYE_BLUE = /obj/item/clothing/under/color/jumpskirt/blue,
+ DYE_PURPLE = /obj/item/clothing/under/color/jumpskirt/lightpurple,
+ DYE_BLACK = /obj/item/clothing/under/color/jumpskirt/black,
+ DYE_WHITE = /obj/item/clothing/under/color/jumpskirt/white,
+ DYE_RAINBOW = /obj/item/clothing/under/color/jumpskirt/rainbow
+ ),
+ DYE_REGISTRY_GLOVES = list(
+ DYE_RED = /obj/item/clothing/gloves/color/red,
+ DYE_ORANGE = /obj/item/clothing/gloves/color/orange,
+ DYE_YELLOW = /obj/item/clothing/gloves/color/yellow,
+ DYE_GREEN = /obj/item/clothing/gloves/color/green,
+ DYE_BLUE = /obj/item/clothing/gloves/color/blue,
+ DYE_PURPLE = /obj/item/clothing/gloves/color/purple,
+ DYE_BLACK = /obj/item/clothing/gloves/color/black,
+ DYE_WHITE = /obj/item/clothing/gloves/color/white,
+ DYE_RAINBOW = /obj/item/clothing/gloves/color/rainbow,
+ DYE_MIME = /obj/item/clothing/gloves/color/white,
+ DYE_CLOWN = /obj/item/clothing/gloves/color/rainbow,
+ DYE_QM = /obj/item/clothing/gloves/color/brown,
+ DYE_CAPTAIN = /obj/item/clothing/gloves/color/captain,
+ DYE_HOP = /obj/item/clothing/gloves/color/grey,
+ DYE_HOS = /obj/item/clothing/gloves/color/black,
+ DYE_CE = /obj/item/clothing/gloves/color/black,
+ DYE_RD = /obj/item/clothing/gloves/color/grey,
+ DYE_CMO = /obj/item/clothing/gloves/color/latex/nitrile,
+ DYE_REDCOAT = /obj/item/clothing/gloves/color/white
+ ),
+ DYE_REGISTRY_SNEAKERS = list(
+ DYE_RED = /obj/item/clothing/shoes/sneakers/red,
+ DYE_ORANGE = /obj/item/clothing/shoes/sneakers/orange,
+ DYE_YELLOW = /obj/item/clothing/shoes/sneakers/yellow,
+ DYE_GREEN = /obj/item/clothing/shoes/sneakers/green,
+ DYE_BLUE = /obj/item/clothing/shoes/sneakers/blue,
+ DYE_PURPLE = /obj/item/clothing/shoes/sneakers/purple,
+ DYE_BLACK = /obj/item/clothing/shoes/sneakers/black,
+ DYE_WHITE = /obj/item/clothing/shoes/sneakers/white,
+ DYE_RAINBOW = /obj/item/clothing/shoes/sneakers/rainbow,
+ DYE_MIME = /obj/item/clothing/shoes/sneakers/black,
+ DYE_QM = /obj/item/clothing/shoes/sneakers/brown,
+ DYE_CAPTAIN = /obj/item/clothing/shoes/sneakers/brown,
+ DYE_HOP = /obj/item/clothing/shoes/sneakers/brown,
+ DYE_CE = /obj/item/clothing/shoes/sneakers/brown,
+ DYE_RD = /obj/item/clothing/shoes/sneakers/brown,
+ DYE_CMO = /obj/item/clothing/shoes/sneakers/brown
+ ),
+ DYE_REGISTRY_FANNYPACK = list(
+ DYE_RED = /obj/item/storage/belt/fannypack/red,
+ DYE_ORANGE = /obj/item/storage/belt/fannypack/orange,
+ DYE_YELLOW = /obj/item/storage/belt/fannypack/yellow,
+ DYE_GREEN = /obj/item/storage/belt/fannypack/green,
+ DYE_BLUE = /obj/item/storage/belt/fannypack/blue,
+ DYE_PURPLE = /obj/item/storage/belt/fannypack/purple,
+ DYE_BLACK = /obj/item/storage/belt/fannypack/black,
+ DYE_WHITE = /obj/item/storage/belt/fannypack/white
+ ),
+ DYE_REGISTRY_BEDSHEET = list(
+ DYE_RED = /obj/item/bedsheet/red,
+ DYE_ORANGE = /obj/item/bedsheet/orange,
+ DYE_YELLOW = /obj/item/bedsheet/yellow,
+ DYE_GREEN = /obj/item/bedsheet/green,
+ DYE_BLUE = /obj/item/bedsheet/blue,
+ DYE_PURPLE = /obj/item/bedsheet/purple,
+ DYE_BLACK = /obj/item/bedsheet/black,
+ DYE_WHITE = /obj/item/bedsheet,
+ DYE_RAINBOW = /obj/item/bedsheet/rainbow,
+ DYE_MIME = /obj/item/bedsheet/mime,
+ DYE_CLOWN = /obj/item/bedsheet/clown,
+ DYE_QM = /obj/item/bedsheet/qm,
+ DYE_LAW = /obj/item/bedsheet/black,
+ DYE_CAPTAIN = /obj/item/bedsheet/captain,
+ DYE_HOP = /obj/item/bedsheet/hop,
+ DYE_HOS = /obj/item/bedsheet/hos,
+ DYE_CE = /obj/item/bedsheet/ce,
+ DYE_RD = /obj/item/bedsheet/rd,
+ DYE_CMO = /obj/item/bedsheet/cmo,
+ DYE_COSMIC = /obj/item/bedsheet/cosmos
+ )
+))
+
/obj/machinery/washing_machine
name = "washing machine"
desc = "Gets rid of those pesky bloodstains, or your money back!"
@@ -13,27 +121,22 @@
/obj/machinery/washing_machine/examine(mob/user)
. = ..()
- . += "Alt-click it to start a wash cycle."
+ if(!busy)
+ . += "Alt-click it to start a wash cycle."
/obj/machinery/washing_machine/AltClick(mob/user)
. = ..()
if(!user.canUseTopic(src))
return
-
if(busy)
return
-
if(state_open)
to_chat(user, "Close the door first")
return TRUE
-
if(bloody_mess)
to_chat(user, "[src] must be cleaned up first.")
return TRUE
- if(has_corgi)
- bloody_mess = 1
-
busy = TRUE
update_icon()
addtimer(CALLBACK(src, .proc/wash_cycle), 200)
@@ -76,6 +179,28 @@
color_source = null
update_icon()
+/obj/item/proc/dye_item(dye_color)
+ if(undyeable)
+ return FALSE
+ if(dying_key)
+ if(!GLOB.dye_registry[dying_key])
+ log_runtime("Item just tried to be dyed with an invalid registry key: [dying_key]")
+ return FALSE
+ var/obj/item/target_type = GLOB.dye_registry[dying_key][dye_color]
+ if(target_type)
+ icon = initial(target_type.icon)
+ icon_state = initial(target_type.icon_state)
+ lefthand_file = initial(target_type.lefthand_file)
+ righthand_file = initial(target_type.righthand_file)
+ item_state = initial(target_type.item_state)
+ mob_overlay_icon = initial(target_type.mob_overlay_icon)
+ inhand_x_dimension = initial(target_type.inhand_x_dimension)
+ inhand_y_dimension = initial(target_type.inhand_y_dimension)
+ name = initial(target_type.name)
+ desc = "[initial(target_type.desc)] The colors look a little dodgy."
+ return target_type //successfully "appearance copy" dyed something; returns the target type as a hacky way of extending
+ add_atom_colour(dye_color, FIXED_COLOUR_PRIORITY)
+ return FALSE
//what happens to this object when washed inside a washing machine
/atom/movable/proc/machine_wash(obj/machinery/washing_machine/WM)
@@ -89,105 +214,27 @@
new /obj/item/reagent_containers/food/snacks/meat/slab/corgi(loc)
qdel(src)
-/obj/item/paper/machine_wash(obj/machinery/washing_machine/WM)
- if(WM.color_source)
- if(istype(WM.color_source, /obj/item/toy/crayon))
- var/obj/item/toy/crayon/CR = WM.color_source
- add_atom_colour(CR.paint_color, WASHABLE_COLOUR_PRIORITY)
-
-/obj/item/reagents_containers/rag/towel/machine_wash(obj/machinery/washing_machine/WM)
- if(WM.color_source)
- if(istype(WM.color_source, /obj/item/toy/crayon))
- var/obj/item/toy/crayon/CR = WM.color_source
- add_atom_colour(CR.paint_color, WASHABLE_COLOUR_PRIORITY)
-
/mob/living/simple_animal/pet/dog/corgi/machine_wash(obj/machinery/washing_machine/WM)
gib()
-/obj/item/clothing/under/color/machine_wash(obj/machinery/washing_machine/WM)
- jumpsuit_wash(WM)
-
-/obj/item/clothing/under/rank/machine_wash(obj/machinery/washing_machine/WM)
- jumpsuit_wash(WM)
-
-/obj/item/clothing/under/proc/jumpsuit_wash(obj/machinery/washing_machine/WM)
+/obj/item/machine_wash(obj/machinery/washing_machine/WM)
if(WM.color_source)
- var/wash_color = WM.color_source.item_color
- var/obj/item/clothing/under/U
- for(var/T in typesof(/obj/item/clothing/under/color))
- var/obj/item/clothing/under/color/J = T
- if(wash_color == initial(J.item_color))
- U = J
- break
- if(!U)
- for(var/T in typesof(/obj/item/clothing/under/rank))
- var/obj/item/clothing/under/rank/R = T
- if(wash_color == initial(R.item_color))
- U = R
- break
- if(U)
- item_state = initial(U.item_state)
- icon_state = initial(U.icon_state)
- item_color = wash_color
- name = initial(U.name)
- desc = "The colors are a bit dodgy."
- can_adjust = initial(U.can_adjust)
- if(!can_adjust && adjusted) //we deadjust the uniform if it's now unadjustable
- toggle_jumpsuit_adjust()
+ dye_item(WM.color_source.dye_color)
-/obj/item/clothing/gloves/color/machine_wash(obj/machinery/washing_machine/WM)
- if(WM.color_source)
- var/wash_color = WM.color_source.item_color
- for(var/T in typesof(/obj/item/clothing/gloves/color))
- var/obj/item/clothing/gloves/color/G = T
- if(wash_color == initial(G.item_color))
- item_state = initial(G.item_state)
- icon_state = initial(G.icon_state)
- item_color = wash_color
- name = initial(G.name)
- desc = "The colors are a bit dodgy."
- break
+/obj/item/clothing/under/dye_item(dye_color, dye_key)
+ . = ..()
+ if(.)
+ var/obj/item/clothing/under/U = .
+ can_adjust = initial(U.can_adjust)
+ if(!can_adjust && adjusted) //we deadjust the uniform if it's now unadjustable
+ toggle_jumpsuit_adjust()
/obj/item/clothing/shoes/sneakers/machine_wash(obj/machinery/washing_machine/WM)
if(chained)
chained = 0
slowdown = SHOES_SLOWDOWN
new /obj/item/restraints/handcuffs(loc)
- if(WM.color_source)
- var/wash_color = WM.color_source.item_color
- for(var/T in typesof(/obj/item/clothing/shoes/sneakers))
- var/obj/item/clothing/shoes/sneakers/S = T
- if(wash_color == initial(S.item_color))
- icon_state = initial(S.icon_state)
- item_color = wash_color
- name = initial(S.name)
- desc = "The colors are a bit dodgy."
- break
-
-/obj/item/bedsheet/machine_wash(obj/machinery/washing_machine/WM)
- if(WM.color_source)
- var/wash_color = WM.color_source.item_color
- for(var/T in typesof(/obj/item/bedsheet))
- var/obj/item/bedsheet/B = T
- if(wash_color == initial(B.item_color))
- icon_state = initial(B.icon_state)
- item_color = wash_color
- name = initial(B.name)
- desc = "The colors are a bit dodgy."
- break
-
-/obj/item/clothing/head/soft/machine_wash(obj/machinery/washing_machine/WM)
- if(WM.color_source)
- var/wash_color = WM.color_source.item_color
- for(var/T in typesof(/obj/item/clothing/head/soft))
- var/obj/item/clothing/head/soft/H = T
- if(wash_color == initial(H.item_color))
- icon_state = initial(H.icon_state)
- item_color = wash_color
- name = initial(H.name)
- desc = "The colors are a bit dodgy."
- break
-
+ ..()
/obj/machinery/washing_machine/relaymove(mob/user)
container_resist(user)
@@ -223,27 +270,27 @@
if(istype(W, /obj/item/clothing/head/mob_holder))
to_chat(user, "It's too unwieldly to put in this way.")
- return 1
+ return TRUE
else if(user.a_intent != INTENT_HARM)
if (!state_open)
to_chat(user, "Open the door first!")
- return 1
+ return TRUE
if(bloody_mess)
to_chat(user, "[src] must be cleaned up first.")
- return 1
+ return TRUE
if(contents.len >= max_wash_capacity)
to_chat(user, "The washing machine is full!")
- return 1
+ return TRUE
if(!user.transferItemToLoc(W, src))
to_chat(user, "\The [W] is stuck to your hand, you cannot put it in the washing machine!")
- return 1
+ return TRUE
- if(istype(W, /obj/item/toy/crayon) || istype(W, /obj/item/stamp))
+ if(W.dye_color)
color_source = W
update_icon()
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 8b4567a754..aad6f45198 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -8,9 +8,20 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
name = "item"
icon = 'icons/obj/items_and_weapons.dmi'
blocks_emissive = EMISSIVE_BLOCK_GENERIC
+
+ ///icon state name for inhand overlays
var/item_state = null
+ ///Icon file for left hand inhand overlays
var/lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
+ ///Icon file for right inhand overlays
var/righthand_file = 'icons/mob/inhands/items_righthand.dmi'
+
+ ///Icon file for mob worn overlays.
+ ///no var for state because it should *always* be the same as icon_state
+ var/icon/mob_overlay_icon
+ //Forced mob worn layer instead of the standard preferred ssize.
+ var/alternate_worn_layer
+
var/list/alternate_screams = list() //REEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
//Dimensions of the icon file used when this item is worn, eg: hats.dmi
@@ -22,10 +33,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
var/inhand_x_dimension = 32
var/inhand_y_dimension = 32
- //Not on /clothing because for some reason any /obj/item can technically be "worn" with enough fuckery.
- var/icon/alternate_worn_icon = null//If this is set, update_icons() will find on mob (WORN, NOT INHANDS) states in this file instead, primary use: badminnery/events
- var/alternate_worn_layer = null//If this is set, update_icons() will force the on mob state (WORN, NOT INHANDS) onto this layer, instead of it's default
-
max_integrity = 200
obj_flags = NONE
@@ -61,8 +68,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
//Citadel Edit for digitigrade stuff
var/mutantrace_variation = NONE //Are there special sprites for specific situations? Don't use this unless you need to.
- var/item_color = null //this needs deprecating, soonish
-
var/body_parts_covered = 0 //see setup.dm for appropriate bit flags
var/gas_transfer_coefficient = 1 // for leaking gas from turf to mask and vice-versa (for masks right now, but at some point, i'd like to include space helmets)
var/permeability_coefficient = 1 // for chemicals/diseases
@@ -109,6 +114,13 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
var/trigger_guard = TRIGGER_GUARD_NONE
+ ///Used as the dye color source in the washing machine only (at the moment). Can be a hex color or a key corresponding to a registry entry, see washing_machine.dm
+ var/dye_color
+ ///Whether the item is unaffected by standard dying.
+ var/undyeable = FALSE
+ ///What dye registry should be looked at when dying this item; see washing_machine.dm
+ var/dying_key
+
//Grinder vars
var/list/grind_results //A reagent list containing the reagents this item produces when ground up in a grinder - this can be an empty list to allow for reagent transferring only
var/list/juice_results //A reagent list containing blah blah... but when JUICED in a grinder!
diff --git a/code/game/objects/items/RCL.dm b/code/game/objects/items/RCL.dm
index 7b4a44d72f..fccf790a23 100644
--- a/code/game/objects/items/RCL.dm
+++ b/code/game/objects/items/RCL.dm
@@ -201,7 +201,7 @@ obj/item/twohanded/rcl/proc/getMobhook(mob/to_hook)
return //If we've run out, display message and exit
else
last = null
- loaded.item_color = colors[current_color_index]
+ loaded.color = colors[current_color_index]
last = loaded.place_turf(get_turf(src), user, turn(user.dir, 180))
is_empty(user) //If we've run out, display message
update_icon()
@@ -276,7 +276,7 @@ obj/item/twohanded/rcl/proc/getMobhook(mob/to_hook)
if(T.intact || !T.can_have_cabling())
return
- loaded.item_color = colors[current_color_index]
+ loaded.color = colors[current_color_index]
var/obj/structure/cable/linkingCable = findLinkingCable(user)
if(linkingCable)
@@ -298,7 +298,7 @@ obj/item/twohanded/rcl/proc/getMobhook(mob/to_hook)
var/cwname = colors[current_color_index]
to_chat(user, "Color changed to [cwname]!")
if(loaded)
- loaded.item_color= colors[current_color_index]
+ loaded.color = colors[current_color_index]
update_icon()
if(wiring_gui_menu)
wiringGuiUpdate(user)
diff --git a/code/game/objects/items/balls.dm b/code/game/objects/items/balls.dm
index c24f58208b..2e5a385ead 100644
--- a/code/game/objects/items/balls.dm
+++ b/code/game/objects/items/balls.dm
@@ -15,7 +15,7 @@
lefthand_file = 'modular_citadel/icons/mob/inhands/balls_left.dmi'
righthand_file = 'modular_citadel/icons/mob/inhands/balls_right.dmi'
item_state = "tennis_classic"
- alternate_worn_icon = 'modular_citadel/icons/mob/mouthball.dmi'
+ mob_overlay_icon = 'modular_citadel/icons/mob/mouthball.dmi'
slot_flags = ITEM_SLOT_HEAD | ITEM_SLOT_NECK | ITEM_SLOT_EARS //Fluff item, put it wherever you want!
throw_range = 14
w_class = WEIGHT_CLASS_SMALL
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index f5b13d4e3e..09c045497c 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -26,7 +26,7 @@
var/icon_uncapped
var/use_overlays = FALSE
- item_color = "red"
+ var/crayon_color = "red"
w_class = WEIGHT_CLASS_TINY
attack_verb = list("attacked", "coloured")
grind_results = list()
@@ -83,7 +83,9 @@
. = ..()
// Makes crayons identifiable in things like grinders
if(name == "crayon")
- name = "[item_color] crayon"
+ name = "[crayon_color] crayon"
+
+ dye_color = crayon_color
drawtype = pick(all_drawables)
@@ -484,65 +486,75 @@
/obj/item/toy/crayon/red
icon_state = "crayonred"
paint_color = "#DA0000"
- item_color = "red"
+ crayon_color = "red"
reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/red = 1)
+ dye_color = DYE_RED
/obj/item/toy/crayon/orange
icon_state = "crayonorange"
paint_color = "#FF9300"
- item_color = "orange"
+ crayon_color = "orange"
reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/orange = 1)
+ dye_color = DYE_ORANGE
/obj/item/toy/crayon/yellow
icon_state = "crayonyellow"
paint_color = "#FFF200"
- item_color = "yellow"
+ crayon_color = "yellow"
reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/yellow = 1)
+ dye_color = DYE_YELLOW
/obj/item/toy/crayon/green
icon_state = "crayongreen"
paint_color = "#A8E61D"
- item_color = "green"
+ crayon_color = "green"
reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/green = 1)
+ dye_color = DYE_GREEN
/obj/item/toy/crayon/blue
icon_state = "crayonblue"
paint_color = "#00B7EF"
- item_color = "blue"
+ crayon_color = "blue"
reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/blue = 1)
+ dye_color = DYE_BLUE
/obj/item/toy/crayon/purple
icon_state = "crayonpurple"
paint_color = "#DA00FF"
- item_color = "purple"
+ crayon_color = "purple"
reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/purple = 1)
+ dye_color = DYE_PURPLE
/obj/item/toy/crayon/black
icon_state = "crayonblack"
paint_color = "#1C1C1C" //Not completely black because total black looks bad. So Mostly Black.
- item_color = "black"
+ crayon_color = "black"
reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/black = 1)
+ dye_color = DYE_BLACK
/obj/item/toy/crayon/white
icon_state = "crayonwhite"
paint_color = "#FFFFFF"
- item_color = "white"
+ crayon_color = "white"
reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/white = 1)
+ dye_color = DYE_WHITE
/obj/item/toy/crayon/mime
icon_state = "crayonmime"
desc = "A very sad-looking crayon."
paint_color = "#FFFFFF"
- item_color = "mime"
+ crayon_color = "mime"
reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/invisible = 1)
charges = -1
+ dye_color = DYE_MIME
/obj/item/toy/crayon/rainbow
icon_state = "crayonrainbow"
paint_color = "#FFF000"
- item_color = "rainbow"
+ crayon_color = "rainbow"
reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent = 1)
drawtype = RANDOM_ANY // just the default starter.
+ dye_color = DYE_RAINBOW
charges = -1
@@ -580,12 +592,12 @@
/obj/item/storage/crayons/update_overlays()
. = ..()
for(var/obj/item/toy/crayon/crayon in contents)
- add_overlay(mutable_appearance('icons/obj/crayons.dmi', crayon.item_color))
+ add_overlay(mutable_appearance('icons/obj/crayons.dmi', crayon.crayon_color))
/obj/item/storage/crayons/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/toy/crayon))
var/obj/item/toy/crayon/C = W
- switch(C.item_color)
+ switch(C.crayon_color)
if("mime")
to_chat(usr, "This crayon is too sad to be contained in this box.")
return
diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm
index 914f2a149a..1eee083c80 100644
--- a/code/game/objects/items/devices/radio/electropack.dm
+++ b/code/game/objects/items/devices/radio/electropack.dm
@@ -149,7 +149,7 @@ Code:
name = "shock collar"
desc = "A reinforced metal collar. It seems to have some form of wiring near the front. Strange.."
icon = 'modular_citadel/icons/obj/clothing/cit_neck.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/neck.dmi'
+ mob_overlay_icon = 'modular_citadel/icons/mob/citadel/neck.dmi'
icon_state = "shockcollar"
item_state = "shockcollar"
body_parts_covered = NECK
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 634ca4d637..b6cab8b438 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -275,10 +275,8 @@ SLIME SCANNER
//LIVER
else if(istype(O, /obj/item/organ/liver))
var/obj/item/organ/liver/L = O
- if(H.undergoing_liver_failure() && H.stat != DEAD) //might be depreciated
+ if(L.organ_flags & ORGAN_FAILING && H.stat != DEAD) //might be depreciated
temp_message += "Subject is suffering from liver failure: Apply Corazone and begin a liver transplant immediately!"
- if(L.swelling > 20)
- temp_message += " Subject is suffering from an enlarged liver." //i.e. shrink their liver or give them a transplant.
//HEART
else if(ishuman(M) && (istype(O, /obj/item/organ/heart)))
diff --git a/code/game/objects/items/documents.dm b/code/game/objects/items/documents.dm
index ea24e77832..1172b50377 100644
--- a/code/game/objects/items/documents.dm
+++ b/code/game/objects/items/documents.dm
@@ -51,8 +51,8 @@
to_chat(user, "You have already forged a seal on [src]!")
else
var/obj/item/toy/crayon/C = O
- name = "[C.item_color] secret documents"
- icon_state = "docs_[C.item_color]"
- forgedseal = C.item_color
- to_chat(user, "You forge the official seal with a [C.item_color] crayon. No one will notice... right?")
- update_icon()
\ No newline at end of file
+ name = "[C.crayon_color] secret documents"
+ icon_state = "docs_[C.crayon_color]"
+ forgedseal = C.crayon_color
+ to_chat(user, "You forge the official seal with a [C.crayon_color] crayon. No one will notice... right?")
+ update_icon()
diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm
index a12847ccf7..22c9bdc451 100644
--- a/code/game/objects/items/handcuffs.dm
+++ b/code/game/objects/items/handcuffs.dm
@@ -113,7 +113,7 @@
desc = "Looks like some cables tied together. Could be used to tie something up."
icon_state = "cuff"
item_state = "coil"
- color = "red"
+ color = "#ff0000"
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
custom_materials = list(/datum/material/iron=150, /datum/material/glass=75)
@@ -132,35 +132,28 @@
to_chat(user, "You unwind the cable restraints back into coil")
/obj/item/restraints/handcuffs/cable/red
- item_color = "red"
color = "#ff0000"
/obj/item/restraints/handcuffs/cable/yellow
- item_color = "yellow"
color = "#ffff00"
/obj/item/restraints/handcuffs/cable/blue
- item_color = "blue"
color = "#1919c8"
/obj/item/restraints/handcuffs/cable/green
- item_color = "green"
color = "#00aa00"
/obj/item/restraints/handcuffs/cable/pink
- item_color = "pink"
color = "#ff3ccd"
/obj/item/restraints/handcuffs/cable/orange
- item_color = "orange"
color = "#ff8000"
/obj/item/restraints/handcuffs/cable/cyan
- item_color = "cyan"
color = "#00ffff"
/obj/item/restraints/handcuffs/cable/white
- item_color = "white"
+ color = null
/obj/item/restraints/handcuffs/cable/random
@@ -209,7 +202,7 @@
custom_materials = null
breakouttime = 450 //Deciseconds = 45s
trashtype = /obj/item/restraints/handcuffs/cable/zipties/used
- item_color = "white"
+ color = null
/obj/item/restraints/handcuffs/cable/zipties/used
desc = "A pair of broken zipties."
diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm
index 84a9193eaf..e2ace42be7 100644
--- a/code/game/objects/items/holy_weapons.dm
+++ b/code/game/objects/items/holy_weapons.dm
@@ -122,7 +122,7 @@
/obj/item/clothing/head/helmet/chaplain/cage
name = "cage"
desc = "A cage that restrains the will of the self, allowing one to see the profane world for what it is."
- alternate_worn_icon = 'icons/mob/large-worn-icons/64x64/head.dmi'
+ mob_overlay_icon = 'icons/mob/large-worn-icons/64x64/head.dmi'
icon_state = "cage"
item_state = "cage"
worn_x_dimension = 64
diff --git a/code/game/objects/items/implants/implant.dm b/code/game/objects/items/implants/implant.dm
index c1983b6b8c..cc2ae3631e 100644
--- a/code/game/objects/items/implants/implant.dm
+++ b/code/game/objects/items/implants/implant.dm
@@ -5,7 +5,7 @@
actions_types = list(/datum/action/item_action/hands_free/activate)
var/activated = TRUE //1 for implant types that can be activated, 0 for ones that are "always on" like mindshield implants
var/mob/living/imp_in = null
- item_color = "b"
+ var/implant_color = "b"
var/allow_multiple = FALSE
var/uses = -1
item_flags = DROPDEL
diff --git a/code/game/objects/items/implants/implant_freedom.dm b/code/game/objects/items/implants/implant_freedom.dm
index f3e66d2c08..280fbb7cd3 100644
--- a/code/game/objects/items/implants/implant_freedom.dm
+++ b/code/game/objects/items/implants/implant_freedom.dm
@@ -2,7 +2,7 @@
name = "freedom implant"
desc = "Use this to escape from those evil Red Shirts."
icon_state = "freedom"
- item_color = "r"
+ implant_color = "r"
uses = 4
diff --git a/code/game/objects/items/implants/implant_storage.dm b/code/game/objects/items/implants/implant_storage.dm
index 1dfc0b4580..4dc0263fa7 100644
--- a/code/game/objects/items/implants/implant_storage.dm
+++ b/code/game/objects/items/implants/implant_storage.dm
@@ -2,7 +2,7 @@
name = "storage implant"
desc = "Stores up to two big items in a bluespace pocket."
icon_state = "storage"
- item_color = "r"
+ implant_color = "r"
var/max_slot_stacking = 4
var/obj/item/storage/bluespace_pocket/pocket
diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm
index 481f1a4181..8573324b56 100644
--- a/code/game/objects/items/implants/implantcase.dm
+++ b/code/game/objects/items/implants/implantcase.dm
@@ -15,7 +15,7 @@
/obj/item/implantcase/update_icon_state()
if(imp)
- icon_state = "implantcase-[imp.item_color]"
+ icon_state = "implantcase-[imp.implant_color]"
else
icon_state = "implantcase-0"
diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm
index 766da28d51..16d8ec0f4e 100644
--- a/code/game/objects/items/melee/energy.dm
+++ b/code/game/objects/items/melee/energy.dm
@@ -5,12 +5,15 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
resistance_flags = FIRE_PROOF
var/brightness_on = 3
+ var/sword_color
total_mass = 0.4 //Survival flashlights typically weigh around 5 ounces.
/obj/item/melee/transforming/energy/Initialize()
. = ..()
total_mass_on = (total_mass_on ? total_mass_on : (w_class_on * 0.75))
if(active)
+ if(sword_color)
+ icon_state = "sword[sword_color]"
set_light(brightness_on)
START_PROCESSING(SSobj, src)
@@ -37,8 +40,8 @@
. = ..()
if(.)
if(active)
- if(item_color)
- icon_state = "sword[item_color]"
+ if(sword_color)
+ icon_state = "sword[sword_color]"
START_PROCESSING(SSobj, src)
set_light(brightness_on)
else
@@ -103,12 +106,19 @@
embedding = list("embed_chance" = 75, "embedded_impact_pain_multiplier" = 10)
armour_penetration = 35
block_chance = 50
+ var/list/possible_colors = list("red" = LIGHT_COLOR_RED, "blue" = LIGHT_COLOR_LIGHT_CYAN, "green" = LIGHT_COLOR_GREEN, "purple" = LIGHT_COLOR_LAVENDER)
+
+/obj/item/melee/transforming/energy/sword/Initialize(mapload)
+ . = ..()
+ set_sword_color()
+
+/obj/item/melee/transforming/energy/sword/proc/set_sword_color()
+ if(LAZYLEN(possible_colors))
+ light_color = possible_colors[pick(possible_colors)]
/obj/item/melee/transforming/energy/sword/transform_weapon(mob/living/user, supress_message_text)
. = ..()
if(active)
- if(. && item_color)
- icon_state = "sword[item_color]"
AddElement(/datum/element/sword_point)
else
RemoveElement(/datum/element/sword_point)
@@ -119,7 +129,9 @@
return ..()
/obj/item/melee/transforming/energy/sword/cyborg
- item_color = "red"
+ sword_color = "red"
+ light_color = "#ff0000"
+ possible_colors = null
var/hitcost = 50
/obj/item/melee/transforming/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R)
@@ -140,7 +152,7 @@
icon = 'icons/obj/surgery.dmi'
icon_state = "esaw_0"
icon_state_on = "esaw_1"
- item_color = null //stops icon from breaking when turned on.
+ sword_color = null //stops icon from breaking when turned on.
hitcost = 75 //Costs more than a standard cyborg esword
w_class = WEIGHT_CLASS_NORMAL
sharpness = IS_SHARP
@@ -152,15 +164,13 @@
return NONE
/obj/item/melee/transforming/energy/sword/saber
- var/list/possible_colors = list("red" = LIGHT_COLOR_RED, "blue" = LIGHT_COLOR_LIGHT_CYAN, "green" = LIGHT_COLOR_GREEN, "purple" = LIGHT_COLOR_LAVENDER)
+ possible_colors = list("red" = LIGHT_COLOR_RED, "blue" = LIGHT_COLOR_LIGHT_CYAN, "green" = LIGHT_COLOR_GREEN, "purple" = LIGHT_COLOR_LAVENDER)
var/hacked = FALSE
-/obj/item/melee/transforming/energy/sword/saber/Initialize(mapload)
- . = ..()
+/obj/item/melee/transforming/energy/sword/saber/set_sword_color()
if(LAZYLEN(possible_colors))
- var/set_color = pick(possible_colors)
- item_color = set_color
- light_color = possible_colors[set_color]
+ sword_color = pick(possible_colors)
+ light_color = possible_colors[sword_color]
/obj/item/melee/transforming/energy/sword/saber/process()
. = ..()
@@ -185,7 +195,7 @@
if(istype(W, /obj/item/multitool))
if(!hacked)
hacked = TRUE
- item_color = "rainbow"
+ sword_color = "rainbow"
to_chat(user, "RNBW_ENGAGE")
if(active)
@@ -204,6 +214,7 @@
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
icon_state_on = "cutlass1"
light_color = "#ff0000"
+ possible_colors = null
/obj/item/melee/transforming/energy/blade
name = "energy blade"
@@ -271,32 +282,8 @@
return TRUE
/obj/item/melee/transforming/energy/sword/cx/transform_weapon(mob/living/user, supress_message_text)
- active = !active //I'd use a ..() here but it'd inherit from the regular esword's proc instead, so SPAGHETTI CODE
- if(active) //also I'd need to rip out the iconstate changing bits
- force = force_on
- throwforce = throwforce_on
- hitsound = hitsound_on
- throw_speed = 4
- if(attack_verb_on.len)
- attack_verb = attack_verb_on
- w_class = w_class_on
- START_PROCESSING(SSobj, src)
- set_light(brightness_on)
- update_icon()
- else
- force = initial(force)
- throwforce = initial(throwforce)
- hitsound = initial(hitsound)
- throw_speed = initial(throw_speed)
- if(attack_verb_off.len)
- attack_verb = attack_verb_off
- w_class = initial(w_class)
- STOP_PROCESSING(SSobj, src)
- set_light(0)
- update_icon()
- transform_messages(user, supress_message_text)
- add_fingerprint(user)
- return TRUE
+ . = ..()
+ update_icon()
/obj/item/melee/transforming/energy/sword/cx/transform_messages(mob/living/user, supress_message_text)
playsound(user, active ? 'sound/weapons/nebon.ogg' : 'sound/weapons/neboff.ogg', 65, 1)
diff --git a/code/game/objects/items/paint.dm b/code/game/objects/items/paint.dm
index cc2f5e9be7..bdf9ab4270 100644
--- a/code/game/objects/items/paint.dm
+++ b/code/game/objects/items/paint.dm
@@ -7,7 +7,7 @@
desc = "Used to recolor floors and walls. Can be removed by the janitor."
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "paint_neutral"
- item_color = "FFFFFF"
+ var/paint_color = "FFFFFF"
item_state = "paintcan"
w_class = WEIGHT_CLASS_NORMAL
resistance_flags = FLAMMABLE
@@ -16,37 +16,37 @@
/obj/item/paint/red
name = "red paint"
- item_color = "C73232" //"FF0000"
+ paint_color = "C73232" //"FF0000"
icon_state = "paint_red"
/obj/item/paint/green
name = "green paint"
- item_color = "2A9C3B" //"00FF00"
+ paint_color = "2A9C3B" //"00FF00"
icon_state = "paint_green"
/obj/item/paint/blue
name = "blue paint"
- item_color = "5998FF" //"0000FF"
+ paint_color = "5998FF" //"0000FF"
icon_state = "paint_blue"
/obj/item/paint/yellow
name = "yellow paint"
- item_color = "CFB52B" //"FFFF00"
+ paint_color = "CFB52B" //"FFFF00"
icon_state = "paint_yellow"
/obj/item/paint/violet
name = "violet paint"
- item_color = "AE4CCD" //"FF00FF"
+ paint_color = "AE4CCD" //"FF00FF"
icon_state = "paint_violet"
/obj/item/paint/black
name = "black paint"
- item_color = "333333"
+ paint_color = "333333"
icon_state = "paint_black"
/obj/item/paint/white
name = "white paint"
- item_color = "FFFFFF"
+ paint_color = "FFFFFF"
icon_state = "paint_white"
@@ -61,31 +61,31 @@
return
switch(t1)
if("red")
- item_color = "C73232"
+ paint_color = "C73232"
if("pink")
- item_color = "FFC0CD"
+ paint_color = "FFC0CD"
if("blue")
- item_color = "5998FF"
+ paint_color = "5998FF"
if("cyan")
- item_color = "00FFFF"
+ paint_color = "00FFFF"
if("green")
- item_color = "2A9C3B"
+ paint_color = "2A9C3B"
if("lime")
- item_color = "00FF00"
+ paint_color = "00FF00"
if("yellow")
- item_color = "CFB52B"
+ paint_color = "CFB52B"
if("orange")
- item_color = "fFA700"
+ paint_color = "fFA700"
if("violet")
- item_color = "AE4CCD"
+ paint_color = "AE4CCD"
if("purple")
- item_color = "800080"
+ paint_color = "800080"
if("white")
- item_color = "FFFFFF"
+ paint_color = "FFFFFF"
if("gray")
- item_color = "808080"
+ paint_color = "808080"
if("black")
- item_color = "333333"
+ paint_color = "333333"
icon_state = "paint_[t1]"
add_fingerprint(user)
@@ -99,7 +99,7 @@
return
if(!isturf(target) || isspaceturf(target))
return
- var/newcolor = "#" + item_color
+ var/newcolor = "#" + paint_color
target.add_atom_colour(newcolor, WASHABLE_COLOUR_PRIORITY)
/obj/item/paint/paint_remover
diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm
index b89a2983f5..136d58ba41 100644
--- a/code/game/objects/items/religion.dm
+++ b/code/game/objects/items/religion.dm
@@ -214,7 +214,7 @@
/obj/item/clothing/head/helmet/plate/crusader/prophet
name = "Prophet's Hat"
desc = "A religious-looking hat."
- alternate_worn_icon = 'icons/mob/large-worn-icons/64x64/head.dmi'
+ mob_overlay_icon = 'icons/mob/large-worn-icons/64x64/head.dmi'
flags_1 = 0
armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 50, "bomb" = 70, "bio" = 50, "rad" = 50, "fire" = 60, "acid" = 60) //religion protects you from disease and radiation, honk.
worn_x_dimension = 64
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index b137c5c0f3..08ce73109c 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -663,21 +663,19 @@
var/maxReduction = 1
-/obj/effect/proc_holder/silicon/cyborg/vtecControl/Click(mob/living/silicon/robot/user)
- var/mob/living/silicon/robot/self = usr
-
+/obj/effect/proc_holder/silicon/cyborg/vtecControl/Trigger(mob/living/silicon/robot/user)
currentState = (currentState + 1) % 3
- if(istype(self))
+ if(istype(user))
switch(currentState)
if (0)
- self.speed = initial(self.speed)
+ user.speed = initial(user.speed)
if (1)
- self.speed = initial(self.speed) - maxReduction * 0.5
+ user.speed = initial(user.speed) - maxReduction * 0.5
if (2)
- self.speed = initial(self.speed) - maxReduction * 1
+ user.speed = initial(user.speed) - maxReduction * 1
action.button_icon_state = "Chevron_State_[currentState]"
action.UpdateButtonIcon()
- return
+ return TRUE
diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm
index f864df5a21..00e48fd12a 100644
--- a/code/game/objects/items/stacks/bscrystal.dm
+++ b/code/game/objects/items/stacks/bscrystal.dm
@@ -5,6 +5,7 @@
icon = 'icons/obj/telescience.dmi'
icon_state = "bluespace_crystal"
singular_name = "bluespace crystal"
+ dye_color = DYE_COSMIC
w_class = WEIGHT_CLASS_TINY
custom_materials = list(/datum/material/bluespace=MINERAL_MATERIAL_AMOUNT)
points = 50
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 5f2795c857..70b00c72ec 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -240,8 +240,7 @@
else if(istype(O, /obj/item/restraints/handcuffs/cable))
var/obj/item/cuffs = O
- cuffs.item_color = item_color
- cuffs.update_icon()
+ cuffs.color = color
if (QDELETED(O))
return //It's a stack and has already been merged
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 4893e92d77..bd9673f455 100755
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -708,6 +708,7 @@
desc = "A dorky fannypack for keeping small items in."
icon_state = "fannypack_leather"
item_state = "fannypack_leather"
+ dying_key = DYE_REGISTRY_FANNYPACK
/obj/item/storage/belt/fannypack/ComponentInitialize()
. = ..()
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index ef213c233a..e9b5712e71 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -273,15 +273,12 @@
var/obj/item/twohanded/dualsaber/toy/newSaber = new /obj/item/twohanded/dualsaber/toy(user.loc)
if(hacked) // That's right, we'll only check the "original" "sword".
newSaber.hacked = TRUE
- newSaber.item_color = "rainbow"
qdel(W)
qdel(src)
else if(istype(W, /obj/item/multitool))
if(!hacked)
hacked = TRUE
- item_color = "rainbow"
to_chat(user, "RNBW_ENGAGE")
-
if(active)
update_icon()
user.update_inv_hands()
diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm
index 4bc8bdb36d..1a09cc57b6 100644
--- a/code/game/objects/items/twohanded.dm
+++ b/code/game/objects/items/twohanded.dm
@@ -281,7 +281,7 @@
hitsound = "swing_hit"
var/hitsound_on = 'sound/weapons/blade1.ogg'
armour_penetration = 35
- item_color = "green"
+ var/saber_color = "green"
light_color = "#00ff00"//green
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
block_chance = 75
@@ -326,8 +326,8 @@
/obj/item/twohanded/dualsaber/Initialize()
. = ..()
if(LAZYLEN(possible_colors))
- item_color = pick(possible_colors)
- switch(item_color)
+ saber_color = pick(possible_colors)
+ switch(saber_color)
if("red")
light_color = LIGHT_COLOR_RED
if("green")
@@ -343,7 +343,7 @@
/obj/item/twohanded/dualsaber/update_icon_state()
if(wielded)
- icon_state = "dualsaber[item_color][wielded]"
+ icon_state = "dualsaber[saber_color][wielded]"
else
icon_state = "dualsaber0"
clean_blood()
@@ -457,7 +457,7 @@
if(!hacked)
hacked = TRUE
to_chat(user, "2XRNBW_ENGAGE")
- item_color = "rainbow"
+ saber_color = "rainbow"
update_icon()
else
to_chat(user, "It's starting to look like a triple rainbow - no, nevermind.")
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index 0991351102..3127485878 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -16,8 +16,8 @@ LINEN BINS
throw_speed = 1
throw_range = 2
w_class = WEIGHT_CLASS_TINY
- item_color = "white"
resistance_flags = FLAMMABLE
+ dying_key = DYE_REGISTRY_BEDSHEET
dog_fashion = /datum/dog_fashion/head/ghost
var/list/dream_messages = list("white")
@@ -52,79 +52,66 @@ LINEN BINS
/obj/item/bedsheet/blue
icon_state = "sheetblue"
- item_color = "blue"
dream_messages = list("blue")
/obj/item/bedsheet/green
icon_state = "sheetgreen"
- item_color = "green"
dream_messages = list("green")
/obj/item/bedsheet/grey
icon_state = "sheetgrey"
- item_color = "grey"
dream_messages = list("grey")
/obj/item/bedsheet/orange
icon_state = "sheetorange"
- item_color = "orange"
dream_messages = list("orange")
/obj/item/bedsheet/purple
icon_state = "sheetpurple"
- item_color = "purple"
dream_messages = list("purple")
/obj/item/bedsheet/patriot
name = "patriotic bedsheet"
desc = "You've never felt more free than when sleeping on this."
icon_state = "sheetUSA"
- item_color = "sheetUSA"
dream_messages = list("America", "freedom", "fireworks", "bald eagles")
/obj/item/bedsheet/rainbow
name = "rainbow bedsheet"
desc = "A multicolored blanket. It's actually several different sheets cut up and sewn together."
icon_state = "sheetrainbow"
- item_color = "rainbow"
dream_messages = list("red", "orange", "yellow", "green", "blue", "purple", "a rainbow")
/obj/item/bedsheet/red
icon_state = "sheetred"
- item_color = "red"
dream_messages = list("red")
/obj/item/bedsheet/yellow
icon_state = "sheetyellow"
- item_color = "yellow"
dream_messages = list("yellow")
/obj/item/bedsheet/mime
name = "mime's blanket"
desc = "A very soothing striped blanket. All the noise just seems to fade out when you're under the covers in this."
icon_state = "sheetmime"
- item_color = "mime"
dream_messages = list("silence", "gestures", "a pale face", "a gaping mouth", "the mime")
/obj/item/bedsheet/clown
name = "clown's blanket"
desc = "A rainbow blanket with a clown mask woven in. It smells faintly of bananas."
icon_state = "sheetclown"
- item_color = "clown"
dream_messages = list("honk", "laughter", "a prank", "a joke", "a smiling face", "the clown")
/obj/item/bedsheet/captain
name = "captain's bedsheet"
desc = "It has a Nanotrasen symbol on it, and was woven with a revolutionary new kind of thread guaranteed to have 0.01% permeability for most non-chemical substances, popular among most modern captains."
icon_state = "sheetcaptain"
- item_color = "captain"
dream_messages = list("authority", "a golden ID", "sunglasses", "a green disc", "an antique gun", "the captain")
/obj/item/bedsheet/rd
name = "research director's bedsheet"
desc = "It appears to have a beaker emblem, and is made out of fire-resistant material, although it probably won't protect you in the event of fires you're familiar with every day."
icon_state = "sheetrd"
- item_color = "director"
dream_messages = list("authority", "a silvery ID", "a bomb", "a mech", "a facehugger", "maniacal laughter", "the research director")
// for Free Golems.
@@ -137,111 +124,94 @@ LINEN BINS
name = "medical blanket"
desc = "It's a sterilized* blanket commonly used in the Medbay. *Sterilization is voided if a virologist is present onboard the station."
icon_state = "sheetmedical"
- item_color = "medical"
dream_messages = list("healing", "life", "surgery", "a doctor")
/obj/item/bedsheet/cmo
name = "chief medical officer's bedsheet"
desc = "It's a sterilized blanket that has a cross emblem. There's some cat fur on it, likely from Runtime."
icon_state = "sheetcmo"
- item_color = "cmo"
dream_messages = list("authority", "a silvery ID", "healing", "life", "surgery", "a cat", "the chief medical officer")
/obj/item/bedsheet/hos
name = "head of security's bedsheet"
desc = "It is decorated with a shield emblem. While crime doesn't sleep, you do, but you are still THE LAW!"
icon_state = "sheethos"
- item_color = "hosred"
dream_messages = list("authority", "a silvery ID", "handcuffs", "a baton", "a flashbang", "sunglasses", "the head of security")
/obj/item/bedsheet/hop
name = "head of personnel's bedsheet"
desc = "It is decorated with a key emblem. For those rare moments when you can rest and cuddle with Ian without someone screaming for you over the radio."
icon_state = "sheethop"
- item_color = "hop"
dream_messages = list("authority", "a silvery ID", "obligation", "a computer", "an ID", "a corgi", "the head of personnel")
/obj/item/bedsheet/ce
name = "chief engineer's bedsheet"
desc = "It is decorated with a wrench emblem. It's highly reflective and stain resistant, so you don't need to worry about ruining it with oil."
icon_state = "sheetce"
- item_color = "chief"
dream_messages = list("authority", "a silvery ID", "the engine", "power tools", "an APC", "a parrot", "the chief engineer")
/obj/item/bedsheet/qm
name = "quartermaster's bedsheet"
desc = "It is decorated with a crate emblem in silver lining. It's rather tough, and just the thing to lie on after a hard day of pushing paper."
icon_state = "sheetqm"
- item_color = "qm"
dream_messages = list("a grey ID", "a shuttle", "a crate", "a sloth", "the quartermaster")
/obj/item/bedsheet/brown
icon_state = "sheetbrown"
- item_color = "cargo"
dream_messages = list("brown")
/obj/item/bedsheet/black
icon_state = "sheetblack"
- item_color = "black"
dream_messages = list("black")
/obj/item/bedsheet/centcom
name = "\improper CentCom bedsheet"
desc = "Woven with advanced nanothread for warmth as well as being very decorated, essential for all officials."
icon_state = "sheetcentcom"
- item_color = "centcom"
dream_messages = list("a unique ID", "authority", "artillery", "an ending")
/obj/item/bedsheet/syndie
name = "syndicate bedsheet"
desc = "It has a syndicate emblem and it has an aura of evil."
icon_state = "sheetsyndie"
- item_color = "syndie"
dream_messages = list("a green disc", "a red crystal", "a glowing blade", "a wire-covered ID")
/obj/item/bedsheet/cult
name = "cultist's bedsheet"
desc = "You might dream of Nar'Sie if you sleep with this. It seems rather tattered and glows of an eldritch presence."
icon_state = "sheetcult"
- item_color = "cult"
dream_messages = list("a tome", "a floating red crystal", "a glowing sword", "a bloody symbol", "a massive humanoid figure")
/obj/item/bedsheet/wiz
name = "wizard's bedsheet"
desc = "A special fabric enchanted with magic so you can have an enchanted night. It even glows!"
icon_state = "sheetwiz"
- item_color = "wiz"
dream_messages = list("a book", "an explosion", "lightning", "a staff", "a skeleton", "a robe", "magic")
/obj/item/bedsheet/nanotrasen
name = "nanotrasen bedsheet"
desc = "It has the Nanotrasen logo on it and has an aura of duty."
icon_state = "sheetNT"
- item_color = "nanotrasen"
dream_messages = list("authority", "an ending")
/obj/item/bedsheet/ian
icon_state = "sheetian"
- item_color = "ian"
dream_messages = list("a dog", "a corgi", "woof", "bark", "arf")
/obj/item/bedsheet/runtime
icon_state = "sheetruntime"
- item_color = "runtime"
dream_messages = list("a kitty", "a cat", "meow", "purr", "nya~")
/obj/item/bedsheet/pirate
name = "pirate's bedsheet"
desc = "It has a Jolly Roger emblem on it and has a faint scent of grog."
icon_state = "sheetpirate"
- item_color = "black"
dream_messages = list("doing whatever oneself wants", "cause a pirate is free", "being a pirate", "stealing", "landlubbers", "gold", "a buried treasure", "yarr", "avast", "a swashbuckler", "sailing the Seven Seas", "a parrot", "a monkey", "an island", "a talking skull")
/obj/item/bedsheet/gondola
name = "gondola bedsheet"
desc = "A precious bedsheet made from the hide of a rare and peculiar critter."
icon_state = "sheetgondola"
- item_color = "cargo"
var/g_mouth
var/g_eyes
@@ -262,14 +232,12 @@ LINEN BINS
name = "cosmic space bedsheet"
desc = "Made from the dreams of those who wonder at the stars."
icon_state = "sheetcosmos"
- item_color = "cosmos"
dream_messages = list("the infinite cosmos", "Hans Zimmer music", "a flight through space", "the galaxy", "being fabulous", "shooting stars")
light_power = 2
light_range = 1.4
/obj/item/bedsheet/random
icon_state = "random_bedsheet"
- item_color = "rainbow"
name = "random bedsheet"
desc = "If you're reading this description ingame, something has gone wrong! Honk!"
diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm
index c61ac8972c..7e1b39cb39 100644
--- a/code/game/turfs/simulated/minerals.dm
+++ b/code/game/turfs/simulated/minerals.dm
@@ -173,6 +173,16 @@
/turf/closed/mineral/silver = 12, /turf/closed/mineral/plasma = 20, /turf/closed/mineral/iron = 40, /turf/closed/mineral/titanium = 11,
/turf/closed/mineral/gibtonite = 4, /turf/closed/mineral/bscrystal = 1)
+/turf/closed/mineral/random/no_caves/earth_like
+ icon_state = "rock_oxy"
+ turf_type = /turf/open/floor/plating/asteroid
+ baseturfs = /turf/open/floor/plating/asteroid
+ mineralSpawnChanceList = list(/turf/closed/mineral/uranium/earth_like = 5, /turf/closed/mineral/diamond/earth_like = 1, /turf/closed/mineral/gold/earth_like = 10,
+ /turf/closed/mineral/silver/earth_like = 12, /turf/closed/mineral/plasma/earth_like = 20, /turf/closed/mineral/iron/earth_like = 40,
+ /turf/closed/mineral/titanium/earth_like = 11, /turf/closed/mineral/gibtonite/earth_like = 4, /turf/closed/mineral/bscrystal/earth_like = 1)
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ defer_change = TRUE
+
/turf/closed/mineral/random/high_chance
icon_state = "rock_highchance"
mineralChance = 25
@@ -194,6 +204,10 @@
icon_state = "rock_highchance_oxy"
turf_type = /turf/open/floor/plating/asteroid
baseturfs = /turf/open/floor/plating/asteroid
+ mineralSpawnChanceList = list(
+ /turf/closed/mineral/uranium/earth_like = 35, /turf/closed/mineral/diamond/earth_like = 30, /turf/closed/mineral/gold/earth_like = 45,
+ /turf/closed/mineral/titanium/earth_like = 45, /turf/closed/mineral/silver/earth_like = 50, /turf/closed/mineral/plasma/earth_like = 50,
+ /turf/closed/mineral/bscrystal/earth_like = 20)
initial_gas_mix = OPENTURF_DEFAULT_ATMOS
defer_change = TRUE
@@ -211,6 +225,10 @@
turf_type = /turf/open/floor/plating/asteroid
baseturfs = /turf/open/floor/plating/asteroid
initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ mineralSpawnChanceList = list(
+ /turf/closed/mineral/uranium/earth_like = 2, /turf/closed/mineral/diamond/earth_like = 1, /turf/closed/mineral/gold/earth_like = 4,
+ /turf/closed/mineral/titanium/earth_like = 4, /turf/closed/mineral/silver/earth_like = 6, /turf/closed/mineral/plasma/earth_like = 15,
+ /turf/closed/mineral/iron/earth_like = 40, /turf/closed/mineral/gibtonite/earth_like = 2, /turf/closed/mineral/bscrystal/earth_like = 1)
defer_change = TRUE
/turf/closed/mineral/random/volcanic
@@ -246,13 +264,6 @@
/turf/closed/mineral/silver/volcanic = 20, /turf/closed/mineral/plasma/volcanic = 30, /turf/closed/mineral/bscrystal/volcanic = 1, /turf/closed/mineral/gibtonite/volcanic = 2,
/turf/closed/mineral/iron/volcanic = 95)
-/turf/closed/mineral/random/earth_like
- icon_state = "rock_oxy"
- turf_type = /turf/open/floor/plating/asteroid
- baseturfs = /turf/open/floor/plating/asteroid
- initial_gas_mix = OPENTURF_DEFAULT_ATMOS
- defer_change = TRUE
-
/turf/closed/mineral/iron
mineralType = /obj/item/stack/ore/iron
@@ -624,3 +635,10 @@
baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = 1
+
+/turf/closed/mineral/gibtonite/earth_like
+ icon_state = "rock_oxy"
+ turf_type = /turf/open/floor/plating/asteroid
+ baseturfs = /turf/open/floor/plating/asteroid
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ defer_change = TRUE
diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm
index e27ba2316f..967715ce2f 100644
--- a/code/modules/antagonists/changeling/changeling.dm
+++ b/code/modules/antagonists/changeling/changeling.dm
@@ -295,7 +295,6 @@
prof.name_list[slot] = I.name
prof.appearance_list[slot] = I.appearance
prof.flags_cover_list[slot] = I.flags_cover
- prof.item_color_list[slot] = I.item_color
prof.item_state_list[slot] = I.item_state
prof.exists_list[slot] = 1
else
@@ -511,7 +510,6 @@
var/list/appearance_list = list()
var/list/flags_cover_list = list()
var/list/exists_list = list()
- var/list/item_color_list = list()
var/list/item_state_list = list()
var/underwear
@@ -534,7 +532,6 @@
newprofile.appearance_list = appearance_list.Copy()
newprofile.flags_cover_list = flags_cover_list.Copy()
newprofile.exists_list = exists_list.Copy()
- newprofile.item_color_list = item_color_list.Copy()
newprofile.item_state_list = item_state_list.Copy()
newprofile.underwear = underwear
newprofile.undershirt = undershirt
diff --git a/code/modules/antagonists/changeling/changeling_power.dm b/code/modules/antagonists/changeling/changeling_power.dm
index 574edf225a..aa45c56892 100644
--- a/code/modules/antagonists/changeling/changeling_power.dm
+++ b/code/modules/antagonists/changeling/changeling_power.dm
@@ -28,8 +28,7 @@
action.Remove(user)
return
-/obj/effect/proc_holder/changeling/Click()
- var/mob/user = usr
+/obj/effect/proc_holder/changeling/Trigger(mob/user)
if(!user || !user.mind || !user.mind.has_antag_datum(/datum/antagonist/changeling))
return
try_to_sting(user)
diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm
index 3e19ce74fe..a8fe56aae7 100644
--- a/code/modules/antagonists/changeling/powers/tiny_prick.dm
+++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm
@@ -3,8 +3,7 @@
desc = "Stabby stabby."
var/sting_icon = null
-/obj/effect/proc_holder/changeling/sting/Click()
- var/mob/user = usr
+/obj/effect/proc_holder/changeling/sting/Trigger(mob/user)
if(!user || !user.mind)
return
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
@@ -74,8 +73,7 @@
action_icon_state = "ling_sting_transform"
action_background_icon_state = "bg_ling"
-/obj/effect/proc_holder/changeling/sting/transformation/Click()
- var/mob/user = usr
+/obj/effect/proc_holder/changeling/sting/transformation/Trigger(mob/user)
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling.chosen_sting)
unset_sting(user)
diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
index daa4e24c69..431416ede0 100644
--- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
+++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
@@ -279,9 +279,15 @@
sigil_name = "Vitality Matrix"
var/revive_cost = 150
var/sigil_active = FALSE
+ var/min_drain_health = -INFINITY
+ var/can_dust = TRUE
var/animation_number = 3 //each cycle increments this by 1, at 4 it produces an animation and resets
var/static/list/damage_heal_order = list(CLONE, TOX, BURN, BRUTE, OXY) //we heal damage in this order
+/obj/effect/clockwork/sigil/vitality/neutered
+ min_drain_health = 20
+ can_dust = FALSE
+
/obj/effect/clockwork/sigil/vitality/examine(mob/user)
. = ..()
if(is_servant_of_ratvar(user) || isobserver(user))
@@ -306,7 +312,7 @@
animation_number++
if(!is_servant_of_ratvar(L))
var/vitality_drained = 0
- if(L.stat == DEAD && !consumed_vitality)
+ if(L.stat == DEAD && !consumed_vitality && can_dust)
consumed_vitality = TRUE //Prevent the target from being consumed multiple times
vitality_drained = L.maxHealth
var/obj/effect/temp_visual/ratvar/sigil/vitality/V = new /obj/effect/temp_visual/ratvar/sigil/vitality(get_turf(src))
@@ -318,7 +324,7 @@
if(!L.dropItemToGround(W))
qdel(W)
L.dust()
- else
+ else if(L.health > min_drain_health)
if(!GLOB.ratvar_awakens && L.stat == CONSCIOUS)
vitality_drained = L.adjustToxLoss(1, forced = TRUE)
else
diff --git a/code/modules/antagonists/clockcult/clock_helpers/hierophant_network.dm b/code/modules/antagonists/clockcult/clock_helpers/hierophant_network.dm
index 37f6f0b2d7..0c01dc0963 100644
--- a/code/modules/antagonists/clockcult/clock_helpers/hierophant_network.dm
+++ b/code/modules/antagonists/clockcult/clock_helpers/hierophant_network.dm
@@ -35,7 +35,7 @@
var/span_for_name = "heavy_brass"
var/span_for_message = "brass"
-/datum/action/innate/hierophant/IsAvailable()
+/datum/action/innate/hierophant/IsAvailable(silent = FALSE)
if(!is_servant_of_ratvar(owner))
return FALSE
return ..()
diff --git a/code/modules/antagonists/clockcult/clock_items/clock_weapons/_call_weapon.dm b/code/modules/antagonists/clockcult/clock_items/clock_weapons/_call_weapon.dm
index a87767c05e..40aca961fc 100644
--- a/code/modules/antagonists/clockcult/clock_items/clock_weapons/_call_weapon.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clock_weapons/_call_weapon.dm
@@ -12,7 +12,7 @@
var/obj/item/clockwork/weapon/weapon_type //The type of weapon to create
var/obj/item/clockwork/weapon/weapon
-/datum/action/innate/call_weapon/IsAvailable()
+/datum/action/innate/call_weapon/IsAvailable(silent = FALSE)
if(!is_servant_of_ratvar(owner))
qdel(src)
return
diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
index 5bc04173b9..a4f8bf8062 100644
--- a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
@@ -127,7 +127,6 @@
icon = 'icons/obj/clothing/clockwork_garb.dmi'
icon_state = "clockwork_gauntlets"
item_state = "clockwork_gauntlets"
- item_color = null //So they don't wash.
strip_delay = 50
equip_delay_other = 30
body_parts_covered = ARMS
diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
index b12c72b4af..6e7d830db6 100644
--- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
@@ -36,6 +36,24 @@
speed_multiplier = 0
no_cost = TRUE
+/obj/item/clockwork/slab/traitor
+ var/spent = FALSE
+
+/obj/item/clockwork/slab/traitor/check_uplink_validity()
+ return !spent
+
+/obj/item/clockwork/slab/traitor/attack_self(mob/living/user)
+ if(!is_servant_of_ratvar(user) && !spent)
+ to_chat(user, "You press your hand onto [src], golden tendrils of light latching onto you. Was this the best of ideas?")
+ if(add_servant_of_ratvar(user, FALSE, FALSE, /datum/antagonist/clockcult/neutered/traitor))
+ spent = TRUE
+ // Add some (5 KW) power so they don't suffer for 100 ticks
+ GLOB.clockwork_power += 5000
+ // This intentionally does not use adjust_clockwork_power.
+ else
+ to_chat(user, "[src] falls dark. It appears you weren't worthy.")
+ return ..()
+
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clockwork/slab/debug/attack_hand(mob/living/user)
if(!is_servant_of_ratvar(user))
diff --git a/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm b/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm
index e4722dbcb0..faa5e025ca 100644
--- a/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm
+++ b/code/modules/antagonists/clockcult/clock_mobs/_eminence.dm
@@ -232,7 +232,7 @@
background_icon_state = "bg_clock"
buttontooltipstyle = "clockcult"
-/datum/action/innate/eminence/IsAvailable()
+/datum/action/innate/eminence/IsAvailable(silent = FALSE)
if(!iseminence(owner))
qdel(src)
return
@@ -283,7 +283,7 @@
desc = "Initiates a mass recall, warping all servants to the Ark after a short delay. This can only be used once."
button_icon_state = "Spatial Gateway"
-/datum/action/innate/eminence/mass_recall/IsAvailable()
+/datum/action/innate/eminence/mass_recall/IsAvailable(silent = FALSE)
. = ..()
if(.)
var/obj/structure/destructible/clockwork/massive/celestial_gateway/G = GLOB.ark_of_the_clockwork_justiciar
diff --git a/code/modules/antagonists/clockcult/clock_scripture.dm b/code/modules/antagonists/clockcult/clock_scripture.dm
index 753de786dc..16d251fe92 100644
--- a/code/modules/antagonists/clockcult/clock_scripture.dm
+++ b/code/modules/antagonists/clockcult/clock_scripture.dm
@@ -30,6 +30,7 @@ Applications: 8 servants, 3 caches, and 100 CV
var/primary_component
var/important = FALSE //important scripture will be italicized in the slab's interface
var/sort_priority = 1 //what position the scripture should have in a list of scripture. Should be based off of component costs/reqs, but you can't initial() lists.
+ var/requires_full_power = FALSE //requires the user to be a full, non neutered servant of ratvar
//messages for offstation scripture recital, courtesy ratvar's generals(and neovgre)
var/static/list/neovgre_penalty = list("Go to the station.", "Useless.", "Don't waste time.", "Pathetic.", "Wasteful.")
@@ -77,6 +78,9 @@ Applications: 8 servants, 3 caches, and 100 CV
/datum/clockwork_scripture/proc/can_recite() //If the words can be spoken
if(!invoker || !slab || invoker.get_active_held_item() != slab)
return FALSE
+ if(!is_servant_of_ratvar(invoker, requires_full_power))
+ to_chat(invoker, "You aren't strongly connected enough to Ratvar to invoke this!")
+ return FALSE
if(!invoker.can_speak_vocal())
to_chat(invoker, "You are unable to speak the words of the scripture!")
return FALSE
@@ -236,18 +240,21 @@ Applications: 8 servants, 3 caches, and 100 CV
return FALSE
return TRUE
+/datum/clockwork_scripture/create_object/proc/get_spawn_path(mob/user)
+ return object_path
+
/datum/clockwork_scripture/create_object/scripture_effects()
if(creator_message && observer_message)
invoker.visible_message(observer_message, creator_message)
else if(creator_message)
to_chat(invoker, creator_message)
- var/obj/O = new object_path (get_turf(invoker))
+ var/to_spawn = get_spawn_path(invoker)
+ var/obj/O = new to_spawn(get_turf(invoker))
O.ratvar_act() //update the new object so it gets buffed if ratvar is alive
if(isitem(O) && put_object_in_hands)
invoker.put_in_hands(O)
return TRUE
-
//Used specifically to create construct shells.
/datum/clockwork_scripture/create_object/construct
put_object_in_hands = FALSE
diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm
index 5d7a95222f..6349ecb581 100644
--- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm
+++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm
@@ -88,7 +88,7 @@
sort_priority = 4
quickbind = TRUE
quickbind_desc = "Creates a Sigil of Submission, which will convert non-Servants that remain on it."
-
+ requires_full_power = TRUE
//Kindle: Charges the slab with blazing energy. It can be released to stun and silence a target.
/datum/clockwork_scripture/ranged_ability/kindle
@@ -211,6 +211,7 @@
quickbind = TRUE
quickbind_desc = "Returns you to Reebe."
var/client_color
+ requires_full_power = TRUE
/datum/clockwork_scripture/abscond/check_special_requirements()
if(is_reebe(invoker.z))
diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm
index 4e1a5b42cb..130fc24583 100644
--- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm
+++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm
@@ -50,7 +50,6 @@
return FALSE
return ..()
-
//Vitality Matrix: Creates a sigil which will drain health from nonservants and can use that health to heal or even revive servants.
/datum/clockwork_scripture/create_object/vitality_matrix
descname = "Trap, Damage to Healing"
@@ -77,6 +76,10 @@
return FALSE
return ..()
+/datum/clockwork_scripture/create_object/vitality_matrix/get_spawn_path(mob/user)
+ if(!is_servant_of_ratvar(user, TRUE))
+ return /obj/effect/clockwork/sigil/vitality/neutered
+ return ..()
//Judicial Visor: Creates a judicial visor, which can smite an area.
/datum/clockwork_scripture/create_object/judicial_visor
@@ -150,7 +153,7 @@
/obj/item/clothing/head/helmet/space,
/obj/item/clothing/shoes/magboots)) //replace this only if ratvar is up
-/datum/action/innate/clockwork_armaments/IsAvailable()
+/datum/action/innate/clockwork_armaments/IsAvailable(silent = FALSE)
if(!is_servant_of_ratvar(owner))
qdel(src)
return
diff --git a/code/modules/antagonists/clockcult/clockcult.dm b/code/modules/antagonists/clockcult/clockcult.dm
index cf3d88983c..cbfd443744 100644
--- a/code/modules/antagonists/clockcult/clockcult.dm
+++ b/code/modules/antagonists/clockcult/clockcult.dm
@@ -5,15 +5,27 @@
antagpanel_category = "Clockcult"
job_rank = ROLE_SERVANT_OF_RATVAR
antag_moodlet = /datum/mood_event/cult
+ var/datum/action/innate/hierophant/hierophant_network = new
threat = 3
- var/datum/action/innate/hierophant/hierophant_network = new()
var/datum/team/clockcult/clock_team
var/make_team = TRUE //This should be only false for tutorial scarabs
+ var/neutered = FALSE //can not use round ending, gibbing, converting, or similar things with unmatched round impact
+ var/ignore_eligibility_check = FALSE
+ var/ignore_holy_water = FALSE
/datum/antagonist/clockcult/silent
silent = TRUE
show_in_antagpanel = FALSE //internal
+/datum/antagonist/clockcult/neutered
+ neutered = TRUE
+
+/datum/antagonist/clockcult/neutered/traitor
+ ignore_eligibility_check = TRUE
+ ignore_holy_water = TRUE
+ show_in_roundend = FALSE
+ make_team = FALSE
+
/datum/antagonist/clockcult/Destroy()
qdel(hierophant_network)
return ..()
@@ -38,7 +50,7 @@
/datum/antagonist/clockcult/can_be_owned(datum/mind/new_owner)
. = ..()
- if(.)
+ if(. && !ignore_eligibility_check)
. = is_eligible_servant(new_owner.current)
/datum/antagonist/clockcult/greet()
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index c4a8c1e827..d64e99d206 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -17,7 +17,7 @@
qdel(X)
..()
-/datum/action/innate/cult/blood_magic/IsAvailable()
+/datum/action/innate/cult/blood_magic/IsAvailable(silent = FALSE)
if(!iscultist(owner))
return FALSE
return ..()
@@ -118,7 +118,7 @@
hand_magic = null
..()
-/datum/action/innate/cult/blood_spell/IsAvailable()
+/datum/action/innate/cult/blood_spell/IsAvailable(silent = FALSE)
if(!iscultist(owner) || owner.incapacitated() || !charges)
return FALSE
return ..()
@@ -439,7 +439,7 @@
"A feeling of warmth washes over you, rays of holy light surround your body and protect you from the flash of light!")
else // cult doesn't stun any longer when halos are out, instead it does burn damage + knockback!
var/datum/antagonist/cult/user_antag = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
- if(user_antag.cult_team.cult_ascendent)
+ if(user_antag.cult_team?.cult_ascendent)
if(!iscultist(L))
L.adjustFireLoss(20)
if(L.move_resist < MOVE_FORCE_STRONG)
@@ -577,7 +577,9 @@
var/turf/T = get_turf(target)
if(istype(target, /obj/item/stack/sheet/metal))
var/obj/item/stack/sheet/candidate = target
- if(candidate.use(50))
+ if(!iscultist(user, TRUE))
+ to_chat(user, "You are not strongly connected enough to Nar'sie to use make constructs...")
+ else if(candidate.use(50))
uses--
to_chat(user, "A dark cloud emanates from your hand and swirls around the metal, twisting it into a construct shell!")
new /obj/structure/constructshell(T)
@@ -600,7 +602,9 @@
SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
else if(istype(target,/mob/living/silicon/robot))
var/mob/living/silicon/robot/candidate = target
- if(candidate.mmi)
+ if(!iscultist(user, TRUE))
+ to_chat(user, "You are not strongly connected enough to Nar'sie to use make constructs...")
+ else if(candidate.mmi)
user.visible_message("A dark cloud emanates from [user]'s hand and swirls around [candidate]!")
playsound(T, 'sound/machines/airlock_alien_prying.ogg', 80, 1)
var/prev_color = candidate.color
@@ -820,6 +824,8 @@
if("Blood Beam (500)")
if(uses < 500)
to_chat(user, "You need 500 charges to perform this rite.")
+ else if(!iscultist(user, TRUE))
+ to_chat(user, "You are not strongly connected to Nar'sie enough to use something of this power.")
else
var/obj/rite = new /obj/item/blood_beam()
uses -= 500
diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm
index 1746fd135c..023794182a 100644
--- a/code/modules/antagonists/cult/cult.dm
+++ b/code/modules/antagonists/cult/cult.dm
@@ -11,15 +11,27 @@
var/datum/action/innate/cult/blood_magic/magic = new
job_rank = ROLE_CULTIST
var/ignore_implant = FALSE
+ var/make_team = TRUE
var/give_equipment = FALSE
var/datum/team/cult/cult_team
+ var/neutered = FALSE //can not use round ending, gibbing, converting, or similar things with unmatched round impact
+ var/ignore_eligibility_checks = FALSE
+ var/ignore_holy_water = FALSE
+/datum/antagonist/cult/neutered
+ neutered = TRUE
+
+/datum/antagonist/cult/neutered/traitor
+ ignore_eligibility_checks = TRUE
+ ignore_holy_water = TRUE
+ show_in_roundend = FALSE
+ make_team = FALSE
/datum/antagonist/cult/get_team()
return cult_team
/datum/antagonist/cult/create_team(datum/team/cult/new_team)
- if(!new_team)
+ if(!new_team && make_team)
//todo remove this and allow admin buttons to create more than one cult
for(var/datum/antagonist/cult/H in GLOB.antagonists)
if(!H.owner)
@@ -30,12 +42,12 @@
cult_team = new /datum/team/cult
cult_team.setup_objectives()
return
- if(!istype(new_team))
+ if(make_team && !istype(new_team))
stack_trace("Wrong team type passed to [type] initialization.")
cult_team = new_team
/datum/antagonist/cult/proc/add_objectives()
- objectives |= cult_team.objectives
+ objectives |= cult_team?.objectives
/datum/antagonist/cult/Destroy()
QDEL_NULL(communion)
@@ -44,7 +56,7 @@
/datum/antagonist/cult/can_be_owned(datum/mind/new_owner)
. = ..()
- if(. && !ignore_implant)
+ if(. && !ignore_implant && !ignore_eligibility_checks)
. = is_convertable_to_cult(new_owner.current,cult_team)
/datum/antagonist/cult/greet()
@@ -62,7 +74,7 @@
SSticker.mode.update_cult_icons_added(owner)
current.log_message("has been converted to the cult of Nar'Sie!", LOG_ATTACK, color="#960000")
- if(cult_team.blood_target && cult_team.blood_target_image && current.client)
+ if(cult_team?.blood_target && cult_team.blood_target_image && current.client)
current.client.images += cult_team.blood_target_image
@@ -105,13 +117,13 @@
current = mob_override
current.faction |= "cult"
current.grant_language(/datum/language/narsie)
- if(!cult_team.cult_master)
+ if(!cult_team?.cult_master)
vote.Grant(current)
communion.Grant(current)
if(ishuman(current))
magic.Grant(current)
current.throw_alert("bloodsense", /obj/screen/alert/bloodsense)
- if(cult_team.cult_risen)
+ if(cult_team?.cult_risen)
cult_team.rise(current)
if(cult_team.cult_ascendent)
cult_team.ascend(current)
@@ -144,7 +156,7 @@
owner.current.visible_message("[owner.current] looks like [owner.current.p_theyve()] just reverted to [owner.current.p_their()] old faith!", null, null, null, owner.current)
to_chat(owner.current, "An unfamiliar white light flashes through your mind, cleansing the taint of the Geometer and all your memories as her servant.")
owner.current.log_message("has renounced the cult of Nar'Sie!", LOG_ATTACK, color="#960000")
- if(cult_team.blood_target && cult_team.blood_target_image && owner.current.client)
+ if(cult_team?.blood_target && cult_team.blood_target_image && owner.current.client)
owner.current.client.images -= cult_team.blood_target_image
. = ..()
@@ -206,7 +218,7 @@
throwing.Grant(current)
current.update_action_buttons_icon()
current.apply_status_effect(/datum/status_effect/cult_master)
- if(cult_team.cult_risen)
+ if(cult_team?.cult_risen)
cult_team.rise(current)
if(cult_team.cult_ascendent)
cult_team.ascend(current)
diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm
index 761412e9f8..77893225fa 100644
--- a/code/modules/antagonists/cult/cult_comms.dm
+++ b/code/modules/antagonists/cult/cult_comms.dm
@@ -6,7 +6,7 @@
buttontooltipstyle = "cult"
check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_CONSCIOUS
-/datum/action/innate/cult/IsAvailable()
+/datum/action/innate/cult/IsAvailable(silent = FALSE)
if(!iscultist(owner))
return FALSE
return ..()
@@ -51,7 +51,7 @@
name = "Spiritual Communion"
desc = "Conveys a message from the spirit realm that all cultists can hear."
-/datum/action/innate/cult/comm/spirit/IsAvailable()
+/datum/action/innate/cult/comm/spirit/IsAvailable(silent = FALSE)
if(iscultist(owner.mind.current))
return TRUE
@@ -72,9 +72,9 @@
name = "Assert Leadership"
button_icon_state = "cultvote"
-/datum/action/innate/cult/mastervote/IsAvailable()
+/datum/action/innate/cult/mastervote/IsAvailable(silent = FALSE)
var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
- if(!C || C.cult_team.cult_vote_called || !ishuman(owner))
+ if(!C?.cult_team || C.cult_team.cult_vote_called || !ishuman(owner))
return FALSE
return ..()
@@ -82,6 +82,9 @@
var/choice = alert(owner, "The mantle of leadership is heavy. Success in this role requires an expert level of communication and experience. Are you sure?",, "Yes", "No")
if(choice == "Yes" && IsAvailable())
var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
+ if(!C.cult_team)
+ to_chat(owner, "Do you not alreaady lead yourself?")
+ return
pollCultists(owner,C.cult_team)
/proc/pollCultists(var/mob/living/Nominee,datum/team/cult/team) //Cult Master Poll
@@ -137,7 +140,7 @@
to_chat(B.current,"[Nominee] has won the cult's support and is now their master. Follow [Nominee.p_their()] orders to the best of your ability!")
return TRUE
-/datum/action/innate/cult/master/IsAvailable()
+/datum/action/innate/cult/master/IsAvailable(silent = FALSE)
if(!owner.mind || !owner.mind.has_antag_datum(/datum/antagonist/cult/master) || GLOB.cult_narsie)
return 0
return ..()
@@ -151,6 +154,9 @@
var/datum/antagonist/cult/antag = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
if(!antag)
return
+ if(!antag.cult_team)
+ to_chat(owner, "You have no team. You are alone.")
+ return
for(var/i in 1 to 4)
chant(i)
var/list/destinations = list()
@@ -220,9 +226,9 @@
CM.attached_action = src
..()
-/datum/action/innate/cult/master/cultmark/IsAvailable()
+/datum/action/innate/cult/master/cultmark/IsAvailable(silent = FALSE)
if(cooldown > world.time)
- if(!CM.active)
+ if(!CM.active && !silent)
to_chat(owner, "You need to wait [DisplayTimeText(cooldown - world.time)] before you can mark another target!")
return FALSE
return ..()
@@ -261,7 +267,10 @@
return FALSE
var/datum/antagonist/cult/C = caller.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
-
+ if(!C.cult_team)
+ to_chat(ranged_ability_user, "What is the point of marking a target for yourself?")
+ remove_ranged_ability()
+ return
if(target in view(7, get_turf(ranged_ability_user)))
if(C.cult_team.blood_target)
to_chat(ranged_ability_user, "The cult has already designated a target!")
@@ -299,7 +308,7 @@
name = "Mark a Blood Target for the Cult"
desc = "Marks a target for the entire cult to track."
-/datum/action/innate/cult/master/cultmark/ghost/IsAvailable()
+/datum/action/innate/cult/master/cultmark/ghost/IsAvailable(silent = FALSE)
if(istype(owner, /mob/dead/observer) && iscultist(owner.mind.current))
return TRUE
else
@@ -313,7 +322,7 @@
var/cooldown = 0
var/base_cooldown = 600
-/datum/action/innate/cult/ghostmark/IsAvailable()
+/datum/action/innate/cult/ghostmark/IsAvailable(silent = FALSE)
if(istype(owner, /mob/dead/observer) && iscultist(owner.mind.current))
return TRUE
else
@@ -330,8 +339,11 @@
/datum/action/innate/cult/ghostmark/Activate()
var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
+ if(!C.cult_team)
+ to_chat(owner, "You are alone. You do not have a team.")
+ return
if(C.cult_team.blood_target)
- if(cooldown>world.time)
+ if(cooldown > world.time)
reset_blood_target(C.cult_team)
to_chat(owner, "You have cleared the cult's blood target!")
deltimer(C.cult_team.blood_target_reset_timer)
@@ -339,7 +351,7 @@
else
to_chat(owner, "The cult has already designated a target!")
return
- if(cooldown>world.time)
+ if(cooldown > world.time)
to_chat(owner, "You aren't ready to place another blood mark yet!")
return
target = owner.orbiting?.parent || get_turf(owner)
@@ -389,11 +401,11 @@
PM.attached_action = src
..()
-/datum/action/innate/cult/master/pulse/IsAvailable()
+/datum/action/innate/cult/master/pulse/IsAvailable(silent = FALSE)
if(!owner.mind || !owner.mind.has_antag_datum(/datum/antagonist/cult/master))
return FALSE
if(cooldown > world.time)
- if(!PM.active)
+ if(!PM.active && !silent)
to_chat(owner, "You need to wait [DisplayTimeText(cooldown - world.time)] before you can pulse again!")
return FALSE
return ..()
diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm
index b31bfc0693..a3ab4cf052 100644
--- a/code/modules/antagonists/cult/cult_items.dm
+++ b/code/modules/antagonists/cult/cult_items.dm
@@ -6,6 +6,21 @@
throw_range = 5
w_class = WEIGHT_CLASS_SMALL
+/obj/item/tome/traitor
+ var/spent = FALSE
+
+/obj/item/tome/traitor/check_uplink_validity()
+ return !spent
+
+/obj/item/tome/traitor/attack_self(mob/living/user)
+ if(!iscultist(user) && !spent)
+ to_chat(user, "You press your hand onto [src], sinister tendrils of corrupted magic swirling around you. Was this the best of ideas?")
+ if(user.mind.add_antag_datum(/datum/antagonist/cult/neutered/traitor))
+ spent = TRUE
+ else
+ to_chat(user, "[src] falls dark. It appears you weren't worthy.")
+ return ..()
+
/obj/item/melee/cultblade/dagger
name = "ritual dagger"
desc = "A strange dagger said to be used by sinister groups for \"preparing\" a corpse before sacrificing it to their dark gods."
@@ -207,7 +222,7 @@
phasein = /obj/effect/temp_visual/dir_setting/cult/phase
phaseout = /obj/effect/temp_visual/dir_setting/cult/phase/out
-/datum/action/innate/dash/cult/IsAvailable()
+/datum/action/innate/dash/cult/IsAvailable(silent = FALSE)
if(iscultist(holder) && current_charges)
return TRUE
else
@@ -227,7 +242,7 @@
sword = bastard
holder = user
-/datum/action/innate/cult/spin2win/IsAvailable()
+/datum/action/innate/cult/spin2win/IsAvailable(silent = FALSE)
if(iscultist(holder) && cooldown <= world.time)
return TRUE
else
@@ -509,7 +524,7 @@
var/static/curselimit = 0
/obj/item/shuttle_curse/attack_self(mob/living/user)
- if(!iscultist(user))
+ if(!iscultist(user, TRUE))
user.dropItemToGround(src, TRUE)
user.DefaultCombatKnockdown(100)
to_chat(user, "A powerful force shoves you away from [src]!")
diff --git a/code/modules/antagonists/cult/ritual.dm b/code/modules/antagonists/cult/ritual.dm
index e92f562db3..40804ccc24 100644
--- a/code/modules/antagonists/cult/ritual.dm
+++ b/code/modules/antagonists/cult/ritual.dm
@@ -59,6 +59,9 @@ This file contains the cult dagger and rune list code
rune_to_scribe = GLOB.rune_types[entered_rune_name]
if(!rune_to_scribe)
return
+ if(!iscultist(user, initial(rune_to_scribe.requires_full_power)))
+ to_chat(user, "You aren't strongly connected enough to Nar'sie to do draw this.")
+ return
if(initial(rune_to_scribe.req_keyword))
chosen_keyword = stripped_input(user, "Enter a keyword for the new rune.", "Words of Power")
if(!chosen_keyword)
@@ -84,8 +87,8 @@ This file contains the cult dagger and rune list code
to_chat(user, "Only one ritual site remains - it must be reserved for the final summoning!")
return
if(ispath(rune_to_scribe, /obj/effect/rune/narsie))
- var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives
- var/datum/objective/sacrifice/sac_objective = locate() in user_antag.cult_team.objectives
+ var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team?.objectives
+ var/datum/objective/sacrifice/sac_objective = locate() in user_antag.cult_team?.objectives
if(!summon_objective)
to_chat(user, "Nar'Sie does not wish to be summoned!")
return
diff --git a/code/modules/antagonists/cult/rune_spawn_action.dm b/code/modules/antagonists/cult/rune_spawn_action.dm
index 60a8527860..b164246060 100644
--- a/code/modules/antagonists/cult/rune_spawn_action.dm
+++ b/code/modules/antagonists/cult/rune_spawn_action.dm
@@ -14,7 +14,7 @@
var/obj/effect/temp_visual/cult/rune_spawn/rune_center_type
var/rune_color
-/datum/action/innate/cult/create_rune/IsAvailable()
+/datum/action/innate/cult/create_rune/IsAvailable(silent = FALSE)
if(!rune_type || cooldown > world.time)
return FALSE
return ..()
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index ec763a66d7..b0538d6521 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -32,6 +32,7 @@ Runes can either be invoked by one's self or with many different cultists. Each
var/scribe_delay = 40 //how long the rune takes to create
var/scribe_damage = 0.1 //how much damage you take doing it
+ var/requires_full_power = FALSE //requires full power to draw or invoke
var/invoke_damage = 0 //how much damage invokers take when invoking it
var/construct_invoke = TRUE //if constructs can invoke it
@@ -185,6 +186,7 @@ structure_check() searches for nearby cultist structures required for the invoca
color = RUNE_COLOR_OFFER
req_cultists = 1
rune_in_use = FALSE
+ requires_full_power = TRUE
/obj/effect/rune/convert/do_invoke_glow()
return
@@ -458,6 +460,7 @@ structure_check() searches for nearby cultist structures required for the invoca
pixel_y = -32
scribe_delay = 500 //how long the rune takes to create
scribe_damage = 40.1 //how much damage you take doing it
+ requires_full_power = TRUE
var/used = FALSE
/obj/effect/rune/narsie/Initialize(mapload, set_keyword)
@@ -482,6 +485,9 @@ structure_check() searches for nearby cultist structures required for the invoca
fail_invoke()
return
var/datum/antagonist/cult/user_antag = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
+ if(!user_antag.cult_team)
+ to_chat(user, "You can't seem to make the arcane links to your fellows that you'd need to use this.")
+ return
var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives
var/area/place = get_area(src)
if(!(place in summon_objective.summon_spots))
@@ -812,6 +818,7 @@ structure_check() searches for nearby cultist structures required for the invoca
invoke_damage = 10
construct_invoke = FALSE
color = RUNE_COLOR_DARKRED
+ requires_full_power = TRUE
var/mob/living/affecting = null
var/ghost_limit = 3
var/ghosts = 0
@@ -942,6 +949,7 @@ structure_check() searches for nearby cultist structures required for the invoca
color = RUNE_COLOR_DARKRED
req_cultists = 3
scribe_delay = 100
+ requires_full_power = TRUE
/obj/effect/rune/apocalypse/invoke(var/list/invokers)
if(rune_in_use)
@@ -950,6 +958,9 @@ structure_check() searches for nearby cultist structures required for the invoca
var/area/place = get_area(src)
var/mob/living/user = invokers[1]
var/datum/antagonist/cult/user_antag = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
+ if(!user_antag.cult_team)
+ to_chat(user, "You can't seem to make the arcane links to your fellows that you'd need to use this.")
+ return
var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives
if(summon_objective.summon_spots.len <= 1)
to_chat(user, "Only one ritual site remains - it must be reserved for the final summoning!")
diff --git a/code/modules/antagonists/devil/true_devil/inventory.dm b/code/modules/antagonists/devil/true_devil/inventory.dm
index 778c421616..579dfb4fb1 100644
--- a/code/modules/antagonists/devil/true_devil/inventory.dm
+++ b/code/modules/antagonists/devil/true_devil/inventory.dm
@@ -12,12 +12,7 @@
var/obj/item/r_hand = get_item_for_held_index(2)
if(r_hand)
-
- var/r_state = r_hand.item_state
- if(!r_state)
- r_state = r_hand.icon_state
-
- var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(state = r_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE)
+ var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(default_layer = DEVIL_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE)
hands_overlays += r_hand_overlay
@@ -28,12 +23,7 @@
client.screen |= r_hand
if(l_hand)
-
- var/l_state = l_hand.item_state
- if(!l_state)
- l_state = l_hand.icon_state
-
- var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(state = l_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE)
+ var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(default_layer = DEVIL_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE)
hands_overlays += l_hand_overlay
diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
index e6ca95472e..6616eea006 100644
--- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
+++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
@@ -43,7 +43,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
else
owner_AI = owner
-/datum/action/innate/ai/IsAvailable()
+/datum/action/innate/ai/IsAvailable(silent = FALSE)
. = ..()
if(owner_AI && owner_AI.malf_cooldown > world.time)
return FALSE
diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm
index 0f43dfaf3a..d7f1046cd7 100644
--- a/code/modules/antagonists/wizard/equipment/soulstone.dm
+++ b/code/modules/antagonists/wizard/equipment/soulstone.dm
@@ -31,12 +31,12 @@
/obj/item/soulstone/pickup(mob/living/user)
..()
- if(!iscultist(user) && !iswizard(user) && !usability)
+ if(!iscultist(user, TRUE) && !iswizard(user) && !usability)
to_chat(user, "An overwhelming feeling of dread comes over you as you pick up the soulstone. It would be wise to be rid of this quickly.")
/obj/item/soulstone/examine(mob/user)
. = ..()
- if(usability || iscultist(user) || iswizard(user) || isobserver(user))
+ if(usability || iscultist(user, TRUE) || iswizard(user) || isobserver(user))
if (old_shard)
. += "A soulstone, used to capture a soul, either from dead humans or from freed shades."
else
@@ -53,7 +53,7 @@
//////////////////////////////Capturing////////////////////////////////////////////////////////
/obj/item/soulstone/attack(mob/living/carbon/human/M, mob/living/user)
- if(!iscultist(user) && !iswizard(user) && !usability)
+ if(!iscultist(user, TRUE) && !iswizard(user) && !usability)
user.Unconscious(100)
to_chat(user, "Your body is wracked with debilitating pain!")
return
@@ -74,7 +74,7 @@
/obj/item/soulstone/attack_self(mob/living/user)
if(!in_range(src, user))
return
- if(!iscultist(user) && !iswizard(user) && !usability)
+ if(!iscultist(user, TRUE) && !iswizard(user) && !usability)
user.Unconscious(100)
to_chat(user, "Your body is wracked with debilitating pain!")
return
@@ -103,7 +103,7 @@
/obj/structure/constructshell/examine(mob/user)
. = ..()
- if(iscultist(user) || iswizard(user) || user.stat == DEAD)
+ if(iscultist(user, TRUE) || iswizard(user) || user.stat == DEAD)
. += "A construct shell, used to house bound souls from a soulstone."
. += "Placing a soulstone with a soul into this shell allows you to produce your choice of the following:"
. += "An Artificer, which can produce more shells and soulstones, as well as fortifications."
@@ -113,7 +113,7 @@
/obj/structure/constructshell/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/soulstone))
var/obj/item/soulstone/SS = O
- if(!iscultist(user) && !iswizard(user) && !SS.usability)
+ if(!iscultist(user, TRUE) && !iswizard(user) && !SS.usability)
to_chat(user, "An overwhelming feeling of dread comes over you as you attempt to place the soulstone into the shell. It would be wise to be rid of this quickly.")
user.Dizzy(30)
return
@@ -145,7 +145,7 @@
if("VICTIM")
var/mob/living/carbon/human/T = target
var/datum/antagonist/cult/C = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
- if(C && C.cult_team.is_sacrifice_target(T.mind))
+ if(C && C.cult_team?.is_sacrifice_target(T.mind))
if(iscultist(user))
to_chat(user, "\"This soul is mine. SACRIFICE THEM!\"")
else
diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm
index cbd1fcff87..9f1111e5d9 100644
--- a/code/modules/clothing/chameleon.dm
+++ b/code/modules/clothing/chameleon.dm
@@ -219,14 +219,13 @@
if(isitem(target))
var/obj/item/I = target
I.item_state = initial(picked_item.item_state)
- I.item_color = initial(picked_item.item_color)
var/obj/item/clothing/CL = target
var/obj/item/clothing/PCL = new picked_item
if(istype(CL) && istype(PCL))
CL.flags_cover = PCL.flags_cover
CL.flags_inv = PCL.flags_inv
CL.mutantrace_variation = PCL.mutantrace_variation
- CL.alternate_worn_icon = PCL.alternate_worn_icon
+ CL.mob_overlay_icon = PCL.mob_overlay_icon
qdel(PCL)
target.icon = initial(picked_item.icon)
@@ -238,7 +237,6 @@
P.desc = initial(picked_item.desc)
P.icon_state = initial(picked_item.icon_state)
P.item_state = initial(picked_item.item_state)
- P.item_color = initial(picked_item.item_color)
P.overlays_offsets = initial(picked_item.overlays_offsets)
P.set_new_overlays()
P.update_icon()
@@ -269,7 +267,6 @@
name = "black jumpsuit"
icon_state = "black"
item_state = "bl_suit"
- item_color = "black"
desc = "It's a plain jumpsuit. It has a small dial on the wrist."
sensor_mode = SENSOR_OFF //Hey who's this guy on the Syndicate Shuttle??
random_sensor = FALSE
@@ -284,7 +281,6 @@
desc = "A tough jumpsuit woven from alloy threads. It can take on the appearance of other jumpsuits."
icon_state = "engine"
item_state = "engi_suit"
- item_color = "engine"
/obj/item/clothing/under/chameleon/Initialize()
. = ..()
@@ -394,7 +390,6 @@
name = "grey cap"
desc = "It's a baseball hat in a tasteful grey colour."
icon_state = "greysoft"
- item_color = "grey"
resistance_flags = NONE
armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
@@ -494,7 +489,6 @@
/obj/item/clothing/shoes/chameleon
name = "black shoes"
icon_state = "black"
- item_color = "black"
desc = "A pair of black shoes."
permeability_coefficient = 0.05
resistance_flags = NONE
@@ -520,7 +514,6 @@
/obj/item/clothing/shoes/chameleon/noslip
name = "black shoes"
icon_state = "black"
- item_color = "black"
desc = "A pair of black shoes."
clothing_flags = NOSLIP
@@ -639,7 +632,6 @@
desc = "A neosilk clip-on tie."
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "blacktie"
- item_color = "blacktie"
resistance_flags = NONE
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 780eda532b..402d16e7ec 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -190,7 +190,7 @@ BLIND // can't see anything
/proc/generate_female_clothing(index,t_color,icon,type)
var/icon/female_clothing_icon = icon("icon"=icon, "icon_state"=t_color)
- var/icon/female_s = icon("icon"='icons/mob/uniform.dmi', "icon_state"="[(type == FEMALE_UNIFORM_FULL) ? "female_full" : "female_top"]")
+ var/icon/female_s = icon("icon"='icons/mob/clothing/uniform.dmi', "icon_state"="[(type == FEMALE_UNIFORM_FULL) ? "female_full" : "female_top"]")
female_clothing_icon.Blend(female_s, ICON_MULTIPLY)
female_clothing_icon = fcopy_rsc(female_clothing_icon)
GLOB.female_clothing_icons[index] = female_clothing_icon
@@ -445,11 +445,11 @@ BLIND // can't see anything
/obj/item/clothing/update_overlays() // Polychrome stuff
. = ..()
if(hasprimary) //Checks if the overlay is enabled
- var/mutable_appearance/primary_overlay = mutable_appearance(icon, "[item_color]-primary", color = primary_color) //Automagically picks overlays
+ var/mutable_appearance/primary_overlay = mutable_appearance(icon, "[item_state]-primary", color = primary_color) //Automagically picks overlays
. += primary_overlay //Applies the coloured overlay onto the item sprite. but NOT the mob sprite.
if(hassecondary)
- var/mutable_appearance/secondary_overlay = mutable_appearance(icon, "[item_color]-secondary", color = secondary_color)
+ var/mutable_appearance/secondary_overlay = mutable_appearance(icon, "[item_state]-secondary", color = secondary_color)
. += secondary_overlay
if(hastertiary)
- var/mutable_appearance/tertiary_overlay = mutable_appearance(icon, "[item_color]-tertiary", color = tertiary_color)
- . += tertiary_overlay
\ No newline at end of file
+ var/mutable_appearance/tertiary_overlay = mutable_appearance(icon, "[item_state]-tertiary", color = tertiary_color)
+ . += tertiary_overlay
diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm
index 66dcf89a7a..aff86f62f1 100644
--- a/code/modules/clothing/glasses/_glasses.dm
+++ b/code/modules/clothing/glasses/_glasses.dm
@@ -132,7 +132,7 @@
name = "prescription night vision goggles"
desc = "NVGs but for those with nearsightedness."
vision_correction = 1
-
+
/obj/item/clothing/glasses/night/syndicate
name = "combat night vision goggles"
desc = "See everything, without fear."
@@ -350,7 +350,7 @@
. = list()
if(!isinhands && ishuman(loc) && !colored_before)
var/mob/living/carbon/human/H = loc
- var/mutable_appearance/M = mutable_appearance('icons/mob/eyes.dmi', "blindfoldwhite")
+ var/mutable_appearance/M = mutable_appearance('icons/mob/clothing/eyes.dmi', "blindfoldwhite")
M.appearance_flags |= RESET_COLOR
M.color = "#[H.eye_color]"
. += M
diff --git a/code/modules/clothing/glasses/phantomthief.dm b/code/modules/clothing/glasses/phantomthief.dm
index 1c9afcfd6f..92eaaef35b 100644
--- a/code/modules/clothing/glasses/phantomthief.dm
+++ b/code/modules/clothing/glasses/phantomthief.dm
@@ -1,7 +1,7 @@
/obj/item/clothing/glasses/phantomthief
name = "suspicious paper mask"
desc = "A cheap, Syndicate-branded paper face mask. They'll never see it coming."
- alternate_worn_icon = 'icons/mob/mask.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/mask.dmi'
icon = 'icons/obj/clothing/masks.dmi'
icon_state = "s-ninja"
item_state = "s-ninja"
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index e2af067e8c..77f06a8a74 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -1,3 +1,6 @@
+/obj/item/clothing/gloves/color
+ dying_key = DYE_REGISTRY_GLOVES
+
/obj/item/clothing/gloves/color/yellow
desc = "These gloves will protect the wearer from electric shock."
name = "insulated gloves"
@@ -5,7 +8,6 @@
item_state = "ygloves"
siemens_coefficient = 0
permeability_coefficient = 0.05
- item_color="yellow"
resistance_flags = NONE
var/can_be_cut = 1
@@ -16,7 +18,6 @@
item_state = "ygloves"
siemens_coefficient = 1 //Set to a default of 1, gets overridden in New()
permeability_coefficient = 0.05
- item_color="yellow"
resistance_flags = NONE
var/can_be_cut = 1
@@ -70,21 +71,14 @@
name = "black gloves"
icon_state = "black"
item_state = "blackgloves"
- item_color="black"
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
resistance_flags = NONE
- var/can_be_cut = 1
+ var/can_be_cut = TRUE
strip_mod = 1.2
-/obj/item/clothing/gloves/color/black/hos
- item_color = "hosred" //Exists for washing machines. Is not different from black gloves in any way.
-
-/obj/item/clothing/gloves/color/black/ce
- item_color = "chief" //Exists for washing machines. Is not different from black gloves in any way.
-
/obj/item/clothing/gloves/color/black/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/wirecutters))
if(can_be_cut && icon_state == initial(icon_state))//only if not dyed
@@ -99,15 +93,12 @@
desc = "A pair of gloves, they don't look special in any way."
icon_state = "orange"
item_state = "orangegloves"
- item_color="orange"
/obj/item/clothing/gloves/color/red
name = "red gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "red"
item_state = "redgloves"
- item_color = "red"
-
/obj/item/clothing/gloves/color/red/insulated
name = "insulated gloves"
@@ -121,68 +112,48 @@
desc = "A pair of gloves, they don't look special in any way."
icon_state = "rainbow"
item_state = "rainbowgloves"
- item_color = "rainbow"
-
-/obj/item/clothing/gloves/color/rainbow/clown
- item_color = "clown"
/obj/item/clothing/gloves/color/blue
name = "blue gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "blue"
item_state = "bluegloves"
- item_color="blue"
/obj/item/clothing/gloves/color/purple
name = "purple gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "purple"
item_state = "purplegloves"
- item_color="purple"
/obj/item/clothing/gloves/color/green
name = "green gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "green"
item_state = "greengloves"
- item_color="green"
/obj/item/clothing/gloves/color/grey
name = "grey gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "gray"
item_state = "graygloves"
- item_color="grey"
-
-/obj/item/clothing/gloves/color/grey/rd
- item_color = "director" //Exists for washing machines. Is not different from gray gloves in any way.
-
-/obj/item/clothing/gloves/color/grey/hop
- item_color = "hop" //Exists for washing machines. Is not different from gray gloves in any way.
/obj/item/clothing/gloves/color/light_brown
name = "light brown gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "lightbrown"
item_state = "lightbrowngloves"
- item_color="light brown"
/obj/item/clothing/gloves/color/brown
name = "brown gloves"
desc = "A pair of gloves, they don't look special in any way."
icon_state = "brown"
item_state = "browngloves"
- item_color="brown"
-
-/obj/item/clothing/gloves/color/brown/cargo
- item_color = "cargo" //Exists for washing machines. Is not different from brown gloves in any way.
/obj/item/clothing/gloves/color/captain
desc = "Regal blue gloves, with a nice gold trim, a diamond anti-shock coating, and an integrated thermal barrier. Swanky."
name = "captain's gloves"
icon_state = "captain"
item_state = "egloves"
- item_color = "captain"
siemens_coefficient = 0
permeability_coefficient = 0.05
cold_protection = HANDS
@@ -199,7 +170,6 @@
item_state = "lgloves"
siemens_coefficient = 0.3
permeability_coefficient = 0.01
- item_color="mime"
transfer_prints = TRUE
resistance_flags = NONE
var/carrytrait = TRAIT_QUICK_CARRY
@@ -218,7 +188,6 @@
desc = "Pricy sterile gloves that are stronger than latex. Transfers advanced paramedical knowledge to the wearer via the use of nanochips."
icon_state = "nitrile"
item_state = "nitrilegloves"
- item_color = "cmo"
transfer_prints = FALSE
carrytrait = TRAIT_QUICKER_CARRY
@@ -236,7 +205,3 @@
desc = "These look pretty fancy."
icon_state = "white"
item_state = "wgloves"
- item_color="white"
-
-/obj/item/clothing/gloves/color/white/redcoat
- item_color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index 3d7315b88d..a37dc8b638 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -4,7 +4,6 @@
desc = "Plain black gloves without fingertips for the hard working."
icon_state = "fingerless"
item_state = "fingerless"
- item_color = null //So they don't wash.
transfer_prints = TRUE
strip_delay = 40
equip_delay_other = 20
@@ -177,7 +176,6 @@
desc = "For when you're expecting to get slapped on the wrist. Offers modest protection to your arms."
icon_state = "bracers"
item_state = "bracers"
- item_color = null //So they don't wash.
transfer_prints = TRUE
strip_delay = 40
equip_delay_other = 20
diff --git a/code/modules/clothing/head/beanie.dm b/code/modules/clothing/head/beanie.dm
index a5fb04d393..4117e88811 100644
--- a/code/modules/clothing/head/beanie.dm
+++ b/code/modules/clothing/head/beanie.dm
@@ -5,7 +5,6 @@
name = "white beanie"
desc = "A stylish beanie. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their heads."
icon_state = "beanie" //Default white
- item_color = "beanie"
/obj/item/clothing/head/beanie/black
name = "black beanie"
@@ -52,33 +51,27 @@
/obj/item/clothing/head/beanie/christmas
name = "christmas beanie"
icon_state = "beaniechristmas"
- item_color = "beaniechristmas"
/obj/item/clothing/head/beanie/striped
name = "striped beanie"
icon_state = "beaniestriped"
- item_color = "beaniestriped"
/obj/item/clothing/head/beanie/stripedred
name = "red striped beanie"
icon_state = "beaniestripedred"
- item_color = "beaniestripedred"
/obj/item/clothing/head/beanie/stripedblue
name = "blue striped beanie"
icon_state = "beaniestripedblue"
- item_color = "beaniestripedblue"
/obj/item/clothing/head/beanie/stripedgreen
name = "green striped beanie"
icon_state = "beaniestripedgreen"
- item_color = "beaniestripedgreen"
/obj/item/clothing/head/beanie/durathread
name = "durathread beanie"
desc = "A beanie made from durathread, its resilient fibres provide some protection to the wearer."
icon_state = "beaniedurathread"
- item_color = null
armor = list("melee" = 25, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 30, "bio" = 15, "rad" = 20, "fire" = 100, "acid" = 50)
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index 29b0aa9552..73e626bcd1 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -7,7 +7,7 @@
light_color = "#FFCC66"
var/power_on = 0.8
var/on = FALSE
- item_color = "yellow" //Determines used sprites: hardhat[on]_[item_color] and hardhat[on]_[item_color]2 (lying down sprite)
+ var/hat_type = "yellow" //Determines used sprites: hardhat[on]_[hat_type] and hardhat[on]_[hat_type]2 (lying down sprite)
armor = list("melee" = 15, "bullet" = 5, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 10, "rad" = 20, "fire" = 100, "acid" = 50)
flags_inv = 0
actions_types = list(/datum/action/item_action/toggle_helmet_light)
@@ -33,8 +33,8 @@
update_icon()
/obj/item/clothing/head/hardhat/update_icon_state()
- icon_state = "hardhat[on]_[item_color]"
- item_state = "hardhat[on]_[item_color]"
+ icon_state = "hardhat[on]_[hat_type]"
+ item_state = "hardhat[on]_[hat_type]"
/obj/item/clothing/head/hardhat/proc/turn_on(mob/user)
set_light(brightness_on, power_on)
@@ -45,13 +45,13 @@
/obj/item/clothing/head/hardhat/orange
icon_state = "hardhat0_orange"
item_state = "hardhat0_orange"
- item_color = "orange"
+ hat_type = "orange"
dog_fashion = null
/obj/item/clothing/head/hardhat/red
icon_state = "hardhat0_red"
item_state = "hardhat0_red"
- item_color = "red"
+ hat_type = "red"
dog_fashion = null
name = "firefighter helmet"
clothing_flags = STOPSPRESSUREDAMAGE
@@ -63,7 +63,7 @@
/obj/item/clothing/head/hardhat/white
icon_state = "hardhat0_white"
item_state = "hardhat0_white"
- item_color = "white"
+ hat_type = "white"
clothing_flags = STOPSPRESSUREDAMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
@@ -74,13 +74,13 @@
/obj/item/clothing/head/hardhat/dblue
icon_state = "hardhat0_dblue"
item_state = "hardhat0_dblue"
- item_color = "dblue"
+ hat_type = "dblue"
dog_fashion = null
/obj/item/clothing/head/hardhat/atmos
icon_state = "hardhat0_atmos"
item_state = "hardhat0_atmos"
- item_color = "atmos"
+ hat_type = "atmos"
dog_fashion = null
name = "atmospheric technician's firefighting helmet"
desc = "A firefighter's helmet, able to keep the user cool in any situation."
@@ -127,9 +127,9 @@
/obj/item/clothing/head/hardhat/weldhat/worn_overlays(isinhands, icon_file, style_flags = NONE)
. = ..()
if(!isinhands)
- . += mutable_appearance('icons/mob/head.dmi', "weldhelmet")
+ . += mutable_appearance('icons/mob/clothing/head.dmi', "weldhelmet")
if(!up)
- . += mutable_appearance('icons/mob/head.dmi', "weldvisor")
+ . += mutable_appearance('icons/mob/clothing/head.dmi', "weldvisor")
/obj/item/clothing/head/hardhat/weldhat/update_overlays()
. = ..()
@@ -139,14 +139,14 @@
/obj/item/clothing/head/hardhat/weldhat/orange
icon_state = "hardhat0_orange"
item_state = "hardhat0_orange"
- item_color = "orange"
+ hat_type = "orange"
/obj/item/clothing/head/hardhat/weldhat/white
desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight AND welding shield!" //This bulb is not smaller
icon_state = "hardhat0_white"
item_state = "hardhat0_white"
brightness_on = 4 //Boss always takes the best stuff
- item_color = "white"
+ hat_type = "white"
clothing_flags = STOPSPRESSUREDAMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
@@ -156,4 +156,4 @@
/obj/item/clothing/head/hardhat/weldhat/dblue
icon_state = "hardhat0_dblue"
item_state = "hardhat0_dblue"
- item_color = "dblue"
\ No newline at end of file
+ hat_type = "dblue"
\ No newline at end of file
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index 9253c4e9aa..638a0c2f23 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -364,7 +364,6 @@
name = "durathread beret"
desc = "A beret made from durathread, its resilient fibres provide some protection to the wearer."
icon_state = "beretdurathread"
- item_color = null
armor = list("melee" = 25, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 30, "bio" = 15, "rad" = 20, "fire" = 100, "acid" = 50)
#undef DRILL_DEFAULT
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index 189fb46e46..2cb043ba88 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -372,14 +372,12 @@
name = "Telegram cap"
desc = "A bright red cap warn by hotel staff. Or people who want to be a singing telegram"
icon_state = "telegram"
- item_color = "telegram"
dog_fashion = /datum/dog_fashion/head/telegram
/obj/item/clothing/head/colour
name = "Singer cap"
desc = "A light white hat that has bands of color. Just makes you want to sing and dance!"
icon_state = "colour"
- item_color = "colour"
dog_fashion = /datum/dog_fashion/head/colour
/obj/item/clothing/head/christmashat
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index d5632a1e4c..6ba58016f2 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -42,7 +42,6 @@
desc = "You put the cake on your head. Brilliant."
icon_state = "hardhat0_cakehat"
item_state = "hardhat0_cakehat"
- item_color = "cakehat"
hitsound = 'sound/weapons/tap.ogg'
flags_inv = HIDEEARS|HIDEHAIR
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
@@ -114,7 +113,6 @@
desc = "A jack o' lantern! Believed to ward off evil spirits."
icon_state = "hardhat0_pumpkin"
item_state = "hardhat0_pumpkin"
- item_color = "pumpkin"
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
brightness_on = 2 //luminosity when on
@@ -151,7 +149,6 @@
desc = "Some fake antlers and a very fake red nose."
icon_state = "hardhat0_reindeer"
item_state = "hardhat0_reindeer"
- item_color = "reindeer"
flags_inv = 0
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
brightness_on = 1 //luminosity when on
diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm
index 19ff6bc8b2..2f4bd44e4f 100644
--- a/code/modules/clothing/head/soft_caps.dm
+++ b/code/modules/clothing/head/soft_caps.dm
@@ -3,14 +3,14 @@
desc = "It's a baseball hat in a tasteless yellow colour."
icon_state = "cargosoft"
item_state = "helmet"
- item_color = "cargo"
+ var/soft_type = "cargo"
dog_fashion = /datum/dog_fashion/head/cargo_tech
var/flipped = 0
/obj/item/clothing/head/soft/dropped(mob/user)
- icon_state = "[item_color]soft"
+ icon_state = "[soft_type]soft"
flipped = FALSE
return ..()
@@ -33,10 +33,10 @@
if(!user.incapacitated())
src.flipped = !src.flipped
if(src.flipped)
- icon_state = "[item_color]soft_flipped"
+ icon_state = "[soft_type]soft_flipped"
to_chat(user, "You flip the hat backwards.")
else
- icon_state = "[item_color]soft"
+ icon_state = "[soft_type]soft"
to_chat(user, "You flip the hat back in normal position.")
usr.update_inv_head() //so our mob-overlays update
@@ -48,77 +48,77 @@
name = "red cap"
desc = "It's a baseball hat in a tasteless red colour."
icon_state = "redsoft"
- item_color = "red"
+ soft_type = "red"
dog_fashion = null
/obj/item/clothing/head/soft/blue
name = "blue cap"
desc = "It's a baseball hat in a tasteless blue colour."
icon_state = "bluesoft"
- item_color = "blue"
+ soft_type = "blue"
dog_fashion = null
/obj/item/clothing/head/soft/green
name = "green cap"
desc = "It's a baseball hat in a tasteless green colour."
icon_state = "greensoft"
- item_color = "green"
+ soft_type = "green"
dog_fashion = null
/obj/item/clothing/head/soft/yellow
name = "yellow cap"
desc = "It's a baseball hat in a tasteless yellow colour."
icon_state = "yellowsoft"
- item_color = "yellow"
+ soft_type = "yellow"
dog_fashion = null
/obj/item/clothing/head/soft/grey
name = "grey cap"
desc = "It's a baseball hat in a tasteful grey colour."
icon_state = "greysoft"
- item_color = "grey"
+ soft_type = "grey"
dog_fashion = null
/obj/item/clothing/head/soft/orange
name = "orange cap"
desc = "It's a baseball hat in a tasteless orange colour."
icon_state = "orangesoft"
- item_color = "orange"
+ soft_type = "orange"
dog_fashion = null
/obj/item/clothing/head/soft/mime
name = "white cap"
desc = "It's a baseball hat in a tasteless white colour."
icon_state = "mimesoft"
- item_color = "mime"
+ soft_type = "mime"
dog_fashion = null
/obj/item/clothing/head/soft/purple
name = "purple cap"
desc = "It's a baseball hat in a tasteless purple colour."
icon_state = "purplesoft"
- item_color = "purple"
+ soft_type = "purple"
dog_fashion = null
/obj/item/clothing/head/soft/black
name = "black cap"
desc = "It's a baseball hat in a tasteless black colour."
icon_state = "blacksoft"
- item_color = "black"
+ soft_type = "black"
dog_fashion = null
/obj/item/clothing/head/soft/rainbow
name = "rainbow cap"
desc = "It's a baseball hat in a bright rainbow of colors."
icon_state = "rainbowsoft"
- item_color = "rainbow"
+ soft_type = "rainbow"
dog_fashion = null
/obj/item/clothing/head/soft/sec
name = "security cap"
desc = "It's a robust baseball hat in tasteful red colour."
icon_state = "secsoft"
- item_color = "sec"
+ soft_type = "sec"
armor = list("melee" = 30, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50)
strip_delay = 60
dog_fashion = null
@@ -127,14 +127,14 @@
name = "EMT cap"
desc = "It's a baseball hat with a dark turquoise color and a reflective cross on the top."
icon_state = "emtsoft"
- item_color = "emt"
+ soft_type = "emt"
dog_fashion = null
/obj/item/clothing/head/soft/baseball
name = "baseball cap"
desc = "It's a robust baseball hat, this one belongs to syndicate major league team."
icon_state = "baseballsoft"
- item_color = "baseballsoft"
+ soft_type = "baseballsoft"
item_state = "baseballsoft"
flags_inv = HIDEEYES|HIDEFACE
armor = list("melee" = 35, "bullet" = 35, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 90)
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index 38f0a7c20a..144b17e510 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -68,6 +68,7 @@
clothing_flags = ALLOWINTERNALS
icon_state = "clown"
item_state = "clown_hat"
+ dye_color = "clown"
flags_cover = MASKCOVERSEYES
resistance_flags = FLAMMABLE
actions_types = list(/datum/action/item_action/adjust)
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index b6579a3cd8..3813ced2c4 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -132,7 +132,6 @@
/obj/item/clothing/mask/cowmask
name = "Cow mask with a builtin voice modulator."
desc = "A rubber cow mask,"
- icon = 'icons/mob/mask.dmi'
icon_state = "cowmask"
item_state = "cowmask"
clothing_flags = VOICEBOX_TOGGLABLE
diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm
index 530af7777d..069ab43dd9 100644
--- a/code/modules/clothing/neck/_neck.dm
+++ b/code/modules/clothing/neck/_neck.dm
@@ -21,35 +21,29 @@
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "bluetie"
item_state = "" //no inhands
- item_color = "bluetie"
w_class = WEIGHT_CLASS_SMALL
/obj/item/clothing/neck/tie/blue
name = "blue tie"
icon_state = "bluetie"
- item_color = "bluetie"
/obj/item/clothing/neck/tie/red
name = "red tie"
icon_state = "redtie"
- item_color = "redtie"
/obj/item/clothing/neck/tie/black
name = "black tie"
icon_state = "blacktie"
- item_color = "blacktie"
/obj/item/clothing/neck/tie/horrible
name = "horrible tie"
desc = "A neosilk clip-on tie. This one is disgusting."
icon_state = "horribletie"
- item_color = "horribletie"
/obj/item/clothing/neck/stethoscope
name = "stethoscope"
desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing."
icon_state = "stethoscope"
- item_color = "stethoscope"
/obj/item/clothing/neck/stethoscope/suicide_act(mob/living/carbon/user)
user.visible_message("[user] puts \the [src] to [user.p_their()] chest! It looks like [user.p_they()] wont hear much!")
@@ -94,7 +88,6 @@
name = "white scarf"
icon_state = "scarf"
desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks."
- item_color = "scarf"
dog_fashion = /datum/dog_fashion/head
/obj/item/clothing/neck/scarf/black
@@ -148,12 +141,10 @@
/obj/item/clothing/neck/scarf/zebra
name = "zebra scarf"
icon_state = "zebrascarf"
- item_color = "zebrascarf"
/obj/item/clothing/neck/scarf/christmas
name = "christmas scarf"
icon_state = "christmasscarf"
- item_color = "christmasscarf"
//The three following scarves don't have the scarf subtype
//This is because Ian can equip anything from that subtype
@@ -161,17 +152,14 @@
/obj/item/clothing/neck/stripedredscarf
name = "striped red scarf"
icon_state = "stripedredscarf"
- item_color = "stripedredscarf"
/obj/item/clothing/neck/stripedgreenscarf
name = "striped green scarf"
icon_state = "stripedgreenscarf"
- item_color = "stripedgreenscarf"
/obj/item/clothing/neck/stripedbluescarf
name = "striped blue scarf"
icon_state = "stripedbluescarf"
- item_color = "stripedbluescarf"
///////////
//COLLARS//
@@ -181,8 +169,7 @@
name = "pet collar"
desc = "It's for pets. Though you probably could wear it yourself, you'd doubtless be the subject of ridicule. It seems to be made out of a polychromic material."
icon_state = "petcollar"
- item_color = "petcollar"
- alternate_worn_icon = 'icons/mob/neck.dmi' //Because, as it appears, the item itself is normally not directly aware of its worn overlays, so this is about the easiest way, without adding a new var.
+ mob_overlay_icon = 'icons/mob/clothing/neck.dmi' //Because, as it appears, the item itself is normally not directly aware of its worn overlays, so this is about the easiest way, without adding a new var.
hasprimary = TRUE
primary_color = "#00BBBB"
pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar
@@ -197,22 +184,21 @@
if(hasprimary | hassecondary | hastertiary)
if(!isinhands) //prevents the worn sprites from showing up if you're just holding them
if(hasprimary) //checks if overlays are enabled
- var/mutable_appearance/primary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-primary") //automagical sprite selection
+ var/mutable_appearance/primary_worn = mutable_appearance(mob_overlay_icon, "[icon_state]-primary") //automagical sprite selection
primary_worn.color = primary_color //colors the overlay
. += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite
if(hassecondary)
- var/mutable_appearance/secondary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-secondary")
+ var/mutable_appearance/secondary_worn = mutable_appearance(mob_overlay_icon, "[icon_state]-secondary")
secondary_worn.color = secondary_color
. += secondary_worn
if(hastertiary)
- var/mutable_appearance/tertiary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-tertiary")
+ var/mutable_appearance/tertiary_worn = mutable_appearance(mob_overlay_icon, "[icon_state]-tertiary")
tertiary_worn.color = tertiary_color
. += tertiary_worn
/obj/item/clothing/neck/petcollar/leather
name = "leather pet collar"
icon_state = "leathercollar"
- item_color = "leathercollar"
hasprimary = TRUE
hassecondary = TRUE
@@ -223,7 +209,6 @@
desc = "Quite fashionable... if you're somebody who's just read their first BDSM-themed erotica novel."
name = "choker"
icon_state = "choker"
- item_color = "choker"
hasprimary = TRUE
primary_color = "#222222"
@@ -253,7 +238,6 @@
/obj/item/clothing/neck/petcollar/locked/leather
name = "leather pet collar"
icon_state = "leathercollar"
- item_color = "leathercollar"
hasprimary = TRUE
hassecondary = TRUE
@@ -264,7 +248,6 @@
name = "choker"
desc = "Quite fashionable... if you're somebody who's just read their first BDSM-themed erotica novel."
icon_state = "choker"
- item_color = "choker"
hasprimary = TRUE
primary_color = "#222222"
@@ -290,7 +273,6 @@
desc = "Damn, it feels good to be a gangster."
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "bling"
- item_color = "bling"
//////////////////////////////////
//VERY SUPER BADASS NECKERCHIEFS//
@@ -304,7 +286,7 @@ obj/item/clothing/neck/neckerchief
/obj/item/clothing/neck/neckerchief/worn_overlays(isinhands)
. = ..()
if(!isinhands)
- var/mutable_appearance/realOverlay = mutable_appearance('icons/mob/mask.dmi', icon_state)
+ var/mutable_appearance/realOverlay = mutable_appearance('icons/mob/clothing/mask.dmi', icon_state)
realOverlay.pixel_y = -3
. += realOverlay
diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm
index 4c6d3a8f88..471c7623fd 100644
--- a/code/modules/clothing/shoes/_shoes.dm
+++ b/code/modules/clothing/shoes/_shoes.dm
@@ -61,7 +61,7 @@
if(damaged_clothes)
. += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe")
if(bloody)
- var/file2use = style_flags & STYLE_DIGITIGRADE ? 'icons/mob/feet_digi.dmi' : 'icons/effects/blood.dmi'
+ var/file2use = style_flags & STYLE_DIGITIGRADE ? 'icons/mob/clothing/feet_digi.dmi' : 'icons/effects/blood.dmi'
. += mutable_appearance(file2use, "shoeblood", color = blood_DNA_to_color())
/obj/item/clothing/shoes/equipped(mob/user, slot)
diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm
index c45b9b443a..df0f03f614 100644
--- a/code/modules/clothing/shoes/colour.dm
+++ b/code/modules/clothing/shoes/colour.dm
@@ -1,9 +1,9 @@
/obj/item/clothing/shoes/sneakers
+ dying_key = DYE_REGISTRY_SNEAKERS
/obj/item/clothing/shoes/sneakers/black
name = "black shoes"
icon_state = "black"
- item_color = "black"
desc = "A pair of black shoes."
cold_protection = FEET
@@ -11,80 +11,49 @@
heat_protection = FEET
max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT
-/obj/item/clothing/shoes/sneakers/black/redcoat
- item_color = "redcoat" //Exists for washing machines. Is not different from black shoes in any way.
-
/obj/item/clothing/shoes/sneakers/brown
name = "brown shoes"
desc = "A pair of brown shoes."
icon_state = "brown"
- item_color = "brown"
-
-/obj/item/clothing/shoes/sneakers/brown/captain
- item_color = "captain" //Exists for washing machines. Is not different from brown shoes in any way.
-
-/obj/item/clothing/shoes/sneakers/brown/hop
- item_color = "hop" //Exists for washing machines. Is not different from brown shoes in any way.
-
-/obj/item/clothing/shoes/sneakers/brown/ce
- item_color = "chief" //Exists for washing machines. Is not different from brown shoes in any way.
-
-/obj/item/clothing/shoes/sneakers/brown/rd
- item_color = "director" //Exists for washing machines. Is not different from brown shoes in any way.
-
-/obj/item/clothing/shoes/sneakers/brown/cmo
- item_color = "medical" //Exists for washing machines. Is not different from brown shoes in any way.
-
-/obj/item/clothing/shoes/sneakers/brown/qm
- item_color = "cargo" //Exists for washing machines. Is not different from brown shoes in any way.
/obj/item/clothing/shoes/sneakers/blue
name = "blue shoes"
icon_state = "blue"
- item_color = "blue"
/obj/item/clothing/shoes/sneakers/green
name = "green shoes"
icon_state = "green"
- item_color = "green"
/obj/item/clothing/shoes/sneakers/yellow
name = "yellow shoes"
icon_state = "yellow"
- item_color = "yellow"
/obj/item/clothing/shoes/sneakers/purple
name = "purple shoes"
icon_state = "purple"
- item_color = "purple"
/obj/item/clothing/shoes/sneakers/brown
name = "brown shoes"
icon_state = "brown"
- item_color = "brown"
/obj/item/clothing/shoes/sneakers/red
name = "red shoes"
desc = "Stylish red shoes."
icon_state = "red"
- item_color = "red"
/obj/item/clothing/shoes/sneakers/white
name = "white shoes"
icon_state = "white"
permeability_coefficient = 0.01
- item_color = "white"
/obj/item/clothing/shoes/sneakers/rainbow
name = "rainbow shoes"
desc = "Very gay shoes."
icon_state = "rain_bow"
- item_color = "rainbow"
/obj/item/clothing/shoes/sneakers/orange
name = "orange shoes"
icon_state = "orange"
- item_color = "orange"
/obj/item/clothing/shoes/sneakers/orange/attack_self(mob/user)
if (src.chained)
@@ -120,5 +89,4 @@
to_chat(c, "You need help taking these off!")
return
return ..()
-
-
\ No newline at end of file
+
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 21e522095a..7b6b73bec4 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -4,7 +4,6 @@
/obj/item/clothing/shoes/sneakers/mime
name = "mime shoes"
icon_state = "mime"
- item_color = "mime"
/obj/item/clothing/shoes/combat //basic syndicate combat boots for nuke ops and mob corpses
name = "combat boots"
@@ -124,7 +123,6 @@
icon_state = "jackboots"
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
- item_color = "hosred"
strip_delay = 50
equip_delay_other = 50
resistance_flags = NONE
@@ -181,7 +179,6 @@
name = "\improper Nar'Sien invoker boots"
desc = "A pair of boots worn by the followers of Nar'Sie."
icon_state = "cult"
- item_color = "cult"
cold_protection = FEET
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
heat_protection = FEET
@@ -227,7 +224,6 @@
name = "jump boots"
desc = "A specialized pair of combat boots with a built-in propulsion system for rapid foward movement."
icon_state = "jetboots"
- item_color = "hosred"
resistance_flags = FIRE_PROOF
pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
actions_types = list(/datum/action/item_action/bhop)
diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm
index 4311aa5166..94ccdf94c6 100644
--- a/code/modules/clothing/spacesuits/chronosuit.dm
+++ b/code/modules/clothing/spacesuits/chronosuit.dm
@@ -321,7 +321,7 @@
check_flags = AB_CHECK_CONSCIOUS //|AB_CHECK_INSIDE
var/obj/item/clothing/suit/space/chronos/chronosuit = null
-/datum/action/innate/chrono_teleport/IsAvailable()
+/datum/action/innate/chrono_teleport/IsAvailable(silent = FALSE)
return (chronosuit && chronosuit.activated && chronosuit.camera && !chronosuit.teleporting)
/datum/action/innate/chrono_teleport/Activate()
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 26767395ed..da979cd516 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -10,7 +10,7 @@
var/brightness_on = 4 //luminosity when on
var/on = FALSE
var/obj/item/clothing/suit/space/hardsuit/suit
- item_color = "engineering" //Determines used sprites: hardsuit[on]-[color] and hardsuit[on]-[color]2 (lying down sprite)
+ var/hardsuit_type = "engineering" //Determines used sprites: hardsuit[on]-[type]
actions_types = list(/datum/action/item_action/toggle_helmet_light)
var/rad_count = 0
@@ -30,7 +30,7 @@
/obj/item/clothing/head/helmet/space/hardsuit/attack_self(mob/user)
on = !on
- icon_state = "[basestate][on]-[item_color]"
+ icon_state = "[basestate][on]-[hardsuit_type]"
user.update_inv_head() //so our mob-overlays update
if(on)
@@ -103,6 +103,7 @@
actions_types = list(/datum/action/item_action/toggle_helmet)
var/helmettype = /obj/item/clothing/head/helmet/space/hardsuit
var/obj/item/tank/jetpack/suit/jetpack = null
+ var/hardsuit_type
/obj/item/clothing/suit/space/hardsuit/Initialize()
@@ -169,7 +170,7 @@
icon_state = "hardsuit0-engineering"
item_state = "eng_helm"
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75)
- item_color = "engineering"
+ hardsuit_type = "engineering"
resistance_flags = FIRE_PROOF
/obj/item/clothing/suit/space/hardsuit/engine
@@ -188,7 +189,7 @@
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has thermal shielding."
icon_state = "hardsuit0-atmospherics"
item_state = "atmo_helm"
- item_color = "atmospherics"
+ hardsuit_type = "atmospherics"
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 25, "fire" = 100, "acid" = 75)
heat_protection = HEAD //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
@@ -209,7 +210,7 @@
desc = "An advanced helmet designed for work in a hazardous, low pressure environment. Shines with a high polish."
icon_state = "hardsuit0-white"
item_state = "ce_helm"
- item_color = "white"
+ hardsuit_type = "white"
armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 90)
heat_protection = HEAD
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
@@ -231,7 +232,7 @@
desc = "A special helmet designed for work in a hazardous, low pressure environment. Has reinforced plating for wildlife encounters and dual floodlights."
icon_state = "hardsuit0-mining"
item_state = "mining_helm"
- item_color = "mining"
+ hardsuit_type = "mining"
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF
heat_protection = HEAD
@@ -267,7 +268,7 @@
alt_desc = "A dual-mode advanced helmet designed for work in special operations. It is in combat mode. Property of Gorlex Marauders."
icon_state = "hardsuit1-syndi"
item_state = "syndie_helm"
- item_color = "syndi"
+ hardsuit_type = "syndi"
armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90)
on = FALSE
var/obj/item/clothing/suit/space/hardsuit/syndi/linkedsuit = null
@@ -276,7 +277,7 @@
visor_flags = STOPSPRESSUREDAMAGE
/obj/item/clothing/head/helmet/space/hardsuit/syndi/update_icon_state()
- icon_state = "hardsuit[on]-[item_color]"
+ icon_state = "hardsuit[on]-[hardsuit_type]"
/obj/item/clothing/head/helmet/space/hardsuit/syndi/Initialize()
. = ..()
@@ -332,7 +333,7 @@
linkedsuit.clothing_flags &= ~STOPSPRESSUREDAMAGE
linkedsuit.cold_protection &= ~(CHEST | GROIN | LEGS | FEET | ARMS | HANDS)
- linkedsuit.icon_state = "hardsuit[on]-[item_color]"
+ linkedsuit.icon_state = "hardsuit[on]-[hardsuit_type]"
linkedsuit.update_icon()
user.update_inv_wear_suit()
user.update_inv_w_uniform()
@@ -344,7 +345,7 @@
alt_desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in combat mode. Property of Gorlex Marauders."
icon_state = "hardsuit1-syndi"
item_state = "syndie_hardsuit"
- item_color = "syndi"
+ hardsuit_type = "syndi"
w_class = WEIGHT_CLASS_NORMAL
armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90)
allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
@@ -358,7 +359,7 @@
desc = "An elite version of the syndicate helmet, with improved armour and fireproofing. It is in EVA mode. Property of Gorlex Marauders."
alt_desc = "An elite version of the syndicate helmet, with improved armour and fireproofing. It is in combat mode. Property of Gorlex Marauders."
icon_state = "hardsuit0-syndielite"
- item_color = "syndielite"
+ hardsuit_type = "syndielite"
armor = list("melee" = 60, "bullet" = 60, "laser" = 50, "energy" = 25, "bomb" = 55, "bio" = 100, "rad" = 70, "fire" = 100, "acid" = 100)
heat_protection = HEAD
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
@@ -375,7 +376,7 @@
desc = "An elite version of the syndicate hardsuit, with improved armour and fireproofing. It is in travel mode."
alt_desc = "An elite version of the syndicate hardsuit, with improved armour and fireproofing. It is in combat mode."
icon_state = "hardsuit0-syndielite"
- item_color = "syndielite"
+ hardsuit_type = "syndielite"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite
armor = list("melee" = 60, "bullet" = 60, "laser" = 50, "energy" = 25, "bomb" = 55, "bio" = 100, "rad" = 70, "fire" = 100, "acid" = 100)
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
@@ -394,7 +395,7 @@
alt_desc = "A dual-mode advanced helmet designed for any crime-fighting situation. It is in combat mode."
icon_state = "hardsuit1-owl"
item_state = "s_helmet"
- item_color = "owl"
+ hardsuit_type = "owl"
visor_flags_inv = 0
visor_flags = 0
on = FALSE
@@ -405,7 +406,7 @@
alt_desc = "A dual-mode advanced hardsuit designed for any crime-fighting situation. It is in combat mode."
icon_state = "hardsuit1-owl"
item_state = "s_suit"
- item_color = "owl"
+ hardsuit_type = "owl"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/owl
mutantrace_variation = STYLE_DIGITIGRADE
@@ -416,7 +417,7 @@
desc = "A bizarre gem-encrusted helmet that radiates magical energies."
icon_state = "hardsuit0-wiz"
item_state = "wiz_helm"
- item_color = "wiz"
+ hardsuit_type = "wiz"
resistance_flags = FIRE_PROOF | ACID_PROOF //No longer shall our kind be foiled by lone chemists with spray bottles!
armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 20, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100)
heat_protection = HEAD //Uncomment to enable firesuit protection
@@ -451,7 +452,7 @@
desc = "A special helmet designed for work in a hazardous, low pressure environment. Built with lightweight materials for extra comfort, but does not protect the eyes from intense light."
icon_state = "hardsuit0-medical"
item_state = "medical_helm"
- item_color = "medical"
+ hardsuit_type = "medical"
flash_protect = 0
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
@@ -484,7 +485,7 @@
name = "prototype hardsuit helmet"
desc = "A prototype helmet designed for research in a hazardous, low pressure environment. Scientific data flashes across the visor."
icon_state = "hardsuit0-rd"
- item_color = "rd"
+ hardsuit_type = "rd"
resistance_flags = ACID_PROOF | FIRE_PROOF
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 100, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 80)
@@ -526,7 +527,7 @@
desc = "A special helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor."
icon_state = "hardsuit0-sec"
item_state = "sec_helm"
- item_color = "sec"
+ hardsuit_type = "sec"
armor = list("melee" = 35, "bullet" = 15, "laser" = 30,"energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75)
/obj/item/clothing/suit/space/hardsuit/security
@@ -547,7 +548,7 @@
name = "head of security's hardsuit helmet"
desc = "A special bulky helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor."
icon_state = "hardsuit0-hos"
- item_color = "hos"
+ hardsuit_type = "hos"
armor = list("melee" = 45, "bullet" = 25, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 50, "fire" = 95, "acid" = 95)
/obj/item/clothing/suit/space/hardsuit/security/hos
@@ -596,7 +597,7 @@
icon_state = "hardsuit0-clown"
item_state = "hardsuit0-clown"
armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 30)
- item_color = "clown"
+ hardsuit_type = "clown"
/obj/item/clothing/suit/space/hardsuit/clown
name = "cosmohonk hardsuit"
@@ -622,7 +623,7 @@
icon_state = "hardsuit0-ancient"
item_state = "anc_helm"
armor = list("melee" = 30, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75)
- item_color = "ancient"
+ hardsuit_type = "ancient"
resistance_flags = FIRE_PROOF
/obj/item/clothing/suit/space/hardsuit/ancient
@@ -658,7 +659,7 @@
icon_state = "hardsuit0-ancient"
item_state = "anc_helm"
armor = list("melee" = 20, "bullet" = 15, "laser" = 15, "energy" = 45, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
- item_color = "ancient"
+ hardsuit_type = "ancient"
brightness_on = 16
flash_protect = 5 //We will not be flash by bombs
tint = 1
@@ -720,7 +721,7 @@
name = "soviet hardhelmet"
desc = "Crafted with the pride of the proletariat. The vengeful gaze of the visor roots out all fascists and capitalists."
item_state = "rig0-soviet"
- item_color = "soviet"
+ hardsuit_type = "soviet"
icon_state = "rig0-soviet"
armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 75)
mutantrace_variation = NONE
@@ -817,7 +818,7 @@
desc = "Standard issue hardsuit for playing capture the flag."
icon_state = "ert_medical"
item_state = "ert_medical"
- item_color = "ert_medical"
+ hardsuit_type = "ert_medical"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf
armor = list("melee" = 0, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 95)
slowdown = 0
@@ -831,7 +832,7 @@
name = "red shielded hardsuit"
icon_state = "ert_security"
item_state = "ert_security"
- item_color = "ert_security"
+ hardsuit_type = "ert_security"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/red
shield_state = "shield-red"
shield_on = "shield-red"
@@ -848,20 +849,20 @@
desc = "Standard issue hardsuit helmet for playing capture the flag."
icon_state = "hardsuit0-ert_medical"
item_state = "hardsuit0-ert_medical"
- item_color = "ert_medical"
+ hardsuit_type = "ert_medical"
armor = list("melee" = 0, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 95)
/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/red
icon_state = "hardsuit0-ert_security"
item_state = "hardsuit0-ert_security"
- item_color = "ert_security"
+ hardsuit_type = "ert_security"
/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/blue
name = "shielded hardsuit helmet"
desc = "Standard issue hardsuit helmet for playing capture the flag."
icon_state = "hardsuit0-ert_commander"
item_state = "hardsuit0-ert_commander"
- item_color = "ert_commander"
+ hardsuit_type = "ert_commander"
//////Syndicate Version
@@ -870,7 +871,7 @@
desc = "An advanced hardsuit with built in energy shielding."
icon_state = "hardsuit1-syndi"
item_state = "syndie_hardsuit"
- item_color = "syndi"
+ hardsuit_type = "syndi"
armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100)
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi
@@ -886,7 +887,7 @@
desc = "An advanced hardsuit helmet with built in energy shielding."
icon_state = "hardsuit1-syndi"
item_state = "syndie_helm"
- item_color = "syndi"
+ hardsuit_type = "syndi"
armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100)
///SWAT version
@@ -895,7 +896,7 @@
desc = "An advanced hardsuit favored by commandos for use in special operations."
icon_state = "deathsquad"
item_state = "swat_suit"
- item_color = "syndi"
+ hardsuit_type = "syndi"
max_charges = 4
current_charges = 4
recharge_delay = 15
@@ -910,7 +911,7 @@
desc = "A tactical helmet with built in energy shielding."
icon_state = "deathsquad"
item_state = "deathsquad"
- item_color = "syndi"
+ hardsuit_type = "syndi"
armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
strip_delay = 130
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
@@ -925,7 +926,7 @@
desc = "A helmet designed with both form and function in mind, it protects the user against physical trauma and hazardous conditions while also having polychromic light strips."
icon_state = "knight_cydonia"
item_state = "knight_yellow"
- item_color = null
+ hardsuit_type = null
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | LAVA_PROOF
heat_protection = HEAD
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index b01fe5eb8e..e1deb5d28c 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -174,7 +174,7 @@ Contains:
desc = "Standard issue command helmet for the ERT."
icon_state = "hardsuit0-ert_commander"
item_state = "hardsuit0-ert_commander"
- item_color = "ert_commander"
+ hardsuit_type = "ert_commander"
armor = list("melee" = 65, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80)
strip_delay = 130
brightness_on = 7
@@ -201,7 +201,7 @@ Contains:
desc = "Standard issue security helmet for the ERT."
icon_state = "hardsuit0-ert_security"
item_state = "hardsuit0-ert_security"
- item_color = "ert_security"
+ hardsuit_type = "ert_security"
/obj/item/clothing/suit/space/hardsuit/ert/sec
desc = "Standard issue security suit for the ERT."
@@ -214,7 +214,7 @@ Contains:
desc = "Standard issue engineer helmet for the ERT."
icon_state = "hardsuit0-ert_engineer"
item_state = "hardsuit0-ert_engineer"
- item_color = "ert_engineer"
+ hardsuit_type = "ert_engineer"
/obj/item/clothing/suit/space/hardsuit/ert/engi
desc = "Standard issue engineer suit for the ERT."
@@ -227,7 +227,7 @@ Contains:
desc = "Standard issue medical helmet for the ERT."
icon_state = "hardsuit0-ert_medical"
item_state = "hardsuit0-ert_medical"
- item_color = "ert_medical"
+ hardsuit_type = "ert_medical"
/obj/item/clothing/suit/space/hardsuit/ert/med
desc = "Standard issue medical suit for the ERT."
@@ -243,7 +243,7 @@ Contains:
desc = "Red alert command helmet for the ERT. This one is more armored than its standard version."
icon_state = "hardsuit0-ert_commander-alert"
item_state = "hardsuit0-ert_commander-alert"
- item_color = "ert_commander-alert"
+ hardsuit_type = "ert_commander-alert"
armor = list("melee" = 70, "bullet" = 55, "laser" = 50, "energy" = 50, "bomb" = 65, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
brightness_on = 8
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -263,7 +263,7 @@ Contains:
desc = "Red alert security helmet for the ERT. This one is more armored than its standard version."
icon_state = "hardsuit0-ert_security-alert"
item_state = "hardsuit0-ert_security-alert"
- item_color = "ert_security-alert"
+ hardsuit_type = "ert_security-alert"
/obj/item/clothing/suit/space/hardsuit/ert/alert/sec
desc = "Red alert security suit for the ERT. This one is more armored than its standard version."
@@ -276,7 +276,7 @@ Contains:
desc = "Red alert engineer helmet for the ERT. This one is more armored than its standard version."
icon_state = "hardsuit0-ert_engineer-alert"
item_state = "hardsuit0-ert_engineer-alert"
- item_color = "ert_engineer-alert"
+ hardsuit_type = "ert_engineer-alert"
/obj/item/clothing/suit/space/hardsuit/ert/alert/engi
desc = "Red alert engineer suit for the ERT. This one is more armored than its standard version."
@@ -289,7 +289,7 @@ Contains:
desc = "Red alert medical helmet for the ERT. This one is more armored than its standard version."
icon_state = "hardsuit0-ert_medical-alert"
item_state = "hardsuit0-ert_medical-alert"
- item_color = "ert_medical-alert"
+ hardsuit_type = "ert_medical-alert"
/obj/item/clothing/suit/space/hardsuit/ert/alert/med
desc = "Red alert medical suit for the ERT. This one is more armored than its standard version."
@@ -320,7 +320,6 @@ Contains:
icon_state = "cespace_helmet"
item_state = "nothing"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0)
- item_color = "engineering"
resistance_flags = FIRE_PROOF
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
actions_types = list()
@@ -391,7 +390,7 @@ Contains:
desc = "A helmet worn by those who deal with paranormal threats for a living."
icon_state = "hardsuit0-prt"
item_state = "hardsuit0-prt"
- item_color = "knight_grey"
+ hardsuit_type = "knight_grey"
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
actions_types = list()
resistance_flags = FIRE_PROOF
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 6f61bf56cb..0e345636cf 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -973,7 +973,6 @@
name = "polychromic winter coat"
icon_state = "coatpoly"
item_state = "coatpoly"
- item_color = "coatpoly"
hoodtype = /obj/item/clothing/head/hooded/winterhood/polychromic
hasprimary = TRUE
hassecondary = TRUE
@@ -984,7 +983,6 @@
/obj/item/clothing/head/hooded/winterhood/polychromic
icon_state = "winterhood_poly"
- item_color = "winterhood_poly"
item_state = "winterhood_poly"
/obj/item/clothing/head/hooded/winterhood/polychromic/worn_overlays(isinhands, icon_file, style_flags = NONE) //this is where the main magic happens.
@@ -992,11 +990,11 @@
if(suit.hasprimary | suit.hassecondary)
if(!isinhands) //prevents the worn sprites from showing up if you're just holding them
if(suit.hasprimary) //checks if overlays are enabled
- var/mutable_appearance/primary_worn = mutable_appearance(icon_file, "[item_color]-primary") //automagical sprite selection
+ var/mutable_appearance/primary_worn = mutable_appearance(icon_file, "[icon_state]-primary") //automagical sprite selection
primary_worn.color = suit.primary_color //colors the overlay
. += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite.
if(suit.hassecondary)
- var/mutable_appearance/secondary_worn = mutable_appearance(icon_file, "[item_color]-secondary")
+ var/mutable_appearance/secondary_worn = mutable_appearance(icon_file, "[icon_state]-secondary")
secondary_worn.color = suit.secondary_color
. += secondary_worn
@@ -1005,15 +1003,15 @@
if(hasprimary | hassecondary | hastertiary)
if(!isinhands) //prevents the worn sprites from showing up if you're just holding them
if(hasprimary) //checks if overlays are enabled
- var/mutable_appearance/primary_worn = mutable_appearance(icon_file, "[item_color]-primary[suittoggled ? "_t" : ""]") //automagical sprite selection
+ var/mutable_appearance/primary_worn = mutable_appearance(icon_file, "[icon_state]-primary[suittoggled ? "_t" : ""]") //automagical sprite selection
primary_worn.color = primary_color //colors the overlay
. += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite.
if(hassecondary)
- var/mutable_appearance/secondary_worn = mutable_appearance(icon_file, "[item_color]-secondary[suittoggled ? "_t" : ""]")
+ var/mutable_appearance/secondary_worn = mutable_appearance(icon_file, "[icon_state]-secondary[suittoggled ? "_t" : ""]")
secondary_worn.color = secondary_color
. += secondary_worn
if(hastertiary)
- var/mutable_appearance/tertiary_worn = mutable_appearance(icon_file, "[item_color]-tertiary[suittoggled ? "_t" : ""]")
+ var/mutable_appearance/tertiary_worn = mutable_appearance(icon_file, "[icon_state]-tertiary[suittoggled ? "_t" : ""]")
tertiary_worn.color = tertiary_color
. += tertiary_worn
diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm
index 45aee9085c..30bccff6de 100644
--- a/code/modules/clothing/under/_under.dm
+++ b/code/modules/clothing/under/_under.dm
@@ -6,6 +6,7 @@
block_priority = BLOCK_PRIORITY_UNIFORM
slot_flags = ITEM_SLOT_ICLOTHING
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ mutantrace_variation = STYLE_DIGITIGRADE
var/fitted = FEMALE_UNIFORM_FULL // For use in alternate clothing styles for women
var/has_sensor = HAS_SENSORS // For the crew computer
var/random_sensor = TRUE
@@ -16,7 +17,6 @@
var/dummy_thick = FALSE // is able to hold accessories on its item
var/obj/item/clothing/accessory/attached_accessory
var/mutable_appearance/accessory_overlay
- mutantrace_variation = STYLE_DIGITIGRADE
/obj/item/clothing/under/worn_overlays(isinhands = FALSE, icon_file, style_flags = NONE)
. = list()
@@ -29,15 +29,15 @@
if(accessory_overlay)
. += accessory_overlay
if(hasprimary) //checks if overlays are enabled
- var/mutable_appearance/primary_worn = mutable_appearance(icon_file, "[item_color]-primary") //automagical sprite selection
+ var/mutable_appearance/primary_worn = mutable_appearance(icon_file, "[icon_state]-primary") //automagical sprite selection
primary_worn.color = primary_color //colors the overlay
. += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite.
if(hassecondary)
- var/mutable_appearance/secondary_worn = mutable_appearance(icon_file, "[item_color]-secondary")
+ var/mutable_appearance/secondary_worn = mutable_appearance(icon_file, "[icon_state]-secondary")
secondary_worn.color = secondary_color
. += secondary_worn
if(hastertiary)
- var/mutable_appearance/tertiary_worn = mutable_appearance(icon_file, "[item_color]-tertiary")
+ var/mutable_appearance/tertiary_worn = mutable_appearance(icon_file, "[icon_state]-tertiary")
tertiary_worn.color = tertiary_color
. += tertiary_worn
@@ -113,10 +113,8 @@
if((flags_inv & HIDEACCESSORY) || (A.flags_inv & HIDEACCESSORY))
return TRUE
- var/accessory_color = attached_accessory.item_color
- if(!accessory_color)
- accessory_color = attached_accessory.icon_state
- accessory_overlay = mutable_appearance('icons/mob/accessories.dmi', "[accessory_color]")
+ var/accessory_color = attached_accessory.icon_state
+ accessory_overlay = mutable_appearance('icons/mob/clothing/accessories.dmi', "[accessory_color]")
accessory_overlay.alpha = attached_accessory.alpha
accessory_overlay.color = attached_accessory.color
@@ -167,4 +165,7 @@
if(SENSOR_COORDS)
. += "Its vital tracker and tracking beacon appear to be enabled."
if(attached_accessory)
- . += "\A [attached_accessory] is attached to it."
\ No newline at end of file
+ . += "\A [attached_accessory] is attached to it."
+
+/obj/item/clothing/under/rank
+ dying_key = DYE_REGISTRY_UNDER
diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm
index 628f7187ca..88821e1afe 100644
--- a/code/modules/clothing/under/accessories.dm
+++ b/code/modules/clothing/under/accessories.dm
@@ -4,7 +4,6 @@
icon = 'icons/obj/clothing/accessories.dmi'
icon_state = "plasma"
item_state = "" //no inhands
- item_color = "plasma" //On accessories, this controls the worn sprite. That's a bit weird.
slot_flags = 0
w_class = WEIGHT_CLASS_SMALL
var/above_suit = FALSE
@@ -85,7 +84,6 @@
desc = "For some classy, murderous fun."
icon_state = "waistcoat"
item_state = "waistcoat"
- item_color = "waistcoat"
minimize_when_attached = FALSE
/obj/item/clothing/accessory/maidapron
@@ -93,7 +91,6 @@
desc = "The best part of a maid costume."
icon_state = "maidapron"
item_state = "maidapron"
- item_color = "maidapron"
minimize_when_attached = FALSE
//////////
@@ -104,7 +101,6 @@
name = "bronze medal"
desc = "A bronze medal."
icon_state = "bronze"
- item_color = "bronze"
custom_materials = list(/datum/material/iron=1000)
resistance_flags = FIRE_PROOF
var/medaltype = "medal" //Sprite used for medalbox
@@ -173,7 +169,6 @@
name = "ribbon"
desc = "A ribbon"
icon_state = "cargo"
- item_color = "cargo"
/obj/item/clothing/accessory/medal/ribbon/cargo
name = "\"cargo tech of the shift\" award"
@@ -188,7 +183,6 @@
name = "silver medal"
desc = "A silver medal."
icon_state = "silver"
- item_color = "silver"
medaltype = "medal-silver"
custom_materials = list(/datum/material/silver=1000)
@@ -204,7 +198,6 @@
name = "gold medal"
desc = "A prestigious golden medal."
icon_state = "gold"
- item_color = "gold"
medaltype = "medal-gold"
custom_materials = list(/datum/material/gold=1000)
@@ -227,7 +220,6 @@
name = "plasma medal"
desc = "An eccentric medal made of plasma."
icon_state = "plasma"
- item_color = "plasma"
medaltype = "medal-plasma"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = -10, "acid" = 0) //It's made of plasma. Of course it's flammable.
custom_materials = list(/datum/material/plasma=1000)
@@ -250,7 +242,6 @@
name = "red armband"
desc = "An fancy red armband!"
icon_state = "redband"
- item_color = "redband"
/obj/item/clothing/accessory/armband/deputy
name = "security deputy armband"
@@ -260,37 +251,31 @@
name = "cargo bay guard armband"
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is brown."
icon_state = "cargoband"
- item_color = "cargoband"
/obj/item/clothing/accessory/armband/engine
name = "engineering guard armband"
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is orange with a reflective strip!"
icon_state = "engieband"
- item_color = "engieband"
/obj/item/clothing/accessory/armband/science
name = "science guard armband"
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is purple."
icon_state = "rndband"
- item_color = "rndband"
/obj/item/clothing/accessory/armband/hydro
name = "hydroponics guard armband"
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is green and blue."
icon_state = "hydroband"
- item_color = "hydroband"
/obj/item/clothing/accessory/armband/med
name = "medical guard armband"
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is white."
icon_state = "medband"
- item_color = "medband"
/obj/item/clothing/accessory/armband/medblue
name = "medical guard armband"
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is white and blue."
icon_state = "medblueband"
- item_color = "medblueband"
//////////////
//OBJECTION!//
@@ -300,7 +285,6 @@
name = "attorney's badge"
desc = "Fills you with the conviction of JUSTICE. Lawyers tend to want to show it to everyone they meet."
icon_state = "lawyerbadge"
- item_color = "lawyerbadge"
/obj/item/clothing/accessory/lawyers_badge/attack_self(mob/user)
if(prob(1))
@@ -324,7 +308,6 @@
name = "pocket protector"
desc = "Can protect your clothing from ink stains, but you'll look like a nerd if you're using one."
icon_state = "pocketprotector"
- item_color = "pocketprotector"
pocket_storage_component_path = /datum/component/storage/concrete/pockets/pocketprotector
/obj/item/clothing/accessory/pocketprotector/full/Initialize()
@@ -346,14 +329,12 @@
name = "bone talisman"
desc = "A hunter's talisman, some say the old gods smile on those who wear it."
icon_state = "talisman"
- item_color = "talisman"
armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25)
/obj/item/clothing/accessory/skullcodpiece
name = "skull codpiece"
desc = "A skull shaped ornament, intended to protect the important things in life."
icon_state = "skull"
- item_color = "skull"
above_suit = TRUE
armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25)
@@ -361,7 +342,6 @@
name = "false codpiece"
desc = "A plastic ornament, intended to protect the important things in life. It's not very good at it."
icon_state = "skull"
- item_color = "skull"
above_suit = TRUE
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
@@ -373,7 +353,6 @@
name = "protective padding"
desc = "A soft padding meant to cushion the wearer from melee harm."
icon_state = "padding"
- item_color = "nothing"
armor = list("melee" = 20, "bullet" = 10, "laser" = 0, "energy" = 0, "bomb" = 5, "bio" = 0, "rad" = 0, "fire" = -20, "acid" = 45)
flags_inv = HIDEACCESSORY //hidden from indiscrete mob examines.
@@ -381,7 +360,6 @@
name = "kevlar padding"
desc = "A layered kevlar padding meant to cushion the wearer from ballistic harm."
icon_state = "padding"
- item_color = "nothing"
armor = list("melee" = 10, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 25)
flags_inv = HIDEACCESSORY
@@ -389,6 +367,5 @@
name = "ablative padding"
desc = "A thin ultra-refractory composite padding meant to cushion the wearer from energy lasers harm."
icon_state = "plastics"
- item_color = "nothing"
armor = list("melee" = 0, "bullet" = 0, "laser" = 20, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = -40)
flags_inv = HIDEACCESSORY
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
index f612138984..4b04a16b79 100644
--- a/code/modules/clothing/under/color.dm
+++ b/code/modules/clothing/under/color.dm
@@ -1,5 +1,6 @@
/obj/item/clothing/under/color
desc = "A standard issue colored jumpsuit. Variety is the spice of life!"
+ dying_key = DYE_REGISTRY_UNDER
/obj/item/clothing/under/color/jumpskirt
body_parts_covered = CHEST|GROIN|ARMS
@@ -38,7 +39,6 @@
name = "black jumpsuit"
icon_state = "black"
item_state = "bl_suit"
- item_color = "black"
resistance_flags = NONE
/obj/item/clothing/under/color/black/trackless
@@ -49,7 +49,6 @@
name = "black jumpskirt"
icon_state = "black_skirt"
item_state = "bl_suit"
- item_color = "black_skirt"
/obj/item/clothing/under/color/black/ghost
item_flags = DROPDEL
@@ -66,14 +65,12 @@
desc = "A tasteful grey jumpsuit that reminds you of the good old days."
icon_state = "grey"
item_state = "gy_suit"
- item_color = "grey"
/obj/item/clothing/under/color/jumpskirt/grey
name = "grey jumpskirt"
desc = "A tasteful grey jumpskirt that reminds you of the good old days."
icon_state = "grey_skirt"
item_state = "gy_suit"
- item_color = "grey_skirt"
/obj/item/clothing/under/color/grey/glorf
name = "ancient jumpsuit"
@@ -89,117 +86,98 @@
name = "blue jumpsuit"
icon_state = "blue"
item_state = "b_suit"
- item_color = "blue"
/obj/item/clothing/under/color/jumpskirt/blue
name = "blue jumpskirt"
icon_state = "blue_skirt"
item_state = "b_suit"
- item_color = "blue_skirt"
/obj/item/clothing/under/color/green
name = "green jumpsuit"
icon_state = "green"
item_state = "g_suit"
- item_color = "green"
/obj/item/clothing/under/color/jumpskirt/green
name = "green jumpskirt"
icon_state = "green_skirt"
item_state = "g_suit"
- item_color = "green_skirt"
/obj/item/clothing/under/color/orange
name = "orange jumpsuit"
desc = "Don't wear this near paranoid security officers."
icon_state = "orange"
item_state = "o_suit"
- item_color = "orange"
/obj/item/clothing/under/color/jumpskirt/orange
name = "orange jumpskirt"
icon_state = "orange_skirt"
item_state = "o_suit"
- item_color = "orange_skirt"
/obj/item/clothing/under/color/pink
name = "pink jumpsuit"
icon_state = "pink"
desc = "Just looking at this makes you feel fabulous."
item_state = "p_suit"
- item_color = "pink"
/obj/item/clothing/under/color/jumpskirt/pink
name = "pink jumpskirt"
icon_state = "pink_skirt"
item_state = "p_suit"
- item_color = "pink_skirt"
/obj/item/clothing/under/color/red
name = "red jumpsuit"
icon_state = "red"
item_state = "r_suit"
- item_color = "red"
/obj/item/clothing/under/color/jumpskirt/red
name = "red jumpskirt"
icon_state = "red_skirt"
item_state = "r_suit"
- item_color = "red_skirt"
/obj/item/clothing/under/color/white
name = "white jumpsuit"
icon_state = "white"
item_state = "w_suit"
- item_color = "white"
/obj/item/clothing/under/color/jumpskirt/white
name = "white jumpskirt"
icon_state = "white_skirt"
item_state = "w_suit"
- item_color = "white_skirt"
/obj/item/clothing/under/color/yellow
name = "yellow jumpsuit"
icon_state = "yellow"
item_state = "y_suit"
- item_color = "yellow"
/obj/item/clothing/under/color/jumpskirt/yellow
name = "yellow jumpskirt"
icon_state = "yellow_skirt"
item_state = "y_suit"
- item_color = "yellow_skirt"
/obj/item/clothing/under/color/darkblue
name = "darkblue jumpsuit"
icon_state = "darkblue"
item_state = "b_suit"
- item_color = "darkblue"
/obj/item/clothing/under/color/jumpskirt/darkblue
name = "darkblue jumpskirt"
icon_state = "darkblue_skirt"
item_state = "b_suit"
- item_color = "darkblue_skirt"
/obj/item/clothing/under/color/teal
name = "teal jumpsuit"
icon_state = "teal"
item_state = "b_suit"
- item_color = "teal"
/obj/item/clothing/under/color/jumpskirt/teal
name = "teal jumpskirt"
icon_state = "teal_skirt"
item_state = "b_suit"
- item_color = "teal_skirt"
/obj/item/clothing/under/color/lightpurple
name = "purple jumpsuit"
icon_state = "lightpurple"
item_state = "p_suit"
- item_color = "lightpurple"
/obj/item/clothing/under/color/lightpurple/trackless
desc = "A magically colored jumpsuit. No sensors are attached!"
@@ -209,62 +187,52 @@
name = "lightpurple jumpskirt"
icon_state = "lightpurple_skirt"
item_state = "p_suit"
- item_color = "lightpurple_skirt"
/obj/item/clothing/under/color/darkgreen
name = "darkgreen jumpsuit"
icon_state = "darkgreen"
item_state = "g_suit"
- item_color = "darkgreen"
/obj/item/clothing/under/color/jumpskirt/darkgreen
name = "darkgreen jumpskirt"
icon_state = "darkgreen_skirt"
item_state = "g_suit"
- item_color = "darkgreen_skirt"
/obj/item/clothing/under/color/lightbrown
name = "lightbrown jumpsuit"
icon_state = "lightbrown"
item_state = "lb_suit"
- item_color = "lightbrown"
/obj/item/clothing/under/color/jumpskirt/lightbrown
name = "lightbrown jumpskirt"
icon_state = "lightbrown_skirt"
item_state = "lb_suit"
- item_color = "lightbrown_skirt"
/obj/item/clothing/under/color/brown
name = "brown jumpsuit"
icon_state = "brown"
item_state = "lb_suit"
- item_color = "brown"
/obj/item/clothing/under/color/jumpskirt/brown
name = "brown jumpskirt"
icon_state = "brown_skirt"
item_state = "lb_suit"
- item_color = "brown_skirt"
/obj/item/clothing/under/color/maroon
name = "maroon jumpsuit"
icon_state = "maroon"
item_state = "r_suit"
- item_color = "maroon"
/obj/item/clothing/under/color/jumpskirt/maroon
name = "maroon jumpskirt"
icon_state = "maroon_skirt"
item_state = "r_suit"
- item_color = "maroon_skirt"
/obj/item/clothing/under/color/rainbow
name = "rainbow jumpsuit"
desc = "A multi-colored jumpsuit!"
icon_state = "rainbow"
item_state = "rainbow"
- item_color = "rainbow"
can_adjust = FALSE
/obj/item/clothing/under/color/jumpskirt/rainbow
@@ -272,5 +240,4 @@
desc = "A multi-colored jumpskirt!"
icon_state = "rainbow_skirt"
item_state = "rainbow"
- item_color = "rainbow_skirt"
can_adjust = FALSE
diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm
index be142a04ff..12988c26ae 100644
--- a/code/modules/clothing/under/costume.dm
+++ b/code/modules/clothing/under/costume.dm
@@ -2,7 +2,6 @@
name = "\improper Roman armor"
desc = "Ancient Roman armor. Made of metallic and leather straps."
icon_state = "roman"
- item_color = "roman"
item_state = "armor"
can_adjust = FALSE
strip_delay = 100
@@ -13,21 +12,18 @@
desc = "The leather club is two sectors down."
icon_state = "darkholme"
item_state = "darkholme"
- item_color = "darkholme"
can_adjust = FALSE
/obj/item/clothing/under/costume/owl
name = "owl uniform"
desc = "A soft brown jumpsuit made of synthetic feathers and strong conviction."
icon_state = "owl"
- item_color = "owl"
can_adjust = FALSE
/obj/item/clothing/under/costume/griffin
name = "griffon uniform"
desc = "A soft brown jumpsuit with a white feather collar made of synthetic feathers and a lust for mayhem."
icon_state = "griffin"
- item_color = "griffin"
can_adjust = FALSE
/obj/item/clothing/under/costume/schoolgirl
@@ -35,7 +31,6 @@
desc = "It's just like one of my Japanese animes!"
icon_state = "schoolgirl"
item_state = "schoolgirl"
- item_color = "schoolgirl"
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -44,26 +39,22 @@
name = "red schoolgirl uniform"
icon_state = "schoolgirlred"
item_state = "schoolgirlred"
- item_color = "schoolgirlred"
/obj/item/clothing/under/costume/schoolgirl/green
name = "green schoolgirl uniform"
icon_state = "schoolgirlgreen"
item_state = "schoolgirlgreen"
- item_color = "schoolgirlgreen"
/obj/item/clothing/under/costume/schoolgirl/orange
name = "orange schoolgirl uniform"
icon_state = "schoolgirlorange"
item_state = "schoolgirlorange"
- item_color = "schoolgirlorange"
/obj/item/clothing/under/costume/pirate
name = "pirate outfit"
desc = "Yarr."
icon_state = "pirate"
item_state = "pirate"
- item_color = "pirate"
can_adjust = FALSE
/obj/item/clothing/under/costume/soviet
@@ -71,7 +62,6 @@
desc = "For the Motherland!"
icon_state = "soviet"
item_state = "soviet"
- item_color = "soviet"
can_adjust = FALSE
/obj/item/clothing/under/costume/redcoat
@@ -79,7 +69,6 @@
desc = "Looks old."
icon_state = "redcoat"
item_state = "redcoat"
- item_color = "redcoat"
can_adjust = FALSE
/obj/item/clothing/under/costume/kilt
@@ -87,7 +76,6 @@
desc = "Includes shoes and plaid."
icon_state = "kilt"
item_state = "kilt"
- item_color = "kilt"
body_parts_covered = CHEST|GROIN|LEGS|FEET
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -103,7 +91,6 @@
name = "polychromic kilt"
desc = "It's not a skirt!"
icon_state = "polykilt"
- item_color = "polykilt"
hasprimary = TRUE
hassecondary = TRUE
primary_color = "#FFFFFF"
@@ -116,7 +103,6 @@
desc = "Are you not entertained? Is that not why you are here?"
icon_state = "gladiator"
item_state = "gladiator"
- item_color = "gladiator"
body_parts_covered = CHEST|GROIN|ARMS
fitted = NO_FEMALE_UNIFORM
can_adjust = FALSE
@@ -131,7 +117,6 @@
desc = "Maid in China."
icon_state = "maid"
item_state = "maid"
- item_color = "maid"
body_parts_covered = CHEST|GROIN
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -146,7 +131,6 @@
desc = "Just looking at this makes you want to sing."
icon_state = "ysing"
item_state = "ysing"
- item_color = "ysing"
body_parts_covered = CHEST|GROIN|ARMS
fitted = NO_FEMALE_UNIFORM
alternate_worn_layer = ABOVE_SHOES_LAYER
@@ -157,7 +141,6 @@
desc = "Just looking at this makes you want to sing."
icon_state = "bsing"
item_state = "bsing"
- item_color = "bsing"
body_parts_covered = CHEST|GROIN|ARMS
alternate_worn_layer = ABOVE_SHOES_LAYER
fitted = FEMALE_UNIFORM_TOP
@@ -167,7 +150,6 @@
name = "geisha suit"
desc = "Cute space ninja senpai not included."
icon_state = "geisha"
- item_color = "geisha"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
@@ -175,7 +157,6 @@
name = "villain suit"
desc = "A change of wardrobe is necessary if you ever want to catch a real superhero."
icon_state = "villain"
- item_color = "villain"
can_adjust = FALSE
/obj/item/clothing/under/costume/sailor
@@ -183,7 +164,6 @@
desc = "Skipper's in the wardroom drinkin gin'."
icon_state = "sailor"
item_state = "b_suit"
- item_color = "sailor"
can_adjust = FALSE
/obj/item/clothing/under/costume/russian_officer
@@ -191,14 +171,12 @@
desc = "The latest in fashionable russian outfits."
icon_state = "hostanclothes"
item_state = "hostanclothes"
- item_color = "hostanclothes"
/obj/item/clothing/under/costume/mummy
name = "mummy wrapping"
desc = "Return the slab or suffer my stale references."
icon_state = "mummy"
item_state = "mummy"
- item_color = "mummy"
body_parts_covered = CHEST|GROIN|ARMS|LEGS
fitted = NO_FEMALE_UNIFORM
can_adjust = FALSE
@@ -209,7 +187,6 @@
desc = "Perfect camouflage for hiding in botany."
icon_state = "scarecrow"
item_state = "scarecrow"
- item_color = "scarecrow"
body_parts_covered = CHEST|GROIN|ARMS|LEGS
fitted = NO_FEMALE_UNIFORM
can_adjust = FALSE
@@ -220,7 +197,6 @@
desc = "A dress inspired by the ancient \"Victorian\" era."
icon_state = "draculass"
item_state = "draculass"
- item_color = "draculass"
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -230,7 +206,6 @@
desc = "A modified scientist jumpsuit to look extra cool."
icon_state = "drfreeze"
item_state = "drfreeze"
- item_color = "drfreeze"
can_adjust = FALSE
/obj/item/clothing/under/costume/lobster
@@ -238,7 +213,6 @@
desc = "Who beheaded the college mascot?"
icon_state = "lobster"
item_state = "lobster"
- item_color = "lobster"
fitted = NO_FEMALE_UNIFORM
can_adjust = FALSE
@@ -247,7 +221,6 @@
desc = "Now you're cooking."
icon_state = "gondola"
item_state = "lb_suit"
- item_color = "gondola"
can_adjust = FALSE
/obj/item/clothing/under/costume/skeleton
@@ -255,7 +228,6 @@
desc = "A black jumpsuit with a white bone pattern printed on it. Spooky!"
icon_state = "skeleton"
item_state = "skeleton"
- item_color = "skeleton"
body_parts_covered = CHEST|GROIN|ARMS|LEGS
fitted = NO_FEMALE_UNIFORM
can_adjust = FALSE
@@ -347,5 +319,4 @@
name = "cloud"
desc = "cloud"
icon_state = "cloud"
- item_color = "cloud"
can_adjust = FALSE
diff --git a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm
index 42902bf7a7..5928819b16 100644
--- a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm
+++ b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm
@@ -3,70 +3,60 @@
desc = "A joint envirosuit used by plasmamen quartermasters and cargo techs alike, due to the logistical problems of differenciating the two with the length of their pant legs."
icon_state = "cargo_envirosuit"
item_state = "cargo_envirosuit"
- item_color = "cargo_envirosuit"
/obj/item/clothing/under/plasmaman/mining
name = "mining plasma envirosuit"
desc = "An air-tight khaki suit designed for operations on lavaland by plasmamen."
icon_state = "explorer_envirosuit"
item_state = "explorer_envirosuit"
- item_color = "explorer_envirosuit"
/obj/item/clothing/under/plasmaman/chef
name = "chef's plasma envirosuit"
desc = "A white plasmaman envirosuit designed for cullinary practices. One might question why a member of a species that doesn't need to eat would become a chef."
icon_state = "chef_envirosuit"
item_state = "chef_envirosuit"
- item_color = "chef_envirosuit"
/obj/item/clothing/under/plasmaman/enviroslacks
name = "enviroslacks"
desc = "The pet project of a particularly posh plasmaman, this custom suit was quickly appropriated by Nano-Trasen for it's detectives, lawyers, and bar-tenders alike."
icon_state = "enviroslacks"
item_state = "enviroslacks"
- item_color = "enviroslacks"
/obj/item/clothing/under/plasmaman/chaplain
name = "chaplain's plasma envirosuit"
desc = "An envirosuit specially designed for only the most pious of plasmamen."
icon_state = "chap_envirosuit"
item_state = "chap_envirosuit"
- item_color = "chap_envirosuit"
/obj/item/clothing/under/plasmaman/curator
name = "curator's plasma envirosuit"
desc = "Made out of a modified voidsuit, this suit was Nano-Trasen's first solution to the *logistical problems* that come with employing plasmamen. Due to the modifications, the suit is no longer space-worthy. Despite their limitations, these suits are still in used by historian and old-styled plasmamen alike."
icon_state = "prototype_envirosuit"
item_state = "prototype_envirosuit"
- item_color = "prototype_envirosuit"
/obj/item/clothing/under/plasmaman/janitor
name = "janitor's plasma envirosuit"
desc = "A grey and purple envirosuit designated for plasmamen janitors."
icon_state = "janitor_envirosuit"
item_state = "janitor_envirosuit"
- item_color = "janitor_envirosuit"
/obj/item/clothing/under/plasmaman/botany
name = "botany envirosuit"
desc = "A green and blue envirosuit designed to protect plasmamen from minor plant-related injuries."
icon_state = "botany_envirosuit"
item_state = "botany_envirosuit"
- item_color = "botany_envirosuit"
/obj/item/clothing/under/plasmaman/hop
name = "head of personell's envirosuit"
desc = "A prestigious azure envirosuit designed for head of personell."
icon_state = "hop_envirosuit"
item_state = "hop_envirosuit"
- item_color = "hop_envirosuit"
/obj/item/clothing/under/plasmaman/captain
name = "captain's envirosuit"
desc = "An expensive piece of plasmaman envirosuit fashion. guaranteed to keep you cool while the station goes down in fierceful fires."
icon_state = "captain_envirosuit"
item_state = "captain_envirosuit"
- item_color = "captain_envirosuit"
armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95)
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
@@ -76,14 +66,12 @@
desc = "It's not very colourful."
icon_state = "mime_envirosuit"
item_state = "mime_envirosuit"
- item_color = "mime_envirosuit"
/obj/item/clothing/under/plasmaman/clown
name = "clown envirosuit"
desc = "'HONK!'"
icon_state = "clown_envirosuit"
item_state = "clown_envirosuit"
- item_color = "clown_envirosuit"
/obj/item/clothing/under/plasmaman/clown/Extinguish(mob/living/carbon/human/H)
if(!istype(H))
diff --git a/code/modules/clothing/under/jobs/Plasmaman/engineering.dm b/code/modules/clothing/under/jobs/Plasmaman/engineering.dm
index 1f381df4cf..15eb189fa8 100644
--- a/code/modules/clothing/under/jobs/Plasmaman/engineering.dm
+++ b/code/modules/clothing/under/jobs/Plasmaman/engineering.dm
@@ -3,7 +3,6 @@
desc = "An air-tight suit designed to be used by plasmamen exployed as engineers, the usual purple stripes being replaced by engineer's orange. It protects the user from fire and acid damage."
icon_state = "engineer_envirosuit"
item_state = "engineer_envirosuit"
- item_color = "engineer_envirosuit"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 10, "fire" = 95, "acid" = 95)
/obj/item/clothing/under/plasmaman/engineering/ce
@@ -11,11 +10,9 @@
desc = "An advanced air-tight suit designed to be used by plasmamen chief engineers, complete with ornamental widgets and gizmo. It protects the user from fire and acid damage."
icon_state = "ce_envirosuit"
item_state = "ce_envirosuit"
- item_color = "ce_envirosuit"
/obj/item/clothing/under/plasmaman/atmospherics
name = "atmospherics plasma envirosuit"
desc = "An air-tight suit designed to be used by plasmamen exployed as atmos technicians, the usual purple stripes being replaced by atmos's blue."
icon_state = "atmos_envirosuit"
item_state = "atmos_envirosuit"
- item_color = "atmos_envirosuit"
diff --git a/code/modules/clothing/under/jobs/Plasmaman/medsci.dm b/code/modules/clothing/under/jobs/Plasmaman/medsci.dm
index 6106d785a9..03d089c10d 100644
--- a/code/modules/clothing/under/jobs/Plasmaman/medsci.dm
+++ b/code/modules/clothing/under/jobs/Plasmaman/medsci.dm
@@ -3,28 +3,24 @@
desc = "A suit designed for the station's more plasma-based doctors."
icon_state = "doctor_envirosuit"
item_state = "doctor_envirosuit"
- item_color = "doctor_envirosuit"
/obj/item/clothing/under/plasmaman/cmo
name = "chief medical officer's plasma envirosuit"
desc = "A suit designed for the station's most plasma-based chief medical officer, but not for their cat."
icon_state = "cmo_envirosuit"
item_state = "cmo_envirosuit"
- item_color = "cmo_envirosuit"
/obj/item/clothing/under/plasmaman/science
name = "science plasma envirosuit"
desc = "A plasmaman envirosuit designed for scientists."
icon_state = "scientist_envirosuit"
item_state = "scientist_envirosuit"
- item_color = "scientist_envirosuit"
/obj/item/clothing/under/plasmaman/rd
name = "research direactor's plasma envirosuit"
desc = "A plasmaman envirosuit designed for the research director to aid them in their job of directing research into the right direction."
icon_state = "rd_envirosuit"
item_state = "rd_envirosuit"
- item_color = "rd_envirosuit"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95)
/obj/item/clothing/under/plasmaman/robotics
@@ -32,25 +28,21 @@
desc = "A plasmaman envirosuit designed for roboticists."
icon_state = "roboticist_envirosuit"
item_state = "roboticist_envirosuit"
- item_color = "roboticist_envirosuit"
/obj/item/clothing/under/plasmaman/viro
name = "virology plasma envirosuit"
desc = "The suit worn by the safest people on the station, those who are completely immune to the monstrosities they create."
icon_state = "virologist_envirosuit"
item_state = "virologist_envirosuit"
- item_color = "virologist_envirosuit"
/obj/item/clothing/under/plasmaman/genetics
name = "genetics plasma envirosuit"
desc = "A plasmaman envirosuit designed for geneticists."
icon_state = "geneticist_envirosuit"
item_state = "geneticist_envirosuit"
- item_color = "geneticist_envirosuit"
/obj/item/clothing/under/plasmaman/chemist
name = "chemistry plasma envirosuit"
desc = "A plasmaman envirosuit designed for chemists."
icon_state = "chemist_envirosuit"
item_state = "chemist_envirosuit"
- item_color = "chemist_envirosuit"
diff --git a/code/modules/clothing/under/jobs/Plasmaman/security.dm b/code/modules/clothing/under/jobs/Plasmaman/security.dm
index 6ef9eb9e53..ddbda041f3 100644
--- a/code/modules/clothing/under/jobs/Plasmaman/security.dm
+++ b/code/modules/clothing/under/jobs/Plasmaman/security.dm
@@ -3,7 +3,6 @@
desc = "A plasmaman containment suit designed for security officers, offering a limited amount of extra protection."
icon_state = "security_envirosuit"
item_state = "security_envirosuit"
- item_color = "security_envirosuit"
armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95)
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
@@ -13,11 +12,9 @@
desc = "A plasmaman containment suit designed for the warden, white stripes being added to differeciate them from other members of security."
icon_state = "warden_envirosuit"
item_state = "warden_envirosuit"
- item_color = "warden_envirosuit"
/obj/item/clothing/under/plasmaman/security/hos
name = "security plasma envirosuit"
desc = "A slick black and red plasmaman containment suit designed for the head of security, also called the LAW."
icon_state = "hos_envirosuit"
item_state = "hos_envirosuit"
- item_color = "hos_envirosuit"
diff --git a/code/modules/clothing/under/jobs/cargo.dm b/code/modules/clothing/under/jobs/cargo.dm
index 5727ebc0e9..3ee00996a4 100644
--- a/code/modules/clothing/under/jobs/cargo.dm
+++ b/code/modules/clothing/under/jobs/cargo.dm
@@ -4,14 +4,12 @@
desc = "It's a jumpsuit worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
icon_state = "qm"
item_state = "lb_suit"
- item_color = "qm"
/obj/item/clothing/under/rank/cargo/qm/skirt
name = "quartermaster's jumpskirt"
desc = "It's a jumpskirt worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper."
icon_state = "qm_skirt"
item_state = "lb_suit"
- item_color = "qm_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -21,7 +19,6 @@
desc = "Shooooorts! They're comfy and easy to wear!"
icon_state = "cargotech"
item_state = "lb_suit"
- item_color = "cargo"
body_parts_covered = CHEST|GROIN|ARMS
alt_covers_chest = TRUE
@@ -30,7 +27,6 @@
desc = "Skiiiiirts! They're comfy and easy to wear"
icon_state = "cargo_skirt"
item_state = "lb_suit"
- item_color = "cargo_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -40,12 +36,10 @@
name = "shaft miner's jumpsuit"
icon_state = "miner"
item_state = "miner"
- item_color = "miner"
/obj/item/clothing/under/rank/cargo/miner/lavaland
desc = "A green uniform for operating in hazardous environments."
name = "shaft miner's jumpsuit"
icon_state = "explorer"
item_state = "explorer"
- item_color = "explorer"
can_adjust = FALSE
diff --git a/code/modules/clothing/under/jobs/centcom.dm b/code/modules/clothing/under/jobs/centcom.dm
index 3ee210612e..33a4659b5f 100644
--- a/code/modules/clothing/under/jobs/centcom.dm
+++ b/code/modules/clothing/under/jobs/centcom.dm
@@ -3,7 +3,6 @@
name = "\improper CentCom officer's jumpsuit"
icon_state = "officer"
item_state = "g_suit"
- item_color = "officer"
alt_covers_chest = TRUE
/obj/item/clothing/under/rank/centcom/officer/syndicate
@@ -14,4 +13,3 @@
name = "\improper CentCom officer's jumpsuit"
icon_state = "centcom"
item_state = "dg_suit"
- item_color = "centcom"
diff --git a/code/modules/clothing/under/jobs/civilian/civilian.dm b/code/modules/clothing/under/jobs/civilian/civilian.dm
index ac5f4f12fd..6f1066de5d 100644
--- a/code/modules/clothing/under/jobs/civilian/civilian.dm
+++ b/code/modules/clothing/under/jobs/civilian/civilian.dm
@@ -3,7 +3,6 @@
name = "bartender's uniform"
icon_state = "barman"
item_state = "bar_suit"
- item_color = "barman"
alt_covers_chest = TRUE
/obj/item/clothing/under/rank/civilian/bartender/purple
@@ -11,7 +10,6 @@
name = "purple bartender's uniform"
icon_state = "purplebartender"
item_state = "purplebartender"
- item_color = "purplebartender"
can_adjust = FALSE
/obj/item/clothing/under/rank/civilian/bartender/skirt
@@ -19,7 +17,6 @@
desc = "It looks like it could use some more flair."
icon_state = "barman_skirt"
item_state = "bar_suit"
- item_color = "barman_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -29,15 +26,13 @@
name = "chaplain's jumpsuit"
icon_state = "chaplain"
item_state = "bl_suit"
- item_color = "chapblack"
can_adjust = FALSE
/obj/item/clothing/under/rank/civilian/chaplain/skirt
name = "chaplain's jumpskirt"
desc = "It's a black jumpskirt, often worn by religious folk."
- icon_state = "chapblack_skirt"
+ icon_state = "chaplain_skirt"
item_state = "bl_suit"
- item_color = "chapblack_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -46,14 +41,12 @@
name = "cook's suit"
desc = "A suit which is given only to the most hardcore cooks in space."
icon_state = "chef"
- item_color = "chef"
alt_covers_chest = TRUE
/obj/item/clothing/under/rank/civilian/chef/skirt
name = "cook's skirt"
desc = "A skirt which is given only to the most hardcore cooks in space."
icon_state = "chef_skirt"
- item_color = "chef_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -63,7 +56,6 @@
name = "head of personnel's jumpsuit"
icon_state = "hop"
item_state = "b_suit"
- item_color = "hop"
can_adjust = FALSE
/obj/item/clothing/under/rank/civilian/head_of_personnel/skirt
@@ -71,7 +63,6 @@
desc = "It's a jumpskirt worn by someone who works in the position of \"Head of Personnel\"."
icon_state = "hop_skirt"
item_state = "b_suit"
- item_color = "hop_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -81,7 +72,6 @@
desc = "A teal suit and yellow necktie. An authoritative yet tacky ensemble."
icon_state = "teal_suit"
item_state = "g_suit"
- item_color = "teal_suit"
can_adjust = FALSE
/obj/item/clothing/under/rank/civilian/head_of_personnel/suit/skirt
@@ -89,7 +79,6 @@
desc = "A teal suitskirt and yellow necktie. An authoritative yet tacky ensemble."
icon_state = "teal_suit_skirt"
item_state = "g_suit"
- item_color = "teal_suit_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -99,7 +88,6 @@
name = "botanist's jumpsuit"
icon_state = "hydroponics"
item_state = "g_suit"
- item_color = "hydroponics"
permeability_coefficient = 0.5
/obj/item/clothing/under/rank/civilian/hydroponics/skirt
@@ -107,7 +95,6 @@
desc = "It's a jumpskirt designed to protect against minor plant-related hazards."
icon_state = "hydroponics_skirt"
item_state = "g_suit"
- item_color = "hydroponics_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -116,14 +103,12 @@
desc = "It's the official uniform of the station's janitor. It has minor protection from biohazards."
name = "janitor's jumpsuit"
icon_state = "janitor"
- item_color = "janitor"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
/obj/item/clothing/under/rank/civilian/janitor/skirt
name = "janitor's jumpskirt"
desc = "It's the official skirt of the station's janitor. It has minor protection from biohazards."
icon_state = "janitor_skirt"
- item_color = "janitor_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -133,7 +118,6 @@
desc = "A simple maid uniform for housekeeping."
icon_state = "janimaid"
item_state = "janimaid"
- item_color = "janimaid"
body_parts_covered = CHEST|GROIN
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -147,21 +131,18 @@
name = "lawyer black suit"
icon_state = "lawyer_black"
item_state = "lawyer_black"
- item_color = "lawyer_black"
/obj/item/clothing/under/rank/civilian/lawyer/black/alt
name = "lawyer black suit"
desc = "A professional black suit. Nanotrasen Investigation Bureau approved!"
icon_state = "blacksuit"
item_state = "bar_suit"
- item_color = "blacksuit"
can_adjust = TRUE
alt_covers_chest = TRUE
/obj/item/clothing/under/rank/civilian/lawyer/black/alt/skirt
name = "lawyer black suitskirt"
icon_state = "blacksuit_skirt"
- item_color = "blacksuit_skirt"
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -170,14 +151,12 @@
desc = "A formal black suit and red tie, intended for the station's finest."
icon_state = "really_black_suit"
item_state = "bl_suit"
- item_color = "really_black_suit"
/obj/item/clothing/under/rank/civilian/lawyer/really_black/skirt
name = "executive suitskirt"
desc = "A formal black suitskirt and red tie, intended for the station's finest."
icon_state = "really_black_suit_skirt"
item_state = "bl_suit"
- item_color = "really_black_suit_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -186,46 +165,39 @@
name = "lawyer black suitskirt"
icon_state = "lawyer_black_skirt"
item_state = "lawyer_black"
- item_color = "lawyer_black_skirt"
fitted = FEMALE_UNIFORM_TOP
/obj/item/clothing/under/rank/civilian/lawyer/female
name = "female black suit"
icon_state = "black_suit_fem"
item_state = "bl_suit"
- item_color = "black_suit_fem"
/obj/item/clothing/under/rank/civilian/lawyer/red
name = "lawyer red suit"
icon_state = "lawyer_red"
item_state = "lawyer_red"
- item_color = "lawyer_red"
/obj/item/clothing/under/rank/civilian/lawyer/female/skirt
name = "female black suitskirt"
icon_state = "black_suit_fem_skirt"
item_state = "bl_suit"
- item_color = "black_suit_fem_skirt"
fitted = FEMALE_UNIFORM_TOP
/obj/item/clothing/under/rank/civilian/lawyer/red/skirt
name = "lawyer red suitskirt"
icon_state = "lawyer_red_skirt"
item_state = "lawyer_red"
- item_color = "lawyer_red_skirt"
fitted = FEMALE_UNIFORM_TOP
/obj/item/clothing/under/rank/civilian/lawyer/blue
name = "lawyer blue suit"
icon_state = "lawyer_blue"
item_state = "lawyer_blue"
- item_color = "lawyer_blue"
/obj/item/clothing/under/rank/civilian/lawyer/blue/skirt
name = "lawyer blue suitskirt"
icon_state = "lawyer_blue_skirt"
item_state = "lawyer_blue"
- item_color = "lawyer_blue_skirt"
fitted = FEMALE_UNIFORM_TOP
/obj/item/clothing/under/rank/civilian/lawyer/bluesuit
@@ -233,7 +205,6 @@
desc = "A classy suit and tie."
icon_state = "bluesuit"
item_state = "b_suit"
- item_color = "bluesuit"
can_adjust = TRUE
alt_covers_chest = TRUE
@@ -242,7 +213,6 @@
desc = "A classy suitskirt and tie."
icon_state = "bluesuit_skirt"
item_state = "b_suit"
- item_color = "bluesuit_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -251,7 +221,6 @@
name = "purple suit"
icon_state = "lawyer_purp"
item_state = "p_suit"
- item_color = "lawyer_purp"
fitted = NO_FEMALE_UNIFORM
can_adjust = TRUE
alt_covers_chest = TRUE
@@ -260,7 +229,6 @@
name = "purple suitskirt"
icon_state = "lawyer_purp_skirt"
item_state = "p_suit"
- item_color = "lawyer_purp_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
diff --git a/code/modules/clothing/under/jobs/civilian/clown_mime.dm b/code/modules/clothing/under/jobs/civilian/clown_mime.dm
index 7e85d60dbc..848a15f83b 100644
--- a/code/modules/clothing/under/jobs/civilian/clown_mime.dm
+++ b/code/modules/clothing/under/jobs/civilian/clown_mime.dm
@@ -4,14 +4,11 @@
desc = "It's not very colourful."
icon_state = "mime"
item_state = "mime"
- item_color = "mime"
/obj/item/clothing/under/rank/civilian/mime/skirt
name = "mime's skirt"
desc = "It's not very colourful."
icon_state = "mime_skirt"
- item_state = "mime"
- item_color = "mime_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -21,7 +18,6 @@
desc = "The only time when you DON'T enjoy looking at someone's rack."
icon_state = "sexymime"
item_state = "sexymime"
- item_color = "sexymime"
body_parts_covered = CHEST|GROIN|LEGS
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -31,7 +27,6 @@
desc = "'HONK!'"
icon_state = "clown"
item_state = "clown"
- item_color = "clown"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -40,7 +35,6 @@
desc = "'BLUE HONK!'"
icon_state = "blueclown"
item_state = "blueclown"
- item_color = "blueclown"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
mutantrace_variation = NONE
@@ -50,7 +44,6 @@
desc = "'GREEN HONK!'"
icon_state = "greenclown"
item_state = "greenclown"
- item_color = "greenclown"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
mutantrace_variation = NONE
@@ -60,7 +53,6 @@
desc = "'YELLOW HONK!'"
icon_state = "yellowclown"
item_state = "yellowclown"
- item_color = "yellowclown"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
mutantrace_variation = NONE
@@ -70,7 +62,6 @@
desc = "'PURPLE HONK!'"
icon_state = "purpleclown"
item_state = "purpleclown"
- item_color = "purpleclown"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
mutantrace_variation = NONE
@@ -80,7 +71,6 @@
desc = "'ORANGE HONK!'"
icon_state = "orangeclown"
item_state = "orangeclown"
- item_color = "orangeclown"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
mutantrace_variation = NONE
@@ -90,7 +80,6 @@
desc = "'R A I N B O W HONK!'"
icon_state = "rainbowclown"
item_state = "rainbowclown"
- item_color = "rainbowclown"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
mutantrace_variation = NONE
@@ -99,7 +88,6 @@
name = "jester suit"
desc = "A jolly dress, well suited to entertain your master, nuncle."
icon_state = "jester"
- item_color = "jester"
can_adjust = FALSE
/obj/item/clothing/under/rank/civilian/clown/jester/alt
@@ -110,7 +98,6 @@
desc = "It makes you look HONKable!"
icon_state = "sexyclown"
item_state = "sexyclown"
- item_color = "sexyclown"
can_adjust = FALSE
/obj/item/clothing/under/rank/civilian/clown/Initialize()
diff --git a/code/modules/clothing/under/jobs/civilian/curator.dm b/code/modules/clothing/under/jobs/civilian/curator.dm
index 741407d71d..792aa64a2b 100644
--- a/code/modules/clothing/under/jobs/civilian/curator.dm
+++ b/code/modules/clothing/under/jobs/civilian/curator.dm
@@ -3,15 +3,11 @@
desc = "It's very... sensible."
icon_state = "red_suit"
item_state = "red_suit"
- item_color = "red_suit"
can_adjust = FALSE
/obj/item/clothing/under/rank/civilian/curator/skirt
name = "sensible suitskirt"
- desc = "It's very... sensible."
icon_state = "red_suit_skirt"
- item_state = "red_suit"
- item_color = "red_suit_skirt"
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
@@ -20,14 +16,12 @@
desc = "A rugged uniform suitable for treasure hunting."
icon_state = "curator"
item_state = "curator"
- item_color = "curator"
/obj/item/clothing/under/rank/civilian/curator/nasa
name = "\improper NASA jumpsuit"
desc = "It has a NASA logo on it and is made of space-proofed materials."
icon_state = "black"
item_state = "bl_suit"
- item_color = "black"
w_class = WEIGHT_CLASS_BULKY
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
diff --git a/code/modules/clothing/under/jobs/command.dm b/code/modules/clothing/under/jobs/command.dm
index 30560e76b4..885ffaed7a 100644
--- a/code/modules/clothing/under/jobs/command.dm
+++ b/code/modules/clothing/under/jobs/command.dm
@@ -3,7 +3,6 @@
name = "captain's jumpsuit"
icon_state = "captain"
item_state = "b_suit"
- item_color = "captain"
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
@@ -12,7 +11,6 @@
desc = "It's a blue jumpskirt with some gold markings denoting the rank of \"Captain\"."
icon_state = "captain_skirt"
item_state = "b_suit"
- item_color = "captain_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -22,7 +20,6 @@
desc = "A green suit and yellow necktie. Exemplifies authority."
icon_state = "green_suit"
item_state = "dg_suit"
- item_color = "green_suit"
can_adjust = FALSE
/obj/item/clothing/under/rank/captain/suit/skirt
@@ -30,7 +27,6 @@
desc = "A green suitskirt and yellow necktie. Exemplifies authority."
icon_state = "green_suit_skirt"
item_state = "dg_suit"
- item_color = "green_suit_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -40,7 +36,6 @@
desc = "A captain's luxury-wear, for special occasions."
icon_state = "captain_parade"
item_state = "by_suit"
- item_color = "captain_parade"
can_adjust = FALSE
/obj/item/clothing/under/rank/captain/femformal
@@ -48,6 +43,5 @@
desc = "An ironically skimpy blue dress with gold markings denoting the rank of \"Captain\"."
icon_state = "lewdcap"
item_state = "lewdcap"
- item_color = "lewdcap"
can_adjust = FALSE
mutantrace_variation = NONE
diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm
index ae0ded5888..365d90e188 100644
--- a/code/modules/clothing/under/jobs/engineering.dm
+++ b/code/modules/clothing/under/jobs/engineering.dm
@@ -4,16 +4,14 @@
name = "chief engineer's jumpsuit"
icon_state = "chiefengineer"
item_state = "gy_suit"
- item_color = "chief"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 80, "acid" = 40)
resistance_flags = NONE
/obj/item/clothing/under/rank/engineering/chief_engineer/skirt
name = "chief engineer's jumpskirt"
desc = "It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of \"Chief Engineer\". It has minor radiation shielding."
- icon_state = "chief_skirt"
+ icon_state = "chiefengineer_skirt"
item_state = "gy_suit"
- item_color = "chief_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -23,7 +21,6 @@
name = "atmospheric technician's jumpsuit"
icon_state = "atmos"
item_state = "atmos_suit"
- item_color = "atmos"
resistance_flags = NONE
/obj/item/clothing/under/rank/engineering/atmospheric_technician/skirt
@@ -31,7 +28,6 @@
desc = "It's a jumpskirt worn by atmospheric technicians."
icon_state = "atmos_skirt"
item_state = "atmos_suit"
- item_color = "atmos_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -41,7 +37,6 @@
name = "engineer's jumpsuit"
icon_state = "engine"
item_state = "engi_suit"
- item_color = "engine"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 60, "acid" = 20)
resistance_flags = NONE
@@ -50,7 +45,6 @@
desc = "A high visibility jumpsuit made from heat and radiation resistant materials."
icon_state = "hazard"
item_state = "suit-orange"
- item_color = "hazard"
alt_covers_chest = TRUE
/obj/item/clothing/under/rank/engineering/engineer/skirt
@@ -58,7 +52,6 @@
desc = "It's an orange high visibility jumpskirt worn by engineers."
icon_state = "engine_skirt"
item_state = "engi_suit"
- item_color = "engine_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
diff --git a/code/modules/clothing/under/jobs/medical.dm b/code/modules/clothing/under/jobs/medical.dm
index 0c2b885bec..d5f4f1f5f9 100644
--- a/code/modules/clothing/under/jobs/medical.dm
+++ b/code/modules/clothing/under/jobs/medical.dm
@@ -3,7 +3,6 @@
name = "chief medical officer's jumpsuit"
icon_state = "cmo"
item_state = "w_suit"
- item_color = "cmo"
permeability_coefficient = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
@@ -12,7 +11,6 @@
desc = "It's a jumpskirt worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection."
icon_state = "cmo_skirt"
item_state = "w_suit"
- item_color = "cmo_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -20,11 +18,10 @@
/obj/item/clothing/under/rank/medical/chief_medical_officer/turtleneck
desc = "It's a turtleneck worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection, for an officer with a superior sense of style and practicality."
name = "chief medical officer's turtleneck"
- alternate_worn_icon = 'modular_citadel/icons/mob/clothing/turtlenecks.dmi'
+ mob_overlay_icon = 'modular_citadel/icons/mob/clothing/turtlenecks.dmi'
icon = 'modular_citadel/icons/obj/clothing/turtlenecks.dmi'
icon_state = "cmoturtle"
item_state = "w_suit"
- item_color = "cmoturtle"
alt_covers_chest = TRUE
mutantrace_variation = NONE
@@ -33,16 +30,14 @@
name = "geneticist's jumpsuit"
icon_state = "genetics"
item_state = "w_suit"
- item_color = "geneticswhite"
permeability_coefficient = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
/obj/item/clothing/under/rank/medical/geneticist/skirt
name = "geneticist's jumpskirt"
desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it."
- icon_state = "geneticswhite_skirt"
+ icon_state = "genetics_skirt"
item_state = "w_suit"
- item_color = "geneticswhite_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -52,16 +47,14 @@
name = "virologist's jumpsuit"
icon_state = "virology"
item_state = "w_suit"
- item_color = "virologywhite"
permeability_coefficient = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
/obj/item/clothing/under/rank/medical/virologist/skirt
name = "virologist's jumpskirt"
desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it."
- icon_state = "virologywhite_skirt"
+ icon_state = "virology_skirt"
item_state = "w_suit"
- item_color = "virologywhite_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -71,16 +64,14 @@
name = "chemist's jumpsuit"
icon_state = "chemistry"
item_state = "w_suit"
- item_color = "chemistrywhite"
permeability_coefficient = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 65)
/obj/item/clothing/under/rank/medical/chemist/skirt
name = "chemist's jumpskirt"
desc = "It's made of a special fiber that gives special protection against biohazards. It has a chemist rank stripe on it."
- icon_state = "chemistrywhite_skirt"
+ icon_state = "chemistry_skirt"
item_state = "w_suit"
- item_color = "chemistrywhite_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -90,7 +81,6 @@
name = "paramedic jumpsuit"
icon_state = "paramedic-dark"
item_state = "w_suit"
- item_color = "paramedic-dark"
permeability_coefficient = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
can_adjust = FALSE
@@ -98,7 +88,6 @@
/obj/item/clothing/under/rank/medical/paramedic/light
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a dark blue cross on the chest denoting that the wearer is a trained paramedic."
icon_state = "paramedic-light"
- item_color = "paramedic-light"
can_adjust = TRUE
/obj/item/clothing/under/rank/medical/paramedic/skirt
@@ -106,7 +95,6 @@
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a white cross on the chest denoting that the wearer is a trained paramedic."
icon_state = "paramedic-dark_skirt"
item_state = "w_suit"
- item_color = "paramedic-dark_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -114,14 +102,12 @@
/obj/item/clothing/under/rank/medical/paramedic/skirt/light
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a dark blue cross on the chest denoting that the wearer is a trained paramedic."
icon_state = "paramedic_skirt"
- item_color = "paramedic_skirt"
/obj/item/clothing/under/rank/medical/doctor/nurse
desc = "It's a jumpsuit commonly worn by nursing staff in the medical department."
name = "nurse's suit"
icon_state = "nursesuit"
item_state = "w_suit"
- item_color = "nursesuit"
permeability_coefficient = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
body_parts_covered = CHEST|GROIN|ARMS
@@ -133,7 +119,6 @@
name = "medical doctor's jumpsuit"
icon_state = "medical"
item_state = "w_suit"
- item_color = "medical"
permeability_coefficient = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
@@ -141,21 +126,18 @@
name = "blue medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
icon_state = "scrubsblue"
- item_color = "scrubsblue"
can_adjust = FALSE
/obj/item/clothing/under/rank/medical/doctor/green
name = "green medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green."
icon_state = "scrubsgreen"
- item_color = "scrubsgreen"
can_adjust = FALSE
/obj/item/clothing/under/rank/medical/doctor/purple
name = "purple medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple."
icon_state = "scrubspurple"
- item_color = "scrubspurple"
can_adjust = FALSE
/obj/item/clothing/under/rank/medical/doctor/skirt
@@ -163,7 +145,6 @@
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel."
icon_state = "medical_skirt"
item_state = "w_suit"
- item_color = "medical_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
\ No newline at end of file
+ fitted = FEMALE_UNIFORM_TOP
diff --git a/code/modules/clothing/under/jobs/rnd.dm b/code/modules/clothing/under/jobs/rnd.dm
index 5af6ce26bf..71c5766849 100644
--- a/code/modules/clothing/under/jobs/rnd.dm
+++ b/code/modules/clothing/under/jobs/rnd.dm
@@ -3,7 +3,6 @@
name = "research director's vest suit"
icon_state = "director"
item_state = "lb_suit"
- item_color = "director"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 35)
can_adjust = FALSE
@@ -12,7 +11,6 @@
desc = "It's a suitskirt worn by those with the know-how to achieve the position of \"Research Director\". Its fabric provides minor protection from biological contaminants."
icon_state = "director_skirt"
item_state = "lb_suit"
- item_color = "director_skirt"
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
@@ -21,7 +19,6 @@
name = "research director's tan suit"
icon_state = "rdwhimsy"
item_state = "rdwhimsy"
- item_color = "rdwhimsy"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
can_adjust = TRUE
alt_covers_chest = TRUE
@@ -31,7 +28,6 @@
desc = "Maybe you'll engineer your own half-man, half-pig creature some day. Its fabric provides minor protection from biological contaminants."
icon_state = "rdwhimsy_skirt"
item_state = "rdwhimsy"
- item_color = "rdwhimsy_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -41,7 +37,6 @@
name = "research director's turtleneck"
icon_state = "rdturtle"
item_state = "p_suit"
- item_color = "rdturtle"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
can_adjust = TRUE
alt_covers_chest = TRUE
@@ -51,7 +46,6 @@
desc = "A dark purple turtleneck and tan khaki skirt, for a director with a superior sense of style."
icon_state = "rdturtle_skirt"
item_state = "p_suit"
- item_color = "rdturtle_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -61,16 +55,14 @@
name = "scientist's jumpsuit"
icon_state = "toxins"
item_state = "w_suit"
- item_color = "toxinswhite"
permeability_coefficient = 0.5
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
/obj/item/clothing/under/rank/rnd/scientist/skirt
name = "scientist's jumpskirt"
desc = "It's made of a special fiber that provides minor protection against explosives. It has markings that denote the wearer as a scientist."
- icon_state = "toxinswhite_skirt"
+ icon_state = "toxins_skirt"
item_state = "w_suit"
- item_color = "toxinswhite_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -80,7 +72,6 @@
name = "roboticist's jumpsuit"
icon_state = "robotics"
item_state = "robotics"
- item_color = "robotics"
resistance_flags = NONE
/obj/item/clothing/under/rank/rnd/roboticist/skirt
@@ -88,7 +79,6 @@
desc = "It's a slimming black with reinforced seams; great for industrial work."
icon_state = "robotics_skirt"
item_state = "robotics"
- item_color = "robotics_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm
index e91125c152..0d4b916610 100644
--- a/code/modules/clothing/under/jobs/security.dm
+++ b/code/modules/clothing/under/jobs/security.dm
@@ -19,7 +19,6 @@
desc = "A tactical security jumpsuit for officers complete with Nanotrasen belt buckle."
icon_state = "rsecurity"
item_state = "r_suit"
- item_color = "rsecurity"
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30)
/obj/item/clothing/under/rank/security/officer/grey
@@ -27,14 +26,12 @@
desc = "A tactical relic of years past before Nanotrasen decided it was cheaper to dye the suits red instead of washing out the blood."
icon_state = "security"
item_state = "gy_suit"
- item_color = "security"
/obj/item/clothing/under/rank/security/officer/skirt
name = "security jumpskirt"
desc = "A \"tactical\" security jumpsuit with the legs replaced by a skirt."
icon_state = "secskirt"
item_state = "r_suit"
- item_color = "secskirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE //you know now that i think of it if you adjust the skirt and the sprite disappears isn't that just like flashing everyone
fitted = FEMALE_UNIFORM_TOP
@@ -44,7 +41,6 @@
desc = "The latest in fashionable security outfits."
icon_state = "officerblueclothes"
item_state = "officerblueclothes"
- item_color = "officerblueclothes"
alt_covers_chest = TRUE
/obj/item/clothing/under/rank/security/officer/blueshirt
@@ -52,7 +48,6 @@
desc = "I'm a little busy right now, Calhoun."
icon_state = "blueshift"
item_state = "blueshift"
- item_color = "blueshift"
can_adjust = FALSE
/obj/item/clothing/under/rank/security/officer/spacepol
@@ -60,7 +55,6 @@
desc = "Space not controlled by megacorporations, planets, or pirates is under the jurisdiction of Spacepol."
icon_state = "spacepol"
item_state = "spacepol"
- item_color = "spacepol"
can_adjust = FALSE
/*
@@ -72,7 +66,6 @@
desc = "A formal security suit for officers complete with Nanotrasen belt buckle."
icon_state = "rwarden"
item_state = "r_suit"
- item_color = "rwarden"
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30)
/obj/item/clothing/under/rank/security/warden/grey
@@ -80,14 +73,12 @@
desc = "A formal relic of years past before Nanotrasen decided it was cheaper to dye the suits red instead of washing out the blood."
icon_state = "warden"
item_state = "gy_suit"
- item_color = "warden"
/obj/item/clothing/under/rank/security/warden/skirt
name = "warden's suitskirt"
desc = "A formal security suitskirt for officers complete with Nanotrasen belt buckle."
icon_state = "rwarden_skirt"
item_state = "r_suit"
- item_color = "rwarden_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -97,7 +88,6 @@
name = "warden's formal uniform"
icon_state = "wardenblueclothes"
item_state = "wardenblueclothes"
- item_color = "wardenblueclothes"
alt_covers_chest = TRUE
/*
@@ -109,7 +99,6 @@
desc = "Someone who wears this means business."
icon_state = "detective"
item_state = "det"
- item_color = "detective"
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30)
/obj/item/clothing/under/rank/security/detective/skirt
@@ -117,7 +106,6 @@
desc = "Someone who wears this means business."
icon_state = "detective_skirt"
item_state = "det"
- item_color = "detective_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -127,14 +115,12 @@
desc = "A hard-boiled private investigator's grey suit, complete with tie clip."
icon_state = "greydet"
item_state = "greydet"
- item_color = "greydet"
/obj/item/clothing/under/rank/security/detective/grey/skirt
name = "noir suitskirt"
desc = "A hard-boiled private investigator's grey suitskirt, complete with tie clip."
icon_state = "greydet_skirt"
item_state = "greydet"
- item_color = "greydet_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -148,7 +134,6 @@
desc = "A security jumpsuit decorated for those few with the dedication to achieve the position of Head of Security."
icon_state = "rhos"
item_state = "r_suit"
- item_color = "rhos"
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
strip_delay = 60
@@ -157,7 +142,6 @@
desc = "A security jumpskirt decorated for those few with the dedication to achieve the position of Head of Security."
icon_state = "rhos_skirt"
item_state = "r_suit"
- item_color = "rhos_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -167,21 +151,18 @@
desc = "There are old men, and there are bold men, but there are very few old, bold men."
icon_state = "hos"
item_state = "gy_suit"
- item_color = "hos"
/obj/item/clothing/under/rank/security/head_of_security/alt
name = "head of security's turtleneck"
desc = "A stylish alternative to the normal head of security jumpsuit, complete with tactical pants."
icon_state = "hosalt"
item_state = "bl_suit"
- item_color = "hosalt"
/obj/item/clothing/under/rank/security/head_of_security/alt/skirt
name = "head of security's turtleneck skirt"
desc = "A stylish alternative to the normal head of security jumpsuit, complete with a tactical skirt."
icon_state = "hosalt_skirt"
item_state = "bl_suit"
- item_color = "hosalt_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -191,14 +172,12 @@
name = "head of security's formal uniform"
icon_state = "hosblueclothes"
item_state = "hosblueclothes"
- item_color = "hosblueclothes"
/obj/item/clothing/under/rank/security/head_of_security/parade
name = "head of security's parade uniform"
desc = "A male head of security's luxury-wear, for special occasions."
icon_state = "hos_parade_male"
item_state = "r_suit"
- item_color = "hos_parade_male"
can_adjust = FALSE
/obj/item/clothing/under/rank/security/head_of_security/parade/female
@@ -206,5 +185,4 @@
desc = "A female head of security's luxury-wear, for special occasions."
icon_state = "hos_parade_fem"
item_state = "r_suit"
- item_color = "hos_parade_fem"
fitted = FEMALE_UNIFORM_TOP
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 5a340d701a..a7557a0702 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -2,7 +2,6 @@
name = "red pj's"
desc = "Sleepwear."
icon_state = "red_pyjamas"
- item_color = "red_pyjamas"
item_state = "w_suit"
can_adjust = FALSE
@@ -10,7 +9,6 @@
name = "blue pj's"
desc = "Sleepwear."
icon_state = "blue_pyjamas"
- item_color = "blue_pyjamas"
item_state = "w_suit"
can_adjust = FALSE
@@ -19,7 +17,6 @@
desc = "Motorcycle not included."
icon_state = "ek"
item_state = "ek"
- item_color = "ek"
can_adjust = FALSE
/obj/item/clothing/under/rank/prisoner
@@ -27,7 +24,6 @@
desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position."
icon_state = "prisoner"
item_state = "o_suit"
- item_color = "prisoner"
has_sensor = LOCKED_SENSORS
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
@@ -37,7 +33,6 @@
desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position."
icon_state = "prisoner_skirt"
item_state = "o_suit"
- item_color = "prisoner_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -47,21 +42,18 @@
desc = "'Special delivery!'"
icon_state = "mailman"
item_state = "b_suit"
- item_color = "mailman"
/obj/item/clothing/under/misc/psyche
name = "psychedelic jumpsuit"
desc = "Groovy!"
icon_state = "psyche"
item_state = "p_suit"
- item_color = "psyche"
/obj/item/clothing/under/misc/vice_officer
name = "vice officer's jumpsuit"
desc = "It's the standard issue pretty-boy outfit, as seen on Holo-Vision."
icon_state = "vice"
item_state = "gy_suit"
- item_color = "vice"
can_adjust = FALSE
@@ -69,7 +61,6 @@
name = "administrative cybernetic jumpsuit"
icon_state = "syndicate"
item_state = "bl_suit"
- item_color = "syndicate"
desc = "A cybernetically enhanced jumpsuit used for administrative duties."
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
@@ -87,7 +78,6 @@
desc = "Traditional burial garments from the early 22nd century."
icon_state = "burial"
item_state = "burial"
- item_color = "burial"
has_sensor = NO_SENSORS
/obj/item/clothing/under/misc/overalls
@@ -95,7 +85,6 @@
desc = "A set of durable overalls for getting the job done."
icon_state = "overalls"
item_state = "lb_suit"
- item_color = "overalls"
can_adjust = FALSE
/obj/item/clothing/under/misc/assistantformal
@@ -103,24 +92,21 @@
desc = "An assistant's formal-wear. Why an assistant needs formal-wear is still unknown."
icon_state = "assistant_formal"
item_state = "gy_suit"
- item_color = "assistant_formal"
can_adjust = FALSE
/obj/item/clothing/under/misc/staffassistant
name = "staff assistant's jumpsuit"
desc = "It's a generic grey jumpsuit. That's about what assistants are worth, anyway."
icon = 'goon/icons/obj/item_js_rank.dmi'
- alternate_worn_icon = 'goon/icons/mob/worn_js_rank.dmi'
+ mob_overlay_icon = 'goon/icons/mob/worn_js_rank.dmi'
icon_state = "assistant"
item_state = "gy_suit"
- item_color = "assistant"
mutantrace_variation = NONE
/obj/item/clothing/under/croptop
name = "crop top"
desc = "We've saved money by giving you half a shirt!"
icon_state = "croptop"
- item_color = "croptop"
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -130,7 +116,6 @@
desc = "A special containment suit that allows plasma-based lifeforms to exist safely in an oxygenated environment, and automatically extinguishes them in a crisis. Despite being airtight, it's not spaceworthy."
icon_state = "plasmaman"
item_state = "plasmaman"
- item_color = "plasmaman"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95)
slowdown = 1
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
@@ -191,7 +176,6 @@
desc = "A jumpsuit made from durathread, its resilient fibres provide some protection to the wearer."
icon_state = "durathread"
item_state = "durathread"
- item_color = "durathread"
can_adjust = TRUE
armor = list("melee" = 10, "laser" = 10, "fire" = 40, "acid" = 10, "bomb" = 5)
@@ -208,7 +192,6 @@
desc = "Cyka blyat."
icon_state = "squatteroutfit"
item_state = "squatteroutfit"
- item_color = "squatteroutfit"
can_adjust = FALSE
mutantrace_variation = NONE
@@ -217,7 +200,6 @@
desc = "Drop and give me dvadtsat!"
icon_state = "russobluecamo"
item_state = "russobluecamo"
- item_color = "russobluecamo"
can_adjust = FALSE
mutantrace_variation = NONE
@@ -226,7 +208,6 @@
desc = "What is the point of this, anyway?"
icon_state = "keyholesweater"
item_state = "keyholesweater"
- item_color = "keyholesweater"
can_adjust = FALSE
mutantrace_variation = NONE
@@ -234,7 +215,6 @@
name = "pink stripper outfit"
icon_state = "stripper_p"
item_state = "stripper_p"
- item_color = "stripper_p"
body_parts_covered = CHEST|GROIN
can_adjust = FALSE
@@ -242,13 +222,11 @@
name = "green stripper outfit"
icon_state = "stripper_g"
item_state = "stripper_g"
- item_color = "stripper_g"
/obj/item/clothing/under/misc/stripper/mankini
name = "pink mankini"
icon_state = "mankini"
item_state = "mankini"
- item_color = "mankini"
/obj/item/clothing/under/misc/corporateuniform
name = "corporate uniform"
@@ -262,7 +240,6 @@
name = "polychromic button-up shirt"
desc = "A fancy button-up shirt made with polychromic threads."
icon_state = "polysuit"
- item_color = "polysuit"
item_state = "sl_suit"
hasprimary = TRUE
hassecondary = TRUE
@@ -276,7 +253,6 @@
name = "polychromic shorts"
desc = "For ease of movement and style."
icon_state = "polyshorts"
- item_color = "polyshorts"
item_state = "rainbow"
hasprimary = TRUE
hassecondary = TRUE
@@ -291,7 +267,6 @@
name = "polychromic tri-tone jumpsuit"
desc = "A fancy jumpsuit made with polychromic threads."
icon_state = "polyjump"
- item_color = "polyjump"
item_state = "rainbow"
hasprimary = TRUE
hassecondary = TRUE
@@ -306,7 +281,6 @@
name = "polychromic bottomless shirt"
desc = "Great for showing off your junk in dubious style."
icon_state = "polybottomless"
- item_color = "polybottomless"
item_state = "rainbow"
primary_color = "#808080"
secondary_color = "#FF3535"
@@ -318,7 +292,6 @@
name = "polychromic tank top"
desc = "For those lazy summer days."
icon_state = "polyshimatank"
- item_color = "polyshimatank"
item_state = "rainbow"
primary_color = "#808080"
secondary_color = "#FFFFFF"
@@ -331,7 +304,6 @@
name = "polychromic feminine tank top"
desc = "Great for showing off your chest in style. Not recommended for males."
icon_state = "polyfemtankpantsu"
- item_color = "polyfemtankpantsu"
hastertiary = FALSE
primary_color = "#808080"
secondary_color = "#FF3535"
diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm
index 4b0c92af88..d0048326ff 100644
--- a/code/modules/clothing/under/pants.dm
+++ b/code/modules/clothing/under/pants.dm
@@ -8,101 +8,84 @@
name = "classic jeans"
desc = "You feel cooler already."
icon_state = "jeansclassic"
- item_color = "jeansclassic"
/obj/item/clothing/under/pants/mustangjeans
name = "Must Hang jeans"
desc = "Made in the finest space jeans factory this side of Alpha Centauri."
icon_state = "jeansmustang"
- item_color = "jeansmustang"
/obj/item/clothing/under/pants/blackjeans
name = "black jeans"
desc = "Only for those who can pull it off."
icon_state = "jeansblack"
- item_color = "jeansblack"
/obj/item/clothing/under/pants/youngfolksjeans
name = "Young Folks jeans"
desc = "For those tired of boring old jeans. Relive the passion of your youth!"
icon_state = "jeansyoungfolks"
- item_color = "jeansyoungfolks"
/obj/item/clothing/under/pants/white
name = "white pants"
desc = "Plain white pants. Boring."
icon_state = "whitepants"
- item_color = "whitepants"
/obj/item/clothing/under/pants/red
name = "red pants"
desc = "Bright red pants. Overflowing with personality."
icon_state = "redpants"
- item_color = "redpants"
/obj/item/clothing/under/pants/black
name = "black pants"
desc = "These pants are dark, like your soul."
icon_state = "blackpants"
- item_color = "blackpants"
/obj/item/clothing/under/pants/tan
name = "tan pants"
desc = "Some tan pants. You look like a white collar worker with these on."
icon_state = "tanpants"
- item_color = "tanpants"
/obj/item/clothing/under/pants/track
name = "track pants"
desc = "A pair of track pants, for the athletic."
icon_state = "trackpants"
- item_color = "trackpants"
/obj/item/clothing/under/pants/jeans
name = "jeans"
desc = "A nondescript pair of tough blue jeans."
icon_state = "jeans"
- item_color = "jeans"
/obj/item/clothing/under/pants/khaki
name = "khaki pants"
desc = "A pair of dust beige khaki pants."
icon_state = "khaki"
- item_color = "khaki"
/obj/item/clothing/under/pants/camo
name = "camo pants"
desc = "A pair of woodland camouflage pants. Probably not the best choice for a space station."
icon_state = "camopants"
- item_color = "camopants"
/obj/item/clothing/under/pants/jeanripped
name = "ripped jeans"
desc = "If you're wearing this you're poor or a rebel"
icon_state = "jean_ripped"
- item_color = "jean_ripped"
/obj/item/clothing/under/pants/jeanshort
name = "jean shorts"
desc = "These are really just jeans cut in half"
icon_state = "jean_shorts"
- item_color = "jean_shorts"
/obj/item/clothing/under/pants/denimskirt
name = "denim skirt"
desc = "These are really just a jean leg hole cut from a pair"
icon_state = "denim_skirt"
- item_color = "denim_skirt"
/obj/item/clothing/under/pants/chaps
name = "black chaps"
body_parts_covered = LEGS
desc = "Yeehaw"
icon_state = "chaps"
- item_color = "chaps"
/obj/item/clothing/under/pants/yoga
name = "yoga pants"
desc = "Comfy!"
icon_state = "yoga_pants"
- item_color = "yoga_pants"
diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm
index b66df87347..ebf7cb5896 100644
--- a/code/modules/clothing/under/shorts.dm
+++ b/code/modules/clothing/under/shorts.dm
@@ -9,38 +9,31 @@
/obj/item/clothing/under/shorts/red
name = "red athletic shorts"
icon_state = "redshorts"
- item_color = "redshorts"
/obj/item/clothing/under/shorts/green
name = "green athletic shorts"
icon_state = "greenshorts"
- item_color = "greenshorts"
/obj/item/clothing/under/shorts/blue
name = "blue athletic shorts"
icon_state = "blueshorts"
- item_color = "blueshorts"
/obj/item/clothing/under/shorts/black
name = "black athletic shorts"
icon_state = "blackshorts"
- item_color = "blackshorts"
/obj/item/clothing/under/shorts/grey
name = "grey athletic shorts"
icon_state = "greyshorts"
- item_color = "greyshorts"
/obj/item/clothing/under/shorts/purple
name = "purple athletic shorts"
icon_state = "purpleshorts"
- item_color = "purpleshorts"
/obj/item/clothing/under/shorts/polychromic
name = "polychromic athletic shorts"
desc = "95% Polychrome, 5% Spandex!"
icon_state = "polyshortpants"
- item_color = "polyshortpants"
item_state = "rainbow"
hasprimary = TRUE
hassecondary = TRUE
@@ -52,7 +45,6 @@
name = "polychromic panties"
desc = "Topless striped panties. Now with 120% more polychrome!"
icon_state = "polypantsu"
- item_color = "polypantsu"
item_state = "rainbow"
hastertiary = FALSE
primary_color = "#FFFFFF"
diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm
index 02c2b06546..f00e96d821 100644
--- a/code/modules/clothing/under/skirt_dress.dm
+++ b/code/modules/clothing/under/skirt_dress.dm
@@ -3,7 +3,6 @@
name = "black skirt"
desc = "A black skirt, very fancy!"
icon_state = "blackskirt"
- item_color = "blackskirt"
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -12,7 +11,6 @@
name = "blue skirt"
desc = "A blue, casual skirt."
icon_state = "blueskirt"
- item_color = "blueskirt"
item_state = "b_suit"
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
@@ -22,7 +20,6 @@
name = "red skirt"
desc = "A red, casual skirt."
icon_state = "redskirt"
- item_color = "redskirt"
item_state = "r_suit"
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
@@ -32,7 +29,6 @@
name = "purple skirt"
desc = "A purple, casual skirt."
icon_state = "purpleskirt"
- item_color = "purpleskirt"
item_state = "p_suit"
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
@@ -43,7 +39,6 @@
desc = "Makes you want to frolic in a field of daisies."
icon_state = "sundress"
item_state = "sundress"
- item_color = "sundress"
body_parts_covered = CHEST|GROIN
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -51,13 +46,11 @@
/obj/item/clothing/under/dress/sundress/white
name = "white sundress"
icon_state = "sundress_white"
- item_color = "sundress_white"
/obj/item/clothing/under/dress/green
name = "green dress"
desc = "A tight green dress"
icon_state = "dress_green"
- item_color = "dress_green"
body_parts_covered = CHEST|GROIN
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -66,7 +59,6 @@
name = "pink dress"
desc = "A tight pink dress"
icon_state = "dress_pink"
- item_color = "dress_pink"
body_parts_covered = CHEST|GROIN
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -76,7 +68,6 @@
desc = "Filled with Latin fire."
icon_state = "black_tango"
item_state = "wcoat"
- item_color = "black_tango"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -85,7 +76,6 @@
desc = "Filled with Western fire."
icon_state = "western_bustle"
item_state = "wcoat"
- item_color = "western_bustle"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -94,7 +84,6 @@
desc = "Filled with Latin fire."
icon_state = "flamenco"
item_state = "wcoat"
- item_color = "flamenco"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -103,7 +92,6 @@
desc = "Fashion in space."
icon_state = "striped_dress"
item_state = "stripeddress"
- item_color = "striped_dress"
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_FULL
can_adjust = FALSE
@@ -113,7 +101,6 @@
desc = "Formal wear for a leading lady."
icon_state = "sailor_dress"
item_state = "sailordress"
- item_color = "sailor_dress"
body_parts_covered = CHEST|GROIN|ARMS
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -123,7 +110,6 @@
desc = "Lovely dress."
icon_state = "flower_dress"
item_state = "sailordress"
- item_color = "flower_dress"
body_parts_covered = CHEST|GROIN|LEGS
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -132,7 +118,6 @@
name = "swept skirt"
desc = "Formal skirt."
icon_state = "skirt_swept"
- item_color = "skirt_swept"
body_parts_covered = GROIN
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -141,7 +126,6 @@
name = "black corset"
desc = "Nanotrasen is not resposible for any organ damage."
icon_state = "corset"
- item_color = "corset"
body_parts_covered = CHEST|GROIN
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -151,7 +135,6 @@
desc = "Fancy dress for space bar singers."
icon_state = "red_evening_gown"
item_state = "redeveninggown"
- item_color = "red_evening_gown"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
@@ -160,7 +143,6 @@
desc = "A preppy red skirt with a white blouse."
icon_state = "plaid_red"
item_state = "plaid_red"
- item_color = "plaid_red"
fitted = FEMALE_UNIFORM_TOP
can_adjust = TRUE
alt_covers_chest = TRUE
@@ -170,7 +152,6 @@
desc = "A preppy blue skirt with a white blouse."
icon_state = "plaid_blue"
item_state = "plaid_blue"
- item_color = "plaid_blue"
fitted = FEMALE_UNIFORM_TOP
can_adjust = TRUE
alt_covers_chest = TRUE
@@ -180,7 +161,6 @@
desc = "A preppy purple skirt with a white blouse."
icon_state = "plaid_purple"
item_state = "plaid_purple"
- item_color = "plaid_purple"
fitted = FEMALE_UNIFORM_TOP
can_adjust = TRUE
alt_covers_chest = TRUE
@@ -190,7 +170,6 @@
desc = "A preppy green skirt with a white blouse."
icon_state = "plaid_green"
item_state = "plaid_green"
- item_color = "plaid_green"
fitted = FEMALE_UNIFORM_TOP
can_adjust = TRUE
alt_covers_chest = TRUE
@@ -200,7 +179,6 @@
desc = "A white wedding gown made from the finest silk."
icon_state = "bride_white"
item_state = "bride_white"
- item_color = "bride_white"
can_adjust = FALSE
mutantrace_variation = NONE
@@ -209,34 +187,29 @@
desc = "A big and puffy orange dress."
icon_state = "bride_orange"
item_state = "bride_orange"
- item_color = "bride_orange"
/obj/item/clothing/under/dress/wedding/purple
name = "purple wedding dress"
desc = "A big and puffy purple dress."
icon_state = "bride_purple"
item_state = "bride_purple"
- item_color = "bride_purple"
/obj/item/clothing/under/dress/wedding/blue
name = "blue wedding dress"
desc = "A big and puffy blue dress."
icon_state = "bride_blue"
item_state = "bride_blue"
- item_color = "bride_blue"
/obj/item/clothing/under/dress/wedding/red
name = "red wedding dress"
desc = "A big and puffy red dress."
icon_state = "bride_red"
item_state = "bride_red"
- item_color = "bride_red"
/obj/item/clothing/under/dress/skirt/polychromic
name = "polychromic skirt"
desc = "A fancy skirt made with polychromic threads."
icon_state = "polyskirt"
- item_color = "polyskirt"
item_state = "rainbow"
hasprimary = TRUE
hassecondary = TRUE
@@ -250,7 +223,6 @@
name = "polychromic pleated skirt"
desc = "A magnificent pleated skirt complements the woolen polychromatic sweater."
icon_state = "polypleat"
- item_color = "polypleat"
item_state = "rainbow"
primary_color = "#8CC6FF"
secondary_color = "#808080"
diff --git a/code/modules/clothing/under/suits.dm b/code/modules/clothing/under/suits.dm
index 1b99fbc549..3ee5204c3b 100644
--- a/code/modules/clothing/under/suits.dm
+++ b/code/modules/clothing/under/suits.dm
@@ -4,7 +4,6 @@
desc = "A white suit, suitable for an excellent host."
icon_state = "scratch"
item_state = "scratch"
- item_color = "scratch"
can_adjust = FALSE
/obj/item/clothing/under/suit/white_on_white/skirt
@@ -12,7 +11,6 @@
desc = "A white suitskirt, suitable for an excellent host."
icon_state = "white_suit_skirt"
item_state = "scratch"
- item_color = "white_suit_skirt"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
fitted = FEMALE_UNIFORM_TOP
@@ -21,7 +19,6 @@
desc = "It's a very amish looking suit."
name = "amish suit"
icon_state = "sl_suit"
- item_color = "sl_suit"
can_adjust = FALSE
/obj/item/clothing/under/suit/waiter
@@ -29,7 +26,6 @@
desc = "It's a very smart uniform with a special pocket for tip."
icon_state = "waiter"
item_state = "waiter"
- item_color = "waiter"
can_adjust = FALSE
/obj/item/clothing/under/suit/black
@@ -37,7 +33,6 @@
desc = "A black suit and red tie. Very formal."
icon_state = "black_suit"
item_state = "bl_suit"
- item_color = "black_suit"
can_adjust = FALSE
/obj/item/clothing/under/suit/black_really
@@ -45,21 +40,18 @@
desc = "A formal black suit and red tie, intended for the station's finest."
icon_state = "really_black_suit"
item_state = "bl_suit"
- item_color = "really_black_suit"
/obj/item/clothing/under/suit/black/skirt
name = "executive suit"
desc = "A formal trouser suit for women, intended for the station's finest."
icon_state = "black_suit_fem"
item_state = "black_suit_fem"
- item_color = "black_suit_fem"
/obj/item/clothing/under/suit/green
name = "green suit"
desc = "A green suit and yellow necktie. Baller."
icon_state = "green_suit"
item_state = "dg_suit"
- item_color = "green_suit"
can_adjust = FALSE
/obj/item/clothing/under/suit/red
@@ -67,49 +59,42 @@
desc = "A red suit and blue tie. Somewhat formal."
icon_state = "red_suit"
item_state = "r_suit"
- item_color = "red_suit"
/obj/item/clothing/under/suit/charcoal
name = "charcoal suit"
desc = "A charcoal suit and red tie. Very professional."
icon_state = "charcoal_suit"
item_state = "charcoal_suit"
- item_color = "charcoal_suit"
/obj/item/clothing/under/suit/navy
name = "navy suit"
desc = "A navy suit and red tie, intended for the station's finest."
icon_state = "navy_suit"
item_state = "navy_suit"
- item_color = "navy_suit"
/obj/item/clothing/under/suit/burgundy
name = "burgundy suit"
desc = "A burgundy suit and black tie. Somewhat formal."
icon_state = "burgundy_suit"
item_state = "burgundy_suit"
- item_color = "burgundy_suit"
/obj/item/clothing/under/suit/checkered
name = "checkered suit"
desc = "That's a very nice suit you have there. Shame if something were to happen to it, eh?"
icon_state = "checkered_suit"
item_state = "checkered_suit"
- item_color = "checkered_suit"
/obj/item/clothing/under/suit/tan
name = "tan suit"
desc = "A tan suit with a yellow tie. Smart, but casual."
icon_state = "tan_suit"
item_state = "tan_suit"
- item_color = "tan_suit"
/obj/item/clothing/under/suit/white
name = "white suit"
desc = "A white suit and jacket with a blue shirt. You wanna play rough? OKAY!"
icon_state = "white_suit"
item_state = "white_suit"
- item_color = "white_suit"
/obj/item/clothing/under/suit/telegram
name = "telegram suit"
@@ -123,7 +108,6 @@
name = "polychromic suit"
desc = "For when you want to show off your horrible colour coordination skills."
icon_state = "polysuit"
- item_color = "polysuit"
item_state = "sl_suit"
hasprimary = TRUE
hassecondary = TRUE
diff --git a/code/modules/clothing/under/sweaters.dm b/code/modules/clothing/under/sweaters.dm
index 13f336bfbd..d8e8373d71 100644
--- a/code/modules/clothing/under/sweaters.dm
+++ b/code/modules/clothing/under/sweaters.dm
@@ -3,39 +3,33 @@
desc = "Why trade style for comfort? Now you can go commando down south and still be cozy up north."
icon_state = "bb_turtle"
item_state = "w_suit"
- item_color = "bb_turtle"
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = TRUE
icon = 'modular_citadel/icons/obj/clothing/turtlenecks.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
+ mob_overlay_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
mutantrace_variation = NONE
/obj/item/clothing/under/sweater/black
name = "black sweater"
icon_state = "bb_turtleblk"
item_state = "bl_suit"
- item_color = "bb_turtleblk"
/obj/item/clothing/under/sweater/purple
name = "purple sweater"
icon_state = "bb_turtlepur"
item_state = "p_suit"
- item_color = "bb_turtlepur"
/obj/item/clothing/under/sweater/green
name = "green sweater"
icon_state = "bb_turtlegrn"
item_state = "g_suit"
- item_color = "bb_turtlegrn"
/obj/item/clothing/under/sweater/red
name = "red sweater"
icon_state = "bb_turtlered"
item_state = "r_suit"
- item_color = "bb_turtlered"
/obj/item/clothing/under/sweater/blue
name = "blue sweater"
icon_state = "bb_turtleblu"
item_state = "b_suit"
- item_color = "bb_turtleblu"
diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm
index 676138d734..986196a212 100644
--- a/code/modules/clothing/under/syndicate.dm
+++ b/code/modules/clothing/under/syndicate.dm
@@ -3,7 +3,6 @@
desc = "A non-descript and slightly suspicious looking turtleneck with digital camouflage cargo pants."
icon_state = "syndicate"
item_state = "bl_suit"
- item_color = "syndicate"
has_sensor = NO_SENSORS
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
alt_covers_chest = TRUE
@@ -13,7 +12,6 @@
desc = "A non-descript and slightly suspicious looking skirtleneck."
icon_state = "syndicate_skirt"
item_state = "bl_suit"
- item_color = "syndicate_skirt"
has_sensor = NO_SENSORS
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
alt_covers_chest = TRUE
@@ -24,7 +22,6 @@
desc = "An insidious armored jumpsuit lined with Syndicate nanofibers and prototype platings, slightly resistant to most forms of damage, but is far too bulky to have anything attached to it. It still counts as stealth if there are no witnesses."
icon_state = "bloodred_pajamas"
item_state = "bl_suit"
- item_color = "bloodred_pajamas"
dummy_thick = TRUE
armor = list("melee" = 10, "bullet" = 10, "laser" = 10,"energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 50, "acid" = 40)
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -35,7 +32,6 @@
desc = "Do operatives dream of nuclear sheep?"
icon_state = "bloodred_pajamas"
item_state = "bl_suit"
- item_color = "bloodred_pajamas"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
/obj/item/clothing/under/syndicate/tacticool
@@ -43,7 +39,6 @@
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
icon_state = "tactifool"
item_state = "bl_suit"
- item_color = "tactifool"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
/obj/item/clothing/under/syndicate/tacticool/skirt
@@ -51,7 +46,6 @@
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
icon_state = "tactifool_skirt"
item_state = "bl_suit"
- item_color = "tactifool_skirt"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
fitted = FEMALE_UNIFORM_TOP
@@ -60,7 +54,6 @@
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
icon_state = "tactifool"
item_state = "bl_suit"
- item_color = "tactifool"
has_sensor = TRUE
mutantrace_variation = NONE
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
@@ -70,7 +63,6 @@
desc = "A double seamed tactical turtleneck disguised as a civilian grade silk suit. Intended for the most formal operator. The collar is really sharp."
icon_state = "really_black_suit"
item_state = "bl_suit"
- item_color = "black_suit"
can_adjust = FALSE
/obj/item/clothing/under/syndicate/camo
@@ -78,14 +70,12 @@
desc = "A green military camouflage uniform."
icon_state = "camogreen"
item_state = "g_suit"
- item_color = "camogreen"
can_adjust = FALSE
/obj/item/clothing/under/syndicate/soviet
name = "Ratnik 5 tracksuit"
desc = "Badly translated labels tell you to clean this in Vodka. Great for squatting in."
icon_state = "trackpants"
- item_color = "trackpants"
can_adjust = FALSE
armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
resistance_flags = NONE
@@ -94,14 +84,12 @@
name = "combat uniform"
desc = "With a suit lined with this many pockets, you are ready to operate."
icon_state = "syndicate_combat"
- item_color = "syndicate_combat"
can_adjust = FALSE
/obj/item/clothing/under/syndicate/rus_army
name = "advanced military tracksuit"
desc = "Military grade tracksuits for frontline squatting."
icon_state = "rus_under"
- item_color = "rus_under"
can_adjust = FALSE
armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
resistance_flags = NONE
@@ -111,7 +99,6 @@
desc = "A major league outfit with the number faded number on the back. Seems rather robust for just a game..."
icon_state = "syndicatebaseball"
item_state = "syndicatebaseball"
- item_color = "syndicatebaseball"
has_sensor = NO_SENSORS
armor = list("melee" = 15, "bullet" = 5, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
alt_covers_chest = TRUE
diff --git a/code/modules/clothing/under/trek.dm b/code/modules/clothing/under/trek.dm
index 2fb33d1b19..a9709a4c95 100644
--- a/code/modules/clothing/under/trek.dm
+++ b/code/modules/clothing/under/trek.dm
@@ -13,14 +13,12 @@
name = "command uniform"
desc = "The uniform worn by command officers in the mid 2260s."
icon_state = "trek_command"
- item_color = "trek_command"
item_state = "y_suit"
/obj/item/clothing/under/trek/engsec
name = "operations uniform"
desc = "The uniform worn by operations officers of the mid 2260s. You feel strangely vulnerable just seeing this..."
icon_state = "trek_engsec"
- item_color = "trek_engsec"
item_state = "r_suit"
strip_delay = 50
@@ -28,7 +26,6 @@
name = "medsci uniform"
desc = "The uniform worn by medsci officers in the mid 2260s."
icon_state = "trek_medsci"
- item_color = "trek_medsci"
item_state = "b_suit"
permeability_coefficient = 0.50
@@ -37,38 +34,32 @@
/obj/item/clothing/under/trek/command/next
desc = "The uniform worn by command officers. This one's from the mid 2360s."
icon_state = "trek_next_command"
- item_color = "trek_next_command"
item_state = "r_suit"
/obj/item/clothing/under/trek/engsec/next
desc = "The uniform worn by operation officers. This one's from the mid 2360s."
icon_state = "trek_next_engsec"
- item_color = "trek_next_engsec"
item_state = "y_suit"
/obj/item/clothing/under/trek/medsci/next
desc = "The uniform worn by medsci officers. This one's from the mid 2360s."
icon_state = "trek_next_medsci"
- item_color = "trek_next_medsci"
//ENT
/obj/item/clothing/under/trek/command/ent
desc = "The uniform worn by command officers of the 2140s."
icon_state = "trek_ent_command"
- item_color = "trek_ent_command"
item_state = "bl_suit"
/obj/item/clothing/under/trek/engsec/ent
desc = "The uniform worn by operations officers of the 2140s."
icon_state = "trek_ent_engsec"
- item_color = "trek_ent_engsec"
item_state = "bl_suit"
/obj/item/clothing/under/trek/medsci/ent
desc = "The uniform worn by medsci officers of the 2140s."
icon_state = "trek_ent_medsci"
- item_color = "trek_ent_medsci"
item_state = "bl_suit"
@@ -111,5 +102,4 @@
name = "french marshall's uniform"
desc = "Something about it feels off..."
icon_state = "trek_Q"
- item_color = "trek_Q"
item_state = "r_suit"
diff --git a/code/modules/food_and_drinks/food/snacks_egg.dm b/code/modules/food_and_drinks/food/snacks_egg.dm
index 0f2856c090..fbed6327b5 100644
--- a/code/modules/food_and_drinks/food/snacks_egg.dm
+++ b/code/modules/food_and_drinks/food/snacks_egg.dm
@@ -41,7 +41,7 @@
/obj/item/reagent_containers/food/snacks/egg/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/toy/crayon))
var/obj/item/toy/crayon/C = W
- var/clr = C.item_color
+ var/clr = C.crayon_color
if(!(clr in list("blue", "green", "mime", "orange", "purple", "rainbow", "red", "yellow")))
to_chat(usr, "[src] refuses to take on this colour!")
@@ -49,41 +49,32 @@
to_chat(usr, "You colour [src] with [W].")
icon_state = "egg-[clr]"
- item_color = clr
else
..()
/obj/item/reagent_containers/food/snacks/egg/blue
icon_state = "egg-blue"
- item_color = "blue"
/obj/item/reagent_containers/food/snacks/egg/green
icon_state = "egg-green"
- item_color = "green"
/obj/item/reagent_containers/food/snacks/egg/mime
icon_state = "egg-mime"
- item_color = "mime"
/obj/item/reagent_containers/food/snacks/egg/orange
icon_state = "egg-orange"
- item_color = "orange"
/obj/item/reagent_containers/food/snacks/egg/purple
icon_state = "egg-purple"
- item_color = "purple"
/obj/item/reagent_containers/food/snacks/egg/rainbow
icon_state = "egg-rainbow"
- item_color = "rainbow"
/obj/item/reagent_containers/food/snacks/egg/red
icon_state = "egg-red"
- item_color = "red"
/obj/item/reagent_containers/food/snacks/egg/yellow
icon_state = "egg-yellow"
- item_color = "yellow"
/obj/item/reagent_containers/food/snacks/friedegg
name = "fried egg"
diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm
index 5f2d92fc93..94c13999ba 100644
--- a/code/modules/holiday/easter.dm
+++ b/code/modules/holiday/easter.dm
@@ -113,8 +113,6 @@
. = ..()
var/eggcolor = pick("blue","green","mime","orange","purple","rainbow","red","yellow")
icon_state = "egg-[eggcolor]"
- item_color = "[eggcolor]"
-
/obj/item/reagent_containers/food/snacks/egg/proc/dispensePrize(turf/where)
var/won = pick(/obj/item/clothing/head/bunnyhead,
/obj/item/clothing/suit/bunnysuit,
diff --git a/code/modules/holiday/halloween/jacqueen.dm b/code/modules/holiday/halloween/jacqueen.dm
index 638d1427bc..7f6d48e731 100644
--- a/code/modules/holiday/halloween/jacqueen.dm
+++ b/code/modules/holiday/halloween/jacqueen.dm
@@ -390,7 +390,7 @@
desc = "A jacqueline o' lantern! You can't seem to get rid of it."
icon_state = "hardhat0_pumpkin_j"
item_state = "hardhat0_pumpkin_j"
- item_color = "pumpkin_j"
+ hat_type = "pumpkin_j"
brightness_on = 4
/obj/item/clothing/head/hardhat/pumpkinhead/jaqc/Initialize()
diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm
index 9fb97c08a7..316bdb8289 100644
--- a/code/modules/holodeck/area_copy.dm
+++ b/code/modules/holodeck/area_copy.dm
@@ -63,23 +63,34 @@ GLOBAL_LIST_INIT(duplicate_forbidden_vars_by_type, typecacheof_assoc_list(list(
var/src_min_x = 99999
var/src_min_y = 99999
+ var/src_max_x = 0
+ var/src_max_y = 0
var/list/refined_src = new/list()
for (var/turf/T in turfs_src)
src_min_x = min(src_min_x,T.x)
src_min_y = min(src_min_y,T.y)
+ src_max_x = max(src_max_x,T.y)
+ src_max_y = max(src_max_y,T.y)
for (var/turf/T in turfs_src)
refined_src[T] = "[T.x - src_min_x].[T.y - src_min_y]"
var/trg_min_x = 99999
var/trg_min_y = 99999
+ var/trg_max_x = 0
+ var/trg_max_y = 0
var/list/refined_trg = new/list()
for (var/turf/T in turfs_trg)
trg_min_x = min(trg_min_x,T.x)
trg_min_y = min(trg_min_y,T.y)
+ trg_max_x = max(trg_max_x,T.y)
+ trg_max_y = max(trg_max_y,T.y)
+
+ var/diff_x = round(((src_max_x - src_min_x) - (trg_max_x - trg_min_x))/2)
+ var/diff_y = round(((src_max_y - src_min_y) - (trg_max_y - trg_min_y))/2)
for (var/turf/T in turfs_trg)
- refined_trg["[T.x - trg_min_x].[T.y - trg_min_y]"] = T
+ refined_trg["[T.x - trg_min_x + diff_x].[T.y - trg_min_y + diff_y]"] = T
var/list/toupdate = new/list()
diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm
index b5cbed8b79..3c87082393 100644
--- a/code/modules/holodeck/computer.dm
+++ b/code/modules/holodeck/computer.dm
@@ -2,7 +2,10 @@
Holodeck Update
The on-station holodeck area is of type [holodeck_type].
- All subtypes of [program_type] are loaded into the program cache or emag programs list.
+ All types found in GLOB.holodeck_areas_per_comp_type[src.type], generated on make_datum_references_lists(),
+ are loaded into the program cache or emag programs list.
+ Paths with their abstract_type variable equal to themselves will be skipped.
+
If init_program is null, a random program will be loaded on startup.
If you don't wish this, set it to the offline program or another of your choosing.
@@ -12,7 +15,6 @@
3) Create a new control console that uses those areas
Non-mapped areas should be skipped but you should probably comment them out anyway.
- The base of program_type will always be ignored; only subtypes will be loaded.
*/
#define HOLODECK_CD 25
@@ -35,7 +37,6 @@
// Splitting this up allows two holodecks of the same size
// to use the same source patterns. Y'know, if you want to.
var/holodeck_type = /area/holodeck/rec_center // locate(this) to get the target holodeck
- var/program_type = /area/holodeck/rec_center // subtypes of this (but not this itself) are loadable programs
var/active = FALSE
var/damaged = FALSE
@@ -181,7 +182,7 @@
return ..()
/obj/machinery/computer/holodeck/proc/generate_program_list()
- for(var/typekey in subtypesof(program_type))
+ for(var/typekey in GLOB.holodeck_areas_prototypes[type])
var/area/holodeck/A = GLOB.areas_by_type[typekey]
if(!A || !A.contents.len)
continue
diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm
index b2e016635f..3fac417605 100644
--- a/code/modules/holodeck/items.dm
+++ b/code/modules/holodeck/items.dm
@@ -24,15 +24,16 @@
hitsound = "swing_hit"
armour_penetration = 50
var/active = 0
+ var/saber_color
/obj/item/holo/esword/green/Initialize()
. = ..()
- item_color = "green"
+ saber_color = "green"
/obj/item/holo/esword/red/Initialize()
. = ..()
- item_color = "red"
+ saber_color = "red"
/obj/item/holo/esword/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
if(!active)
@@ -44,13 +45,13 @@
/obj/item/holo/esword/Initialize()
. = ..()
- item_color = pick("red","blue","green","purple")
+ saber_color = pick("red","blue","green","purple")
/obj/item/holo/esword/attack_self(mob/living/user as mob)
active = !active
if (active)
force = 30
- icon_state = "sword[item_color]"
+ icon_state = "sword[saber_color]"
w_class = WEIGHT_CLASS_BULKY
hitsound = 'sound/weapons/blade1.ogg'
playsound(user, 'sound/weapons/saberon.ogg', 20, 1)
diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm
index c5065cd169..0d70e872ac 100644
--- a/code/modules/jobs/job_types/chief_engineer.dm
+++ b/code/modules/jobs/job_types/chief_engineer.dm
@@ -42,7 +42,7 @@
uniform = /obj/item/clothing/under/rank/engineering/chief_engineer
shoes = /obj/item/clothing/shoes/sneakers/brown
head = /obj/item/clothing/head/hardhat/white
- gloves = /obj/item/clothing/gloves/color/black/ce
+ gloves = /obj/item/clothing/gloves/color/black
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1)
backpack = /obj/item/storage/backpack/industrial
diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm
index 811dff87e7..3cf4fbb102 100644
--- a/code/modules/jobs/job_types/head_of_security.dm
+++ b/code/modules/jobs/job_types/head_of_security.dm
@@ -42,7 +42,7 @@
uniform = /obj/item/clothing/under/rank/security/head_of_security
shoes = /obj/item/clothing/shoes/jackboots
suit = /obj/item/clothing/suit/armor/hos/trenchcoat
- gloves = /obj/item/clothing/gloves/color/black/hos
+ gloves = /obj/item/clothing/gloves/color/black
head = /obj/item/clothing/head/HoS/beret
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
suit_store = /obj/item/gun/energy/e_gun
diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm
index e83ac26153..d3a417b439 100644
--- a/code/modules/mining/equipment/explorer_gear.dm
+++ b/code/modules/mining/equipment/explorer_gear.dm
@@ -120,7 +120,7 @@
/obj/item/clothing/head/helmet/space/hostile_environment/worn_overlays(isinhands, icon_file, style_flags = NONE)
. = ..()
if(!isinhands)
- var/mutable_appearance/M = mutable_appearance('icons/mob/head.dmi', "hostile_env_glass")
+ var/mutable_appearance/M = mutable_appearance('icons/mob/clothing/head.dmi', "hostile_env_glass")
M.appearance_flags = RESET_COLOR
. += M
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm
index 4365e59a7a..ab278b2e82 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm
@@ -76,7 +76,7 @@
var/list/recommended_species
/datum/sprite_accessory/underwear
- icon = 'icons/mob/underwear.dmi'
+ icon = 'icons/mob/clothing/underwear.dmi'
var/has_color = FALSE
var/has_digitigrade = FALSE
var/covers_groin = FALSE
diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
index ef6a372f9e..42b2c4433b 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
@@ -21,14 +21,13 @@ Doesn't work on other aliens/AI.*/
. = ..()
action = new(src)
-/obj/effect/proc_holder/alien/Click()
- if(!iscarbon(usr))
- return 1
- var/mob/living/carbon/user = usr
- if(cost_check(check_turf,user))
+/obj/effect/proc_holder/alien/Trigger(mob/living/carbon/user, skip_cost_check)
+ if(!istype(user))
+ return TRUE
+ if(!skip_cost_check || cost_check(check_turf,user))
if(fire(user) && user) // Second check to prevent runtimes when evolving
user.adjustPlasma(-plasma_cost)
- return 1
+ return TRUE
/obj/effect/proc_holder/alien/on_gain(mob/living/carbon/user)
return
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index 4ee069afe8..abc2288e9b 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -469,7 +469,7 @@
var/cooldown = 150
var/last_teleport = 0
-/datum/action/innate/unstable_teleport/IsAvailable()
+/datum/action/innate/unstable_teleport/IsAvailable(silent = FALSE)
if(..())
if(world.time > last_teleport + cooldown)
return 1
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 9937b52002..c04167a61f 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -84,7 +84,7 @@
background_icon_state = "bg_alien"
required_mobility_flags = NONE
-/datum/action/innate/regenerate_limbs/IsAvailable()
+/datum/action/innate/regenerate_limbs/IsAvailable(silent = FALSE)
if(..())
var/mob/living/carbon/human/H = owner
var/list/limbs_to_heal = H.get_missing_limbs()
@@ -223,7 +223,7 @@
icon_icon = 'icons/mob/actions/actions_slime.dmi'
background_icon_state = "bg_alien"
-/datum/action/innate/split_body/IsAvailable()
+/datum/action/innate/split_body/IsAvailable(silent = FALSE)
if(..())
var/mob/living/carbon/human/H = owner
if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT)
@@ -776,7 +776,7 @@
..()
species = _species
-/datum/action/innate/use_extract/IsAvailable()
+/datum/action/innate/use_extract/IsAvailable(silent = FALSE)
if(..())
if(species && species.current_extract && (world.time > species.extract_cooldown))
return TRUE
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index cb603dee90..ae7009f5f6 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -118,17 +118,15 @@ There are several things that need to be remembered:
return
- var/t_color = U.item_color
- if(!t_color)
- t_color = U.icon_state
+ var/target_overlay = U.icon_state
if(U.adjusted == ALT_STYLE)
- t_color = "[t_color]_d"
+ target_overlay = "[target_overlay]_d"
- var/alt_worn = U.alternate_worn_icon || 'icons/mob/uniform.dmi'
+ var/alt_worn = U.mob_overlay_icon || 'icons/mob/clothing/uniform.dmi'
var/variant_flag = NONE
if((DIGITIGRADE in dna.species.species_traits) && U.mutantrace_variation & STYLE_DIGITIGRADE)
- alt_worn = 'icons/mob/uniform_digi.dmi'
+ alt_worn = 'icons/mob/clothing/uniform_digi.dmi'
variant_flag |= STYLE_DIGITIGRADE
var/mutable_appearance/uniform_overlay
@@ -136,10 +134,10 @@ There are several things that need to be remembered:
if(dna && dna.species.sexes)
var/G = (dna.features["body_model"] == FEMALE) ? "f" : "m"
if(G == "f" && U.fitted != NO_FEMALE_UNIFORM)
- uniform_overlay = U.build_worn_icon(t_color, UNIFORM_LAYER, alt_worn, FALSE, U.fitted, variant_flag, FALSE)
+ uniform_overlay = U.build_worn_icon(UNIFORM_LAYER, alt_worn, FALSE, U.fitted, target_overlay, variant_flag, FALSE)
if(!uniform_overlay)
- uniform_overlay = U.build_worn_icon(t_color, UNIFORM_LAYER, alt_worn, FALSE, NO_FEMALE_UNIFORM, variant_flag, FALSE)
+ uniform_overlay = U.build_worn_icon( UNIFORM_LAYER, alt_worn, FALSE, NO_FEMALE_UNIFORM, target_overlay, variant_flag, FALSE)
if(OFFSET_UNIFORM in dna.species.offset_features)
@@ -167,7 +165,7 @@ There are several things that need to be remembered:
update_observer_view(wear_id)
//TODO: add an icon file for ID slot stuff, so it's less snowflakey
- id_overlay = wear_id.build_worn_icon(state = wear_id.item_state, default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi')
+ id_overlay = wear_id.build_worn_icon(default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi', override_state = wear_id.item_state)
if(OFFSET_ID in dna.species.offset_features)
id_overlay.pixel_x += dna.species.offset_features[OFFSET_ID][1]
id_overlay.pixel_y += dna.species.offset_features[OFFSET_ID][2]
@@ -199,10 +197,7 @@ There are several things that need to be remembered:
if(hud_used.inventory_shown)
client.screen += gloves
update_observer_view(gloves,1)
- var/t_state = gloves.item_state
- if(!t_state)
- t_state = gloves.icon_state
- overlays_standing[GLOVES_LAYER] = gloves.build_worn_icon(state = t_state, default_layer = GLOVES_LAYER, default_icon_file = 'icons/mob/hands.dmi')
+ overlays_standing[GLOVES_LAYER] = gloves.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = 'icons/mob/clothing/hands.dmi')
gloves_overlay = overlays_standing[GLOVES_LAYER]
if(OFFSET_GLOVES in dna.species.offset_features)
gloves_overlay.pixel_x += dna.species.offset_features[OFFSET_GLOVES][1]
@@ -228,7 +223,7 @@ There are several things that need to be remembered:
client.screen += glasses //Either way, add the item to the HUD
update_observer_view(glasses,1)
if(!(head && (head.flags_inv & HIDEEYES)) && !(wear_mask && (wear_mask.flags_inv & HIDEEYES)))
- overlays_standing[GLASSES_LAYER] = glasses.build_worn_icon(state = glasses.icon_state, default_layer = GLASSES_LAYER, default_icon_file = 'icons/mob/eyes.dmi')
+ overlays_standing[GLASSES_LAYER] = glasses.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = 'icons/mob/clothing/eyes.dmi', override_state = glasses.icon_state)
var/mutable_appearance/glasses_overlay = overlays_standing[GLASSES_LAYER]
if(glasses_overlay)
if(OFFSET_GLASSES in dna.species.offset_features)
@@ -255,7 +250,7 @@ There are several things that need to be remembered:
client.screen += ears //add it to the client's screen
update_observer_view(ears,1)
- overlays_standing[EARS_LAYER] = ears.build_worn_icon(state = ears.icon_state, default_layer = EARS_LAYER, default_icon_file = 'icons/mob/ears.dmi')
+ overlays_standing[EARS_LAYER] = ears.build_worn_icon(default_layer = EARS_LAYER, default_icon_file = 'icons/mob/ears.dmi')
var/mutable_appearance/ears_overlay = overlays_standing[EARS_LAYER]
if(OFFSET_EARS in dna.species.offset_features)
ears_overlay.pixel_x += dna.species.offset_features[OFFSET_EARS][1]
@@ -282,16 +277,13 @@ There are several things that need to be remembered:
client.screen += shoes //add it to client's screen
update_observer_view(shoes,1)
- var/alt_icon = S.alternate_worn_icon || 'icons/mob/feet.dmi'
+ var/alt_icon = S.mob_overlay_icon || 'icons/mob/clothing/feet.dmi'
var/variation_flag = NONE
if((DIGITIGRADE in dna.species.species_traits) && S.mutantrace_variation & STYLE_DIGITIGRADE)
- alt_icon = 'icons/mob/feet_digi.dmi'
+ alt_icon = 'icons/mob/clothing/feet_digi.dmi'
variation_flag |= STYLE_DIGITIGRADE
- var/t_state = shoes.item_state
- if (!t_state)
- t_state = shoes.icon_state
- overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(t_state, SHOES_LAYER, alt_icon, FALSE, NO_FEMALE_UNIFORM, variation_flag, FALSE)
+ overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(SHOES_LAYER, alt_icon, FALSE, NO_FEMALE_UNIFORM, variation_flag, FALSE)
var/mutable_appearance/shoes_overlay = overlays_standing[SHOES_LAYER]
if(OFFSET_SHOES in dna.species.offset_features)
shoes_overlay.pixel_x += dna.species.offset_features[OFFSET_SHOES][1]
@@ -314,7 +306,7 @@ There are several things that need to be remembered:
var/t_state = s_store.item_state
if(!t_state)
t_state = s_store.icon_state
- overlays_standing[SUIT_STORE_LAYER] = mutable_appearance(((s_store.alternate_worn_icon) ? s_store.alternate_worn_icon : 'icons/mob/belt_mirror.dmi'), t_state, -SUIT_STORE_LAYER)
+ overlays_standing[SUIT_STORE_LAYER] = mutable_appearance(((s_store.mob_overlay_icon) ? s_store.mob_overlay_icon : 'icons/mob/clothing/belt_mirror.dmi'), t_state, -SUIT_STORE_LAYER)
var/mutable_appearance/s_store_overlay = overlays_standing[SUIT_STORE_LAYER]
if(OFFSET_S_STORE in dna.species.offset_features)
s_store_overlay.pixel_x += dna.species.offset_features[OFFSET_S_STORE][1]
@@ -324,12 +316,20 @@ There are several things that need to be remembered:
/mob/living/carbon/human/update_inv_head()
- ..()
+ remove_overlay(HEAD_LAYER)
+
+ if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated
+ return
+
+ if(client && hud_used && hud_used.inv_slots[SLOT_BACK])
+ var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD]
+ inv.update_icon()
+
update_mutant_bodyparts()
if(head)
remove_overlay(HEAD_LAYER)
var/obj/item/clothing/head/H = head
- var/alt_icon = H.alternate_worn_icon || 'icons/mob/head.dmi'
+ var/alt_icon = H.mob_overlay_icon || 'icons/mob/clothing/head.dmi'
var/muzzled = FALSE
var/variation_flag = NONE
if(dna.species.mutant_bodyparts["mam_snouts"] && dna.features["mam_snouts"] != "None")
@@ -337,10 +337,10 @@ There are several things that need to be remembered:
else if(dna.species.mutant_bodyparts["snout"] && dna.features["snout"] != "None")
muzzled = TRUE
if(muzzled && H.mutantrace_variation & STYLE_MUZZLE)
- alt_icon = 'icons/mob/head_muzzled.dmi'
+ alt_icon = 'icons/mob/clothing/head_muzzled.dmi'
variation_flag |= STYLE_MUZZLE
- overlays_standing[HEAD_LAYER] = H.build_worn_icon(H.icon_state, HEAD_LAYER, alt_icon, FALSE, NO_FEMALE_UNIFORM, variation_flag, FALSE)
+ overlays_standing[HEAD_LAYER] = H.build_worn_icon(HEAD_LAYER, alt_icon, FALSE, NO_FEMALE_UNIFORM, H.icon_state, variation_flag, FALSE)
var/mutable_appearance/head_overlay = overlays_standing[HEAD_LAYER]
if(OFFSET_HEAD in dna.species.offset_features)
@@ -362,11 +362,7 @@ There are several things that need to be remembered:
client.screen += belt
update_observer_view(belt)
- var/t_state = belt.item_state
- if(!t_state)
- t_state = belt.icon_state
-
- overlays_standing[BELT_LAYER] = belt.build_worn_icon(state = t_state, default_layer = BELT_LAYER, default_icon_file = 'icons/mob/belt.dmi')
+ overlays_standing[BELT_LAYER] = belt.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = 'icons/mob/clothing/belt.dmi')
var/mutable_appearance/belt_overlay = overlays_standing[BELT_LAYER]
if(OFFSET_BELT in dna.species.offset_features)
belt_overlay.pixel_x += dna.species.offset_features[OFFSET_BELT][1]
@@ -390,7 +386,7 @@ There are several things that need to be remembered:
client.screen += wear_suit
update_observer_view(wear_suit,1)
- var/worn_icon = wear_suit.alternate_worn_icon || 'icons/mob/suit.dmi'
+ var/worn_icon = wear_suit.mob_overlay_icon || 'icons/mob/clothing/suit.dmi'
var/center = FALSE
var/dimension_x = 32
var/dimension_y = 32
@@ -405,20 +401,20 @@ There are several things that need to be remembered:
variation_flag |= S.mutantrace_variation & T.taur_mode || S.mutantrace_variation & T.alt_taur_mode
switch(variation_flag)
if(STYLE_HOOF_TAURIC)
- worn_icon = 'icons/mob/taur_hooved.dmi'
+ worn_icon = 'icons/mob/clothing/taur_hooved.dmi'
if(STYLE_SNEK_TAURIC)
- worn_icon = 'icons/mob/taur_naga.dmi'
+ worn_icon = 'icons/mob/clothing/taur_naga.dmi'
if(STYLE_PAW_TAURIC)
- worn_icon = 'icons/mob/taur_canine.dmi'
+ worn_icon = 'icons/mob/clothing/taur_canine.dmi'
if(worn_icon != init_worn_icon) //worn icon sprite was changed, taur offsets will have to be applied.
center = T.center
dimension_x = T.dimension_x
dimension_y = T.dimension_y
else if((DIGITIGRADE in dna.species.species_traits) && S.mutantrace_variation & STYLE_DIGITIGRADE) //not a taur, but digitigrade legs.
- worn_icon = 'icons/mob/suit_digi.dmi'
+ worn_icon = 'icons/mob/clothing/suit_digi.dmi'
variation_flag |= STYLE_DIGITIGRADE
- overlays_standing[SUIT_LAYER] = S.build_worn_icon(wear_suit.icon_state, SUIT_LAYER, worn_icon, FALSE, NO_FEMALE_UNIFORM, variation_flag, FALSE)
+ overlays_standing[SUIT_LAYER] = S.build_worn_icon(SUIT_LAYER, worn_icon, FALSE, NO_FEMALE_UNIFORM, wear_suit.icon_state, variation_flag, FALSE)
var/mutable_appearance/suit_overlay = overlays_standing[SUIT_LAYER]
if(OFFSET_SUIT in dna.species.offset_features)
suit_overlay.pixel_x += dna.species.offset_features[OFFSET_SUIT][1]
@@ -456,11 +452,19 @@ There are several things that need to be remembered:
/mob/living/carbon/human/update_inv_wear_mask()
- ..()
+ remove_overlay(FACEMASK_LAYER)
+
+ if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated
+ return
+
+ if(client && hud_used && hud_used.inv_slots[SLOT_WEAR_MASK])
+ var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK]
+ inv.update_icon()
+
if(wear_mask)
var/obj/item/clothing/mask/M = wear_mask
remove_overlay(FACEMASK_LAYER)
- var/alt_icon = M.alternate_worn_icon || 'icons/mob/mask.dmi'
+ var/alt_icon = M.mob_overlay_icon || 'icons/mob/clothing/mask.dmi'
var/muzzled = FALSE
var/variation_flag = NONE
if(head && (head.flags_inv & HIDEMASK))
@@ -470,11 +474,10 @@ There are several things that need to be remembered:
else if(dna.species.mutant_bodyparts["snout"] && dna.features["snout"] != "None")
muzzled = TRUE
if(muzzled && M.mutantrace_variation & STYLE_MUZZLE)
- alt_icon = 'icons/mob/mask_muzzled.dmi'
+ alt_icon = 'icons/mob/clothing/mask_muzzled.dmi'
variation_flag |= STYLE_MUZZLE
- overlays_standing[FACEMASK_LAYER] = M.build_worn_icon(wear_mask.icon_state, FACEMASK_LAYER, alt_icon, FALSE, NO_FEMALE_UNIFORM, variation_flag, FALSE)
- var/mutable_appearance/mask_overlay = overlays_standing[FACEMASK_LAYER]
+ var/mutable_appearance/mask_overlay = M.build_worn_icon(FACEMASK_LAYER, alt_icon, FALSE, NO_FEMALE_UNIFORM, wear_mask.icon_state, variation_flag, FALSE)
if(OFFSET_FACEMASK in dna.species.offset_features)
mask_overlay.pixel_x += dna.species.offset_features[OFFSET_FACEMASK][1]
@@ -556,27 +559,38 @@ covers:
By Remie Richards (yes I'm taking credit because this just removed 90% of the copypaste in update_icons())
-state: A string to use as the state, this is FAR too complex to solve in this proc thanks to shitty old code
-so it's specified as an argument instead.
+override_state: A string to use as the state, otherwise item_state or icon_state will be used.
default_layer: The layer to draw this on if no other layer is specified
default_icon_file: The icon file to draw states from if no other icon file is specified
-isinhands: If true then alternate_worn_icon is skipped so that default_icon_file is used,
+isinhands: If true then mob_overlay_icon is skipped so that default_icon_file is used,
in this situation default_icon_file is expected to match either the lefthand_ or righthand_ file var
femalueuniform: A value matching a uniform item's fitted var, if this is anything but NO_FEMALE_UNIFORM, we
generate/load female uniform sprites matching all previously decided variables
+style_flags: mutant race appearance flags, mostly used for worn_overlays()
+
+use_mob_overlay_icon: if FALSE, it will always use the default_icon_file even if mob_overlay_icon is present.
*/
-/obj/item/proc/build_worn_icon(state = "", default_layer = 0, default_icon_file = null, isinhands = FALSE, femaleuniform = NO_FEMALE_UNIFORM, style_flags = NONE, use_alt_icon = TRUE)
+/obj/item/proc/build_worn_icon(default_layer = 0, default_icon_file = null, isinhands = FALSE, femaleuniform = NO_FEMALE_UNIFORM, override_state, style_flags = NONE, use_mob_overlay_icon = TRUE)
+
+ var/t_state
+ if(override_state)
+ t_state = override_state
+ else
+ if(isinhands && item_state)
+ t_state = item_state
+ else
+ t_state = icon_state
//Find a valid icon file from variables+arguments
var/file2use
- if(!isinhands && alternate_worn_icon && use_alt_icon)
- file2use = alternate_worn_icon
+ if(!isinhands && mob_overlay_icon && use_mob_overlay_icon)
+ file2use = mob_overlay_icon
if(!file2use)
file2use = default_icon_file
@@ -589,9 +603,9 @@ generate/load female uniform sprites matching all previously decided variables
var/mutable_appearance/standing
if(femaleuniform)
- standing = wear_female_version(state,file2use,layer2use,femaleuniform)
+ standing = wear_female_version(t_state,file2use,layer2use,femaleuniform)
if(!standing)
- standing = mutable_appearance(file2use, state, -layer2use)
+ standing = mutable_appearance(file2use, t_state, -layer2use)
//Get the overlays for this item when it's being worn
//eg: ammo counters, primed grenade flashes, etc.
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 7c6d0e8cdc..8097859aac 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -28,10 +28,8 @@
if(stat != DEAD)
handle_brain_damage()
- /* BUG_PROBABLE_CAUSE
if(stat != DEAD)
handle_liver()
- */
if(stat == DEAD)
stop_sound_channel(CHANNEL_HEARTBEAT)
@@ -690,36 +688,17 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
var/obj/item/organ/liver/liver = getorganslot(ORGAN_SLOT_LIVER)
if((!dna && !liver) || (NOLIVER in dna.species.species_traits))
return
- if(liver)
- if(liver.damage < liver.maxHealth)
- liver.organ_flags |= ORGAN_FAILING
- liver_failure()
- else
+ if(!liver || liver.organ_flags & ORGAN_FAILING)
liver_failure()
-/mob/living/carbon/proc/undergoing_liver_failure()
- var/obj/item/organ/liver/liver = getorganslot(ORGAN_SLOT_LIVER)
- if(liver && liver.failing)
- return TRUE
-
-/mob/living/carbon/proc/return_liver_damage()
- var/obj/item/organ/liver/liver = getorganslot(ORGAN_SLOT_LIVER)
- if(liver)
- return liver.damage
-
-/mob/living/carbon/proc/applyLiverDamage(var/d)
- var/obj/item/organ/liver/L = getorganslot(ORGAN_SLOT_LIVER)
- if(L)
- L.damage += d
-
/mob/living/carbon/proc/liver_failure()
reagents.end_metabolization(src, keep_liverless = TRUE) //Stops trait-based effects on reagents, to prevent permanent buffs
reagents.metabolize(src, can_overdose=FALSE, liverless = TRUE)
if(HAS_TRAIT(src, TRAIT_STABLELIVER))
return
adjustToxLoss(4, TRUE, TRUE)
- if(prob(30))
- to_chat(src, "You feel a stabbing pain in your abdomen!")
+ if(prob(15))
+ to_chat(src, "You feel a stabbing pain in your abdomen!")
////////////////
diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm
index ff83b00fe1..1e00815f24 100644
--- a/code/modules/mob/living/carbon/monkey/update_icons.dm
+++ b/code/modules/mob/living/carbon/monkey/update_icons.dm
@@ -45,7 +45,7 @@
remove_overlay(LEGCUFF_LAYER)
clear_alert("legcuffed")
if(legcuffed)
- var/mutable_appearance/legcuffs = mutable_appearance('icons/mob/restraints.dmi', legcuffed.item_state, -LEGCUFF_LAYER)
+ var/mutable_appearance/legcuffs = mutable_appearance('icons/mob/clothing/restraints.dmi', legcuffed.item_state, -LEGCUFF_LAYER)
legcuffs.color = handcuffed.color
legcuffs.pixel_y = 8
diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm
index e5483e8d73..0cfca9f212 100644
--- a/code/modules/mob/living/carbon/update_icons.dm
+++ b/code/modules/mob/living/carbon/update_icons.dm
@@ -42,15 +42,11 @@
observers = null
break
- var/t_state = I.item_state
- if(!t_state)
- t_state = I.icon_state
-
var/icon_file = I.lefthand_file
if(get_held_index_of_item(I) % 2 == 0)
icon_file = I.righthand_file
- hands += I.build_worn_icon(state = t_state, default_layer = HANDS_LAYER, default_icon_file = icon_file, isinhands = TRUE)
+ hands += I.build_worn_icon(default_layer = HANDS_LAYER, default_icon_file = icon_file, isinhands = TRUE)
overlays_standing[HANDS_LAYER] = hands
apply_overlay(HANDS_LAYER)
@@ -100,7 +96,7 @@
if(wear_mask)
if(!(head && (head.flags_inv & HIDEMASK)))
- overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/mask.dmi')
+ overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask.dmi', override_state = wear_mask.icon_state)
update_hud_wear_mask(wear_mask)
apply_overlay(FACEMASK_LAYER)
@@ -114,7 +110,7 @@
if(wear_neck)
if(!(head && (head.flags_inv & HIDENECK)))
- overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = 'icons/mob/neck.dmi')
+ overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = 'icons/mob/clothing/neck.dmi', override_state = wear_mask.icon_state)
update_hud_neck(wear_neck)
apply_overlay(NECK_LAYER)
@@ -127,7 +123,7 @@
inv.update_icon()
if(back)
- overlays_standing[BACK_LAYER] = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = 'icons/mob/back.dmi')
+ overlays_standing[BACK_LAYER] = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = 'icons/mob/clothing/back.dmi', override_state = back.icon_state)
update_hud_back(back)
apply_overlay(BACK_LAYER)
@@ -143,7 +139,7 @@
inv.update_icon()
if(head)
- overlays_standing[HEAD_LAYER] = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/head.dmi')
+ overlays_standing[HEAD_LAYER] = head.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/clothing/head.dmi', override_state = head.icon_state)
update_hud_head(head)
apply_overlay(HEAD_LAYER)
@@ -152,7 +148,7 @@
/mob/living/carbon/update_inv_handcuffed()
remove_overlay(HANDCUFF_LAYER)
if(handcuffed)
- var/mutable_appearance/cuffs = mutable_appearance('icons/mob/restraints.dmi', handcuffed.item_state, -HANDCUFF_LAYER)
+ var/mutable_appearance/cuffs = mutable_appearance('icons/mob/clothing/restraints.dmi', handcuffed.item_state, -HANDCUFF_LAYER)
cuffs.color = handcuffed.color
overlays_standing[HANDCUFF_LAYER] = cuffs
@@ -162,7 +158,7 @@
remove_overlay(LEGCUFF_LAYER)
clear_alert("legcuffed")
if(legcuffed)
- var/mutable_appearance/legcuffs = mutable_appearance('icons/mob/restraints.dmi', legcuffed.item_state, -LEGCUFF_LAYER)
+ var/mutable_appearance/legcuffs = mutable_appearance('icons/mob/clothing/restraints.dmi', legcuffed.item_state, -LEGCUFF_LAYER)
legcuffs.color = legcuffed.color
overlays_standing[LEGCUFF_LAYER] = legcuffs
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 35b49cce8e..f90b285d2d 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -354,7 +354,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
if(cultslurring)
message = cultslur(message)
-
+
if(clockcultslurring)
message = CLOCK_CULT_SLUR(message)
diff --git a/code/modules/mob/living/silicon/robot/update_icons.dm b/code/modules/mob/living/silicon/robot/update_icons.dm
index 8d40e35706..72ad21c51e 100644
--- a/code/modules/mob/living/silicon/robot/update_icons.dm
+++ b/code/modules/mob/living/silicon/robot/update_icons.dm
@@ -41,7 +41,7 @@
else
add_overlay("ov-opencover -c")
if(hat)
- var/mutable_appearance/head_overlay = hat.build_worn_icon(state = hat.icon_state, default_layer = 20, default_icon_file = 'icons/mob/head.dmi')
+ var/mutable_appearance/head_overlay = hat.build_worn_icon(default_layer = 20, default_icon_file = 'icons/mob/clothing/head.dmi', override_state = hat.icon_state)
head_overlay.pixel_y += hat_offset
add_overlay(head_overlay)
update_fire()
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index a6366c03fe..674cc722d8 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -392,6 +392,9 @@
var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult)
if(!C)
return
+ if(!C.cult_team)
+ to_chat(the_construct, "You are alone, and have no team.")
+ return
var/datum/objective/eldergod/summon_objective = locate() in C.cult_team.objectives
if(summon_objective.check_completion())
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
index 0d344f1a9b..2a84152088 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
@@ -105,7 +105,7 @@
. = ..()
if(can_be_held)
//icon/item state is defined in mob_holder/drone_worn_icon()
- AddElement(/datum/element/mob_holder, null, 'icons/mob/head.dmi', 'icons/mob/inhands/clothing_righthand.dmi', 'icons/mob/inhands/clothing_lefthand.dmi', ITEM_SLOT_HEAD, /datum/element/mob_holder.proc/drone_worn_icon)
+ AddElement(/datum/element/mob_holder, null, 'icons/mob/clothing/head.dmi', 'icons/mob/inhands/clothing_righthand.dmi', 'icons/mob/inhands/clothing_lefthand.dmi', ITEM_SLOT_HEAD, /datum/element/mob_holder.proc/drone_worn_icon)
/mob/living/simple_animal/drone/med_hud_set_health()
var/image/holder = hud_list[DIAG_HUD]
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm
index 408edc7110..815c2bc0db 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm
@@ -28,12 +28,7 @@
var/y_shift = getItemPixelShiftY()
if(r_hand)
-
- var/r_state = r_hand.item_state
- if(!r_state)
- r_state = r_hand.icon_state
-
- var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(state = r_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE)
+ var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(default_layer = DRONE_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE)
if(y_shift)
r_hand_overlay.pixel_y += y_shift
@@ -46,12 +41,7 @@
client.screen |= r_hand
if(l_hand)
-
- var/l_state = l_hand.item_state
- if(!l_state)
- l_state = l_hand.icon_state
-
- var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(state = l_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE)
+ var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(default_layer = DRONE_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE)
if(y_shift)
l_hand_overlay.pixel_y += y_shift
@@ -82,10 +72,10 @@
if(client && hud_used && hud_used.hud_shown)
head.screen_loc = ui_drone_head
client.screen += head
- var/used_head_icon = 'icons/mob/head.dmi'
+ var/used_head_icon = 'icons/mob/clothing/head.dmi'
if(istype(head, /obj/item/clothing/mask))
- used_head_icon = 'icons/mob/mask.dmi'
- var/mutable_appearance/head_overlay = head.build_worn_icon(state = head.icon_state, default_layer = DRONE_HEAD_LAYER, default_icon_file = used_head_icon)
+ used_head_icon = 'icons/mob/clothing/mask.dmi'
+ var/mutable_appearance/head_overlay = head.build_worn_icon(default_layer = DRONE_HEAD_LAYER, default_icon_file = used_head_icon, override_state = head.icon_state)
head_overlay.pixel_y -= 15
drone_overlays[DRONE_HEAD_LAYER] = head_overlay
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index 41c56169d0..af342118a2 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -313,11 +313,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
var/obj/item/r_hand = get_item_for_held_index(2)
if(r_hand)
- var/r_state = r_hand.item_state
- if(!r_state)
- r_state = r_hand.icon_state
-
- hands_overlays += r_hand.build_worn_icon(state = r_state, default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE)
+ hands_overlays += r_hand.build_worn_icon(default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE)
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD)
r_hand.layer = ABOVE_HUD_LAYER
@@ -326,11 +322,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
client.screen |= r_hand
if(l_hand)
- var/l_state = l_hand.item_state
- if(!l_state)
- l_state = l_hand.icon_state
-
- hands_overlays += l_hand.build_worn_icon(state = l_state, default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE)
+ hands_overlays += l_hand.build_worn_icon(default_layer = GUARDIAN_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE)
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD)
l_hand.layer = ABOVE_HUD_LAYER
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 3c3612f434..439bedf3cc 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -400,10 +400,9 @@
action.button_icon_state = "wrap_[active]"
action.UpdateButtonIcon()
-/obj/effect/proc_holder/wrap/Click()
- if(!istype(usr, /mob/living/simple_animal/hostile/poison/giant_spider/nurse))
+/obj/effect/proc_holder/wrap/Trigger(mob/living/simple_animal/hostile/poison/giant_spider/nurse/user)
+ if(!istype(user))
return TRUE
- var/mob/living/simple_animal/hostile/poison/giant_spider/nurse/user = usr
activate(user)
return TRUE
@@ -444,7 +443,7 @@
check_flags = AB_CHECK_CONSCIOUS
button_icon_state = "lay_eggs"
-/datum/action/innate/spider/lay_eggs/IsAvailable()
+/datum/action/innate/spider/lay_eggs/IsAvailable(silent = FALSE)
if(..())
if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/nurse))
return 0
@@ -508,7 +507,7 @@
desc = "Send a command to all living spiders."
button_icon_state = "command"
-/datum/action/innate/spider/comm/IsAvailable()
+/datum/action/innate/spider/comm/IsAvailable(silent = FALSE)
if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/nurse/midwife))
return FALSE
return TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/visuals_icons.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/visuals_icons.dm
index b3e0f3b658..9d451748b0 100644
--- a/code/modules/mob/living/simple_animal/hostile/gorilla/visuals_icons.dm
+++ b/code/modules/mob/living/simple_animal/hostile/gorilla/visuals_icons.dm
@@ -33,14 +33,12 @@
var/obj/item/r_hand = get_item_for_held_index(2)
if(r_hand)
- var/r_state = r_hand.item_state ? r_hand.item_state : r_hand.icon_state
- var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(state = r_state, default_layer = GORILLA_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE)
+ var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(default_layer = GORILLA_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE)
r_hand_overlay.pixel_y -= 1
hands_overlays += r_hand_overlay
if(l_hand)
- var/l_state = l_hand.item_state ? l_hand.item_state : l_hand.icon_state
- var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(state = l_state, default_layer = GORILLA_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE)
+ var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(default_layer = GORILLA_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE)
l_hand_overlay.pixel_y -= 1
hands_overlays += l_hand_overlay
diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm
index bf80ab9ff4..4f8e271d6f 100644
--- a/code/modules/mob/living/simple_animal/slime/powers.dm
+++ b/code/modules/mob/living/simple_animal/slime/powers.dm
@@ -11,7 +11,7 @@
background_icon_state = "bg_alien"
var/needs_growth = NO_GROWTH_NEEDED
-/datum/action/innate/slime/IsAvailable()
+/datum/action/innate/slime/IsAvailable(silent = FALSE)
if(..())
var/mob/living/simple_animal/slime/S = owner
if(needs_growth == GROWTH_NEEDED)
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
index 2beb9296b3..241dde13a8 100644
--- a/code/modules/paperwork/stamps.dm
+++ b/code/modules/paperwork/stamps.dm
@@ -9,7 +9,6 @@
throw_speed = 3
throw_range = 7
custom_materials = list(/datum/material/iron=60)
- item_color = "cargo"
pressure_resistance = 2
attack_verb = list("stamped")
@@ -20,52 +19,52 @@
/obj/item/stamp/qm
name = "quartermaster's rubber stamp"
icon_state = "stamp-qm"
- item_color = "qm"
+ dye_color = DYE_QM
/obj/item/stamp/law
name = "law office's rubber stamp"
icon_state = "stamp-law"
- item_color = "cargo"
+ dye_color = DYE_LAW
/obj/item/stamp/captain
name = "captain's rubber stamp"
icon_state = "stamp-cap"
- item_color = "captain"
+ dye_color = DYE_CAPTAIN
/obj/item/stamp/hop
name = "head of personnel's rubber stamp"
icon_state = "stamp-hop"
- item_color = "hop"
+ dye_color = DYE_HOP
/obj/item/stamp/hos
name = "head of security's rubber stamp"
icon_state = "stamp-hos"
- item_color = "hosred"
+ dye_color = DYE_HOS
/obj/item/stamp/ce
name = "chief engineer's rubber stamp"
icon_state = "stamp-ce"
- item_color = "chief"
+ dye_color = DYE_CE
/obj/item/stamp/rd
name = "research director's rubber stamp"
icon_state = "stamp-rd"
- item_color = "director"
+ dye_color = DYE_RD
/obj/item/stamp/cmo
name = "chief medical officer's rubber stamp"
icon_state = "stamp-cmo"
- item_color = "cmo"
+ dye_color = DYE_CMO
/obj/item/stamp/denied
name = "\improper DENIED rubber stamp"
icon_state = "stamp-deny"
- item_color = "redcoat"
+ dye_color = DYE_REDCOAT
/obj/item/stamp/clown
name = "clown's rubber stamp"
icon_state = "stamp-clown"
- item_color = "clown"
+ dye_color = DYE_CLOWN
/obj/item/stamp/attack_paw(mob/user)
return attack_hand(user)
diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm
index a073997b9d..c471047682 100644
--- a/code/modules/power/singularity/narsie.dm
+++ b/code/modules/power/singularity/narsie.dm
@@ -51,7 +51,8 @@
for(var/datum/antagonist/cult/C in GLOB.antagonists)
if(!C.owner)
continue
- all_cults |= C.cult_team
+ if(C.cult_team)
+ all_cults |= C.cult_team
for(var/datum/team/cult/T in all_cults)
deltimer(T.blood_target_reset_timer)
T.blood_target = src
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index dd40648191..9c1a23174e 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -513,7 +513,7 @@
icon_icon = 'icons/mob/actions/actions_items.dmi'
button_icon_state = "sniper_zoom"
-/datum/action/item_action/toggle_scope_zoom/IsAvailable()
+/datum/action/item_action/toggle_scope_zoom/IsAvailable(silent = FALSE)
. = ..()
if(!.)
var/obj/item/gun/G = target
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index b7f32421aa..da461ef4ff 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -43,8 +43,8 @@ All effects don't start immediately, but rather get worse over time; the rate is
booze_power *= 0.7
C.drunkenness = max((C.drunkenness + (sqrt(volume) * booze_power * ALCOHOL_RATE)), 0) //Volume, power, and server alcohol rate effect how quickly one gets drunk
var/obj/item/organ/liver/L = C.getorganslot(ORGAN_SLOT_LIVER)
- if (istype(L))
- C.applyLiverDamage((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * L.alcohol_tolerance, 0))/150)
+ if(L)
+ L.applyOrganDamage((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * L.alcohol_tolerance, 0))/150)
return ..()
/datum/reagent/consumable/ethanol/reaction_obj(obj/O, reac_volume)
@@ -1646,7 +1646,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "pina_colada"
glass_name = "Pina Colada"
glass_desc = "If you like pina coladas, and getting caught in the rain... well, you'll like this drink."
-
+
/datum/reagent/consumable/ethanol/grasshopper
name = "Grasshopper"
description = "A fresh and sweet dessert shooter. Difficult to look manly while drinking this."
@@ -2354,7 +2354,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/hotlime_miami/on_mob_life(mob/living/carbon/M)
M.set_drugginess(50)
M.adjustStaminaLoss(-2)
- return ..()
+ return ..()
/datum/reagent/consumable/ethanol/fruit_wine
name = "Fruit Wine"
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index 46002287dd..ecceb6e8bf 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -263,9 +263,9 @@
/datum/reagent/medicine/silver_sulfadiazine/overdose_start(mob/living/M)
metabolization_rate = 15 * REAGENTS_METABOLISM
M.adjustBruteLoss(2*REM, 0)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- C.applyLiverDamage(1)
+ var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER)
+ if(L)
+ L.applyOrganDamage(1)
..()
. = 1
@@ -326,9 +326,9 @@
datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
metabolization_rate = 15 * REAGENTS_METABOLISM
M.adjustBruteLoss(2*REM, 0)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- C.applyLiverDamage(1)
+ var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER)
+ if(L)
+ L.applyOrganDamage(1)
..()
. = 1
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index d9b2aafb4b..c2f14e69ec 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -332,7 +332,7 @@
data = list("misc" = 1)
data["misc"]++
M.jitteriness = min(M.jitteriness+4,10)
- if(iscultist(M))
+ if(iscultist(M, FALSE, TRUE))
for(var/datum/action/innate/cult/blood_magic/BM in M.actions)
if(!BM.holy_dispel)
BM.holy_dispel = TRUE
@@ -361,7 +361,7 @@
if("emote")
M.visible_message("[M] [pick("whimpers quietly", "shivers as though cold", "glances around in paranoia")].")
if(data["misc"] >= 60) // 30 units, 135 seconds
- if(iscultist(M) || is_servant_of_ratvar(M))
+ if(iscultist(M, FALSE, TRUE) || is_servant_of_ratvar(M, FALSE, TRUE))
if(iscultist(M))
SSticker.mode.remove_cultist(M.mind, FALSE, TRUE)
else if(is_servant_of_ratvar(M))
@@ -1070,11 +1070,11 @@
to_chat(M, "You start feeling your guts twisting painfully!")
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[type]_overdose", /datum/mood_event/overdose, name)
-/datum/reagent/iron/overdose_process(mob/living/carbon/C)
+/datum/reagent/iron/overdose_process(mob/living/M)
if(prob(20))
- var/obj/item/organ/liver/L = C.getorganslot(ORGAN_SLOT_LIVER)
- if (istype(L))
- C.applyLiverDamage(2) //mild until the fabled med rework comes out. the organ damage galore
+ var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER)
+ if(L)
+ L.applyOrganDamage(2)
..()
/datum/reagent/gold
diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm
index 03488fa8a9..143fe508b6 100644
--- a/code/modules/spells/spell.dm
+++ b/code/modules/spells/spell.dm
@@ -45,6 +45,12 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
/obj/effect/proc_holder/singularity_pull()
return
+/obj/effect/proc_holder/Click()
+ return Trigger(usr, FALSE)
+
+/obj/effect/proc_holder/proc/Trigger(mob/user)
+ return TRUE
+
/obj/effect/proc_holder/proc/InterceptClickOn(mob/living/caller, params, atom/A)
if(caller.ranged_ability != src || ranged_ability_user != caller) //I'm not actually sure how these would trigger, but, uh, safety, I guess?
to_chat(caller, "[caller.ranged_ability.name] has been disabled.")
@@ -150,8 +156,8 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
if(mobs_blacklist)
mobs_blacklist = typecacheof(mobs_blacklist)
-/obj/effect/proc_holder/spell/proc/cast_check(skipcharge = FALSE, mob/user = usr) //checks if the spell can be cast based on its settings; skipcharge is used when an additional cast_check is called inside the spell
- if(!can_cast(user, skipcharge))
+/obj/effect/proc_holder/spell/proc/cast_check(skipcharge = FALSE, mob/user = usr, skip_can_cast = FALSE) //checks if the spell can be cast based on its settings; skipcharge is used when an additional cast_check is called inside the spell
+ if(!skip_can_cast && !can_cast(user, skipcharge))
return FALSE
if(!skipcharge)
@@ -181,17 +187,22 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
return TRUE
/obj/effect/proc_holder/spell/proc/invocation(mob/user = usr) //spelling the spell out and setting it on recharge/reducing charges amount
+ var/mob/living/L
+ if(isliving(user))
+ L = user
switch(invocation_type)
if("shout")
- if(prob(50))//Auto-mute? Fuck that noise
- user.say(invocation, forced = "spell")
- else
- user.say(replacetext(invocation," ","`"), forced = "spell")
+ if(!L || L.can_speak_vocal(invocation))
+ if(prob(50))//Auto-mute? Fuck that noise
+ user.say(invocation, forced = "spell")
+ else
+ user.say(replacetext(invocation," ","`"), forced = "spell")
if("whisper")
- if(prob(50))
- user.whisper(invocation)
- else
- user.whisper(replacetext(invocation," ","`"))
+ if(!L || L.can_speak_vocal(invocation))
+ if(prob(50))
+ user.whisper(invocation)
+ else
+ user.whisper(replacetext(invocation," ","`"))
if("emote")
user.visible_message(invocation, invocation_emote_self) //same style as in mob/living/emote.dm
@@ -210,8 +221,8 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
qdel(action)
return ..()
-/obj/effect/proc_holder/spell/Click()
- if(cast_check())
+/obj/effect/proc_holder/spell/Trigger(mob/user, skip_can_cast = TRUE)
+ if(cast_check(FALSE, user, skip_can_cast))
choose_targets()
return 1
@@ -432,7 +443,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
return 1
/obj/effect/proc_holder/spell/proc/can_cast(mob/user = usr, skipcharge = FALSE, silent = FALSE)
- var/magic_flags = SEND_SIGNAL(user, COMSIG_MOB_SPELL_CAST_CHECK, src)
+ var/magic_flags = SEND_SIGNAL(user, COMSIG_MOB_SPELL_CAN_CAST, src)
if(magic_flags & SPELL_SKIP_ALL_REQS)
return TRUE
@@ -448,9 +459,8 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
to_chat(user, "You can't cast this spell here.")
return FALSE
- if(!skipcharge)
- if(!charge_check(user))
- return FALSE
+ if(!skipcharge && !charge_check(user, silent))
+ return FALSE
if(user.stat && !stat_allowed && !(magic_flags & SPELL_SKIP_STAT))
if(!silent)
diff --git a/code/modules/spells/spell_types/aimed.dm b/code/modules/spells/spell_types/aimed.dm
index 786026a1bc..1a904b1076 100644
--- a/code/modules/spells/spell_types/aimed.dm
+++ b/code/modules/spells/spell_types/aimed.dm
@@ -11,12 +11,11 @@
var/current_amount = 0 //How many projectiles left.
var/projectiles_per_fire = 1 //Projectiles per fire. Probably not a good thing to use unless you override ready_projectile().
-/obj/effect/proc_holder/spell/aimed/Click()
- var/mob/living/user = usr
+/obj/effect/proc_holder/spell/aimed/Trigger(mob/user, skip_can_cast = TRUE)
if(!istype(user))
return
var/msg
- if(!can_cast(user, FALSE, TRUE))
+ if(!skip_can_cast && !can_cast(user, FALSE, TRUE))
msg = "You can no longer cast [name]!"
remove_ranged_ability(msg)
return
diff --git a/code/modules/spells/spell_types/lightning.dm b/code/modules/spells/spell_types/lightning.dm
index 81b26cf464..d0c3c4166c 100644
--- a/code/modules/spells/spell_types/lightning.dm
+++ b/code/modules/spells/spell_types/lightning.dm
@@ -15,9 +15,9 @@
action_icon_state = "lightning"
-/obj/effect/proc_holder/spell/targeted/tesla/Click()
- if(!ready && cast_check())
- StartChargeup()
+/obj/effect/proc_holder/spell/targeted/tesla/Trigger(mob/user, skip_can_cast = TRUE)
+ if(!ready && cast_check(FALSE, user, skip_can_cast))
+ StartChargeup(user)
return 1
/obj/effect/proc_holder/spell/targeted/tesla/proc/StartChargeup(mob/user = usr)
diff --git a/code/modules/spells/spell_types/mime.dm b/code/modules/spells/spell_types/mime.dm
index a3bb81ae55..8f39da5031 100644
--- a/code/modules/spells/spell_types/mime.dm
+++ b/code/modules/spells/spell_types/mime.dm
@@ -16,12 +16,12 @@
action_icon_state = "mime"
action_background_icon_state = "bg_mime"
-/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall/Click()
- if(usr && usr.mind)
- if(!usr.mind.miming)
+/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall/Trigger(mob/user, skip_can_cast = TRUE)
+ if(user.mind)
+ if(!user.mind.miming)
to_chat(usr, "You must dedicate yourself to silence first.")
return
- invocation = "[usr.real_name] looks as if a wall is in front of [usr.p_them()]."
+ invocation = "[user.real_name] looks as if a wall is in front of [user.p_them()]."
else
invocation_type ="none"
..()
@@ -41,17 +41,12 @@
action_icon_state = "mime"
action_background_icon_state = "bg_mime"
-/obj/effect/proc_holder/spell/targeted/mime/speak/Click()
- if(!usr)
- return
- if(!ishuman(usr))
- return
- var/mob/living/carbon/human/H = usr
- if(H.mind.miming)
+/obj/effect/proc_holder/spell/targeted/mime/speak/Trigger(mob/user, skip_can_cast = TRUE)
+ if(user.mind?.miming)
still_recharging_msg = "You can't break your vow of silence that fast!"
else
still_recharging_msg = "You'll have to wait before you can give your vow of silence again!"
- ..()
+ return ..()
/obj/effect/proc_holder/spell/targeted/mime/speak/cast(list/targets,mob/user = usr)
for(var/mob/living/carbon/human/H in targets)
@@ -82,15 +77,15 @@
action_icon_state = "mime"
action_background_icon_state = "bg_mime"
-/obj/effect/proc_holder/spell/targeted/forcewall/mime/Click()
- if(usr && usr.mind)
- if(!usr.mind.miming)
+/obj/effect/proc_holder/spell/targeted/forcewall/mime/Trigger(mob/user, skip_can_cast = TRUE)
+ if(user.mind)
+ if(!user.mind.miming)
to_chat(usr, "You must dedicate yourself to silence first.")
return
- invocation = "[usr.real_name] looks as if a blockade is in front of [usr.p_them()]."
+ invocation = "[user.real_name] looks as if a blockade is in front of [user.p_them()]."
else
invocation_type ="none"
- ..()
+ return ..()
/obj/effect/proc_holder/spell/aimed/finger_guns
name = "Finger Guns"
@@ -114,19 +109,18 @@
base_icon_state = "mime"
-/obj/effect/proc_holder/spell/aimed/finger_guns/Click()
- var/mob/living/carbon/human/owner = usr
- if(owner.incapacitated())
- to_chat(owner, "You can't properly point your fingers while incapacitated.")
+/obj/effect/proc_holder/spell/aimed/finger_guns/Trigger(mob/user, skip_can_cast = TRUE)
+ if(user.incapacitated())
+ to_chat(user, "You can't properly point your fingers while incapacitated.")
return
- if(usr && usr.mind)
- if(!usr.mind.miming)
+ if(user.mind)
+ if(!user.mind.miming)
to_chat(usr, "You must dedicate yourself to silence first.")
return
- invocation = "[usr.real_name] fires [usr.p_their()] finger gun!"
+ invocation = "[user.real_name] fires [user.p_their()] finger gun!"
else
invocation_type ="none"
- ..()
+ return ..()
/obj/effect/proc_holder/spell/targeted/touch/mimerope
name = "Invisible Rope"
@@ -144,8 +138,8 @@
action_background_icon_state = "bg_mime"
hand_path = /obj/item/melee/touch_attack/mimerope
-/obj/effect/proc_holder/spell/targeted/touch/mimerope/Click()
- if(usr && usr.mind)
+/obj/effect/proc_holder/spell/targeted/touch/mimerope/Trigger(mob/user, skip_can_cast = TRUE)
+ if(user.mind)
if(!usr.mind.miming)
to_chat(usr, "You must dedicate yourself to silence first.")
return
diff --git a/code/modules/surgery/organs/liver.dm b/code/modules/surgery/organs/liver.dm
index 73225fc41c..117a45cdbc 100755
--- a/code/modules/surgery/organs/liver.dm
+++ b/code/modules/surgery/organs/liver.dm
@@ -1,7 +1,6 @@
#define LIVER_DEFAULT_HEALTH 100 //amount of damage required for liver failure
#define LIVER_DEFAULT_TOX_TOLERANCE 3 //amount of toxins the liver can filter out
#define LIVER_DEFAULT_TOX_LETHALITY 0.01 //lower values lower how harmful toxins are to the liver
-#define LIVER_SWELLING_MOVE_MODIFY "pharma"
/obj/item/organ/liver
name = "liver"
@@ -15,12 +14,14 @@
healing_factor = STANDARD_ORGAN_HEALING
decay_factor = STANDARD_ORGAN_DECAY
+ high_threshold_passed = "You feel a stange ache in your abdomen, almost like a stitch. This pain is encumbering your movements."
+ high_threshold_cleared = "The stitching ache in your abdomen passes away, unencumbering your movements."
+ now_fixed = "The stabbing pain in your abdomen slowly calms down into a more tolerable ache."
+
var/alcohol_tolerance = ALCOHOL_RATE//affects how much damage the liver takes from alcohol
- var/failing //is this liver failing?
var/toxTolerance = LIVER_DEFAULT_TOX_TOLERANCE//maximum amount of toxins the liver can just shrug off
var/toxLethality = LIVER_DEFAULT_TOX_LETHALITY//affects how much damage toxins do to the liver
var/filterToxins = TRUE //whether to filter toxins
- var/swelling = 0
var/cachedmoveCalc = 1
/obj/item/organ/liver/on_life()
@@ -28,8 +29,6 @@
if(istype(C))
if(!(organ_flags & ORGAN_FAILING))//can't process reagents with a failing liver
- //slowly heal liver damage
- damage = max(0, damage - 0.1)
if(filterToxins && !HAS_TRAIT(owner, TRAIT_TOXINLOVER))
//handle liver toxin filtration
@@ -46,42 +45,41 @@
if(damage > 10 && prob(damage/3))//the higher the damage the higher the probability
to_chat(C, "You feel a dull pain in your abdomen.")
- if(damage > maxHealth)//cap liver damage
- damage = maxHealth
-
- if(swelling >= 10)
- pharmacokinesis()
-
/obj/item/organ/liver/prepare_eat()
var/obj/S = ..()
S.reagents.add_reagent(/datum/reagent/iron, 5)
return S
-//Just in case
+/obj/item/organ/liver/applyOrganDamage(d, maximum = maxHealth)
+ . = ..()
+ if(!.)
+ return
+ if(damage >= high_threshold)
+ var/move_calc = 1+((round(damage) - high_threshold)/(high_threshold/3))
+ owner.add_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS, TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = move_calc)
+ sizeMoveMod(move_calc, owner)
+ else
+ owner.remove_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS)
+ sizeMoveMod(1, owner)
+
+/obj/item/organ/liver/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = TRUE)
+ . = ..()
+ if(. && damage >= high_threshold)
+ var/move_calc = 1+((round(damage) - high_threshold)/(high_threshold/3))
+ M.add_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS, TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = move_calc)
+ sizeMoveMod(move_calc, owner)
+
/obj/item/organ/liver/Remove(special = FALSE)
if(!QDELETED(owner))
- owner.remove_movespeed_modifier(LIVER_SWELLING_MOVE_MODIFY)
- owner.ResetBloodVol() //At the moment, this shouldn't allow application twice. You either have this OR a thirsty ferret.
+ owner.remove_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS)
sizeMoveMod(1, owner)
return ..()
-//Applies some of the effects to the patient.
-/obj/item/organ/liver/proc/pharmacokinesis()
- var/moveCalc = 1+((round(swelling) - 9)/3)
- if(moveCalc == cachedmoveCalc)//reduce calculations
- return
- if(prob(5))
- to_chat(owner, "You feel a stange ache in your side, almost like a stitch. This pain is affecting your movements and making you feel lightheaded.")
- var/mob/living/carbon/human/H = owner
- H.add_movespeed_modifier(LIVER_SWELLING_MOVE_MODIFY, TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = moveCalc)
- H.AdjustBloodVol(moveCalc/3)
- sizeMoveMod(moveCalc, H)
-
-/obj/item/organ/liver/proc/sizeMoveMod(var/value, mob/living/carbon/human/H)
+/obj/item/organ/liver/proc/sizeMoveMod(value, mob/living/carbon/C)
if(cachedmoveCalc == value)
return
- H.next_move_modifier /= cachedmoveCalc
- H.next_move_modifier *= value
+ C.next_move_modifier /= cachedmoveCalc
+ C.next_move_modifier *= value
cachedmoveCalc = value
/obj/item/organ/liver/fly
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index b091af0f92..d95901bdbe 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -143,8 +143,9 @@
var/healing_amount = -(maxHealth * healing_factor)
///Damage decrements again by a percent of its maxhealth, up to a total of 4 extra times depending on the owner's health
healing_amount -= owner.satiety > 0 ? 4 * healing_factor * owner.satiety / MAX_SATIETY : 0
- applyOrganDamage(healing_amount) //to FERMI_TWEAK
- //Make it so each threshold is stuck.
+ if(healing_amount)
+ applyOrganDamage(healing_amount) //to FERMI_TWEAK
+ //Make it so each threshold is stuck.
/obj/item/organ/examine(mob/user)
. = ..()
@@ -205,14 +206,15 @@
///Adjusts an organ's damage by the amount "d", up to a maximum amount, which is by default max damage
/obj/item/organ/proc/applyOrganDamage(var/d, var/maximum = maxHealth) //use for damaging effects
if(!d) //Micro-optimization.
- return
+ return FALSE
if(maximum < damage)
- return
+ return FALSE
damage = CLAMP(damage + d, 0, maximum)
- var/mess = check_damage_thresholds(owner)
+ var/mess = check_damage_thresholds()
prev_damage = damage
if(mess && owner)
to_chat(owner, mess)
+ return TRUE
///SETS an organ's damage to the amount "d", and in doing so clears or sets the failing flag, good for when you have an effect that should fix an organ if broken
/obj/item/organ/proc/setOrganDamage(var/d) //use mostly for admin heals
@@ -224,7 +226,7 @@
* description: By checking our current damage against our previous damage, we can decide whether we've passed an organ threshold.
* If we have, send the corresponding threshold message to the owner, if such a message exists.
*/
-/obj/item/organ/proc/check_damage_thresholds(var/M)
+/obj/item/organ/proc/check_damage_thresholds()
if(damage == prev_damage)
return
var/delta = damage - prev_damage
diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm
index 7c849dbd68..671d31530a 100644
--- a/code/modules/surgery/organs/vocal_cords.dm
+++ b/code/modules/surgery/organs/vocal_cords.dm
@@ -74,7 +74,7 @@
..()
cords = target
-/datum/action/item_action/organ_action/colossus/IsAvailable()
+/datum/action/item_action/organ_action/colossus/IsAvailable(silent = FALSE)
if(world.time < cords.next_command)
return FALSE
if(!owner)
@@ -632,7 +632,7 @@
..()
cords = target
-/datum/action/item_action/organ_action/velvet/IsAvailable()
+/datum/action/item_action/organ_action/velvet/IsAvailable(silent = FALSE)
return TRUE
/datum/action/item_action/organ_action/velvet/Trigger()
diff --git a/code/modules/uplink/uplink_items/uplink_roles.dm b/code/modules/uplink/uplink_items/uplink_roles.dm
index 3d28010133..778edf8cc8 100644
--- a/code/modules/uplink/uplink_items/uplink_roles.dm
+++ b/code/modules/uplink/uplink_items/uplink_roles.dm
@@ -92,6 +92,22 @@
restricted_roles = list("Chaplain")
surplus = 5 //Very low chance to get it in a surplus crate even without being the chaplain
+/datum/uplink_item/role_restricted/clockwork_slab
+ name = "Clockwork Slab"
+ desc = "A reverse engineered clockwork slab. Is this really a good idea?."
+ item = /obj/item/clockwork/slab/traitor
+ cost = 20
+ refundable = TRUE
+ restricted_roles = list("Chaplain")
+
+/datum/uplink_item/role_restricted/arcane_tome
+ name = "Arcane Tome"
+ desc = "A replica of a Nar'sian tome. This is probably a bad idea.."
+ item = /obj/item/tome/traitor
+ cost = 20
+ refundable = TRUE
+ restricted_roles = list("Chaplain")
+
/datum/uplink_item/role_restricted/explosive_hot_potato
name = "Exploding Hot Potato"
desc = "A potato rigged with explosives. On activation, a special mechanism is activated that prevents it from being dropped. \
diff --git a/html/changelogs/AutoChangeLog-pr-10732.yml b/html/changelogs/AutoChangeLog-pr-10732.yml
new file mode 100644
index 0000000000..8d6746bbd4
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10732.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - rscadd: "Traitor chaplains can now become neutered versions of cults."
diff --git a/html/changelogs/AutoChangeLog-pr-11697.yml b/html/changelogs/AutoChangeLog-pr-11697.yml
new file mode 100644
index 0000000000..d8026366cb
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11697.yml
@@ -0,0 +1,6 @@
+author: "actioninja"
+delete-after: True
+changes:
+ - rscadd: "Washing machines now support arbitrary dye color"
+ - rscadd: "Washing machines now dye nearly every item."
+ - refactor: "lots of backend changes to clothing overlays, report any issues"
diff --git a/html/changelogs/AutoChangeLog-pr-11811.yml b/html/changelogs/AutoChangeLog-pr-11811.yml
new file mode 100644
index 0000000000..010a0caa86
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11811.yml
@@ -0,0 +1,6 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Liver failure is back!"
+ - tweak: "standarized a few (prefs off) side effects from enlargment chems on livers to do organ damage instead without the blood volume whackiness."
+ - tweak: "High liver damage now slows mobs down."
diff --git a/html/changelogs/AutoChangeLog-pr-11817.yml b/html/changelogs/AutoChangeLog-pr-11817.yml
new file mode 100644
index 0000000000..9d9e0a779b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11817.yml
@@ -0,0 +1,5 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - rscadd: "Latejoin changelings for dynamic"
+ - bugfix: "Average threat calculation works now"
diff --git a/html/changelogs/AutoChangeLog-pr-11819.yml b/html/changelogs/AutoChangeLog-pr-11819.yml
new file mode 100644
index 0000000000..6619f26aba
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11819.yml
@@ -0,0 +1,5 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Wizard robes & co work again now."
+ - bugfix: "Fixed some spell casting message spam."
diff --git a/html/changelogs/AutoChangeLog-pr-11824.yml b/html/changelogs/AutoChangeLog-pr-11824.yml
new file mode 100644
index 0000000000..2b91fc5564
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-11824.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "fixed yet another few airless issues with the space hermit ruin."
diff --git a/icons/mob/accessories.dmi b/icons/mob/accessories.dmi
deleted file mode 100644
index cda7cca404..0000000000
Binary files a/icons/mob/accessories.dmi and /dev/null differ
diff --git a/icons/mob/clothing/accessories.dmi b/icons/mob/clothing/accessories.dmi
new file mode 100644
index 0000000000..c13b6a50bc
Binary files /dev/null and b/icons/mob/clothing/accessories.dmi differ
diff --git a/icons/mob/back.dmi b/icons/mob/clothing/back.dmi
similarity index 100%
rename from icons/mob/back.dmi
rename to icons/mob/clothing/back.dmi
diff --git a/icons/mob/belt.dmi b/icons/mob/clothing/belt.dmi
similarity index 100%
rename from icons/mob/belt.dmi
rename to icons/mob/clothing/belt.dmi
diff --git a/icons/mob/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi
similarity index 100%
rename from icons/mob/belt_mirror.dmi
rename to icons/mob/clothing/belt_mirror.dmi
diff --git a/icons/mob/custom_w.dmi b/icons/mob/clothing/custom_w.dmi
similarity index 100%
rename from icons/mob/custom_w.dmi
rename to icons/mob/clothing/custom_w.dmi
diff --git a/icons/mob/eyes.dmi b/icons/mob/clothing/eyes.dmi
similarity index 100%
rename from icons/mob/eyes.dmi
rename to icons/mob/clothing/eyes.dmi
diff --git a/icons/mob/feet.dmi b/icons/mob/clothing/feet.dmi
similarity index 100%
rename from icons/mob/feet.dmi
rename to icons/mob/clothing/feet.dmi
diff --git a/icons/mob/feet_digi.dmi b/icons/mob/clothing/feet_digi.dmi
similarity index 100%
rename from icons/mob/feet_digi.dmi
rename to icons/mob/clothing/feet_digi.dmi
diff --git a/icons/mob/hands.dmi b/icons/mob/clothing/hands.dmi
similarity index 100%
rename from icons/mob/hands.dmi
rename to icons/mob/clothing/hands.dmi
diff --git a/icons/mob/head.dmi b/icons/mob/clothing/head.dmi
similarity index 100%
rename from icons/mob/head.dmi
rename to icons/mob/clothing/head.dmi
diff --git a/icons/mob/head_muzzled.dmi b/icons/mob/clothing/head_muzzled.dmi
similarity index 100%
rename from icons/mob/head_muzzled.dmi
rename to icons/mob/clothing/head_muzzled.dmi
diff --git a/icons/mob/mask.dmi b/icons/mob/clothing/mask.dmi
similarity index 100%
rename from icons/mob/mask.dmi
rename to icons/mob/clothing/mask.dmi
diff --git a/icons/mob/mask_muzzled.dmi b/icons/mob/clothing/mask_muzzled.dmi
similarity index 100%
rename from icons/mob/mask_muzzled.dmi
rename to icons/mob/clothing/mask_muzzled.dmi
diff --git a/icons/mob/neck.dmi b/icons/mob/clothing/neck.dmi
similarity index 100%
rename from icons/mob/neck.dmi
rename to icons/mob/clothing/neck.dmi
diff --git a/icons/mob/restraints.dmi b/icons/mob/clothing/restraints.dmi
similarity index 100%
rename from icons/mob/restraints.dmi
rename to icons/mob/clothing/restraints.dmi
diff --git a/icons/mob/suit.dmi b/icons/mob/clothing/suit.dmi
similarity index 100%
rename from icons/mob/suit.dmi
rename to icons/mob/clothing/suit.dmi
diff --git a/icons/mob/suit_digi.dmi b/icons/mob/clothing/suit_digi.dmi
similarity index 100%
rename from icons/mob/suit_digi.dmi
rename to icons/mob/clothing/suit_digi.dmi
diff --git a/icons/mob/taur_canine.dmi b/icons/mob/clothing/taur_canine.dmi
similarity index 100%
rename from icons/mob/taur_canine.dmi
rename to icons/mob/clothing/taur_canine.dmi
diff --git a/icons/mob/taur_hooved.dmi b/icons/mob/clothing/taur_hooved.dmi
similarity index 100%
rename from icons/mob/taur_hooved.dmi
rename to icons/mob/clothing/taur_hooved.dmi
diff --git a/icons/mob/taur_naga.dmi b/icons/mob/clothing/taur_naga.dmi
similarity index 100%
rename from icons/mob/taur_naga.dmi
rename to icons/mob/clothing/taur_naga.dmi
diff --git a/icons/mob/underwear.dmi b/icons/mob/clothing/underwear.dmi
similarity index 100%
rename from icons/mob/underwear.dmi
rename to icons/mob/clothing/underwear.dmi
diff --git a/icons/mob/clothing/uniform.dmi b/icons/mob/clothing/uniform.dmi
new file mode 100644
index 0000000000..fe0b080dc6
Binary files /dev/null and b/icons/mob/clothing/uniform.dmi differ
diff --git a/icons/mob/uniform_digi.dmi b/icons/mob/clothing/uniform_digi.dmi
similarity index 100%
rename from icons/mob/uniform_digi.dmi
rename to icons/mob/clothing/uniform_digi.dmi
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
deleted file mode 100644
index 1845e75d26..0000000000
Binary files a/icons/mob/uniform.dmi and /dev/null differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index edcd2ff9b6..55ec7669ba 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/turf/mining.dmi b/icons/turf/mining.dmi
index 6561438228..335cff453e 100644
Binary files a/icons/turf/mining.dmi and b/icons/turf/mining.dmi differ
diff --git a/icons/turf/smoothrocks.dmi b/icons/turf/smoothrocks.dmi
index 20314cff5b..ba2bbce955 100644
Binary files a/icons/turf/smoothrocks.dmi and b/icons/turf/smoothrocks.dmi differ
diff --git a/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm b/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm
index 44b8067876..6c9f12a852 100644
--- a/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm
+++ b/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm
@@ -2,7 +2,7 @@
name = "shock collar"
desc = "A reinforced metal collar. It seems to have some form of wiring near the front. Strange.."
icon = 'modular_citadel/icons/obj/clothing/cit_neck.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/neck.dmi'
+ mob_overlay_icon = 'modular_citadel/icons/mob/citadel/neck.dmi'
icon_state = "shockcollar"
item_state = "shockcollar"
body_parts_covered = NECK
diff --git a/modular_citadel/code/modules/clothing/neck.dm b/modular_citadel/code/modules/clothing/neck.dm
index 20324516f6..f57e2ae530 100644
--- a/modular_citadel/code/modules/clothing/neck.dm
+++ b/modular_citadel/code/modules/clothing/neck.dm
@@ -7,7 +7,7 @@
icon = 'modular_citadel/icons/obj/clothing/cit_neck.dmi'
item_state = "undertale"
icon_state = "undertale"
- alternate_worn_icon = 'modular_citadel/icons/mob/clothing/necks.dmi'
+ mob_overlay_icon = 'modular_citadel/icons/mob/clothing/necks.dmi'
resistance_flags = FIRE_PROOF
actions_types = list(/datum/action/item_action/zanderlocket)
var/toggled = FALSE
diff --git a/modular_citadel/code/modules/clothing/suits/polychromic_cloaks.dm b/modular_citadel/code/modules/clothing/suits/polychromic_cloaks.dm
index ade6cee3ba..5cf2fccb92 100644
--- a/modular_citadel/code/modules/clothing/suits/polychromic_cloaks.dm
+++ b/modular_citadel/code/modules/clothing/suits/polychromic_cloaks.dm
@@ -2,9 +2,8 @@
name = "polychromic cloak"
desc = "For when you want to show off your horrible colour coordination skills."
icon = 'modular_citadel/icons/polyclothes/item/neck.dmi'
- alternate_worn_icon = 'modular_citadel/icons/polyclothes/mob/neck.dmi'
+ mob_overlay_icon = 'modular_citadel/icons/polyclothes/mob/neck.dmi'
icon_state = "polyce"
- item_color = "polyce"
item_state = "qmcloak"
hasprimary = TRUE
hassecondary = TRUE
@@ -13,20 +12,20 @@
secondary_color = "#FFFFFF"
tertiary_color = "#808080"
-/obj/item/clothing/neck/cloak/polychromic/worn_overlays(isinhands, icon_file, style_flags = NONE) //this is where the main magic happens. Also mandates that ALL polychromic stuff MUST USE alternate_worn_icon
+/obj/item/clothing/neck/cloak/polychromic/worn_overlays(isinhands, icon_file, style_flags = NONE) //this is where the main magic happens. Also mandates that ALL polychromic stuff MUST USE mob_overlay_icon
. = ..()
if(hasprimary | hassecondary | hastertiary)
if(!isinhands) //prevents the worn sprites from showing up if you're just holding them
if(hasprimary) //checks if overlays are enabled
- var/mutable_appearance/primary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-primary") //automagical sprite selection
+ var/mutable_appearance/primary_worn = mutable_appearance(mob_overlay_icon, "[icon_state]-primary") //automagical sprite selection
primary_worn.color = primary_color //colors the overlay
. += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite.
if(hassecondary)
- var/mutable_appearance/secondary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-secondary")
+ var/mutable_appearance/secondary_worn = mutable_appearance(mob_overlay_icon, "[icon_state]-secondary")
secondary_worn.color = secondary_color
. += secondary_worn
if(hastertiary)
- var/mutable_appearance/tertiary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-tertiary")
+ var/mutable_appearance/tertiary_worn = mutable_appearance(mob_overlay_icon, "[icon_state]-tertiary")
tertiary_worn.color = tertiary_color
. += tertiary_worn
@@ -34,7 +33,6 @@
name = "polychromic embroidered cloak"
desc = "A fancy cloak embroidered with polychromatic thread in a pattern that reminds one of the wielders of unlimited power."
icon_state = "polyce"
- item_color = "polyce"
primary_color = "#808080" //RGB in hexcode
secondary_color = "#8CC6FF"
tertiary_color = "#FF3535"
\ No newline at end of file
diff --git a/modular_citadel/code/modules/clothing/suits/suits.dm b/modular_citadel/code/modules/clothing/suits/suits.dm
index 4b9dd131ca..25b0c120e5 100644
--- a/modular_citadel/code/modules/clothing/suits/suits.dm
+++ b/modular_citadel/code/modules/clothing/suits/suits.dm
@@ -8,7 +8,7 @@
/obj/item/clothing/suit/armor/hos/trenchcoat/cloak
name = "armored trenchcloak"
desc = "A trenchcoat enchanced with a special lightweight kevlar. This one appears to be designed to be draped over one's shoulders rather than worn normally.."
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi'
+ mob_overlay_icon = 'modular_citadel/icons/mob/citadel/suit.dmi'
icon_state = "hostrench"
item_state = "hostrench"
mutantrace_variation = NONE
diff --git a/modular_citadel/code/modules/clothing/trek.dm b/modular_citadel/code/modules/clothing/trek.dm
index c6b0b80f22..b4ec9fbd61 100644
--- a/modular_citadel/code/modules/clothing/trek.dm
+++ b/modular_citadel/code/modules/clothing/trek.dm
@@ -15,7 +15,7 @@
desc = "The overcoat worn by all officers of the 2380s."
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
icon_state = "trek_ds9_coat"
- alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
+ mob_overlay_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
item_state = "trek_ds9_coat"
body_parts_covered = CHEST|GROIN|ARMS
mutantrace_variation = NONE
@@ -44,7 +44,7 @@
name = "Federation Uniform Jacket"
desc = "A uniform jacket from the United Federation. Set phasers to awesome."
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
+ mob_overlay_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
icon_state = "fedcoat"
item_state = "fedcoat"
mutantrace_variation = NONE
@@ -110,7 +110,7 @@
name = "Modern Federation Uniform Jacket"
desc = "A modern uniform jacket from the United Federation."
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
+ mob_overlay_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
icon_state = "fedmodern"
item_state = "fedmodern"
body_parts_covered = CHEST|GROIN|ARMS
@@ -142,7 +142,7 @@
desc = "An officer's cap that demands discipline from the one who wears it."
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
icon_state = "fedcapofficer"
- alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
+ mob_overlay_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
item_state = "fedcapofficer"
//Variants
diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm
index 62145616ad..a9b502d629 100644
--- a/modular_citadel/code/modules/custom_loadout/custom_items.dm
+++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm
@@ -26,7 +26,7 @@
desc = "The design on this seems a little too familiar."
icon = 'icons/obj/custom.dmi'
icon_state = "infcloak"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "infcloak"
w_class = WEIGHT_CLASS_SMALL
body_parts_covered = CHEST|GROIN|LEGS|ARMS
@@ -36,9 +36,8 @@
desc = "A soft black collar that seems to stretch to fit whoever wears it."
icon = 'icons/obj/custom.dmi'
icon_state = "infcollar"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "infcollar"
- item_color = null
tagname = null
/obj/item/clothing/accessory/medal/steele
@@ -46,14 +45,13 @@
desc = "An intricate pendant given to those who help a key member of the Steele Corporation."
icon = 'icons/obj/custom.dmi'
icon_state = "steele"
- item_color = "steele"
medaltype = "medal-silver"
/obj/item/toy/darksabre
name = "Kiara's Sabre"
desc = "This blade looks as dangerous as its owner."
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "darksabre"
item_state = "darksabre"
lefthand_file = 'modular_citadel/icons/mob/inhands/stunsword_left.dmi'
@@ -70,7 +68,7 @@
name = "Ornate Sheathe"
desc = "An ornate and rather sinister looking sabre sheathe."
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "darksheath"
item_state = "darksheath"
fitting_swords = list(/obj/item/toy/darksabre)
@@ -80,7 +78,7 @@
name = "Dark Armor"
desc = "A dark, non-functional piece of armor sporting a red and black finish."
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "darkcarapace"
item_state = "darkcarapace"
blood_overlay_type = "armor"
@@ -107,8 +105,7 @@
icon = 'icons/obj/custom.dmi'
icon_state = "zombscarf"
desc = "A fashionable collar"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
- item_color = "zombscarf"
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
dog_fashion = /datum/dog_fashion/head
/obj/item/clothing/suit/toggle/labcoat/mad/red
@@ -116,7 +113,7 @@
desc = "An oddly special looking coat."
icon = 'icons/obj/custom.dmi'
icon_state = "labred"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "labred"
mutantrace_variation = NONE
@@ -125,7 +122,7 @@
desc = "An oddly special looking coat."
icon = 'icons/obj/custom.dmi'
icon_state = "labredblack"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "labredblack"
mutantrace_variation = NONE
@@ -144,7 +141,7 @@
name = "carrot cloak"
desc = "A cloak in the shape and color of a carrot!"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "carrotcloak"
item_state = "carrotcloak"
w_class = WEIGHT_CLASS_SMALL
@@ -156,7 +153,7 @@
icon = 'icons/obj/custom.dmi'
icon_state = "satchel_carrot"
item_state = "satchel_carrot"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
/obj/item/storage/backpack/satchel/carrot/Initialize()
. = ..()
@@ -179,7 +176,7 @@
icon = 'icons/obj/custom.dmi'
icon_state = "festive"
item_state = "festive"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
w_class = WEIGHT_CLASS_SMALL
body_parts_covered = CHEST|GROIN|LEGS|ARMS
@@ -187,7 +184,7 @@
name = "Alboroto Rosa mask"
icon = 'icons/obj/custom.dmi'
icon_state = "lucharzigfie"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "lucharzigfie"
/obj/item/clothing/head/hardhat/reindeer/fluff
@@ -195,7 +192,7 @@
desc = "Some fake antlers and a very fake red nose - Sponsored by PWR Game(tm)"
icon_state = "hardhat0_reindeer"
item_state = "hardhat0_reindeer"
- item_color = "reindeer"
+ hat_type = "reindeer"
flags_inv = 0
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
brightness_on = 0 //luminosity when on
@@ -220,7 +217,7 @@
name = "The Hollow heart"
desc = "Sometimes things are too much to hide."
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "hheart"
item_state = "hheart"
flags_inv = HIDEFACE|HIDEFACIALHAIR
@@ -230,7 +227,7 @@
desc = "You would swear this was in your nightmares after eating too many veggies."
icon = 'icons/obj/custom.dmi'
icon_state = "hos-g"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "hos-g"
body_parts_covered = CHEST|GROIN|ARMS|LEGS
mutantrace_variation = NONE
@@ -247,7 +244,7 @@
desc = "Smells like reactor four."
icon = 'icons/obj/custom.dmi'
item_state = "stalker"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "stalker"
/obj/item/reagent_containers/food/drinks/flask/steel
@@ -262,7 +259,7 @@
desc = "It's a collar..."
icon = 'icons/obj/custom.dmi'
icon_state = "petcollar-stripe"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "petcollar-stripe"
tagname = null
@@ -271,9 +268,8 @@
desc = "Just looking at this makes you want to sing."
icon = 'icons/obj/custom.dmi'
icon_state = "singer"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "singer"
- item_color = "singer"
fitted = NO_FEMALE_UNIFORM
alternate_worn_layer = ABOVE_SHOES_LAYER
can_adjust = 0
@@ -282,7 +278,7 @@
/obj/item/clothing/shoes/sneakers/pink
icon = 'icons/obj/custom.dmi'
icon_state = "pink"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "pink"
mutantrace_variation = NONE
@@ -291,13 +287,13 @@
desc = "A neosilk clip-on tie. This one has a black S on the tipping and looks rather unique."
icon = 'icons/obj/custom.dmi'
icon_state = "bloodredtie"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
/obj/item/clothing/suit/puffydress
name = "Puffy Dress"
desc = "A formal puffy black and red Victorian dress."
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "puffydress"
item_state = "puffydress"
body_parts_covered = CHEST|GROIN|LEGS
@@ -310,7 +306,7 @@
item_state = "vermillion"
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
/obj/item/clothing/under/sweater/black/naomi
@@ -327,7 +323,7 @@
desc = "This cloak doesn't seem too special."
icon = 'icons/obj/custom.dmi'
icon_state = "wintergreencloak"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "wintergreencloak"
w_class = WEIGHT_CLASS_SMALL
body_parts_covered = CHEST|GROIN|LEGS|ARMS
@@ -343,7 +339,7 @@
desc = "An oddly special looking coat."
icon = 'icons/obj/custom.dmi'
icon_state = "rdcoat"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
item_state = "rdcoat"
mutantrace_variation = NONE
@@ -359,7 +355,7 @@
desc = "These strange wings look like they once attached to something... or someone...? Whatever the case, their presence makes you feel uneasy.."
icon = 'icons/obj/custom.dmi'
icon_state = "devilwings"
- alternate_worn_icon = 'modular_citadel/icons/mob/clothing/devilwings64x64.dmi'
+ mob_overlay_icon = 'modular_citadel/icons/mob/clothing/devilwings64x64.dmi'
item_state = "devilwings"
worn_x_dimension = 64
worn_y_dimension = 34
@@ -369,14 +365,14 @@
desc = "A truly patriotic form of heroic attire."
icon = 'icons/obj/custom.dmi'
resistance_flags = FLAMMABLE
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "flagcape"
item_state = "flagcape"
/obj/item/clothing/shoes/lucky
name = "Lucky Jackboots"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
desc = "Comfy Lucky Jackboots with the word Luck on them."
item_state = "luckyjack"
icon_state = "luckyjack"
@@ -385,7 +381,7 @@
/obj/item/clothing/under/custom/lunasune
name = "Divine Robes"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
desc = "Heavenly robes of the kitsune Luna Pumpkin,you can feel radiance coming from them."
item_state = "Divine_robes"
icon_state = "Divine_robes"
@@ -394,7 +390,7 @@
/obj/item/clothing/under/custom/leoskimpy
name = "Leon's Skimpy Outfit"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
desc = "A rather skimpy outfit."
item_state = "shark_cloth"
icon_state = "shark_cloth"
@@ -403,7 +399,7 @@
/obj/item/clothing/under/custom/mimeoveralls
name = "Mime's Overalls"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
desc = "A less-than-traditional mime's attire, completed by a set of dorky-looking overalls."
item_state = "moveralls"
icon_state = "moveralls"
@@ -415,7 +411,7 @@
icon_state = "zuliecloak"
item_state = "zuliecloak"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
hoodtype = /obj/item/clothing/head/hooded/cloakhood/zuliecloak
body_parts_covered = CHEST|GROIN|ARMS
slot_flags = SLOT_WEAR_SUIT | ITEM_SLOT_NECK //it's a cloak. it's cosmetic. so why the hell not? what could possibly go wrong?
@@ -427,7 +423,7 @@
icon_state = "zuliecap"
item_state = "zuliecap"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
flags_inv = HIDEEARS|HIDEHAIR
mutantrace_variation = NONE
@@ -435,7 +431,7 @@
name = "Multicolor Coat"
desc = "An oddly special looking coat with black, red, and gold"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
icon_state = "redgoldjacket"
item_state = "redgoldjacket"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
@@ -447,7 +443,7 @@
icon_state = "kimono"
item_state = "kimono"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
body_parts_covered = CHEST|GROIN|LEGS|ARMS
mutantrace_variation = NONE
@@ -457,7 +453,7 @@
icon_state = "commjacket"
item_state = "commjacket"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
body_parts_covered = CHEST|GROIN|LEGS|ARMS
mutantrace_variation = NONE
@@ -467,7 +463,7 @@
icon_state = "mw2_russian_para"
item_state = "mw2_russian_para"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
/obj/item/clothing/gloves/longblackgloves
@@ -476,7 +472,7 @@
icon_state = "longblackgloves"
item_state = "longblackgloves"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
/obj/item/clothing/under/custom/trendy_fit
name = "Trendy Fitting Clothing"
@@ -484,7 +480,7 @@
icon_state = "trendy_fit"
item_state = "trendy_fit"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
/obj/item/clothing/head/blueberet
@@ -493,7 +489,7 @@
icon_state = "blueberet"
item_state = "blueberet"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
dynamic_hair_suffix = ""
/obj/item/clothing/head/flight
@@ -502,7 +498,7 @@
icon_state = "flight-g"
item_state = "flight-g"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
/obj/item/clothing/neck/necklace/onion
name = "Onion Necklace"
@@ -510,7 +506,7 @@
icon = 'icons/obj/custom.dmi'
icon_state = "onion"
item_state = "onion"
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
/obj/item/clothing/under/custom/mikubikini
name = "starlight singer bikini"
@@ -518,7 +514,7 @@
icon_state = "mikubikini"
item_state = "mikubikini"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
/obj/item/clothing/suit/mikujacket
@@ -527,7 +523,7 @@
icon_state = "mikujacket"
item_state = "mikujacket"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
/obj/item/clothing/head/mikuhair
@@ -536,7 +532,7 @@
icon_state = "mikuhair"
item_state = "mikuhair"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
flags_inv = HIDEHAIR
@@ -546,7 +542,7 @@
icon_state = "mikugloves"
item_state = "mikugloves"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
/obj/item/clothing/shoes/sneakers/mikuleggings
@@ -555,7 +551,7 @@
icon_state = "mikuleggings"
item_state = "mikuleggings"
icon = 'icons/obj/custom.dmi'
- alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
/obj/item/toy/plush/mammal/dog/fritz
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm
index 28a776082f..198e6c5c24 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm
@@ -54,15 +54,15 @@
return..()
var/mob/living/carbon/human/H = M
- var/obj/item/organ/genital/breasts/B = M.getorganslot(ORGAN_SLOT_BREASTS)
//If they've opted out, then route processing though liver.
if(!(H.client?.prefs.cit_toggles & BREAST_ENLARGEMENT))
var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER)
if(L)
- L.swelling += 0.05
+ L.applyOrganDamage(0.25)
else
H.adjustToxLoss(1)
return..()
+ var/obj/item/organ/genital/breasts/B = M.getorganslot(ORGAN_SLOT_BREASTS)
//otherwise proceed as normal
if(!B) //If they don't have breasts, give them breasts.
@@ -95,7 +95,8 @@
/datum/reagent/fermi/breast_enlarger/overdose_process(mob/living/carbon/M) //Turns you into a female if male and ODing, doesn't touch nonbinary and object genders.
if(!(M.client?.prefs.cit_toggles & FORCED_FEM))
var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER)
- L.swelling+= 0.05
+ if(L)
+ L.applyOrganDamage(0.25)
return ..()
var/obj/item/organ/genital/penis/P = M.getorganslot(ORGAN_SLOT_PENIS)
@@ -130,7 +131,8 @@
var/obj/item/organ/genital/breasts/B = M.getorganslot(ORGAN_SLOT_BREASTS)
if(!(M.client?.prefs.cit_toggles & BREAST_ENLARGEMENT) || !B)
var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER)
- L.swelling-= 0.05
+ if(L)
+ L.applyOrganDamage(-0.25)
return ..()
B.modify_size(-0.05)
return ..()
@@ -208,14 +210,14 @@
if(!ishuman(M))
return ..()
var/mob/living/carbon/human/H = M
- var/obj/item/organ/genital/penis/P = H.getorganslot(ORGAN_SLOT_PENIS)
if(!(H.client?.prefs.cit_toggles & PENIS_ENLARGEMENT))
var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER)
if(L)
- L.swelling += 0.05
+ L.applyOrganDamage(0.25)
else
H.adjustToxLoss(1)
return ..()
+ var/obj/item/organ/genital/penis/P = H.getorganslot(ORGAN_SLOT_PENIS)
//otherwise proceed as normal
if(!P)//They do have a preponderance for escapism, or so I've heard.
@@ -241,7 +243,8 @@
return ..()
if(!(M.client?.prefs.cit_toggles & FORCED_MASC))
var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER)
- L.swelling+= 0.05
+ if(L)
+ L.applyOrganDamage(0.25)
return..()
var/obj/item/organ/genital/breasts/B = M.getorganslot(ORGAN_SLOT_BREASTS)
@@ -278,7 +281,8 @@
var/obj/item/organ/genital/penis/P = H.getorganslot(ORGAN_SLOT_PENIS)
if(!(H.client?.prefs.cit_toggles & PENIS_ENLARGEMENT) || !P)
var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER)
- L.swelling-= 0.05
+ if(L)
+ L.applyOrganDamage(-0.25)
return..()
P.modify_size(-0.1)
diff --git a/tgstation.dme b/tgstation.dme
index 2f9323c5d2..7d7dcea52f 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -43,6 +43,7 @@
#include "code\__DEFINES\diseases.dm"
#include "code\__DEFINES\DNA.dm"
#include "code\__DEFINES\donator_groupings.dm"
+#include "code\__DEFINES\dye_keys.dm"
#include "code\__DEFINES\dynamic.dm"
#include "code\__DEFINES\events.dm"
#include "code\__DEFINES\exports.dm"