All Key Bindings: "
dat += "
Reset to Default "
@@ -784,25 +741,24 @@ GLOBAL_LIST_INIT(special_role_times, list(
var/list/loadout_cache = active_character.loadout_gear.Copy()
active_character.loadout_gear.Cut()
if(new_item)
- loadout_cache += new_item.type
+ loadout_cache += "[new_item]"
- for(var/I in loadout_cache)
- var/datum/gear/G = GLOB.gear_datums[text2path(I) || I]
- if(!G)
+ for(var/item in loadout_cache)
+ var/datum/gear/gear = text2path(item) || item
+ if(!gear || !(gear.type in GLOB.gear_datums))
continue
- var/added_cost = G.cost
- if(!G.subtype_selection_cost) // If listings of the same subtype shouldn't have their cost added.
- if(G.main_typepath in type_blacklist)
+ var/added_cost = gear.cost
+ if(!gear.subtype_selection_cost) // If listings of the same subtype shouldn't have their cost added.
+ if(gear.main_typepath in type_blacklist)
added_cost = 0
else
- type_blacklist += G.main_typepath
+ type_blacklist += gear.main_typepath
if((total_cost + added_cost) > max_gear_slots)
continue // If the final cost is too high, don't add the item.
- active_character.loadout_gear += G.type
+ active_character.loadout_gear[item] = loadout_cache[item] ? loadout_cache[item] : list()
total_cost += added_cost
return total_cost
-
/datum/preferences/proc/init_keybindings(overrides, raw)
if(raw)
try
diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm
index 084bba3926f7..7efb09f2a95d 100644
--- a/code/modules/client/preference/preferences_mysql.dm
+++ b/code/modules/client/preference/preferences_mysql.dm
@@ -4,6 +4,7 @@
//general preferences
var/raw_muted_admins
+ var/raw_fptp
while(query.NextRow())
ooccolor = query.item[1]
UI_style = query.item[2]
@@ -32,6 +33,7 @@
server_region = query.item[25]
raw_muted_admins = query.item[26]
viewrange = query.item[27]
+ raw_fptp = query.item[28]
lastchangelog_2 = lastchangelog // Clone please
@@ -60,7 +62,11 @@
admin_sound_ckey_ignore = json_decode(raw_muted_admins)
catch
admin_sound_ckey_ignore = list() // Invalid JSON, handle safely please
-
+ if(length(raw_fptp))
+ try
+ map_vote_pref_json = json_decode(raw_fptp)
+ catch
+ map_vote_pref_json = list()
// Sanitize the region
if(!(server_region in GLOB.configuration.system.region_map))
server_region = null // This region doesnt exist anymore
@@ -104,7 +110,8 @@
keybindings=:keybindings,
server_region=:server_region,
muted_adminsounds_ckeys=:muted_adminsounds_ckeys,
- viewrange=:viewrange
+ viewrange=:viewrange,
+ map_vote_pref_json=:map_vote_pref_json
WHERE ckey=:ckey"}, list(
// OH GOD THE PARAMETERS
"ooccolour" = ooccolor,
@@ -133,7 +140,8 @@
"ckey" = C.ckey,
"server_region" = server_region,
"muted_adminsounds_ckeys" = json_encode(admin_sound_ckey_ignore),
- "viewrange" = viewrange
+ "viewrange" = viewrange,
+ "map_vote_pref_json" = json_encode(map_vote_pref_json)
))
if(!query.warn_execute())
diff --git a/code/modules/client/preference/preferences_toggles.dm b/code/modules/client/preference/preferences_toggles.dm
index 9f4adb3e96d9..081f8981d94f 100644
--- a/code/modules/client/preference/preferences_toggles.dm
+++ b/code/modules/client/preference/preferences_toggles.dm
@@ -510,8 +510,8 @@
blackbox_message = "Set Own OOC"
/datum/preference_toggle/special_toggle/set_ooc_color/set_toggles(client/user)
- var/new_ooccolor = input(usr, "Please select your OOC color.", "OOC color", user.prefs.ooccolor) as color|null
- if(new_ooccolor)
+ var/new_ooccolor = tgui_input_color(usr, "Please select your OOC color.", "OOC Color", user.prefs.ooccolor)
+ if(!isnull(new_ooccolor))
user.prefs.ooccolor = new_ooccolor
to_chat(usr, "Your OOC color has been set to [new_ooccolor].")
else
diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm
index a90dedb0f7d8..f721a0eb7785 100644
--- a/code/modules/clothing/chameleon.dm
+++ b/code/modules/clothing/chameleon.dm
@@ -40,17 +40,10 @@
var/list/outfit_types = O.get_chameleon_disguise_info()
for(var/V in user.chameleon_item_actions)
- var/datum/action/item_action/chameleon/change/A = V
- var/done = FALSE
+ var/datum/action/item_action/chameleon/change/action = V
for(var/T in outfit_types)
- for(var/name in A.chameleon_list)
- if(A.chameleon_list[name] == T)
- A.update_look(user, T)
- outfit_types -= T
- done = TRUE
- break
- if(done)
- break
+ if(ispath(T, action.chameleon_type))
+ action.update_look(user, T)
//hardsuit helmets/suit hoods
if(ispath(O.suit, /obj/item/clothing/suit/hooded) && ishuman(user))
var/mob/living/carbon/human/H = user
@@ -69,13 +62,18 @@
/datum/action/item_action/chameleon/change
name = "Chameleon Change"
- var/list/chameleon_blacklist = list() //This is a typecache
- var/list/chameleon_list = list()
+ var/static/list/chameleon_blacklist = list() //This is a typecache
+ var/static/list/chameleon_list = list()
var/chameleon_type = null
var/chameleon_name = "Item"
-
+ var/obj/item/holder
var/emp_timer
+/datum/action/item_action/chameleon/change/New(Target)
+ . = ..()
+ holder = Target
+
+
/datum/action/item_action/chameleon/change/Grant(mob/M)
if(M && (owner != M))
if(!M.chameleon_item_actions)
@@ -99,42 +97,77 @@
if(.)
button.name = "Change [chameleon_name] Appearance"
+/datum/action/item_action/chameleon/change/ui_host()
+ return holder
+
+/datum/action/item_action/chameleon/change/ui_state(mob/user)
+ return GLOB.physical_state
+
+/datum/action/item_action/chameleon/change/ui_data(mob/user)
+ var/list/data = list()
+ data["selected_appearance"] = "[holder.name]_[holder.icon_state]"
+ return data
+
+/datum/action/item_action/chameleon/change/ui_static_data(mob/user, datum/tgui/ui = null)
+ var/list/data = list()
+ var/list/chameleon_skins = list()
+ for(var/chameleon_type in chameleon_list[chameleon_name])
+ var/obj/item/chameleon_item = chameleon_list[chameleon_name][chameleon_type]
+ chameleon_skins.Add(list(list(
+ "icon" = initial(chameleon_item.icon),
+ "icon_state" = initial(chameleon_item.icon_state),
+ "name" = initial(chameleon_item.name),
+ )))
+
+ data["chameleon_skins"] = chameleon_skins
+ return data
+
+/datum/action/item_action/chameleon/change/ui_interact(mob/user, datum/tgui/ui = null)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "Chameleon", "Change [chameleon_name] Appearance")
+ ui.open()
+ ui.set_autoupdate(FALSE)
+
+/datum/action/item_action/chameleon/change/ui_act(action, list/params)
+ if(..())
+ return
+
+ switch(action)
+ if("change_appearance")
+ update_look(usr, chameleon_list[chameleon_name][params["new_appearance"]])
/datum/action/item_action/chameleon/change/proc/initialize_disguises()
UpdateButtons()
chameleon_blacklist |= typecacheof(target.type)
+ if(!isnull(chameleon_list[chameleon_name]))
+ return
+ chameleon_list[chameleon_name] = list()
for(var/V in typesof(chameleon_type))
if(ispath(V) && ispath(V, /obj/item))
var/obj/item/I = V
if(chameleon_blacklist[V] || (initial(I.flags) & ABSTRACT) || !initial(I.icon_state))
continue
- var/chameleon_item_name = "[initial(I.name)] ([initial(I.icon_state)])"
- chameleon_list[chameleon_item_name] = I
+ var/chameleon_item_name = "[replacetext(initial(I.name), "\improper", "")]_[initial(I.icon_state)]"
+ if(isnull(chameleon_list[chameleon_name][chameleon_item_name]))
+ chameleon_list[chameleon_name][chameleon_item_name] = I
/datum/action/item_action/chameleon/change/proc/select_look(mob/user)
- var/obj/item/picked_item
- var/picked_name
- picked_name = tgui_input_list(user, "Select [chameleon_name] to change into", "Chameleon [chameleon_name]", chameleon_list)
- if(!picked_name)
- return
- picked_item = chameleon_list[picked_name]
- if(!picked_item)
- return
- update_look(user, picked_item)
+ ui_interact(user)
/datum/action/item_action/chameleon/change/proc/random_look(mob/user)
- var/picked_name = pick(chameleon_list)
+ var/picked_name = pick(chameleon_list[chameleon_name])
// If a user is provided, then this item is in use, and we
// need to update our icons and stuff
if(user)
- update_look(user, chameleon_list[picked_name])
+ update_look(user, chameleon_list[chameleon_name][picked_name])
// Otherwise, it's likely a random initialisation, so we
// don't have to worry
else
- update_item(chameleon_list[picked_name])
+ update_item(chameleon_list[chameleon_name][picked_name])
/datum/action/item_action/chameleon/change/proc/update_look(mob/user, obj/item/picked_item)
if(isliving(user))
@@ -145,6 +178,7 @@
update_item(picked_item)
var/obj/item/thing = target
thing.update_slot_icon()
+ SStgui.update_uis(src)
UpdateButtons()
/datum/action/item_action/chameleon/change/proc/update_item(obj/item/picked_item)
@@ -679,17 +713,21 @@
chameleon_action.emp_randomise(INFINITY)
/datum/action/item_action/chameleon/change/modsuit/update_item(obj/item/picked_item)
- . = ..()
if(ismodcontrol(target))
var/obj/item/mod/control/C = target
- if(C.current_disguise) //backup check
+ C.current_disguise = FALSE
+ if(C.active || C.activating)
+ to_chat(C.wearer, "
Your suit is already active!")
+ return
+ if(initial(picked_item.name) == C.name) // If you select the same item as what it's currently disguised as, change back to MODsuit form.
for(var/obj/item/mod/module/chameleon/toreturn in C.contents)
toreturn.return_look()
return
+ . = ..()
C.current_disguise = TRUE
C.item_state = initial(picked_item.item_state)
for(var/obj/item/mod/module/chameleon/tosignal in C.contents)
- tosignal.RegisterSignal(C, COMSIG_MOD_ACTIVATE, TYPE_PROC_REF(/obj/item/mod/module/chameleon, return_look))
+ tosignal.RegisterSignal(C, COMSIG_MOD_ACTIVATE, TYPE_PROC_REF(/obj/item/mod/module/chameleon, return_look), TRUE)
/datum/action/item_action/chameleon/change/modsuit/select_look(mob/user)
if(ismodcontrol(target))
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 26ec24b69ccd..876cfcf89476 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -28,7 +28,6 @@
var/visor_flags_inv = NONE //same as visor_flags, but for flags_inv
var/visor_flags_cover = NONE //for cover flags
var/visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT | VISOR_VISIONFLAGS | VISOR_DARKNESSVIEW | VISOR_INVISVIEW //what to toggle when toggled with weldingvisortoggle()
-
var/can_toggle = FALSE
var/toggle_message = null
var/alt_toggle_message = null
@@ -93,7 +92,7 @@
return FALSE
// Skip species restriction checks on non-equipment slots
- if(slot in list(SLOT_HUD_RIGHT_HAND, SLOT_HUD_LEFT_HAND, SLOT_HUD_IN_BACKPACK, SLOT_HUD_LEFT_STORE, SLOT_HUD_RIGHT_STORE))
+ if(slot & (ITEM_SLOT_RIGHT_HAND | ITEM_SLOT_LEFT_HAND | ITEM_SLOT_IN_BACKPACK | ITEM_SLOT_LEFT_POCKET | ITEM_SLOT_RIGHT_POCKET))
return TRUE
if(species_restricted && ishuman(M))
@@ -145,7 +144,7 @@
name = "ears"
w_class = WEIGHT_CLASS_TINY
throwforce = 2
- slot_flags = SLOT_FLAG_EARS
+ slot_flags = ITEM_SLOT_BOTH_EARS
resistance_flags = NONE
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/ears.dmi', //We read you loud and skree-er.
@@ -168,32 +167,18 @@
if(!usr.canUnEquip(src))
return
- var/obj/item/clothing/ears/O
- if(slot_flags & SLOT_FLAG_TWOEARS)
- O = (H.l_ear == src ? H.r_ear : H.l_ear)
- user.unEquip(O)
- if(!istype(src, /obj/item/clothing/ears/offear))
- qdel(O)
- O = src
- else
- O = src
-
user.unEquip(src)
- if(O)
- user.put_in_hands(O)
- O.add_fingerprint(user)
-
- if(istype(src, /obj/item/clothing/ears/offear))
- qdel(src)
-
+ if(src)
+ user.put_in_hands(src)
+ add_fingerprint(user)
/obj/item/clothing/ears/offear
name = "Other ear"
w_class = WEIGHT_CLASS_HUGE
icon = 'icons/mob/screen_gen.dmi'
icon_state = "block"
- slot_flags = SLOT_FLAG_EARS | SLOT_FLAG_TWOEARS
+ slot_flags = ITEM_SLOT_BOTH_EARS
/obj/item/clothing/ears/offear/New(obj/O)
. = ..()
@@ -211,7 +196,7 @@
icon = 'icons/obj/clothing/glasses.dmi'
w_class = WEIGHT_CLASS_SMALL
flags_cover = GLASSESCOVERSEYES
- slot_flags = SLOT_FLAG_EYES
+ slot_flags = ITEM_SLOT_EYES
materials = list(MAT_GLASS = 250)
var/vision_flags = 0
var/see_in_dark = 0 //Base human is 2
@@ -263,7 +248,7 @@
icon = 'icons/obj/clothing/gloves.dmi'
siemens_coefficient = 0.50
body_parts_covered = HANDS
- slot_flags = SLOT_FLAG_GLOVES
+ slot_flags = ITEM_SLOT_GLOVES
attack_verb = list("challenged")
strip_delay = 2 SECONDS
put_on_delay = 4 SECONDS
@@ -393,7 +378,7 @@
icon = 'icons/obj/clothing/hats.dmi'
icon_override = 'icons/mob/clothing/head.dmi'
body_parts_covered = HEAD
- slot_flags = SLOT_FLAG_HEAD
+ slot_flags = ITEM_SLOT_HEAD
var/HUDType = null
var/vision_flags = 0
@@ -443,7 +428,7 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(SLOT_HUD_HEAD) == src)
+ if(H.get_item_by_slot(ITEM_SLOT_HEAD) == src)
for(var/obj/item/clothing/head/hat as anything in attached_hats)
hat.attached_unequip()
@@ -553,7 +538,7 @@
name = "mask"
icon = 'icons/obj/clothing/masks.dmi'
body_parts_covered = HEAD
- slot_flags = SLOT_FLAG_MASK
+ slot_flags = ITEM_SLOT_MASK
strip_delay = 4 SECONDS
put_on_delay = 4 SECONDS
dyeable = FALSE
@@ -584,9 +569,9 @@
if(initial(flags_cover) & MASKCOVERSMOUTH) //If the mask covers the mouth when it's down and can be adjusted yet lost that trait when it was adjusted, make it cover the mouth again.
flags_cover |= MASKCOVERSMOUTH
if(H.head == src)
- if(isnull(user.get_item_by_slot(slot_bitfield_to_slot(slot_flags))))
+ if(isnull(user.get_item_by_slot(slot_flags)))
user.unEquip(src)
- user.equip_to_slot(src, slot_bitfield_to_slot(slot_flags))
+ user.equip_to_slot(src, slot_flags)
else if(flags_inv == HIDEFACE) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer.
if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground.
user.unEquip(src)
@@ -611,9 +596,9 @@
if(flags & AIRTIGHT) //If the mask was airtight, it won't be anymore since you just pushed it off your face.
flags &= ~AIRTIGHT
if(user.wear_mask == src)
- if(isnull(user.get_item_by_slot(slot_bitfield_to_slot(slot_flags))))
+ if(isnull(user.get_item_by_slot(slot_flags)))
user.unEquip(src)
- user.equip_to_slot(src, slot_bitfield_to_slot(slot_flags))
+ user.equip_to_slot(src, slot_flags)
else if(initial(flags_inv) == HIDEFACE) //Means that you won't have to take off and put back on simple things like breath masks which, realistically, can just be pulled down off your face.
if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground.
user.unEquip(src)
@@ -641,7 +626,7 @@
gender = PLURAL //Carn: for grammatically correct text-parsing
body_parts_covered = FEET
- slot_flags = SLOT_FLAG_FEET
+ slot_flags = ITEM_SLOT_SHOES
dyeable = TRUE
dyeing_key = DYE_REGISTRY_SHOES
@@ -664,11 +649,9 @@
var/blood_state = BLOOD_STATE_NOT_BLOODY
var/list/bloody_shoes = list(BLOOD_STATE_HUMAN = 0, BLOOD_STATE_XENO = 0, BLOOD_STATE_NOT_BLOODY = 0, BLOOD_BASE_ALPHA = BLOODY_FOOTPRINT_BASE_ALPHA)
-
-
/obj/item/clothing/shoes/equipped(mob/user, slot)
. = ..()
- if(!no_slip || slot != SLOT_HUD_SHOES)
+ if(!no_slip || slot != ITEM_SLOT_SHOES)
return
ADD_TRAIT(user, TRAIT_NOSLIP, UID())
@@ -679,7 +662,7 @@
var/mob/living/carbon/human/H = user
if(!user)
return
- if(H.get_item_by_slot(SLOT_HUD_SHOES) == src)
+ if(H.get_item_by_slot(ITEM_SLOT_SHOES) == src)
REMOVE_TRAIT(H, TRAIT_NOSLIP, UID())
/obj/item/clothing/shoes/attackby(obj/item/I, mob/user, params)
@@ -775,7 +758,7 @@
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 0, ACID = 0)
drop_sound = 'sound/items/handling/cloth_drop.ogg'
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
- slot_flags = SLOT_FLAG_OCLOTHING
+ slot_flags = ITEM_SLOT_OUTER_SUIT
dyeable = FALSE
var/fire_resist = T0C + 100
@@ -875,7 +858,7 @@
/obj/item/clothing/suit/equipped(mob/living/carbon/human/user, slot) //Handle tail-hiding on a by-species basis.
..()
- if(ishuman(user) && hide_tail_by_species && slot == SLOT_HUD_OUTER_SUIT)
+ if(ishuman(user) && hide_tail_by_species && slot == ITEM_SLOT_OUTER_SUIT)
if("modsuit" in hide_tail_by_species)
return
if(user.dna.species.sprite_sheet_name in hide_tail_by_species)
@@ -979,7 +962,7 @@
name = "under"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
permeability_coefficient = 0.90
- slot_flags = SLOT_FLAG_ICLOTHING
+ slot_flags = ITEM_SLOT_JUMPSUIT
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 0, ACID = 0)
equip_sound = 'sound/items/equip/jumpsuit_equip.ogg'
drop_sound = 'sound/items/handling/cloth_drop.ogg'
@@ -1021,7 +1004,7 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(SLOT_HUD_JUMPSUIT) == src)
+ if(H.get_item_by_slot(ITEM_SLOT_JUMPSUIT) == src)
for(var/obj/item/clothing/accessory/A in accessories)
A.attached_unequip(user) // SS220 EDIT - FIX
@@ -1029,7 +1012,7 @@
..()
if(!ishuman(user))
return
- if(slot == SLOT_HUD_JUMPSUIT)
+ if(slot == ITEM_SLOT_JUMPSUIT)
for(var/obj/item/clothing/accessory/A in accessories)
A.attached_equip(user) // SS220 EDIT - FIX
@@ -1043,7 +1026,7 @@
if(length(accessories) >= MAX_EQUIPABLE_ACCESSORIES) //this is neccesary to prevent chat spam when examining clothing
return FALSE
for(var/obj/item/clothing/accessory/AC in accessories)
- if((A.slot in list(ACCESSORY_SLOT_UTILITY, ACCESSORY_SLOT_ARMBAND)) && AC.slot == A.slot)
+ if((A.slot & (ACCESSORY_SLOT_UTILITY | ACCESSORY_SLOT_ARMBAND)) && (AC.slot & A.slot))
return FALSE
if(!A.allow_duplicates && AC.type == A.type)
return FALSE
@@ -1138,7 +1121,7 @@
if(copytext(item_color,-2) != "_d")
basecolor = item_color
- if(user.get_item_by_slot(SLOT_HUD_JUMPSUIT) != src)
+ if(user.get_item_by_slot(ITEM_SLOT_JUMPSUIT) != src)
to_chat(user, "
You must wear the uniform to adjust it!")
else
diff --git a/code/modules/clothing/ears/earmuffs.dm b/code/modules/clothing/ears/earmuffs.dm
index bf47c4bebe1e..55df72c904c6 100644
--- a/code/modules/clothing/ears/earmuffs.dm
+++ b/code/modules/clothing/ears/earmuffs.dm
@@ -14,7 +14,7 @@
/obj/item/clothing/ears/earmuffs/equipped(mob/user, slot)
. = ..()
- if(ishuman(user) && ((slot == SLOT_HUD_LEFT_EAR) || (slot == SLOT_HUD_RIGHT_EAR)))
+ if(ishuman(user) && (slot & ITEM_SLOT_BOTH_EARS))
ADD_TRAIT(user, TRAIT_DEAF, "[CLOTHING_TRAIT][UID()]")
/obj/item/clothing/ears/earmuffs/dropped(mob/user)
diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm
index e593c0eb03d1..d6189f761587 100644
--- a/code/modules/clothing/glasses/engine_goggles.dm
+++ b/code/modules/clothing/glasses/engine_goggles.dm
@@ -31,10 +31,10 @@
/obj/item/clothing/glasses/meson/engine/equipped(mob/user, slot, initial)
. = ..()
- if(active_on_equip && mode == MODE_MESON && slot == SLOT_HUD_GLASSES)
+ if(active_on_equip && mode == MODE_MESON && slot == ITEM_SLOT_EYES)
ADD_TRAIT(user, TRAIT_MESON_VISION, "meson_glasses[UID()]")
- if(active_on_equip_rad && mode == MODE_RAD && slot == SLOT_HUD_GLASSES)
+ if(active_on_equip_rad && mode == MODE_RAD && slot == ITEM_SLOT_EYES)
ADD_TRAIT(user, SM_HALLUCINATION_IMMUNE, "meson_glasses[UID()]")
/obj/item/clothing/glasses/meson/engine/proc/toggle_mode(mob/user, voluntary)
@@ -95,7 +95,7 @@
item_state = icon_state
if(isliving(loc))
var/mob/living/user = loc
- if(user.get_item_by_slot(SLOT_HUD_GLASSES) == src)
+ if(user.get_item_by_slot(ITEM_SLOT_EYES) == src)
user.update_inv_glasses()
else
user.update_inv_l_hand()
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 3f763b55d91a..2004447294b3 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -103,7 +103,7 @@
/obj/item/clothing/glasses/meson/equipped(mob/user, slot, initial)
. = ..()
- if(active_on_equip && slot == SLOT_HUD_GLASSES)
+ if(active_on_equip && slot == ITEM_SLOT_EYES)
ADD_TRAIT(user, TRAIT_MESON_VISION, "meson_glasses[UID()]")
/obj/item/clothing/glasses/meson/dropped(mob/user)
@@ -169,7 +169,7 @@
actions_types = list(/datum/action/item_action/toggle_research_scanner)
/obj/item/clothing/glasses/science/item_action_slot_check(slot)
- if(slot == SLOT_HUD_GLASSES)
+ if(slot == ITEM_SLOT_EYES)
return TRUE
/obj/item/clothing/glasses/science/night
@@ -370,7 +370,7 @@
toggle_noir(user)
/obj/item/clothing/glasses/sunglasses/noir/item_action_slot_check(slot)
- if(slot == SLOT_HUD_GLASSES)
+ if(slot == ITEM_SLOT_EYES)
return TRUE
/obj/item/clothing/glasses/sunglasses/noir/proc/toggle_noir(mob/user)
@@ -404,7 +404,7 @@
actions_types = list(/datum/action/item_action/toggle_research_scanner)
/obj/item/clothing/glasses/sunglasses/reagent/item_action_slot_check(slot)
- if(slot == SLOT_HUD_GLASSES)
+ if(slot == ITEM_SLOT_EYES)
return TRUE
/obj/item/clothing/glasses/virussunglasses
@@ -429,7 +429,7 @@
flags = NODROP
/obj/item/clothing/glasses/sunglasses/lasers/equipped(mob/user, slot) //grant them laser eyes upon equipping it.
- if(slot == SLOT_HUD_GLASSES)
+ if(slot == ITEM_SLOT_EYES)
ADD_TRAIT(user, TRAIT_LASEREYES, "admin_zapglasses")
user.regenerate_icons()
..(user, slot)
@@ -514,13 +514,13 @@
/obj/item/clothing/glasses/thermal/eyepatch
name = "optical thermal eyepatch"
- desc = "An eyepatch with built-in thermal optics"
+ desc = "An eyepatch with built-in thermal optics."
icon_state = "eyepatch"
item_state = "eyepatch"
/obj/item/clothing/glasses/thermal/jensen
name = "optical thermal implant"
- desc = "A set of implantable lenses designed to augment your vision"
+ desc = "A set of implantable lenses designed to augment your vision."
icon_state = "thermalimplants"
item_state = "syringe_kit"
diff --git a/code/modules/clothing/glasses/hudglasses.dm b/code/modules/clothing/glasses/hudglasses.dm
index b45c9d9c4479..1c4a60cd8f1f 100644
--- a/code/modules/clothing/glasses/hudglasses.dm
+++ b/code/modules/clothing/glasses/hudglasses.dm
@@ -16,7 +16,7 @@
/obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot)
..()
- if(slot != SLOT_HUD_GLASSES)
+ if(slot != ITEM_SLOT_EYES)
return
for(var/new_hud in hud_types)
var/datum/atom_hud/H = GLOB.huds[new_hud]
diff --git a/code/modules/clothing/glasses/tajblind.dm b/code/modules/clothing/glasses/tajblind.dm
index 7d5b9754e8c7..00ec29e52965 100644
--- a/code/modules/clothing/glasses/tajblind.dm
+++ b/code/modules/clothing/glasses/tajblind.dm
@@ -60,13 +60,13 @@
icon_state = "tajblind_engi"
item_state = "tajblind_engi"
-/obj/item/clothing/glasses/hud/tajblind/meson/Initialize()
+/obj/item/clothing/glasses/hud/tajblind/meson/Initialize(mapload)
. = ..()
desc += "
It has an optical meson scanner integrated into it."
/obj/item/clothing/glasses/hud/tajblind/meson/equipped(mob/user, slot, initial)
. = ..()
- if(slot == SLOT_HUD_GLASSES)
+ if(slot == ITEM_SLOT_EYES)
ADD_TRAIT(user, TRAIT_MESON_VISION, "meson_glasses[UID()]")
/obj/item/clothing/glasses/hud/tajblind/meson/dropped(mob/user)
@@ -86,12 +86,12 @@
scan_reagents = 1
actions_types = list(/datum/action/item_action/toggle, /datum/action/item_action/toggle_research_scanner)
-/obj/item/clothing/glasses/hud/tajblind/sci/Initialize()
+/obj/item/clothing/glasses/hud/tajblind/sci/Initialize(mapload)
. = ..()
desc += "
It has science goggles integrated into it."
/obj/item/clothing/glasses/hud/tajblind/sci/item_action_slot_check(slot)
- if(slot == SLOT_HUD_GLASSES)
+ if(slot == ITEM_SLOT_EYES)
return TRUE
/obj/item/clothing/glasses/hud/tajblind/med
@@ -101,7 +101,7 @@
hud_types = DATA_HUD_MEDICAL_ADVANCED
examine_extensions = list(EXAMINE_HUD_MEDICAL_READ)
-/obj/item/clothing/glasses/hud/tajblind/med/Initialize()
+/obj/item/clothing/glasses/hud/tajblind/med/Initialize(mapload)
. = ..()
desc += "
It has a health HUD integrated into it."
@@ -112,7 +112,7 @@
hud_types = DATA_HUD_SECURITY_ADVANCED
examine_extensions = list(EXAMINE_HUD_SECURITY_READ)
-/obj/item/clothing/glasses/hud/tajblind/sec/Initialize()
+/obj/item/clothing/glasses/hud/tajblind/sec/Initialize(mapload)
. = ..()
desc += "
It has a security HUD integrated into it."
@@ -121,7 +121,7 @@
flash_protect = FLASH_PROTECTION_FLASH
tint = FLASH_PROTECTION_FLASH
-/obj/item/clothing/glasses/hud/tajblind/shaded/Initialize()
+/obj/item/clothing/glasses/hud/tajblind/shaded/Initialize(mapload)
. = ..()
desc += "
It has an in-built flash protection."
@@ -130,13 +130,13 @@
icon_state = "tajblind_engi"
item_state = "tajblind_engi"
-/obj/item/clothing/glasses/hud/tajblind/shaded/meson/Initialize()
+/obj/item/clothing/glasses/hud/tajblind/shaded/meson/Initialize(mapload)
. = ..()
desc += "
It has an optical meson scanner integrated into it."
/obj/item/clothing/glasses/hud/tajblind/shaded/meson/equipped(mob/user, slot, initial)
. = ..()
- if(slot == SLOT_HUD_GLASSES)
+ if(slot == ITEM_SLOT_EYES)
ADD_TRAIT(user, TRAIT_MESON_VISION, "meson_glasses[UID()]")
/obj/item/clothing/glasses/hud/tajblind/shaded/meson/dropped(mob/user)
@@ -157,12 +157,12 @@
scan_reagents = 1
actions_types = list(/datum/action/item_action/toggle, /datum/action/item_action/toggle_research_scanner)
-/obj/item/clothing/glasses/hud/tajblind/shaded/sci/Initialize()
+/obj/item/clothing/glasses/hud/tajblind/shaded/sci/Initialize(mapload)
. = ..()
desc += "
It has science goggles integrated into it."
/obj/item/clothing/glasses/hud/tajblind/shaded/sci/item_action_slot_check(slot)
- if(slot == SLOT_HUD_GLASSES)
+ if(slot == ITEM_SLOT_EYES)
return TRUE
/obj/item/clothing/glasses/hud/tajblind/shaded/med
@@ -172,7 +172,7 @@
hud_types = DATA_HUD_MEDICAL_ADVANCED
examine_extensions = list(EXAMINE_HUD_MEDICAL_READ)
-/obj/item/clothing/glasses/hud/tajblind/shaded/med/Initialize()
+/obj/item/clothing/glasses/hud/tajblind/shaded/med/Initialize(mapload)
. = ..()
desc += "
It has a health HUD integrated into it."
@@ -184,7 +184,7 @@
hud_types = DATA_HUD_SECURITY_ADVANCED
examine_extensions = list(EXAMINE_HUD_SECURITY_READ)
-/obj/item/clothing/glasses/hud/tajblind/shaded/sec/Initialize()
+/obj/item/clothing/glasses/hud/tajblind/shaded/sec/Initialize(mapload)
. = ..()
desc += "
It has a security HUD integrated into it."
diff --git a/code/modules/clothing/gloves/boxing_gloves.dm b/code/modules/clothing/gloves/boxing_gloves.dm
index b7b38b1c698d..2c2ab0f724be 100644
--- a/code/modules/clothing/gloves/boxing_gloves.dm
+++ b/code/modules/clothing/gloves/boxing_gloves.dm
@@ -7,14 +7,14 @@
species_exception = list(/datum/species/golem) // now you too can be a golem boxing champion
var/datum/martial_art/boxing/style
-/obj/item/clothing/gloves/boxing/Initialize()
+/obj/item/clothing/gloves/boxing/Initialize(mapload)
. = ..()
style = new()
/obj/item/clothing/gloves/boxing/equipped(mob/user, slot)
if(!ishuman(user))
return
- if(slot == SLOT_HUD_GLOVES)
+ if(slot == ITEM_SLOT_GLOVES)
var/mob/living/carbon/human/H = user
style.teach(H, TRUE)
@@ -23,7 +23,7 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(SLOT_HUD_GLOVES) == src)
+ if(H.get_item_by_slot(ITEM_SLOT_GLOVES) == src)
style.remove(H)
/obj/item/clothing/gloves/boxing/green
diff --git a/code/modules/clothing/gloves/misc_gloves.dm b/code/modules/clothing/gloves/misc_gloves.dm
index 8e5b97724fee..3cc42d232840 100644
--- a/code/modules/clothing/gloves/misc_gloves.dm
+++ b/code/modules/clothing/gloves/misc_gloves.dm
@@ -19,7 +19,7 @@
/obj/item/clothing/gloves/cyborg
name = "cyborg gloves"
- desc = "beep boop borp"
+ desc = "beep boop borp."
icon_state = "black"
item_state = "r_hands"
@@ -107,13 +107,6 @@
transfer_prints = TRUE
clipped = TRUE
-/obj/item/clothing/gloves/batmangloves
- name = "batgloves"
- desc = "Used for handling all things bat related."
- icon_state = "bmgloves"
- item_state = "bmgloves"
- item_color="bmgloves"
-
/obj/item/clothing/gloves/cursedclown
name = "cursed white gloves"
desc = "These things smell terrible, and they're all lumpy. Gross."
diff --git a/code/modules/clothing/gloves/rings.dm b/code/modules/clothing/gloves/rings.dm
index ed180788bc94..aa64d1ca9f37 100644
--- a/code/modules/clothing/gloves/rings.dm
+++ b/code/modules/clothing/gloves/rings.dm
@@ -1,6 +1,6 @@
/obj/item/clothing/gloves/ring
name = "iron ring"
- desc = "A band that goes around your finger. It's considered gauche to wear more than one."
+ desc = "A band that goes around your finger. It's considered gauche to wear more than one."
gender = "neuter" // not plural anymore
transfer_prints = TRUE
icon_state = "ironring"
diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm
index 0c9fecac6db1..dd507502224d 100644
--- a/code/modules/clothing/head/collectable.dm
+++ b/code/modules/clothing/head/collectable.dm
@@ -7,7 +7,7 @@
/obj/item/clothing/head/collectable/petehat
name = "ultra rare Pete's hat!"
- desc = "It smells faintly of plasma"
+ desc = "It smells faintly of plasma."
icon_state = "petehat"
/obj/item/clothing/head/collectable/slime
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index b24eff63868a..848651f2b1b6 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -58,7 +58,7 @@
/obj/item/clothing/head/helmet/meson/equipped(mob/user, slot, initial)
. = ..()
- if(slot == SLOT_HUD_HEAD)
+ if(slot == ITEM_SLOT_HEAD)
ADD_TRAIT(user, TRAIT_MESON_VISION, "meson_helmet[UID()]")
/obj/item/clothing/head/helmet/meson/dropped(mob/user)
diff --git a/code/modules/clothing/head/job_hats.dm b/code/modules/clothing/head/job_hats.dm
index 8f838090d58b..3ba0784ecfb9 100644
--- a/code/modules/clothing/head/job_hats.dm
+++ b/code/modules/clothing/head/job_hats.dm
@@ -4,7 +4,7 @@
name = "chef's hat"
desc = "The commander in chef's head wear."
icon_state = "chef"
- item_state = "chef"
+ item_state = "chefhat"
strip_delay = 10
put_on_delay = 10
dog_fashion = /datum/dog_fashion/head/chef
diff --git a/code/modules/clothing/head/misc_hats.dm b/code/modules/clothing/head/misc_hats.dm
index bc9ea7066eec..d8cb0d72d024 100644
--- a/code/modules/clothing/head/misc_hats.dm
+++ b/code/modules/clothing/head/misc_hats.dm
@@ -64,7 +64,7 @@
/obj/item/clothing/head/hasturhood
name = "hastur's hood"
- desc = "It's unspeakably stylish"
+ desc = "It's unspeakably stylish."
icon_state = "hasturhood"
flags = BLOCKHAIR
flags_cover = HEADCOVERSEYES
@@ -281,7 +281,7 @@
tip_fedora(user)
/obj/item/clothing/head/fedora/item_action_slot_check(slot)
- if(slot == SLOT_HUD_HEAD)
+ if(slot == ITEM_SLOT_HEAD)
return TRUE
/obj/item/clothing/head/fedora/proc/tip_fedora(mob/user)
@@ -411,7 +411,8 @@
/// Fluff?
/obj/item/clothing/head/beret/purple
name = "Pierson Family Beret"
- desc = " A purple beret, with a small golden crescent moon sewn onto it."
+ desc = "A purple beret, with a small golden crescent moon sewn onto it."
+ icon = 'icons/obj/clothing/hats.dmi'
icon_state = "beret_purple"
item_state = "purpleberet"
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index 524358e00dd8..41b8cd5ea052 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -201,7 +201,7 @@
/obj/item/clothing/head/kitty/equipped(mob/M, slot)
. = ..()
- if(ishuman(M) && slot == SLOT_HUD_HEAD)
+ if(ishuman(M) && slot == ITEM_SLOT_HEAD)
update_icon(NONE, M)
/obj/item/clothing/head/kitty/mouse
diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm
index a2ab2b3c63da..cab34dd939f1 100644
--- a/code/modules/clothing/masks/boxing.dm
+++ b/code/modules/clothing/masks/boxing.dm
@@ -1,6 +1,6 @@
/obj/item/clothing/mask/balaclava
name = "balaclava"
- desc = "LOADSAMONEY"
+ desc = "LOADSAMONEY!"
icon_state = "balaclava"
item_state = "balaclava"
flags = BLOCKHAIR
@@ -8,7 +8,7 @@
w_class = WEIGHT_CLASS_SMALL
can_toggle = TRUE
actions_types = list(/datum/action/item_action/adjust)
- adjusted_flags = SLOT_FLAG_HEAD
+ adjusted_flags = ITEM_SLOT_HEAD
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index 1181b593bcf8..db44cb387f9c 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -80,7 +80,7 @@
..()
w_class = up ? WEIGHT_CLASS_SMALL : WEIGHT_CLASS_NORMAL
-/obj/item/clothing/mask/gas/explorer/folded/Initialize()
+/obj/item/clothing/mask/gas/explorer/folded/Initialize(mapload)
. = ..()
force_adjust_mask()
@@ -220,7 +220,7 @@
/obj/item/clothing/mask/gas/cyborg
name = "cyborg visor"
- desc = "Beep boop"
+ desc = "Beep boop."
icon_state = "death"
resistance_flags = FLAMMABLE
diff --git a/code/modules/clothing/masks/misc_masks.dm b/code/modules/clothing/masks/misc_masks.dm
index 96e4145c63b3..df4684a5e5e0 100644
--- a/code/modules/clothing/masks/misc_masks.dm
+++ b/code/modules/clothing/masks/misc_masks.dm
@@ -223,52 +223,12 @@
pontificate(user)
/obj/item/clothing/mask/fakemoustache/item_action_slot_check(slot)
- if(slot == SLOT_HUD_WEAR_MASK)
+ if(slot == ITEM_SLOT_MASK)
return 1
/obj/item/clothing/mask/fakemoustache/proc/pontificate(mob/user)
user.visible_message("
\ [user] twirls [user.p_their()] moustache and laughs [pick("fiendishly","maniacally","diabolically","evilly")]!")
-//scarves (fit in in mask slot)
-
-/obj/item/clothing/mask/bluescarf
- name = "blue neck scarf"
- desc = "A blue neck scarf."
- icon_state = "blueneckscarf"
- item_state = "blueneckscarf"
- flags_cover = MASKCOVERSMOUTH
- w_class = WEIGHT_CLASS_SMALL
- gas_transfer_coefficient = 0.90
-
-
-/obj/item/clothing/mask/redscarf
- name = "red scarf"
- desc = "A red and white checkered neck scarf."
- icon_state = "redwhite_scarf"
- item_state = "redwhite_scarf"
- flags_cover = MASKCOVERSMOUTH
- w_class = WEIGHT_CLASS_SMALL
- gas_transfer_coefficient = 0.90
-
-/obj/item/clothing/mask/greenscarf
- name = "green scarf"
- desc = "A green neck scarf."
- icon_state = "green_scarf"
- item_state = "green_scarf"
- flags_cover = MASKCOVERSMOUTH
- w_class = WEIGHT_CLASS_SMALL
- gas_transfer_coefficient = 0.90
-
-/obj/item/clothing/mask/ninjascarf
- name = "ninja scarf"
- desc = "A stealthy, dark scarf."
- icon_state = "ninja_scarf"
- item_state = "ninja_scarf"
- flags_cover = MASKCOVERSMOUTH
- w_class = WEIGHT_CLASS_SMALL
- gas_transfer_coefficient = 0.90
-
-
/obj/item/clothing/mask/pig
name = "pig mask"
desc = "A rubber pig mask."
@@ -401,8 +361,8 @@
flags_inv = HIDEFACE
flags_cover = MASKCOVERSMOUTH
w_class = WEIGHT_CLASS_TINY
- slot_flags = SLOT_FLAG_MASK
- adjusted_flags = SLOT_FLAG_HEAD
+ slot_flags = ITEM_SLOT_MASK
+ adjusted_flags = ITEM_SLOT_HEAD
icon_state = "bandbotany"
dyeable = TRUE
dyeing_key = DYE_REGISTRY_BANDANA
@@ -475,7 +435,7 @@
/obj/item/clothing/mask/bandana/durathread
name = "durathread bandana"
- desc = "A bandana made from durathread, you wish it would provide some protection to its wearer, but it's far too thin..."
+ desc = "A bandana made from durathread, you wish it would provide some protection to its wearer, but it's far too thin..."
icon_state = "banddurathread"
/obj/item/clothing/mask/false_cluwne_mask
@@ -506,7 +466,7 @@
/obj/item/clothing/mask/cursedclown/equipped(mob/user, slot)
..()
var/mob/living/carbon/human/H = user
- if(istype(H) && slot == SLOT_HUD_WEAR_MASK)
+ if(istype(H) && slot == ITEM_SLOT_MASK)
to_chat(H, "
[src] grips your face!")
if(H.mind && H.mind.assigned_role != "Cluwne")
H.makeCluwne()
diff --git a/code/modules/clothing/masks/voicemodulator.dm b/code/modules/clothing/masks/voicemodulator.dm
index c05a17aeab13..665ef58fe45b 100644
--- a/code/modules/clothing/masks/voicemodulator.dm
+++ b/code/modules/clothing/masks/voicemodulator.dm
@@ -1,6 +1,6 @@
/obj/item/clothing/mask/gas/voice_modulator
name = "modified gas mask"
- desc = "A gas mask modified with a sound modulator that disguises the user's voice when active"
+ desc = "A gas mask modified with a sound modulator that disguises the user's voice when active."
icon_state = "voice_modulator"
item_state = "voice_modulator"
@@ -16,7 +16,7 @@
/obj/item/clothing/mask/gas/voice_modulator/chameleon
name = "chameleon voice modulator mask"
- desc = "A tactical mask equipped with chameleon technology and a sound modulator that disguises the user's voice when active"
+ desc = "A tactical mask equipped with chameleon technology and a sound modulator that disguises the user's voice when active."
icon_state = "swat"
item_state = "swat"
diff --git a/code/modules/clothing/patreon/hats.dm b/code/modules/clothing/patreon/hats.dm
index 359b85baffa7..ec5ed1765399 100644
--- a/code/modules/clothing/patreon/hats.dm
+++ b/code/modules/clothing/patreon/hats.dm
@@ -53,7 +53,7 @@
//black sombrero
/obj/item/clothing/head/fluff/blacksombrero
name = "Black sombrero"
- desc = "A rare identifying hat of the infamous ancient renegade gang known as 'El Loco Pocos'"
+ desc = "A rare identifying hat of the infamous ancient renegade gang known as 'El Loco Pocos'."
icon_state = "blacksombrero"
item_state = "blacksombrero"
flags = BLOCKHAIR
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index 337d97ca8315..6e36ba0d104f 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -8,7 +8,7 @@
strip_delay = 7 SECONDS
put_on_delay = 7 SECONDS
resistance_flags = FIRE_PROOF
-
+ no_slip = FALSE
var/magboot_state = "magboots"
var/magpulse = FALSE
var/slowdown_active = 2
@@ -24,7 +24,7 @@
/obj/item/clothing/shoes/magboots/equipped(mob/user, slot, initial)
. = ..()
- if(slot != SLOT_HUD_SHOES || !ishuman(user))
+ if(slot != ITEM_SLOT_SHOES || !ishuman(user))
return
check_mag_pulse(user)
@@ -42,7 +42,7 @@
REMOVE_TRAIT(user, TRAIT_NOSLIP, UID())
slowdown = slowdown_passive
else
- if(user.get_item_by_slot(SLOT_HUD_SHOES) == src)
+ if(user.get_item_by_slot(ITEM_SLOT_SHOES) == src)
ADD_TRAIT(user, TRAIT_NOSLIP, UID())
slowdown = slowdown_active
magpulse = !magpulse
@@ -56,7 +56,7 @@
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtons()
- check_mag_pulse(user, removing = (user.get_item_by_slot(SLOT_HUD_SHOES) != src))
+ check_mag_pulse(user, removing = (user.get_item_by_slot(ITEM_SLOT_SHOES) != src))
/obj/item/clothing/shoes/magboots/proc/check_mag_pulse(mob/user, removing = FALSE)
if(!user)
@@ -144,7 +144,7 @@
/obj/item/clothing/shoes/magboots/clown/equipped(mob/user, slot)
. = ..()
- if(slot == SLOT_HUD_SHOES && enabled_waddle)
+ if(slot == ITEM_SLOT_SHOES && enabled_waddle)
user.AddElement(/datum/element/waddling)
/obj/item/clothing/shoes/magboots/clown/dropped(mob/user)
@@ -208,7 +208,7 @@
var/obj/item/assembly/signaler/anomaly/grav/core = null
var/obj/item/stock_parts/cell/cell = null
-/obj/item/clothing/shoes/magboots/gravity/Initialize()
+/obj/item/clothing/shoes/magboots/gravity/Initialize(mapload)
. = ..()
style = new()
@@ -302,7 +302,7 @@
..()
if(!ishuman(user))
return
- if(slot == SLOT_HUD_SHOES && cell && core)
+ if(slot == ITEM_SLOT_SHOES && cell && core)
style.teach(user, TRUE)
/obj/item/clothing/shoes/magboots/gravity/dropped(mob/user)
@@ -310,14 +310,14 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(SLOT_HUD_SHOES) == src)
+ if(H.get_item_by_slot(ITEM_SLOT_SHOES) == src)
style.remove(H)
if(magpulse)
to_chat(user, "
As [src] are removed, they deactivate.")
toggle_magpulse(user, TRUE)
/obj/item/clothing/shoes/magboots/gravity/item_action_slot_check(slot)
- if(slot == SLOT_HUD_SHOES)
+ if(slot == ITEM_SLOT_SHOES)
return TRUE
/obj/item/clothing/shoes/magboots/gravity/proc/dash(mob/user, action)
@@ -341,11 +341,12 @@
return
var/atom/target = get_edge_target_turf(user, user.dir) //gets the user's direction
+ ADD_TRAIT(user, TRAIT_FLYING, "gravity_boots")
if(user.throw_at(target, jumpdistance, jumpspeed, spin = FALSE, diagonals_first = TRUE, callback = CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(callback_remove_trait), user, TRAIT_FLYING, "gravity_boots")))
- ADD_TRAIT(user, TRAIT_FLYING, "gravity_boots")
playsound(src, 'sound/effects/stealthoff.ogg', 50, TRUE, 1)
user.visible_message("
[usr] dashes forward into the air!")
recharging_time = world.time + recharging_rate
cell.use(dash_cost)
else
+ REMOVE_TRAIT(user, TRAIT_FLYING, "gravity_boots")
to_chat(user, "
Something prevents you from dashing forward!")
diff --git a/code/modules/clothing/shoes/misc_shoes.dm b/code/modules/clothing/shoes/misc_shoes.dm
index eb4cb5436ab5..e0a1ac06e51b 100644
--- a/code/modules/clothing/shoes/misc_shoes.dm
+++ b/code/modules/clothing/shoes/misc_shoes.dm
@@ -103,7 +103,7 @@
/obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot)
. = ..()
- if(slot == SLOT_HUD_SHOES && enabled_waddle)
+ if(slot == ITEM_SLOT_SHOES && enabled_waddle)
user.AddElement(/datum/element/waddling)
/obj/item/clothing/shoes/clown_shoes/dropped(mob/user)
@@ -154,7 +154,7 @@
var/recharging_time = 0
/obj/item/clothing/shoes/clown_shoes/slippers/item_action_slot_check(slot, mob/user)
- if(slot == SLOT_HUD_SHOES)
+ if(slot == ITEM_SLOT_SHOES)
return TRUE
/obj/item/clothing/shoes/clown_shoes/slippers/proc/slide_one(mob/living/user, progress, prev_dir , prev_flags)
@@ -265,7 +265,7 @@
/obj/item/clothing/shoes/cyborg
name = "cyborg boots"
- desc = "Shoes for a cyborg costume"
+ desc = "Shoes for a cyborg costume."
icon_state = "boots"
dyeable = FALSE
@@ -390,7 +390,7 @@
/obj/item/clothing/shoes/cowboy/black
name = "black cowboy boots"
- desc = "A pair a' black rustlers' boots"
+ desc = "A pair a' black rustlers' boots."
icon_state = "cowboy_black"
item_color = "cowboy_black"
@@ -425,7 +425,7 @@
/obj/effect/spawner/lootdrop/lizardboots
name = "random lizard boot quality"
- desc = "Which ever gets picked, the lizard race loses"
+ desc = "Which ever gets picked, the lizard race loses."
icon = 'icons/obj/clothing/shoes.dmi'
icon_state = "lizardboots_green"
loot = list(
@@ -460,7 +460,7 @@
var/recharging_time = 0 //time until next dash
/obj/item/clothing/shoes/bhop/item_action_slot_check(slot)
- if(slot == SLOT_HUD_SHOES)
+ if(slot == ITEM_SLOT_SHOES)
return TRUE
/obj/item/clothing/shoes/bhop/ui_action_click(mob/user, action)
@@ -472,12 +472,13 @@
return
var/atom/target = get_edge_target_turf(user, user.dir) //gets the user's direction
+ ADD_TRAIT(user, TRAIT_FLYING, "bhop_shoes")
if(user.throw_at(target, jumpdistance, jumpspeed, spin = FALSE, diagonals_first = TRUE, callback = CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(callback_remove_trait), user, TRAIT_FLYING, "bhop_shoes")))
- ADD_TRAIT(user, TRAIT_FLYING, "bhop_shoes")
playsound(src, 'sound/effects/stealthoff.ogg', 50, TRUE, 1)
user.visible_message("
[usr] dashes forward into the air!")
recharging_time = world.time + recharging_rate
else
+ REMOVE_TRAIT(user, TRAIT_FLYING, "bhop_shoes")
to_chat(user, "
Something prevents you from dashing forward!")
/obj/item/clothing/shoes/ducky
diff --git a/code/modules/clothing/spacesuits/alien_suits.dm b/code/modules/clothing/spacesuits/alien_suits.dm
index d38a9944f255..159b011cc96a 100644
--- a/code/modules/clothing/spacesuits/alien_suits.dm
+++ b/code/modules/clothing/spacesuits/alien_suits.dm
@@ -32,6 +32,7 @@
//Unathi space gear. Huge and restrictive.
/obj/item/clothing/head/helmet/space/unathi
icon = 'icons/obj/clothing/species/unathi/hats.dmi'
+ icon_state = null
species_restricted = list("Unathi")
sprite_sheets = list(
"Unathi" = 'icons/mob/clothing/species/unathi/helmet.dmi'
@@ -46,6 +47,7 @@
/obj/item/clothing/suit/space/unathi
icon = 'icons/obj/clothing/species/unathi/suits.dmi'
+ icon_state = null
species_restricted = list("Unathi")
sprite_sheets = list(
"Unathi" = 'icons/mob/clothing/species/unathi/suit.dmi'
@@ -81,6 +83,7 @@
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
dyeable = FALSE
icon = 'icons/obj/clothing/species/vox/suits.dmi'
+ icon_state = null
species_restricted = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi')
@@ -90,6 +93,7 @@
flags = STOPSPRESSUREDMAGE
flags_cover = HEADCOVERSEYES
icon = 'icons/obj/clothing/species/vox/hats.dmi'
+ icon_state = null
species_restricted = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/head.dmi')
diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm
index b8140922a33e..5cf6a5446c59 100644
--- a/code/modules/clothing/spacesuits/chronosuit.dm
+++ b/code/modules/clothing/spacesuits/chronosuit.dm
@@ -20,7 +20,7 @@
/obj/item/clothing/suit/space/chronos
name = "chronosuit"
- desc = "An advanced spacesuit equipped with teleportation and anti-compression technology"
+ desc = "An advanced spacesuit equipped with teleportation and anti-compression technology."
icon_state = "chronosuit"
item_state = "chronosuit"
actions_types = list(/datum/action/item_action/toggle)
diff --git a/code/modules/clothing/spacesuits/ert_hardsuits.dm b/code/modules/clothing/spacesuits/ert_hardsuits.dm
index 84961e9cd940..db21c8f4efbd 100644
--- a/code/modules/clothing/spacesuits/ert_hardsuits.dm
+++ b/code/modules/clothing/spacesuits/ert_hardsuits.dm
@@ -21,7 +21,7 @@
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/helmet.dmi'
)
-/obj/item/clothing/head/helmet/space/hardsuit/ert/Initialize()
+/obj/item/clothing/head/helmet/space/hardsuit/ert/Initialize(mapload)
if(loc)
var/mob/living/carbon/human/wearer = loc.loc //loc is the hardsuit, so its loc is the wearer
if(ishuman(wearer))
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index c4e7304ed4c9..2043bdd69e06 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -2,7 +2,7 @@
/obj/item/clothing/head/helmet/space/hardsuit
name = "hardsuit helmet"
desc = "A special helmet designed for work in a hazardous, low-pressure environment."
- icon_state = "hardsuit0-engineering"
+ icon_state = null
item_state = "eng_helm"
max_integrity = 300
armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 5, RAD = 150, FIRE = 50, ACID = 150)
@@ -81,12 +81,12 @@
soundloop.stop(user)
/obj/item/clothing/head/helmet/space/hardsuit/item_action_slot_check(slot)
- if(slot == SLOT_HUD_HEAD)
+ if(slot == ITEM_SLOT_HEAD)
return 1
/obj/item/clothing/head/helmet/space/hardsuit/equipped(mob/user, slot)
..()
- if(slot != SLOT_HUD_HEAD)
+ if(slot != ITEM_SLOT_HEAD)
if(suit)
suit.RemoveHelmet()
soundloop.stop(user)
@@ -143,7 +143,7 @@
/obj/item/clothing/suit/space/hardsuit
name = "hardsuit"
desc = "A special space suit for environments that might pose hazards beyond just the vacuum of space. Provides more protection than a standard space suit."
- icon_state = "hardsuit-engineering"
+ icon_state = null
item_state = "eng_hardsuit"
max_integrity = 300
armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 5, RAD = 150, FIRE = 50, ACID = 150)
@@ -201,7 +201,7 @@
if(jetpack)
to_chat(user, "
[src] already has a jetpack installed.")
return
- if(src == user.get_item_by_slot(SLOT_HUD_OUTER_SUIT)) //Make sure the player is not wearing the suit before applying the upgrade.
+ if(src == user.get_item_by_slot(ITEM_SLOT_OUTER_SUIT)) //Make sure the player is not wearing the suit before applying the upgrade.
to_chat(user, "
You cannot install the upgrade to [src] while wearing it.")
return
@@ -219,7 +219,7 @@
if(!jetpack)
to_chat(user, "
[src] has no jetpack installed.")
return
- if(src == user.get_item_by_slot(SLOT_HUD_OUTER_SUIT))
+ if(src == user.get_item_by_slot(ITEM_SLOT_OUTER_SUIT))
to_chat(user, "
You cannot remove the jetpack from [src] while wearing it.")
return
jetpack.turn_off(user)
@@ -229,10 +229,10 @@
/obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot)
..()
- if(helmettype && slot != SLOT_HUD_OUTER_SUIT)
+ if(helmettype && slot != ITEM_SLOT_OUTER_SUIT)
RemoveHelmet()
if(jetpack)
- if(slot == SLOT_HUD_OUTER_SUIT)
+ if(slot == ITEM_SLOT_OUTER_SUIT)
for(var/X in jetpack.actions)
var/datum/action/A = X
A.Grant(user)
@@ -246,7 +246,7 @@
A.Remove(user)
/obj/item/clothing/suit/space/hardsuit/item_action_slot_check(slot)
- if(slot == SLOT_HUD_OUTER_SUIT) //we only give the mob the ability to toggle the helmet if he's wearing the hardsuit.
+ if(slot == ITEM_SLOT_OUTER_SUIT) //we only give the mob the ability to toggle the helmet if he's wearing the hardsuit.
return 1
/obj/item/clothing/suit/space/hardsuit/on_mob_move(dir, mob/mob)
@@ -451,37 +451,37 @@
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/soviet/commander
//Security
-/obj/item/clothing/head/helmet/space/hardsuit/security
- name = "security hardsuit helmet"
- 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"
- armor = list(MELEE = 25, BULLET = 10, LASER = 20, ENERGY = 5, BOMB = 5, RAD = 50, FIRE = 150, ACID = 150)
-
-/obj/item/clothing/suit/space/hardsuit/security
- name = "security hardsuit"
- desc = "A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
- icon_state = "hardsuit-sec"
- item_state = "sec_hardsuit"
- armor = list(MELEE = 25, BULLET = 10, LASER = 20, ENERGY = 5, BOMB = 5, RAD = 50, FIRE = 150, ACID = 150)
- allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank/internals,/obj/item/melee/baton,/obj/item/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/restraints/handcuffs)
- helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security
-
-/obj/item/clothing/head/helmet/space/hardsuit/security/hos
- 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"
- armor = list(MELEE = 40, BULLET = 15, LASER = 20, ENERGY = 5, BOMB = 15, RAD = 50, FIRE = INFINITY, ACID = INFINITY)
-
-/obj/item/clothing/suit/space/hardsuit/security/hos
- name = "head of security's hardsuit"
- desc = "A special bulky suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
- icon_state = "hardsuit-hos"
- armor = list(MELEE = 40, BULLET = 15, LASER = 20, ENERGY = 5, BOMB = 15, RAD = 50, FIRE = INFINITY, ACID = INFINITY)
- helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos
- jetpack = /obj/item/tank/jetpack/suit
+// /obj/item/clothing/head/helmet/space/hardsuit/security
+// name = "security hardsuit helmet"
+// 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"
+// armor = list(MELEE = 25, BULLET = 10, LASER = 20, ENERGY = 5, BOMB = 5, RAD = 50, FIRE = 150, ACID = 150)
+
+// /obj/item/clothing/suit/space/hardsuit/security
+// name = "security hardsuit"
+// desc = "A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
+// icon_state = "hardsuit-sec"
+// item_state = "sec_hardsuit"
+// armor = list(MELEE = 25, BULLET = 10, LASER = 20, ENERGY = 5, BOMB = 5, RAD = 50, FIRE = 150, ACID = 150)
+// allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank/internals,/obj/item/melee/baton,/obj/item/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/restraints/handcuffs)
+// helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security
+
+// /obj/item/clothing/head/helmet/space/hardsuit/security/hos
+// 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"
+// armor = list(MELEE = 40, BULLET = 15, LASER = 20, ENERGY = 5, BOMB = 15, RAD = 50, FIRE = INFINITY, ACID = INFINITY)
+
+// /obj/item/clothing/suit/space/hardsuit/security/hos
+// name = "head of security's hardsuit"
+// desc = "A special bulky suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
+// icon_state = "hardsuit-hos"
+// armor = list(MELEE = 40, BULLET = 15, LASER = 20, ENERGY = 5, BOMB = 15, RAD = 50, FIRE = INFINITY, ACID = INFINITY)
+// helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos
+// jetpack = /obj/item/tank/jetpack/suit
//Singuloth armor
diff --git a/code/modules/clothing/spacesuits/misc_spacesuits.dm b/code/modules/clothing/spacesuits/misc_spacesuits.dm
index 202b89711c94..c07d9b472911 100644
--- a/code/modules/clothing/spacesuits/misc_spacesuits.dm
+++ b/code/modules/clothing/spacesuits/misc_spacesuits.dm
@@ -14,7 +14,7 @@
)
/obj/item/clothing/head/helmet/space/capspace/equipped(mob/living/carbon/human/user, slot)
- if(ishuman(user) && slot == SLOT_HUD_HEAD)
+ if(ishuman(user) && slot == ITEM_SLOT_HEAD)
if(isvox(user))
if(flags & BLOCKHAIR)
flags &= ~BLOCKHAIR
diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm
index 500a1f000a8f..632f9838974a 100644
--- a/code/modules/clothing/spacesuits/plasmamen.dm
+++ b/code/modules/clothing/spacesuits/plasmamen.dm
@@ -288,3 +288,69 @@
desc = "A plasmaman envirohelm designed by Space Cola Co for the plasmamen."
icon_state = "coke_envirohelm"
item_state = "coke_envirohelm"
+
+/obj/item/clothing/head/helmet/space/plasmaman/tacticool
+ name = "diver envirosuit helmet"
+ desc = "A plasmaman helm resembling old diver helms."
+ icon_state = "diver_envirohelm"
+ base_icon_state = "diver_envirohelm"
+ item_state = "diver_envirohelm"
+ /// Different icons and names for the helm to use when reskinning
+ var/list/static/plasmaman_helm_options = list("Diver" = "diver_envirohelm", "Knight" = "knight_envirohelm", "Skull" = "skull_envirohelm")
+ /// Checks if the helm has been reskinned already
+ var/reskinned = FALSE
+
+/obj/item/clothing/head/helmet/space/plasmaman/tacticool/examine(mob/user)
+ . = ..()
+ if(!reskinned)
+ . += "
You can Alt-Click to reskin it."
+
+/obj/item/clothing/head/helmet/space/plasmaman/tacticool/AltClick(mob/user)
+ ..()
+ if(HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
+ to_chat(user, "
You can't do that right now!")
+ return
+ if(reskin_radial_check(user) && !reskinned)
+ reskin(user)
+
+/obj/item/clothing/head/helmet/space/plasmaman/tacticool/update_icon_state()
+ if(!up)
+ icon_state = base_icon_state
+ else
+ icon_state = "[base_icon_state][on ? "-light":""]"
+ item_state = icon_state
+
+/obj/item/clothing/head/helmet/space/plasmaman/tacticool/proc/reskin(mob/M)
+ var/list/skins = list()
+ for(var/I in plasmaman_helm_options)
+ skins[I] = image(icon, icon_state = plasmaman_helm_options[I])
+ var/choice = show_radial_menu(M, src, skins, radius = 40, custom_check = CALLBACK(src, PROC_REF(reskin_radial_check), M), require_near = TRUE)
+
+ if(!choice || !reskin_radial_check(M))
+ return
+ switch(choice)
+ if("Diver")
+ name = initial(name)
+ desc = initial(desc)
+ base_icon_state = initial(base_icon_state)
+ if("Knight")
+ name = "knight envirosuit helmet"
+ desc = "A plasmaman envirohelm designed in the shape of a knight helm."
+ base_icon_state = "knight_envirohelm"
+ visor_icon = "knight_envisor"
+ if("Skull")
+ name = "skull envirosuit helmet"
+ desc = "A plasmaman envirohelm designed in the shape of a skull."
+ base_icon_state = "skull_envirohelm"
+ visor_icon = "skull_envisor"
+ update_icon()
+ M.update_inv_head()
+ reskinned = TRUE
+
+/obj/item/clothing/head/helmet/space/plasmaman/tacticool/proc/reskin_radial_check(mob/user)
+ if(!ishuman(user))
+ return FALSE
+ var/mob/living/carbon/human/H = user
+ if(!H.is_in_hands(src) || HAS_TRAIT(H, TRAIT_HANDS_BLOCKED))
+ return FALSE
+ return TRUE
diff --git a/code/modules/clothing/suits/armor_suits.dm b/code/modules/clothing/suits/armor_suits.dm
index 0ef37b03aa22..94c41cd423f4 100644
--- a/code/modules/clothing/suits/armor_suits.dm
+++ b/code/modules/clothing/suits/armor_suits.dm
@@ -532,7 +532,7 @@
/obj/item/clothing/suit/armor/reactive/fire/equipped(mob/user, slot)
..()
- if(slot != SLOT_HUD_OUTER_SUIT)
+ if(slot != ITEM_SLOT_OUTER_SUIT)
return
ADD_TRAIT(user, TRAIT_RESISTHEAT, "[UID()]")
@@ -559,7 +559,7 @@
/obj/item/clothing/suit/armor/reactive/cryo/equipped(mob/user, slot)
..()
- if(slot != SLOT_HUD_OUTER_SUIT)
+ if(slot != ITEM_SLOT_OUTER_SUIT)
return
ADD_TRAIT(user, TRAIT_RESISTCOLD, "[UID()]")
diff --git a/code/modules/clothing/suits/cardborg_suit.dm b/code/modules/clothing/suits/cardborg_suit.dm
index 9a7a214f13b3..324c2fb04c8a 100644
--- a/code/modules/clothing/suits/cardborg_suit.dm
+++ b/code/modules/clothing/suits/cardborg_suit.dm
@@ -192,7 +192,7 @@ CONTENTS:
*/
/obj/item/clothing/head/cardborg/equipped(mob/living/user, slot)
..()
- if(ishuman(user) && slot == SLOT_HUD_HEAD)
+ if(ishuman(user) && slot == ITEM_SLOT_HEAD)
var/mob/living/carbon/human/H = user
if(!istype(H.wear_suit, /obj/item/clothing/suit/cardborg))
return
@@ -205,14 +205,14 @@ CONTENTS:
/obj/item/clothing/suit/cardborg/equipped(mob/living/user, slot)
..()
- if(ishuman(user) && slot == SLOT_HUD_OUTER_SUIT)
+ if(ishuman(user) && slot == ITEM_SLOT_OUTER_SUIT)
var/mob/living/carbon/human/H = user
if(!istype(H.head, /obj/item/clothing/head/cardborg))
return
var/obj/item/clothing/head/cardborg/head = H.head
apply_borg_disguise(user, head)
-/obj/item/clothing/suit/cardborg/dropped(mob/living/user)
+/obj/item/clothing/suit/cardborg/dropped(mob/living/user)
..()
user.remove_alt_appearance("selected_borg_disguise")
diff --git a/code/modules/clothing/suits/hood.dm b/code/modules/clothing/suits/hood.dm
index 9deab56b0826..660911e7fe0a 100644
--- a/code/modules/clothing/suits/hood.dm
+++ b/code/modules/clothing/suits/hood.dm
@@ -29,11 +29,11 @@
ToggleHood()
/obj/item/clothing/suit/hooded/item_action_slot_check(slot, mob/user)
- if(slot == SLOT_HUD_OUTER_SUIT)
+ if(slot == ITEM_SLOT_OUTER_SUIT)
return 1
/obj/item/clothing/suit/hooded/equipped(mob/user, slot)
- if(slot != SLOT_HUD_OUTER_SUIT)
+ if(slot != ITEM_SLOT_OUTER_SUIT)
RemoveHood()
..()
@@ -65,7 +65,7 @@
if(H.head)
to_chat(H,"
You're already wearing something on your head!")
return
- else if(H.equip_to_slot_if_possible(hood, SLOT_HUD_HEAD, FALSE, FALSE))
+ else if(H.equip_to_slot_if_possible(hood, ITEM_SLOT_HEAD, FALSE, FALSE))
suit_adjusted = 1
icon_state = "[initial(icon_state)]_hood"
H.update_inv_wear_suit()
@@ -94,7 +94,7 @@
/obj/item/clothing/head/hooded/equipped(mob/user, slot)
..()
- if(slot != SLOT_HUD_HEAD)
+ if(slot != ITEM_SLOT_HEAD)
if(suit)
suit.RemoveHood()
else
diff --git a/code/modules/clothing/suits/misc_suits.dm b/code/modules/clothing/suits/misc_suits.dm
index 24590a05b18b..befeb45c78d6 100644
--- a/code/modules/clothing/suits/misc_suits.dm
+++ b/code/modules/clothing/suits/misc_suits.dm
@@ -90,7 +90,7 @@
/obj/item/clothing/suit/justice
name = "justice suit"
- desc = "this pretty much looks ridiculous"
+ desc = "This pretty much looks ridiculous."
icon_state = "justice"
item_state = "justice"
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -212,7 +212,7 @@
/obj/item/clothing/suit/monkeysuit
name = "monkey suit"
- desc = "A suit that looks like a primate"
+ desc = "A suit that looks like a primate."
icon_state = "monkeysuit"
item_state = "monkeysuit"
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HANDS
@@ -298,7 +298,7 @@
/obj/item/clothing/suit/hooded/carp_costume/dragon/equipped(mob/user, slot, initial)
. = ..()
- if(slot == SLOT_HUD_OUTER_SUIT)
+ if(slot == ITEM_SLOT_OUTER_SUIT)
user.faction += "carp"
to_chat(user, "
You feel a something gnash in the back of your mind- the carp are your friends, not your foe.")
playsound(loc, 'sound/weapons/bite.ogg', 35, TRUE)
@@ -697,7 +697,7 @@
/obj/item/clothing/suit/straight_jacket/equipped(mob/living/carbon/human/user, slot)
. = ..()
- if(slot == SLOT_HUD_OUTER_SUIT)
+ if(slot == ITEM_SLOT_OUTER_SUIT)
ADD_TRAIT(user, TRAIT_RESTRAINED, "straight_jacket")
/obj/item/clothing/suit/straight_jacket/dropped(mob/user, silent)
@@ -723,18 +723,6 @@
item_state = "leathercoat"
resistance_flags = FIRE_PROOF
-/obj/item/clothing/suit/browncoat
- name = "brown leather coat"
- desc = "A long, brown leather coat."
- icon_state = "browncoat"
- item_state = "browncoat"
-
-/obj/item/clothing/suit/neocoat
- name = "black coat"
- desc = "A flowing, black coat."
- icon_state = "neocoat"
- item_state = "neocoat"
-
/obj/item/clothing/suit/browntrenchcoat
name = "brown trench coat"
desc = "It makes you stand out. Just the opposite of why it's typically worn. Nice try trying to blend in while wearing it."
@@ -792,14 +780,6 @@
name = "white tracksuit"
icon_state = "trackjacketwhite_open"
-//actual suits
-
-/obj/item/clothing/suit/creamsuit
- name = "cream suit"
- desc = "A cream coloured, genteel suit."
- icon_state = "creamsuit"
- item_state = "creamsuit"
-
/obj/item/clothing/suit/jacket/miljacket
name = "olive military jacket"
desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. This one comes in olive."
@@ -1194,6 +1174,7 @@
/obj/item/clothing/suit/fluff/noble_coat
name = "noble coat"
desc = "The livid blues, purples and greens are awesome enough to evoke a visceral response in you; it is not dissimilar to indigestion."
+ icon = 'icons/obj/clothing/suits.dmi'
icon_state = "noble_coat"
item_state = "noble_coat"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
@@ -1275,7 +1256,7 @@
return ..()
/obj/item/clothing/suit/hooded/chaplain_hoodie/missionary_robe/equipped(mob/living/carbon/human/H, slot)
- if(!istype(H) || slot != SLOT_HUD_OUTER_SUIT)
+ if(!istype(H) || slot != ITEM_SLOT_OUTER_SUIT)
STOP_PROCESSING(SSobj, src)
return
else
diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm
index c6b4c1beb536..0e55e6ae647c 100644
--- a/code/modules/clothing/suits/toggles.dm
+++ b/code/modules/clothing/suits/toggles.dm
@@ -35,7 +35,7 @@
if(H.head)
to_chat(H, "
You're already wearing something on your head!")
return
- else if(H.equip_to_slot_if_possible(helmet, SLOT_HUD_HEAD, FALSE, FALSE))
+ else if(H.equip_to_slot_if_possible(helmet, ITEM_SLOT_HEAD, FALSE, FALSE))
to_chat(H, "
You engage the helmet on the hardsuit.")
suit_toggled = TRUE
H.update_inv_wear_suit()
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index 29c33bd0a46a..b99ea6d18af9 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -66,7 +66,7 @@
/obj/item/clothing/head/wizard/magus
name = "magus helm"
- desc = "A mysterious helmet that hums with an unearthly power"
+ desc = "A mysterious helmet that hums with an unearthly power."
icon_state = "magus"
item_state = "magus"
dog_fashion = /datum/dog_fashion/head/wizard/magus
@@ -134,13 +134,13 @@
/obj/item/clothing/suit/wizrobe/magusblue
name = "magus robe"
- desc = "A set of armoured robes that seem to radiate a dark power"
+ desc = "A set of armoured robes that seem to radiate a dark power."
icon_state = "magusblue"
item_state = "magusblue"
/obj/item/clothing/suit/wizrobe/magusred
name = "magus robe"
- desc = "A set of armoured robes that seem to radiate a dark power"
+ desc = "A set of armoured robes that seem to radiate a dark power."
icon_state = "magusred"
item_state = "magusred"
diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm
index 3ce5fb5e84d6..6a0a744a2851 100644
--- a/code/modules/clothing/under/accessories/accessory.dm
+++ b/code/modules/clothing/under/accessories/accessory.dm
@@ -5,7 +5,7 @@
icon_state = "bluetie"
item_state = "" //no inhands
item_color = "bluetie"
- slot_flags = SLOT_FLAG_TIE
+ slot_flags = ITEM_SLOT_ACCESSORY
w_class = WEIGHT_CLASS_SMALL
var/slot = ACCESSORY_SLOT_DECOR
var/obj/item/clothing/under/has_suit = null //the suit the tie may be attached to
@@ -417,7 +417,7 @@
desc = "This glowing blue badge marks the holder as THE LAW."
icon_state = "holobadge"
item_color = "holobadge"
- slot_flags = SLOT_FLAG_BELT | SLOT_FLAG_TIE
+ slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_ACCESSORY
var/stored_name = null
@@ -605,7 +605,7 @@
icon_state = "necklace"
item_state = "necklace"
item_color = "necklace"
- slot_flags = SLOT_FLAG_TIE
+ slot_flags = ITEM_SLOT_ACCESSORY
/obj/item/clothing/accessory/necklace/long
name = "large necklace"
@@ -646,7 +646,7 @@
icon_state = "locketgold"
item_state = "locketgold"
item_color = "locketgold"
- slot_flags = SLOT_FLAG_TIE
+ slot_flags = ITEM_SLOT_ACCESSORY
var/base_icon
var/open
var/obj/item/held //Item inside locket.
diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm
index b7d8b8f6fa74..774304725e25 100644
--- a/code/modules/clothing/under/accessories/holster.dm
+++ b/code/modules/clothing/under/accessories/holster.dm
@@ -103,7 +103,7 @@
if(!holstered)
var/obj/item/gun/gun = user.get_active_hand()
if(!istype(gun))
- to_chat(user, "
You need your gun equiped to holster it.")
+ to_chat(user, "
You need your gun equipped to holster it.")
return
holster(gun, user)
else
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
index 56d82237590b..e21b8d523c8f 100644
--- a/code/modules/clothing/under/color.dm
+++ b/code/modules/clothing/under/color.dm
@@ -25,7 +25,7 @@
/obj/item/clothing/under/color/red/jersey,
/obj/item/clothing/under/color/blue/jersey,
/obj/item/clothing/under/color/white/enforcer)
- var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - excluded)
+ var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - typesof(/obj/item/clothing/under/color/jumpskirt) - excluded)
name = initial(C.name)
icon_state = initial(C.icon_state)
item_state = initial(C.item_state)
@@ -98,7 +98,7 @@
/obj/item/clothing/under/color/orange
name = "orange jumpsuit"
- desc = "Don't wear this near paranoid security officers"
+ desc = "Don't wear this near paranoid security officers."
icon_state = "orange"
item_state = "o_suit"
item_color = "orange"
@@ -306,7 +306,7 @@
/obj/item/clothing/under/color/rainbow
name = "rainbow"
- desc = "rainbow"
+ desc = "rainbow."
icon_state = "rainbow"
item_state = "rainbow"
item_color = "rainbow"
diff --git a/code/modules/clothing/under/costumes.dm b/code/modules/clothing/under/costumes.dm
index 8804b0d4d719..6e5a1ac15360 100644
--- a/code/modules/clothing/under/costumes.dm
+++ b/code/modules/clothing/under/costumes.dm
@@ -70,7 +70,7 @@
/obj/item/clothing/under/costume/mankini
name = "the mankini"
- desc = "No honest man would wear this abomination"
+ desc = "No honest man would wear this abomination."
icon_state = "mankini"
item_color = "mankini"
@@ -119,7 +119,7 @@
/obj/item/clothing/under/costume/pirate_rags
name = "pirate rags"
- desc = "an old ragged set of clothing"
+ desc = "an old ragged set of clothing."
icon_state = "piraterags"
item_state = "piraterags"
item_color = "piraterags"
@@ -135,6 +135,7 @@
/obj/item/clothing/under/psysuit
name = "dark undersuit"
desc = "A thick, layered grey undersuit lined with power cables. Feels a little like wearing an electrical storm."
+ icon = 'icons/obj/clothing/under/costumes.dmi'
icon_state = "psysuit"
item_state = "psysuit"
item_color = "psysuit"
@@ -199,7 +200,7 @@
/obj/item/clothing/under/costume/kilt
name = "kilt"
- desc = "Includes shoes and plaid"
+ desc = "Includes shoes and plaid."
icon_state = "kilt"
item_state = "kilt"
item_color = "kilt"
diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm
index fb08d4a7eef0..2228f7b40182 100644
--- a/code/modules/clothing/under/jobs/civilian.dm
+++ b/code/modules/clothing/under/jobs/civilian.dm
@@ -81,7 +81,7 @@
item_state = "clown"
item_color = "clown"
-/obj/item/clothing/under/rank/civilian/clown/Initialize()
+/obj/item/clothing/under/rank/civilian/clown/Initialize(mapload)
. = ..()
AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg' = 1), 50, falloff_exponent = 20) //die off quick please
diff --git a/code/modules/clothing/under/jobs/engineering_jumpsuits.dm b/code/modules/clothing/under/jobs/engineering_jumpsuits.dm
index 15adfb45ab6d..2a557d2ea12b 100644
--- a/code/modules/clothing/under/jobs/engineering_jumpsuits.dm
+++ b/code/modules/clothing/under/jobs/engineering_jumpsuits.dm
@@ -42,21 +42,21 @@
/obj/item/clothing/under/rank/engineering/atmospheric_technician/contortionist/equipped(mob/living/carbon/human/user, slot)
. = ..()
- if(slot != SLOT_HUD_JUMPSUIT)
+ if(slot != ITEM_SLOT_JUMPSUIT)
return
if(!user.ventcrawler)
user.ventcrawler = VENTCRAWLER_ALWAYS
/obj/item/clothing/under/rank/engineering/atmospheric_technician/contortionist/dropped(mob/living/carbon/human/user)
. = ..()
- if(user.get_item_by_slot(SLOT_HUD_JUMPSUIT) != src)
+ if(user.get_item_by_slot(ITEM_SLOT_JUMPSUIT) != src)
return
if(!user.get_int_organ(/obj/item/organ/internal/heart/gland/ventcrawling)) // This is such a snowflaky check
user.ventcrawler = VENTCRAWLER_NONE
/obj/item/clothing/under/rank/engineering/atmospheric_technician/contortionist/proc/check_clothing(mob/user as mob)
//Allowed to wear: glasses, shoes, gloves, pockets, mask, and jumpsuit (obviously)
- var/list/slot_must_be_empty = list(SLOT_HUD_BACK,SLOT_HUD_HANDCUFFED,SLOT_HUD_LEGCUFFED,SLOT_HUD_LEFT_HAND,SLOT_HUD_RIGHT_HAND,SLOT_HUD_BELT,SLOT_HUD_HEAD,SLOT_HUD_OUTER_SUIT)
+ var/list/slot_must_be_empty = list(ITEM_SLOT_BACK,ITEM_SLOT_HANDCUFFED,ITEM_SLOT_LEGCUFFED,ITEM_SLOT_LEFT_HAND,ITEM_SLOT_RIGHT_HAND,ITEM_SLOT_BELT,ITEM_SLOT_HEAD,ITEM_SLOT_OUTER_SUIT)
for(var/slot_id in slot_must_be_empty)
if(user.get_item_by_slot(slot_id))
to_chat(user,"
You can't fit inside while wearing \the [user.get_item_by_slot(slot_id)].")
diff --git a/code/modules/clothing/under/jobs/plasmamen/civilian_service.dm b/code/modules/clothing/under/jobs/plasmamen/civilian_service.dm
index ad986528c745..a11e17175869 100644
--- a/code/modules/clothing/under/jobs/plasmamen/civilian_service.dm
+++ b/code/modules/clothing/under/jobs/plasmamen/civilian_service.dm
@@ -126,3 +126,11 @@
icon_state = "coke_envirosuit"
item_state = "coke_envirosuit"
item_color = "coke_envirosuit"
+
+/obj/item/clothing/under/plasmaman/tacticool
+ name = "tactical envirosuit"
+ desc = "An envirosuit designed to be sleek and tactical, forged on unknown parts of Boron."
+ icon_state = "tacticool_envirosuit"
+ item_state = "tacticool_envirosuit"
+ item_color = "tacticool_envirosuit"
+ has_sensor = FALSE
diff --git a/code/modules/clothing/under/jobs/security_jumpsuits.dm b/code/modules/clothing/under/jobs/security_jumpsuits.dm
index 925d5bc7aeea..d92bf4123b6c 100644
--- a/code/modules/clothing/under/jobs/security_jumpsuits.dm
+++ b/code/modules/clothing/under/jobs/security_jumpsuits.dm
@@ -42,7 +42,7 @@
/obj/item/clothing/under/rank/security/officer/skirt
name = "security officer's jumpskirt"
- desc = "Standard feminine fashion for Security Officers. It's made of sturdier material than the standard jumpskirts."
+ desc = "Standard feminine fashion for Security Officers. It's made of sturdier material than the standard jumpskirts."
icon_state = "security_skirt"
item_state = "r_suit"
item_color = "security_skirt"
diff --git a/code/modules/clothing/under/misc_jumpsuits.dm b/code/modules/clothing/under/misc_jumpsuits.dm
index 3d2e48173b7e..680d3915fa52 100644
--- a/code/modules/clothing/under/misc_jumpsuits.dm
+++ b/code/modules/clothing/under/misc_jumpsuits.dm
@@ -26,7 +26,7 @@
/obj/item/clothing/under/misc/scratch
name = "white suit"
- desc = "A white suit, suitable for an excellent host"
+ desc = "A white suit, suitable for an excellent host."
icon_state = "scratch"
item_state = "scratch"
item_color = "scratch"
diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm
index 788e59583e81..6d85efc99e73 100644
--- a/code/modules/clothing/under/pants.dm
+++ b/code/modules/clothing/under/pants.dm
@@ -14,7 +14,7 @@
/obj/item/clothing/under/pants/equipped(mob/user, slot)
- if(ishuman(user) && slot == SLOT_HUD_JUMPSUIT)
+ if(ishuman(user) && slot == ITEM_SLOT_JUMPSUIT)
var/mob/living/carbon/human/H = user
if(H.undershirt != "Nude")
var/additional_body_parts = UPPER_TORSO|ARMS
diff --git a/code/modules/clothing/under/syndicate_jumpsuits.dm b/code/modules/clothing/under/syndicate_jumpsuits.dm
index 92c1c045d0bd..659bd6233283 100644
--- a/code/modules/clothing/under/syndicate_jumpsuits.dm
+++ b/code/modules/clothing/under/syndicate_jumpsuits.dm
@@ -24,7 +24,7 @@
/obj/item/clothing/under/syndicate/greyman
name = "greyman henley"
- desc = "Attire for someone who finds it hard to survive in the safest place known to man - urban environment "
+ desc = "Attire for someone who finds it hard to survive in the safest place known to man - urban environment."
icon_state = "greyman"
item_color = "greyman"
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 5, FIRE = 40, ACID = 35)
@@ -51,7 +51,7 @@
/obj/item/clothing/under/syndicate/silicon_cham/equipped(mob/user, slot, initial)
. = ..()
- if(slot == SLOT_HUD_JUMPSUIT)
+ if(slot == ITEM_SLOT_JUMPSUIT)
ADD_TRAIT(user, TRAIT_AI_UNTRACKABLE, "silicon_cham[UID()]")
user.set_invisible(SEE_INVISIBLE_LIVING)
to_chat(user, "
You feel a slight shiver as the cybernetic obfuscators activate.")
diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm
index f4b4cc6b1f95..e169c8c7c0e9 100644
--- a/code/modules/crafting/craft.dm
+++ b/code/modules/crafting/craft.dm
@@ -90,7 +90,7 @@
if(AM.flags_2 & HOLOGRAM_2)
continue
. += AM
- for(var/slot in list(SLOT_HUD_RIGHT_STORE, SLOT_HUD_LEFT_STORE))
+ for(var/slot in list(ITEM_SLOT_RIGHT_POCKET, ITEM_SLOT_LEFT_POCKET))
. += user.get_item_by_slot(slot)
diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm
index 59308ef3757c..72c69dca524d 100644
--- a/code/modules/customitems/item_defines.dm
+++ b/code/modules/customitems/item_defines.dm
@@ -100,8 +100,8 @@
/obj/item/fluff/tattoo_gun/elliot_cybernetic_tat/attack_self(mob/user as mob)
if(!used)
- var/ink_color = input("Please select an ink color.", "Tattoo Ink Color", rgb(tattoo_r, tattoo_g, tattoo_b)) as color|null
- if(ink_color && !(user.incapacitated() || used))
+ var/ink_color = tgui_input_color(user, "Please select an ink color.", "Tattoo Ink Color", rgb(tattoo_r, tattoo_g, tattoo_b))
+ if(!isnull(ink_color) && !(user.incapacitated() || used))
tattoo_r = color2R(ink_color)
tattoo_g = color2G(ink_color)
tattoo_b = color2B(ink_color)
@@ -150,7 +150,7 @@
force = 5
sharp = FALSE
flags = CONDUCT
- slot_flags = SLOT_FLAG_BELT
+ slot_flags = ITEM_SLOT_BELT
throwforce = 5
w_class = WEIGHT_CLASS_NORMAL
attack_verb = list("attacked", "slashed", "stabbed", "sliced")
@@ -186,7 +186,7 @@
/obj/item/clothing/glasses/sunglasses_fake/fluff/kaki
name = "broken thermonocle"
desc = "A weathered Vox thermonocle, doesn't seem to work anymore."
- icon_state = "thermoncle"
+ icon_state = "thermonocle"
/// Rapidvalj: Hakikarahiti
/obj/item/fluff/rapid_wheelchair_kit
@@ -216,6 +216,7 @@
name = "custom zippo"
desc = "A custom made zippo lighter."
icon = 'icons/obj/custom_items.dmi'
+ icon_state = null
/// GodOfOreos: Jason Conrad
/obj/item/lighter/zippo/fluff/purple
@@ -234,7 +235,7 @@
/// Duckchan: Rybys Romney
/obj/item/lighter/zippo/fluff/duckchan
name = "Monogrammed Zippo"
- desc = " A shiny purple zippo lighter, engraved with Rybys Romney and BuzzPing's name, with a festive green flame."
+ desc = "A shiny purple zippo lighter, engraved with Rybys Romney and BuzzPing's name, with a festive green flame."
icon_state = "zippo-duckchan"
item_state = "zippo-purple"
@@ -467,7 +468,7 @@
/// IK3I: Yakikatachi
/obj/item/fluff/k3_webbing_modkit
name = "webbing modkit"
- desc = "A modkit that can be used to turn certain vests and labcoats into lightweight webbing"
+ desc = "A modkit that can be used to turn certain vests and labcoats into lightweight webbing."
icon_state = "modkit"
w_class = 2
force = 0
@@ -660,7 +661,7 @@
/// MrFroztee: Stumpy
/obj/item/clothing/head/pirate/fluff/stumpy
name = "The Sobriety Skullcap"
- desc = "A hat suited for the king of the pirates"
+ desc = "A hat suited for the king of the pirates."
icon_state = "pirate"
item_state = "pirate"
@@ -832,7 +833,7 @@
/// Denthamos: Henry Grandpa Gadow
/obj/item/clothing/suit/fluff/supplymaster_jacket
name = "faded NT Supply Master's Coat"
- desc = "A faded leather overcoat bearing a worn out badge from the NAS Crescent on the shoulder, and a designation tag of Supply Master on the front. A tarnished gold nameplate says H.Gadow on it."
+ desc = "A faded leather overcoat bearing a worn out badge from the NAS Crescent on the shoulder, and a designation tag of Supply Master on the front. A tarnished gold nameplate says H.Gadow on it."
icon_state = "supplymaster_jacket_open"
item_state = "supplymaster_jacket_open"
ignore_suitadjust = 0
@@ -1137,7 +1138,7 @@
/obj/item/clothing/under/fluff/benjaminfallout
icon = 'icons/obj/custom_items.dmi'
name = "Pretzel's dress"
- desc = "A nice looking dress"
+ desc = "A nice looking dress."
icon_state = "fallout_dress"
item_state = "fallout_dress"
item_color = "fallout_dress"
@@ -1262,7 +1263,7 @@
/// sasanek12: Dar'Konr
/obj/item/clothing/mask/bandana/fluff/dar
name = "camo bandana"
- desc = "It's a worn-out bandana in camo paint"
+ desc = "It's a worn-out bandana in camo paint."
icon = 'icons/obj/custom_items.dmi'
icon_state = "bandcamo"
@@ -1360,7 +1361,7 @@
/obj/item/clothing/shoes/fluff/arachno_boots
name = "Arachno-Man boots"
- desc = "These boots were made for crawlin'"
+ desc = "These boots were made for crawlin'."
icon = 'icons/obj/custom_items.dmi'
icon_state = "superior_boots"
item_state = "superior_boots"
@@ -1555,7 +1556,7 @@
icon_state = "fethasnecklace"
item_state = "fethasnecklace"
item_color = "fethasnecklace"
- slot_flags = SLOT_FLAG_MASK | SLOT_FLAG_TIE
+ slot_flags = ITEM_SLOT_MASK | ITEM_SLOT_ACCESSORY
/// HugoLuman: Dan Martinez
/obj/item/bedsheet/fluff/hugosheet
@@ -1613,7 +1614,7 @@
var/obj/item/clothing/head/helmet/space/plasmaman/lf53_fluff/F = new(P.loc)
if(P == H.head)
H.unEquip(P, TRUE, TRUE)
- H.equip_to_slot(F, SLOT_HUD_HEAD, TRUE)
+ H.equip_to_slot(F, ITEM_SLOT_HEAD, TRUE)
H.update_inv_head()
qdel(P)
@@ -1689,7 +1690,7 @@
icon_state = "panzermedal"
item_state = "panzermedal"
item_color = "panzermedal"
- slot_flags = SLOT_FLAG_TIE
+ slot_flags = ITEM_SLOT_ACCESSORY
/// Sagrotter: Xann Zxiax
/obj/item/clothing/accessory/medal/fluff/XannZxiax
@@ -1699,7 +1700,7 @@
icon_state = "Xann_necklace"
item_state = "Xann_necklace"
item_color = "Xann_necklace"
- slot_flags = SLOT_FLAG_TIE
+ slot_flags = ITEM_SLOT_ACCESSORY
/// Rb303: Isthel Eisenwald
/obj/item/clothing/accessory/rbscarf
@@ -1770,6 +1771,7 @@
name = "fluff ring"
desc = "Someone forgot to set this fluff item's description, notify a coder!"
icon = 'icons/obj/custom_items.dmi'
+ icon_state = null
fluff_material = TRUE
/obj/item/clothing/gloves/ring/fluff/update_icon_state()
diff --git a/code/modules/detective_work/scanner.dm b/code/modules/detective_work/scanner.dm
index 94f44bbdbaee..6bb25918fee2 100644
--- a/code/modules/detective_work/scanner.dm
+++ b/code/modules/detective_work/scanner.dm
@@ -10,7 +10,7 @@
w_class = WEIGHT_CLASS_NORMAL
item_state = "electronic"
flags = CONDUCT | NOBLUDGEON
- slot_flags = SLOT_FLAG_BELT
+ slot_flags = ITEM_SLOT_BELT
origin_tech = "engineering=4;biotech=2;programming=5"
var/scanning = FALSE
var/list/log = list()
diff --git a/code/modules/economy/economy_machinery/account_terminal.dm b/code/modules/economy/economy_machinery/account_terminal.dm
index c9e0785bc852..d7485d3212db 100644
--- a/code/modules/economy/economy_machinery/account_terminal.dm
+++ b/code/modules/economy/economy_machinery/account_terminal.dm
@@ -17,7 +17,7 @@
///station account database
var/datum/money_account_database/account_db
-/obj/machinery/computer/account_database/Initialize()
+/obj/machinery/computer/account_database/Initialize(mapload)
. = ..()
reconnect_database()
diff --git a/code/modules/economy/economy_machinery/economy_machinery.dm b/code/modules/economy/economy_machinery/economy_machinery.dm
index 0124c769713d..31a7a1fb79d9 100644
--- a/code/modules/economy/economy_machinery/economy_machinery.dm
+++ b/code/modules/economy/economy_machinery/economy_machinery.dm
@@ -4,7 +4,7 @@
*/
/obj/machinery/economy
name = "Financial System Interface"
- desc = "A base economy machine"
+ desc = "A base economy machine."
anchored = TRUE
density = TRUE
diff --git a/code/modules/economy/merch_items.dm b/code/modules/economy/merch_items.dm
index 0854fa4ffed7..216c7791a521 100644
--- a/code/modules/economy/merch_items.dm
+++ b/code/modules/economy/merch_items.dm
@@ -13,7 +13,7 @@
/datum/merch_item/snap_pops
name = "Snap-Pops"
- desc = "Ten-thousand-year-old chinese fireworks: IN SPACE"
+ desc = "Ten-thousand-year-old chinese fireworks: IN SPACE!"
typepath = /obj/item/storage/box/snappops
cost = 100
category = MERCH_CAT_TOY
diff --git a/code/modules/events/blob/blob_structures/strong_blob.dm b/code/modules/events/blob/blob_structures/strong_blob.dm
index 7747686be6be..7d4a4346dc80 100644
--- a/code/modules/events/blob/blob_structures/strong_blob.dm
+++ b/code/modules/events/blob/blob_structures/strong_blob.dm
@@ -2,7 +2,7 @@
name = "strong blob"
icon = 'icons/mob/blob.dmi'
icon_state = "blob_shield"
- desc = "Some blob creature thingy"
+ desc = "Some blob creature thingy."
max_integrity = 150
brute_resist = 0.25
explosion_block = 3
diff --git a/code/modules/events/blob/theblob.dm b/code/modules/events/blob/theblob.dm
index 6cd12653f998..2ecee71c3065 100644
--- a/code/modules/events/blob/theblob.dm
+++ b/code/modules/events/blob/theblob.dm
@@ -8,7 +8,7 @@ GLOBAL_LIST_EMPTY(blob_minions)
name = "blob"
icon = 'icons/mob/blob.dmi'
light_range = 3
- desc = "Some blob creature thingy"
+ desc = "Some blob creature thingy."
density = FALSE
opacity = FALSE
anchored = TRUE
diff --git a/code/modules/events/meaty_ops.dm b/code/modules/events/meaty_ops.dm
deleted file mode 100644
index 0b669dc74dee..000000000000
--- a/code/modules/events/meaty_ops.dm
+++ /dev/null
@@ -1,15 +0,0 @@
-/datum/event/meteor_wave/goreop/announce()
- var/meteor_declaration = "MeteorOps have declared their intent to utterly destroy [station_name()] with their own bodies, and dares the crew to try and stop them."
- GLOB.major_announcement.Announce(meteor_declaration, "Declaration of 'War'", 'sound/effects/siren.ogg')
-
-/datum/event/meteor_wave/goreop/setup()
- waves = 3
-
-/datum/event/meteor_wave/goreop/get_meteor_count()
- return 5
-
-/datum/event/meteor_wave/goreop/get_meteors()
- return GLOB.meteors_ops
-
-/datum/event/meteor_wave/goreop/end()
- GLOB.minor_announcement.Announce("All MeteorOps are dead. Major Station Victory.", "MeteorOps")
diff --git a/code/modules/fish/fish_items.dm b/code/modules/fish/fish_items.dm
index 7e913f1b15ae..fe31a78edeb6 100644
--- a/code/modules/fish/fish_items.dm
+++ b/code/modules/fish/fish_items.dm
@@ -8,7 +8,7 @@
desc = "A small scoop to collect fish eggs with."
icon = 'icons/obj/fish_items.dmi'
icon_state = "egg_scoop"
- slot_flags = SLOT_FLAG_BELT
+ slot_flags = ITEM_SLOT_BELT
throwforce = 0
w_class = WEIGHT_CLASS_SMALL
throw_speed = 3
@@ -19,7 +19,7 @@
desc = "A tiny net to capture fish with. It's a death sentence!"
icon = 'icons/obj/fish_items.dmi'
icon_state = "net"
- slot_flags = SLOT_FLAG_BELT
+ slot_flags = ITEM_SLOT_BELT
throwforce = 0
w_class = WEIGHT_CLASS_SMALL
throw_speed = 3
@@ -44,7 +44,7 @@
desc = "A brush for cleaning the inside of aquariums. Contains a built-in odor neutralizer."
icon = 'icons/obj/fish_items.dmi'
icon_state = "brush"
- slot_flags = SLOT_FLAG_BELT
+ slot_flags = ITEM_SLOT_BELT
throwforce = 0
w_class = WEIGHT_CLASS_SMALL
throw_speed = 3
@@ -101,7 +101,7 @@
/obj/item/fish
name = "fish"
- desc = "A generic fish"
+ desc = "A generic fish."
icon = 'icons/obj/fish_items.dmi'
icon_state = "fish"
throwforce = 1
diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
index 7abc76af1982..cb932b6880c0 100644
--- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
@@ -273,7 +273,7 @@
/obj/item/reagent_containers/drinks/bottle/fernet
name = "Fernet Bronca"
- desc = "A bottle of pure Fernet Bronca, produced in Cordoba Space Station"
+ desc = "A bottle of pure Fernet Bronca, produced in Cordoba Space Station."
icon_state = "fernetbottle"
list_reagents = list("fernet" = 100)
diff --git a/code/modules/food_and_drinks/drinks/drinks/mugs.dm b/code/modules/food_and_drinks/drinks/drinks/mugs.dm
index 637ed8ec646d..f75698d53900 100644
--- a/code/modules/food_and_drinks/drinks/drinks/mugs.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/mugs.dm
@@ -143,7 +143,7 @@
/obj/item/reagent_containers/drinks/mug/rd
name = "research director's mug"
- desc = "Energy tech level: 99"
+ desc = "Energy tech level: 99."
icon_state = "mug_rd"
preset = TRUE
diff --git a/code/modules/food_and_drinks/drinks/drinks_base.dm b/code/modules/food_and_drinks/drinks/drinks_base.dm
index ba2b1905bbec..4574e56c9840 100644
--- a/code/modules/food_and_drinks/drinks/drinks_base.dm
+++ b/code/modules/food_and_drinks/drinks/drinks_base.dm
@@ -3,7 +3,7 @@
////////////////////////////////////////////////////////////////////////////////
/obj/item/reagent_containers/drinks
name = "drink"
- desc = "yummy"
+ desc = "yummy!"
icon = 'icons/obj/drinks.dmi'
icon_state = null
container_type = OPENCONTAINER
@@ -325,7 +325,7 @@
/obj/item/reagent_containers/drinks/flask/gold
name = "captain's flask"
- desc = "A gold flask belonging to the captain."
+ desc = "A regal flask belonging to the captain, with Nanotrasen's logo inlaid with pearl."
icon_state = "flask_gold"
materials = list(MAT_GOLD=500)
diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm
index d48707468de6..fc68d964b4e3 100644
--- a/code/modules/food_and_drinks/food/condiment.dm
+++ b/code/modules/food_and_drinks/food/condiment.dm
@@ -86,7 +86,7 @@
to_chat(user, "
You fill [src] with [trans] units of the contents of [target].")
//Something like a glass or a food item. Player probably wants to transfer TO it.
- else if(target.is_drainable() || istype(target, /obj/item/food))
+ else if(target.is_refillable() || istype(target, /obj/item/food))
if(!reagents.total_volume)
to_chat(user, "
[src] is empty!")
return
diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm
index c048f8c3fc8c..8546d186f4b7 100644
--- a/code/modules/food_and_drinks/food/customizables.dm
+++ b/code/modules/food_and_drinks/food/customizables.dm
@@ -196,7 +196,7 @@ do {\
/obj/item/food/customizable/candy/cotton
name = "flavored cotton candy"
- desc = "Who can take a sunrise, sprinkle it with dew,"
+ desc = "Who can take a sunrise, sprinkle it with dew."
icon_state = "cottoncandycustom"
baseicon = "cottoncandycustom"
basename = "flavored cotton candy"
@@ -205,7 +205,7 @@ do {\
/obj/item/food/customizable/candy/gummybear
name = "flavored giant gummy bear"
- desc = "Cover it in chocolate and a miracle or two,"
+ desc = "Cover it in chocolate and a miracle or two."
icon_state = "gummybearcustom"
baseicon = "gummybearcustom"
basename = "flavored giant gummy bear"
@@ -214,7 +214,7 @@ do {\
/obj/item/food/customizable/candy/gummyworm
name = "flavored giant gummy worm"
- desc = "The Candy Man can 'cause he mixes it with love,"
+ desc = "The Candy Man can 'cause he mixes it with love."
icon_state = "gummywormcustom"
baseicon = "gummywormcustom"
basename = "flavored giant gummy worm"
@@ -232,7 +232,7 @@ do {\
/obj/item/food/customizable/candy/jawbreaker
name = "flavored jawbreaker"
- desc = "Who can take a rainbow, Wrap it in a sigh,"
+ desc = "Who can take a rainbow, Wrap it in a sigh."
icon_state = "jawbreakercustom"
baseicon = "jawbreakercustom"
basename = "flavored jawbreaker"
@@ -241,7 +241,7 @@ do {\
/obj/item/food/customizable/candy/candycane
name = "flavored candy cane"
- desc = "Soak it in the sun and make strawberry-lemon pie,"
+ desc = "Soak it in the sun and make strawberry-lemon pie."
icon_state = "candycanecustom"
baseicon = "candycanecustom"
basename = "flavored candy cane"
@@ -266,15 +266,6 @@ do {\
snack_overlays = 0
top = 0
-/obj/item/food/customizable/candy/bar
- name = "flavored chocolate bar"
- desc = "Made in a factory downtown."
- icon_state = "barcustom"
- baseicon = "barcustom"
- basename = "flavored chocolate bar"
- snack_overlays = 0
- top = 0
-
/obj/item/food/customizable/candy/sucker
name = "flavored sucker"
desc = "Suck suck suck."
diff --git a/code/modules/food_and_drinks/food/foods/baked_goods.dm b/code/modules/food_and_drinks/food/foods/baked_goods.dm
index 2f3be77168f2..ae406f7f782b 100644
--- a/code/modules/food_and_drinks/food/foods/baked_goods.dm
+++ b/code/modules/food_and_drinks/food/foods/baked_goods.dm
@@ -228,7 +228,7 @@
/obj/item/food/birthdaycakeslice
name = "birthday cake slice"
- desc = "A slice of your birthday"
+ desc = "A slice of your birthday!"
icon = 'icons/obj/food/bakedgoods.dmi'
icon_state = "birthdaycakeslice"
trash = /obj/item/trash/plate
@@ -321,7 +321,7 @@
/obj/item/food/vanilla_berry_cake_slice
name = "blackberry and strawberry vanilla cake slice"
- desc = "Just a slice of cake filled with assortment of blackberries and strawberries!"
+ desc = "Just a slice of cake filled with assortment of blackberries and strawberries!"
icon = 'icons/obj/food/bakedgoods.dmi'
icon_state = "vanilla_berry_cake_slice"
trash = /obj/item/trash/plate
@@ -453,7 +453,7 @@
slices_num = 5
bitesize = 3
filling_color = "#610977"
- list_reagents = list("nutriment" = 20, "vitamin" = 10, "cream" = 5, "berryjuice", 5)
+ list_reagents = list("nutriment" = 20, "vitamin" = 10, "cream" = 5, "berryjuice" = 5)
tastes = list("cake" = 4, "violets" = 2, "jam" = 2)
goal_difficulty = FOOD_GOAL_DUPLICATE
@@ -1242,7 +1242,7 @@
name = "grape tart"
desc = "A tasty dessert that reminds you of the wine you didn't make."
icon = 'icons/obj/food/bakedgoods.dmi'
- icon_state = "grape_tart"
+ icon_state = "grapetart"
trash = /obj/item/trash/plate
filling_color = "#8c00ff"
bitesize = 3
diff --git a/code/modules/food_and_drinks/food/foods/pizza.dm b/code/modules/food_and_drinks/food/foods/pizza.dm
index 3b9c7a5d13c6..40c5b9bf7691 100644
--- a/code/modules/food_and_drinks/food/foods/pizza.dm
+++ b/code/modules/food_and_drinks/food/foods/pizza.dm
@@ -211,7 +211,7 @@
/obj/item/food/firecrackerpizzaslice
name = "firecracker pizza slice"
- desc = "A spicy slice of something quite nice"
+ desc = "A spicy slice of something quite nice."
icon = 'icons/obj/food/pizza.dmi'
icon_state = "firecrackerpizzaslice"
filling_color = "#BAA14C"
@@ -310,24 +310,23 @@
/obj/item/pizzabox/update_overlays()
. = ..()
if(open && pizza)
- var/image/pizzaimg = image("food/pizza.dmi", icon_state = pizza.icon_state)
+ var/image/pizzaimg = image('icons/obj/food/pizza.dmi', src, pizza.icon_state)
pizzaimg.pixel_y = -3
. += pizzaimg
return
+ // Stupid code because byondcode sucks
+ var/set_tag = FALSE
+ if(length(boxes) > 0)
+ var/obj/item/pizzabox/top_box = boxes[length(boxes)]
+ if(top_box.box_tag != "")
+ set_tag = TRUE
else
- // Stupid code because byondcode sucks
- var/set_tag = TRUE
- if(length(boxes) > 0)
- var/obj/item/pizzabox/top_box = boxes[length(boxes)]
- if(top_box.box_tag != "")
- set_tag = TRUE
- else
- if(box_tag != "")
- set_tag = TRUE
- if(!open && set_tag)
- var/image/tag = image("food/pizza.dmi", icon_state = "pizzabox_tag")
- tag.pixel_y = length(boxes) * 3
- . += tag
+ if(box_tag != "")
+ set_tag = TRUE
+ if(!open && set_tag)
+ var/image/tag = image('icons/obj/food/pizza.dmi', src, "pizzabox_tag")
+ tag.pixel_y = length(boxes) * 3
+ . += tag
/obj/item/pizzabox/attack_hand(mob/user)
if(open && pizza)
@@ -447,91 +446,128 @@
pizza_type = /obj/item/food/sliceable/pizza/firecrackerpizza
box_tag = "extra spicy pie"
+#define PIZZA_BOMB_NOT_ARMED 0
+#define PIZZA_BOMB_TIMER_SET 1
+#define PIZZA_BOMB_PRIMED 2
+#define PIZZA_BOMB_DISARMED 3
+
//////////////////////////
// Pizza bombs //
//////////////////////////
/obj/item/pizzabox/pizza_bomb
/// Adjustable timer
var/timer = 1 SECONDS
- var/timer_set = FALSE
- var/primed = FALSE
- var/disarmed = FALSE
+ var/pizza_bomb_status = PIZZA_BOMB_NOT_ARMED
var/wires = list("orange", "green", "blue", "yellow", "aqua", "purple")
var/correct_wire
- var/armer //Used for admin purposes
- var/opener //Ditto
+ var/mob/armer //Used for admin purposes
+ var/mob/opener //Ditto
-/obj/item/pizzabox/pizza_bomb/update_desc()
- if(primed)
- return
+/obj/item/pizzabox/pizza_bomb/Initialize(mapload)
+ correct_wire = pick(wires)
+ var/obj/item/pizzabox/mimic_box = pick(subtypesof(/obj/item/pizzabox) - typesof(/obj/item/pizzabox/pizza_bomb))
+ box_tag = mimic_box.box_tag
return ..()
-/obj/item/pizzabox/pizza_bomb/update_icon_state()
- if(primed)
- return
+/obj/item/pizzabox/pizza_bomb/Destroy()
+ armer = null
+ opener = null
return ..()
+/obj/item/pizzabox/pizza_bomb/update_name()
+ . = ..()
+ if(!open)
+ name = "pizza box"
+ return
+ name = "pizza bomb"
+
+/obj/item/pizzabox/pizza_bomb/update_desc()
+ if(!open)
+ return ..()
+
+ switch(pizza_bomb_status)
+ if(PIZZA_BOMB_DISARMED)
+ desc = "A devious contraption, made of a small explosive payload hooked up to pressure-sensitive wires. It's disarmed."
+ if(PIZZA_BOMB_PRIMED)
+ desc = "OH GOD THAT'S NOT A PIZZA"
+ else
+ desc = "It seems inactive."
+
+/obj/item/pizzabox/pizza_bomb/update_icon_state()
+ if(!open)
+ return ..()
+
+ switch(pizza_bomb_status)
+ if(PIZZA_BOMB_DISARMED)
+ icon_state = "pizzabox_bomb_[correct_wire]"
+ if(PIZZA_BOMB_PRIMED)
+ icon_state = "pizzabox_bomb_active"
+ else
+ icon_state = "pizzabox_bomb"
+
/obj/item/pizzabox/pizza_bomb/AltClick(mob/user)
attack_self(user)
/obj/item/pizzabox/pizza_bomb/attack_self(mob/user)
- if(disarmed)
- to_chat(user, "
[src] is disarmed.")
- return
- if(!timer_set)
- name = "pizza bomb"
- desc = "It seems inactive."
- icon_state = "pizzabox_bomb"
- timer_set = TRUE
+ if(pizza_bomb_status == PIZZA_BOMB_NOT_ARMED)
+ open = TRUE
+ update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_ICON)
+
var/new_timer = tgui_input_number(user, "Set a timer, from one second to ten seconds.", "Timer", timer / 10, 10, 1)
- if(isnull(new_timer))
- return
- if(!in_range(src, user) || issilicon(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || user.restrained())
- timer_set = FALSE
- name = "pizza box"
- desc = "A box suited for pizzas."
- icon_state = "pizzabox1"
+ if(isnull(new_timer) || !in_range(src, user) || issilicon(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || user.restrained())
+ open = FALSE
+ update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_ICON)
return
+
timer = new_timer SECONDS
- icon_state = "pizzabox1"
+ pizza_bomb_status = PIZZA_BOMB_TIMER_SET
+ armer = user
to_chat(user, "
You set the timer to [timer / 10] before activating the payload and closing [src].")
- message_admins("[key_name_admin(usr)] has set a timer on a pizza bomb to [timer/10] seconds at (JMP).")
+
+ message_admins("[key_name_admin(usr)] has set a timer on a pizza bomb to [timer/10] seconds at [ADMIN_JMP(loc)].")
log_game("[key_name(usr)] has set the timer on a pizza bomb to [timer / 10] seconds ([loc.x],[loc.y],[loc.z]).")
investigate_log("[key_name(usr)] has armed a [name] for detonation at ([loc.x],[loc.y],[loc.z])", INVESTIGATE_BOMB)
add_attack_logs(user, src, "has armed for detonation", ATKLOG_FEW)
- armer = user
- name = "pizza box"
- desc = "A box suited for pizzas."
+
+ open = FALSE
+ update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_ICON)
return
- if(!primed)
- name = "pizza bomb"
- desc = "OH GOD THAT'S NOT A PIZZA"
- icon_state = "pizzabox_bomb_active"
- audible_message("[bicon(src)] *beep* *beep*")
- to_chat(user, "That's no pizza! That's a bomb!")
- if(HAS_TRAIT(src, TRAIT_CMAGGED))
- atom_say("Pizza time!")
- playsound(src, 'sound/voice/pizza_time.ogg', 50, FALSE) ///Sound effect made by BlackDog
- message_admins("[key_name_admin(usr)] has triggered a pizza bomb armed by [key_name_admin(armer)] at (JMP).")
- log_game("[key_name(usr)] has triggered a pizza bomb armed by [key_name(armer)] ([loc.x],[loc.y],[loc.z]).")
- investigate_log("[key_name(usr)] has opened a [name] for detonation at ([loc.x],[loc.y],[loc.z])", INVESTIGATE_BOMB)
- add_attack_logs(user, src, "has opened for detonation", ATKLOG_FEW)
- opener = user
- primed = TRUE
- sleep(timer)
- return go_boom()
+
+ if(pizza_bomb_status != PIZZA_BOMB_TIMER_SET)
+ if(pizza_bomb_status != PIZZA_BOMB_PRIMED)
+ // Can only toggle disarmed boxes
+ open = !open
+ update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_ICON)
+ return
+
+ open = TRUE
+ opener = user
+
+ audible_message("[bicon(src)] *beep* *beep*")
+ to_chat(user, "That's no pizza! That's a bomb!")
+ if(HAS_TRAIT(src, TRAIT_CMAGGED))
+ atom_say("Pizza time!")
+ playsound(src, 'sound/voice/pizza_time.ogg', 50, FALSE) ///Sound effect made by BlackDog
+
+ message_admins("[key_name_admin(usr)] has triggered a pizza bomb armed by [key_name_admin(armer)] at [ADMIN_JMP(loc)].")
+ log_game("[key_name(usr)] has triggered a pizza bomb armed by [key_name(armer)] ([loc.x],[loc.y],[loc.z]).")
+ investigate_log("[key_name(usr)] has opened a [name] for detonation at ([loc.x],[loc.y],[loc.z])", INVESTIGATE_BOMB)
+ add_attack_logs(user, src, "has opened for detonation", ATKLOG_FEW)
+
+ pizza_bomb_status = PIZZA_BOMB_PRIMED
+ update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_ICON)
+ addtimer(CALLBACK(src, PROC_REF(go_boom)), timer)
+
/obj/item/pizzabox/pizza_bomb/proc/go_boom()
- if(disarmed)
+ if(pizza_bomb_status == PIZZA_BOMB_DISARMED)
visible_message("[bicon(src)] Sparks briefly jump out of the [correct_wire] wire on [src], but it's disarmed!")
return
atom_say("Enjoy the pizza!")
visible_message("[src] violently explodes!")
- message_admins("A pizza bomb set by [key_name_admin(armer)] and opened by [key_name_admin(opener)] has detonated at (JMP).")
+ message_admins("A pizza bomb set by [key_name_admin(armer)] and opened by [key_name_admin(opener)] has detonated at [ADMIN_JMP(loc)].")
log_game("Pizza bomb set by [key_name(armer)] and opened by [key_name(opener)]) detonated at ([loc.x],[loc.y],[loc.z]).")
explosion(loc, 1, 2, 4, flame_range = 2) //Identical to a minibomb
- armer = null
- opener = null
qdel(src)
/obj/item/pizzabox/pizza_bomb/cmag_act(mob/user)
@@ -539,8 +575,11 @@
to_chat(user, "You smear the bananium ooze all over the pizza bomb's internals! You think you smell a bit of tomato sauce.")
ADD_TRAIT(src, TRAIT_CMAGGED, CLOWN_EMAG)
-/obj/item/pizzabox/pizza_bomb/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/wirecutters) && primed)
+/obj/item/pizzabox/pizza_bomb/wirecutter_act(mob/living/user, obj/item/I)
+ if(!open)
+ return
+ . = TRUE
+ if(pizza_bomb_status == PIZZA_BOMB_PRIMED)
to_chat(user, "Oh God, what wire do you cut?!")
var/chosen_wire = tgui_input_list(user, "OH GOD OH GOD", "WHAT WIRE?!", wires)
if(!in_range(src, user) || issilicon(usr) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || user.restrained() || !chosen_wire)
@@ -550,23 +589,21 @@
if(chosen_wire == correct_wire)
audible_message("[bicon(src)] [src] suddenly stops beeping and seems lifeless.")
to_chat(user, "You did it!")
- icon_state = "pizzabox_bomb_[correct_wire]"
- name = "pizza bomb"
- desc = "A devious contraption, made of a small explosive payload hooked up to pressure-sensitive wires. It's disarmed."
- disarmed = TRUE
- primed = FALSE
+
+ pizza_bomb_status = PIZZA_BOMB_DISARMED
+ update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_ICON)
return
else
to_chat(user, "WRONG WIRE!")
go_boom()
return
- if(istype(I, /obj/item/wirecutters) && disarmed)
+
+ if(pizza_bomb_status == PIZZA_BOMB_DISARMED)
if(!in_range(user, src))
to_chat(user, "You can't see the box well enough to cut the wires out.")
return
user.visible_message("[user] starts removing the payload and wires from [src].")
- if(do_after(user, 40 * I.toolspeed, target = src))
- playsound(src, I.usesound, 50, TRUE, 1)
+ if(I.use_tool(src, user, 4 SECONDS, volume = 50))
user.unEquip(src)
user.visible_message("[user] removes the insides of [src]!")
var/obj/item/stack/cable_coil/C = new /obj/item/stack/cable_coil(src.loc)
@@ -574,15 +611,12 @@
new /obj/item/bombcore/miniature(loc)
new /obj/item/pizzabox(loc)
qdel(src)
- return
- ..()
-
-/obj/item/pizzabox/pizza_bomb/Initialize(mapload)
- correct_wire = pick(wires)
- var/obj/item/pizzabox/mimic_box = pick(subtypesof(/obj/item/pizzabox) - typesof(/obj/item/pizzabox/pizza_bomb))
- box_tag = mimic_box.box_tag
- . = ..()
/obj/item/pizzabox/pizza_bomb/autoarm
- timer_set = TRUE
+ pizza_bomb_status = PIZZA_BOMB_TIMER_SET
timer = 3 SECONDS
+
+#undef PIZZA_BOMB_NOT_ARMED
+#undef PIZZA_BOMB_TIMER_SET
+#undef PIZZA_BOMB_PRIMED
+#undef PIZZA_BOMB_DISARMED
diff --git a/code/modules/food_and_drinks/food_base.dm b/code/modules/food_and_drinks/food_base.dm
index 5290fcd736ef..6e9b7d07e2df 100644
--- a/code/modules/food_and_drinks/food_base.dm
+++ b/code/modules/food_and_drinks/food_base.dm
@@ -6,7 +6,7 @@
/obj/item/food
name = "snack"
- desc = "yummy"
+ desc = "yummy!"
icon = 'icons/obj/food/food.dmi'
icon_state = null
resistance_flags = FLAMMABLE
diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
index 4d6c1845454f..339fee416d91 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
@@ -281,18 +281,18 @@
for(var/obj/item/I in H.get_contents())
if(I.resistance_flags & INDESTRUCTIBLE)
I.forceMove(get_turf(src))
- if(H.get_item_by_slot(SLOT_HUD_SUIT_STORE))
- var/obj/item/ws = H.get_item_by_slot(SLOT_HUD_SUIT_STORE)
+ if(H.get_item_by_slot(ITEM_SLOT_SUIT_STORE))
+ var/obj/item/ws = H.get_item_by_slot(ITEM_SLOT_SUIT_STORE)
if(ws.resistance_flags & INDESTRUCTIBLE)
ws.forceMove(get_turf(src))
H.s_store = null
- if(H.get_item_by_slot(SLOT_HUD_LEFT_STORE))
- var/obj/item/ls = H.get_item_by_slot(SLOT_HUD_LEFT_STORE)
+ if(H.get_item_by_slot(ITEM_SLOT_LEFT_POCKET))
+ var/obj/item/ls = H.get_item_by_slot(ITEM_SLOT_LEFT_POCKET)
if(ls.resistance_flags & INDESTRUCTIBLE)
ls.forceMove(get_turf(src))
H.l_store = null
- if(H.get_item_by_slot(SLOT_HUD_RIGHT_STORE))
- var/obj/item/rs = H.get_item_by_slot(SLOT_HUD_RIGHT_STORE)
+ if(H.get_item_by_slot(ITEM_SLOT_RIGHT_POCKET))
+ var/obj/item/rs = H.get_item_by_slot(ITEM_SLOT_RIGHT_POCKET)
if(rs.resistance_flags & INDESTRUCTIBLE)
rs.forceMove(get_turf(src))
H.r_store = null
diff --git a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm
index 965e9a95911f..90274d1ac159 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm
@@ -197,6 +197,14 @@
/obj/machinery/kitchen_machine/proc/special_attack_shove(mob/living/target, mob/living/attacker)
return FALSE
+/**
+ * Check if the machine is running when trying to add reagents to it.
+ */
+/obj/machinery/kitchen_machine/is_refillable()
+ if(operating)
+ return FALSE
+ . = ..()
+
/********************
* Machine Menu *
********************/
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index 4ef39f8aa2e5..69871f40a522 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -558,7 +558,7 @@
*/
/obj/machinery/smartfridge/foodcart
name = "food and drink cart"
- desc = "A portable cart for hawking your food and drink wares around the station"
+ desc = "A portable cart for hawking your food and drink wares around the station."
icon = 'icons/obj/kitchen.dmi'
icon_state = "foodcart"
anchored = FALSE
@@ -697,7 +697,7 @@
*/
/obj/machinery/smartfridge/secure/extract
name = "\improper Slime Extract Storage"
- desc = "A refrigerated storage unit for slime extracts"
+ desc = "A refrigerated storage unit for slime extracts."
board_type = /obj/machinery/smartfridge/secure/extract
/obj/machinery/smartfridge/secure/extract/Initialize(mapload)
@@ -741,10 +741,10 @@
desc = "A refrigerated storage unit for medicine and chemical storage."
icon_state = "smartfridge" //To fix the icon in the map editor.
board_type = /obj/machinery/smartfridge/secure/chemistry
+ req_access = list(ACCESS_CHEMISTRY)
/obj/machinery/smartfridge/secure/chemistry/Initialize(mapload)
. = ..()
- req_access = list(ACCESS_CHEMISTRY)
// Accepted items
accepted_items_typecache = typecacheof(list(
/obj/item/storage/pill_bottle,
diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm
index 199a7add0bcf..32af569e0691 100644
--- a/code/modules/games/cards.dm
+++ b/code/modules/games/cards.dm
@@ -313,7 +313,6 @@
name = "hand of cards"
desc = "Some playing cards."
icon = 'icons/obj/playing_cards.dmi'
- icon_state = "empty"
w_class = WEIGHT_CLASS_TINY
actions_types = list(/datum/action/item_action/remove_card, /datum/action/item_action/discard)
@@ -374,7 +373,7 @@
update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_OVERLAYS)
user.visible_message(
"[user] [concealed ? "conceals" : "reveals"] their hand.",
- "You[concealed ? "conceal" : "reveal"] your hand.",
+ "You [concealed ? "conceal" : "reveal"] your hand.",
"You hear a hand of cards being flipped over."
)
@@ -398,7 +397,7 @@
if(href_list["pick"] == "Turn")
turn_hand(usr)
else
- if(cardUser.get_item_by_slot(SLOT_HUD_LEFT_HAND) == src || cardUser.get_item_by_slot(SLOT_HUD_RIGHT_HAND) == src)
+ if(cardUser.get_item_by_slot(ITEM_SLOT_LEFT_HAND) == src || cardUser.get_item_by_slot(ITEM_SLOT_RIGHT_HAND) == src)
pickedcard = href_list["pick"]
Removecard()
cardUser << browse(null, "window=cardhand")
diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm
index 2bd18ee1793f..3236f0b59fec 100644
--- a/code/modules/hydroponics/fermenting_barrel.dm
+++ b/code/modules/hydroponics/fermenting_barrel.dm
@@ -11,7 +11,7 @@
var/open = FALSE
var/speed_multiplier = 1 //How fast it distills. Defaults to 100% (1.0). Lower is better.
-/obj/structure/fermenting_barrel/Initialize()
+/obj/structure/fermenting_barrel/Initialize(mapload)
create_reagents(300) //Bluespace beakers, but without the portability or efficiency in circuits.
AddComponent(/datum/component/debris, DEBRIS_WOOD, -20, 10)
. = ..()
diff --git a/code/modules/hydroponics/grown/ambrosia.dm b/code/modules/hydroponics/grown/ambrosia.dm
index b11cfd562511..0f2e1e97f45e 100644
--- a/code/modules/hydroponics/grown/ambrosia.dm
+++ b/code/modules/hydroponics/grown/ambrosia.dm
@@ -4,7 +4,7 @@
name = "ambrosia branch"
desc = "This is a plant."
icon_state = "ambrosiavulgaris"
- slot_flags = SLOT_FLAG_HEAD
+ slot_flags = ITEM_SLOT_HEAD
filling_color = "#008000"
bitesize_mod = 2
tastes = list("ambrosia" = 1)
diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm
index 1137e7533685..dbe83098a40c 100644
--- a/code/modules/hydroponics/grown/berries.dm
+++ b/code/modules/hydroponics/grown/berries.dm
@@ -136,7 +136,7 @@
// Blue Cherries
/obj/item/seeds/cherry/blue
name = "pack of blue cherry pits"
- desc = "The blue kind of cherries"
+ desc = "The blue kind of cherries."
icon_state = "seed-bluecherry"
species = "bluecherry"
plantname = "Blue Cherry Tree"
diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm
index d0c05accc2b8..4ded9fcd154e 100644
--- a/code/modules/hydroponics/grown/chili.dm
+++ b/code/modules/hydroponics/grown/chili.dm
@@ -46,7 +46,7 @@
/obj/item/food/grown/icepepper
seed = /obj/item/seeds/chili/ice
name = "chilly pepper"
- desc = "It's a mutant strain of chili"
+ desc = "It's a mutant strain of chili."
icon_state = "icepepper"
filling_color = "#0000CD"
bitesize_mod = 2
diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm
index 505ccd1b123a..bf095885d14b 100644
--- a/code/modules/hydroponics/grown/flowers.dm
+++ b/code/modules/hydroponics/grown/flowers.dm
@@ -22,7 +22,7 @@
name = "poppy"
desc = "Long-used as a symbol of rest, peace, and death."
icon_state = "poppy"
- slot_flags = SLOT_FLAG_HEAD
+ slot_flags = ITEM_SLOT_HEAD
bitesize_mod = 3
tastes = list("poppy" = 1)
filling_color = "#FF6347"
@@ -45,7 +45,7 @@
name = "lily"
desc = "A beautiful white flower."
icon_state = "lily"
- slot_flags = SLOT_FLAG_HEAD
+ slot_flags = ITEM_SLOT_HEAD
bitesize_mod = 3
tastes = list("lily" = 1)
filling_color = "#C7BBAD"
@@ -98,7 +98,7 @@
name = "geranium"
desc = "A beautiful purple flower."
icon_state = "geranium"
- slot_flags = SLOT_FLAG_HEAD
+ slot_flags = ITEM_SLOT_HEAD
bitesize_mod = 3
tastes = list("geranium" = 1)
filling_color = "#A463FB"
@@ -128,7 +128,7 @@
name = "harebell"
desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweeten'd not thy breath.\""
icon_state = "harebell"
- slot_flags = SLOT_FLAG_HEAD
+ slot_flags = ITEM_SLOT_HEAD
filling_color = "#E6E6FA"
tastes = list("harebell" = 1)
bitesize_mod = 3
@@ -161,7 +161,7 @@
icon_state = "sunflower"
damtype = "fire"
force = 0
- slot_flags = SLOT_FLAG_HEAD
+ slot_flags = ITEM_SLOT_HEAD
throwforce = 0
w_class = WEIGHT_CLASS_TINY
throw_speed = 1
@@ -190,7 +190,7 @@
name = "moonflower"
desc = "Store in a location at least 50 yards away from werewolves."
icon_state = "moonflower"
- slot_flags = SLOT_FLAG_HEAD
+ slot_flags = ITEM_SLOT_HEAD
filling_color = "#E6E6FA"
bitesize_mod = 2
tastes = list("moonflower" = 1)
@@ -217,7 +217,7 @@
icon_state = "novaflower"
damtype = "fire"
force = 0
- slot_flags = SLOT_FLAG_HEAD
+ slot_flags = ITEM_SLOT_HEAD
throwforce = 0
w_class = WEIGHT_CLASS_TINY
throw_speed = 1
diff --git a/code/modules/hydroponics/grown/misc_seeds.dm b/code/modules/hydroponics/grown/misc_seeds.dm
index 0bbb55450d1f..c1639a455811 100644
--- a/code/modules/hydroponics/grown/misc_seeds.dm
+++ b/code/modules/hydroponics/grown/misc_seeds.dm
@@ -1,7 +1,7 @@
// Starthistle
/obj/item/seeds/starthistle
name = "pack of starthistle seeds"
- desc = "A robust species of weed that often springs up in-between the cracks of spaceship parking lots"
+ desc = "A robust species of weed that often springs up in-between the cracks of spaceship parking lots."
icon_state = "seed-starthistle"
species = "starthistle"
plantname = "Starthistle"
diff --git a/code/modules/hydroponics/grown/random_seeds.dm b/code/modules/hydroponics/grown/random_seeds.dm
index e158fe2531b4..a5835a3e9a04 100644
--- a/code/modules/hydroponics/grown/random_seeds.dm
+++ b/code/modules/hydroponics/grown/random_seeds.dm
@@ -37,7 +37,7 @@
icon_state = "crunchy"
bitesize_mod = 2
-/obj/item/food/grown/random/Initialize()
+/obj/item/food/grown/random/Initialize(mapload)
. = ..()
wine_power = rand(0.1,1.5)
if(prob(1))
diff --git a/code/modules/hydroponics/grown/tea_coffee.dm b/code/modules/hydroponics/grown/tea_coffee.dm
index 20f43305cebc..4cffbe15ba52 100644
--- a/code/modules/hydroponics/grown/tea_coffee.dm
+++ b/code/modules/hydroponics/grown/tea_coffee.dm
@@ -29,7 +29,7 @@
/obj/item/seeds/tea/astra
name = "pack of tea astra seeds"
icon_state = "seed-teaastra"
- desc = "These seeds grow into Tea Astra, a more potent variant of tea"
+ desc = "These seeds grow into Tea Astra, a more potent variant of tea."
species = "teaastra"
plantname = "Tea Astra Plant"
product = /obj/item/food/grown/tea/astra
diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm
index 262c623b226d..543e1f026a22 100644
--- a/code/modules/hydroponics/hydroitemdefines.dm
+++ b/code/modules/hydroponics/hydroitemdefines.dm
@@ -6,7 +6,7 @@
icon_state = "hydro"
item_state = "analyzer"
w_class = WEIGHT_CLASS_TINY
- slot_flags = SLOT_FLAG_BELT
+ slot_flags = ITEM_SLOT_BELT
origin_tech = "magnets=2;biotech=2"
materials = list(MAT_METAL = 210, MAT_GLASS = 40)
@@ -42,7 +42,7 @@
belt_icon = null
volume = 100
container_type = OPENCONTAINER
- slot_flags = SLOT_FLAG_BELT
+ slot_flags = ITEM_SLOT_BELT
throwforce = 0
w_class = WEIGHT_CLASS_SMALL
throw_speed = 3
@@ -63,7 +63,7 @@
belt_icon = null
volume = 100
container_type = OPENCONTAINER
- slot_flags = SLOT_FLAG_BELT
+ slot_flags = ITEM_SLOT_BELT
throwforce = 0
w_class = WEIGHT_CLASS_SMALL
throw_speed = 3
@@ -149,7 +149,7 @@
w_class = WEIGHT_CLASS_BULKY
flags = CONDUCT
armour_penetration_flat = 20
- slot_flags = SLOT_FLAG_BACK
+ slot_flags = ITEM_SLOT_BACK
origin_tech = "materials=3;combat=2"
attack_verb = list("chopped", "sliced", "cut", "reaped")
hitsound = 'sound/weapons/bladeslice.ogg'
@@ -199,7 +199,7 @@
sharp = FALSE
w_class = WEIGHT_CLASS_SMALL
extend = FALSE
- slot_flags = SLOT_FLAG_BELT
+ slot_flags = ITEM_SLOT_BELT
origin_tech = "materials=3;combat=3"
attack_verb = list("hit", "poked")
hitsound = "swing_hit"
@@ -208,7 +208,7 @@
extend = !extend
if(extend)
to_chat(user, "With a flick of your wrist, you extend the scythe. It's reaping time!")
- slot_flags = SLOT_FLAG_BACK //won't fit on belt, but can be worn on belt when extended
+ slot_flags = ITEM_SLOT_BACK //won't fit on belt, but can be worn on belt when extended
w_class = WEIGHT_CLASS_BULKY //won't fit in backpacks while extended
force = 15 //slightly better than normal scythe damage
attack_verb = list("chopped", "sliced", "cut", "reaped")
@@ -217,7 +217,7 @@
playsound(src.loc, 'sound/weapons/blade_unsheath.ogg', 50, 1) //Sound credit to Qat of Freesound.org
else
to_chat(user, "You collapse the scythe, folding it away for easy storage.")
- slot_flags = SLOT_FLAG_BELT //can be worn on belt again, but no longer makes sense to wear on the back
+ slot_flags = ITEM_SLOT_BELT //can be worn on belt again, but no longer makes sense to wear on the back
w_class = WEIGHT_CLASS_SMALL
force = 3
attack_verb = list("hit", "poked")
diff --git a/code/modules/hydroponics/hydroponics_tray.dm b/code/modules/hydroponics/hydroponics_tray.dm
index 0c0f799fdbc0..538094feb479 100644
--- a/code/modules/hydroponics/hydroponics_tray.dm
+++ b/code/modules/hydroponics/hydroponics_tray.dm
@@ -74,6 +74,8 @@
/// What do we call the mutagen tank?
var/mutagen_tank_name = "Mutagen tank"
+ var/is_soil = FALSE
+
/obj/machinery/hydroponics/Initialize(mapload)
. = ..()
var/datum/atom_hud/data/hydroponic/hydro_hud = GLOB.huds[DATA_HUD_HYDROPONIC]
@@ -303,7 +305,7 @@
/obj/machinery/hydroponics/proc/update_state()
//Refreshes the icon and sets the luminosity
if(self_sustaining)
- if(istype(src, /obj/machinery/hydroponics/soil))
+ if(is_soil)
color = rgb(255, 175, 0)
set_light(3)
else
@@ -322,7 +324,7 @@
/obj/machinery/hydroponics/update_overlays()
. = ..()
- if(self_sustaining && !istype(src, /obj/machinery/hydroponics/soil))
+ if(self_sustaining && !is_soil)
. += "gaia_blessing"
if(lid_closed)
@@ -1019,6 +1021,7 @@
power_state = NO_POWER_USE
wrenchable = FALSE
mutagen_tank_name = "Mutagen pool"
+ is_soil = TRUE
/obj/machinery/hydroponics/soil/update_icon_state()
return // Has no hoses
diff --git a/code/modules/instruments/objs/items/headphones.dm b/code/modules/instruments/objs/items/headphones.dm
index 32373c5afb4d..fe0f4f54e9e6 100644
--- a/code/modules/instruments/objs/items/headphones.dm
+++ b/code/modules/instruments/objs/items/headphones.dm
@@ -56,7 +56,7 @@
icon_state = item_state = "headphones[on]"
/obj/item/clothing/ears/headphones/item_action_slot_check(slot)
- if(slot == SLOT_HUD_LEFT_EAR || slot == SLOT_HUD_RIGHT_EAR)
+ if(slot & ITEM_SLOT_BOTH_EARS)
return TRUE
/**
diff --git a/code/modules/instruments/objs/items/instrument_items.dm b/code/modules/instruments/objs/items/instrument_items.dm
index ef53ea410fa2..a524685b7d96 100644
--- a/code/modules/instruments/objs/items/instrument_items.dm
+++ b/code/modules/instruments/objs/items/instrument_items.dm
@@ -87,7 +87,7 @@
force = 0
attack_verb = list("played", "jazzed", "trumpeted", "mourned", "dooted", "spooked")
-/obj/item/instrument/trumpet/spectral/Initialize()
+/obj/item/instrument/trumpet/spectral/Initialize(mapload)
. = ..()
AddComponent(/datum/component/spooky)
@@ -110,7 +110,7 @@
force = 0
attack_verb = list("played", "jazzed", "saxxed", "mourned", "dooted", "spooked")
-/obj/item/instrument/saxophone/spectral/Initialize()
+/obj/item/instrument/saxophone/spectral/Initialize(mapload)
. = ..()
AddComponent(/datum/component/spooky)
@@ -133,7 +133,7 @@
force = 0
attack_verb = list("played", "jazzed", "tromboned", "mourned", "dooted", "spooked")
-/obj/item/instrument/trombone/spectral/Initialize()
+/obj/item/instrument/trombone/spectral/Initialize(mapload)
. = ..()
AddComponent(/datum/component/spooky)
diff --git a/code/modules/lavaland/caves_theme.dm b/code/modules/lavaland/caves_theme.dm
index 6a47985fcf41..2b69cfd5ee1f 100644
--- a/code/modules/lavaland/caves_theme.dm
+++ b/code/modules/lavaland/caves_theme.dm
@@ -137,7 +137,7 @@ GLOBAL_LIST_INIT(caves_default_flora_spawns, list(
perlin_upper_range = 0.3
/datum/caves_theme/burrows/on_change(turf/T)
- if(prob(9))
+ if(prob(7))
new /obj/structure/flora/ash/rock/style_random(T)
else if(prob(5))
lavaland_caves_spawn_flora(T)
diff --git a/code/modules/library/book.dm b/code/modules/library/book.dm
index 466033801e0c..ae7a964ed720 100644
--- a/code/modules/library/book.dm
+++ b/code/modules/library/book.dm
@@ -359,7 +359,7 @@
icon_state = "random_book"
var/amount = 1
-/obj/item/book/random/Initialize()
+/obj/item/book/random/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, PROC_REF(spawn_books)), 0)
diff --git a/code/modules/library/library_equipment.dm b/code/modules/library/library_equipment.dm
index 82e88b3a1cad..66f23e72f1a0 100644
--- a/code/modules/library/library_equipment.dm
+++ b/code/modules/library/library_equipment.dm
@@ -98,7 +98,7 @@
/obj/structure/bookcase/manuals/medical
name = "Medical Manuals bookcase"
-/obj/structure/bookcase/manuals/medical/Initialize()
+/obj/structure/bookcase/manuals/medical/Initialize(mapload)
. = ..()
new /obj/item/book/manual/medical_cloning(src)
update_icon(UPDATE_ICON_STATE)
@@ -107,7 +107,7 @@
/obj/structure/bookcase/manuals/engineering
name = "Engineering Manuals bookcase"
-/obj/structure/bookcase/manuals/engineering/Initialize()
+/obj/structure/bookcase/manuals/engineering/Initialize(mapload)
. = ..()
new /obj/item/book/manual/wiki/engineering_construction(src)
new /obj/item/book/manual/engineering_particle_accelerator(src)
@@ -120,7 +120,7 @@
/obj/structure/bookcase/manuals/research_and_development
name = "R&D Manuals bookcase"
-/obj/structure/bookcase/manuals/research_and_development/Initialize()
+/obj/structure/bookcase/manuals/research_and_development/Initialize(mapload)
. = ..()
new /obj/item/book/manual/research_and_development(src)
update_icon(UPDATE_ICON_STATE)
@@ -128,7 +128,7 @@
/obj/structure/bookcase/sop
name = "bookcase (Standard Operating Procedures)"
-/obj/structure/bookcase/sop/Initialize()
+/obj/structure/bookcase/sop/Initialize(mapload)
. = ..()
new /obj/item/book/manual/wiki/sop_command(src)
new /obj/item/book/manual/wiki/sop_engineering(src)
diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm
index ce504e0e2f04..275bfea1921c 100644
--- a/code/modules/mapping/mapping_helpers.dm
+++ b/code/modules/mapping/mapping_helpers.dm
@@ -77,6 +77,19 @@
T.flags |= NO_LAVA_GEN
..()
+/obj/effect/mapping_helpers/lava_magnet
+ name = "lava magnet"
+ icon_state = "lava_magnet"
+ layer = ON_EDGED_TURF_LAYER
+
+/obj/effect/mapping_helpers/lava_magnet/New()
+ . = ..()
+
+ var/turf/T = get_turf(src)
+ if(istype(T) && T.z == level_name_to_num(MINING))
+ var/obj/effect/landmark/river_waypoint/waypoint = new(T)
+ GLOB.river_waypoint_presets += waypoint
+
/obj/effect/mapping_helpers/airlock
layer = DOOR_HELPER_LAYER
late = TRUE
diff --git a/code/modules/maptext_alerts/text_blurbs.dm b/code/modules/maptext_alerts/text_blurbs.dm
index 285d39693c76..c4b8f2b95f37 100644
--- a/code/modules/maptext_alerts/text_blurbs.dm
+++ b/code/modules/maptext_alerts/text_blurbs.dm
@@ -1,18 +1,26 @@
/**
- Shows a ticker reading out the given text on a client's screen.
-
- targets = mob or list of mobs to show it to.
- duration = how long it lingers after it finishes ticking.
- message = the message to display. Due to using maptext it isn't very flexible format-wise. 11px font, up to 480 pixels per line. Use \n for line breaks. Single-character HTML tags (, , etc.) are handled correctly but others display strangely. Note that maptext can display text macros in strange ways, ex. \improper showing as "ÿ". Lines containing only spaces, including ones only containing "\improper ", don't display.
- scroll_down = by default each line pushes the previous line upwards - this tells it to start high and scroll down. Ticks on \n - does not autodetect line breaks in long strings.
- screen_position = screen loc for the bottom-left corner of the blurb.
- text_alignment = "right", "left", or "center"
- text_color = colour of the text.
- blurb_key = a key used for specific blurb types so they are not shown repeatedly.
- ignore_key = used to skip key checks.
- text_limit = limit in characters of the message.
+ * Shows a ticker reading out the given text on a client's screen.
+ *
+ * Arguments:
+ * * targets - mob or list of mobs to show it to.
+ * * duration - how long it lingers after it finishes ticking.
+ * * message - the message to display. Due to using maptext it isn't very
+ * flexible format-wise. 11px font, up to 480 pixels per line. Use `\n` for
+ * line breaks. Single-character HTML tags (``, ``, `` etc.) are handled
+ * correctly but others display strangely. Note that maptext can display text
+ * macros in strange ways, ex. \improper showing as "ÿ". Lines containing
+ * only spaces, including ones only containing "\improper ", don't display.
+ * * scroll_down - by default each line pushes the previous line upwards - this
+ * tells it to start high and scroll down. Ticks on `\n` - does not autodetect
+ * line breaks in long strings.
+ * * screen_position - screen loc for the bottom-left corner of the blurb.
+ * * text_alignment - "right", "left", or "center"
+ * * text_color - colour of the text.
+ * * blurb_key - a key used for specific blurb types so they are not shown
+ * repeatedly.
+ * * ignore_key - used to skip key checks.
+ * * text_limit - limit in characters of the message.
**/
-
/proc/show_blurb(list/mob/targets, duration = 3 SECONDS, message, scroll_down, screen_position = "LEFT+0:16,BOTTOM+1:16", text_alignment = "left", text_color = "#FFFFFF", blurb_key, ignore_key = FALSE, speed = 1)
set waitfor = 0
if(!islist(targets))
diff --git a/code/modules/martial_arts/bearserk.dm b/code/modules/martial_arts/bearserk.dm
index bfd1becf1065..3c5833484ba1 100644
--- a/code/modules/martial_arts/bearserk.dm
+++ b/code/modules/martial_arts/bearserk.dm
@@ -45,7 +45,7 @@
body_parts_covered = UPPER_TORSO|HEAD|ARMS
var/datum/martial_art/bearserk/style
-/obj/item/clothing/head/bearpelt/bearserk/Initialize()
+/obj/item/clothing/head/bearpelt/bearserk/Initialize(mapload)
. = ..()
style = new()
@@ -54,7 +54,7 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
- if(slot == SLOT_HUD_HEAD)
+ if(slot == ITEM_SLOT_HEAD)
style.teach(H, TRUE)
H.faction |= "soviet"
H.physiology.stun_mod *= 0.80
@@ -65,7 +65,7 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(SLOT_HUD_HEAD) == src)
+ if(H.get_item_by_slot(ITEM_SLOT_HEAD) == src)
style.remove(H)
H.faction -= "soviet"
H.physiology.stun_mod /= 0.80
diff --git a/code/modules/martial_arts/judo.dm b/code/modules/martial_arts/judo.dm
index 2e2e9b3c66d4..5afe28e2856a 100644
--- a/code/modules/martial_arts/judo.dm
+++ b/code/modules/martial_arts/judo.dm
@@ -38,14 +38,14 @@
/obj/item/storage/belt/judobelt/update_weight()
w_class = WEIGHT_CLASS_BULKY
-/obj/item/storage/belt/judobelt/Initialize()
+/obj/item/storage/belt/judobelt/Initialize(mapload)
. = ..()
style = new()
/obj/item/storage/belt/judobelt/equipped(mob/user, slot)
if(!ishuman(user))
return
- if(slot == SLOT_HUD_BELT)
+ if(slot == ITEM_SLOT_BELT)
var/mob/living/carbon/human/H = user
if(HAS_TRAIT(user, TRAIT_PACIFISM))
to_chat(H, "The arts of Corporate Judo echo uselessly in your head, the thought of violence disgusts you!")
@@ -60,7 +60,7 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(SLOT_HUD_BELT) == src)
+ if(H.get_item_by_slot(ITEM_SLOT_BELT) == src)
style.remove(H)
to_chat(user, "You suddenly forget the arts of Corporate Judo...")
diff --git a/code/modules/martial_arts/krav_maga.dm b/code/modules/martial_arts/krav_maga.dm
index 0d096b05c83b..11badf02162a 100644
--- a/code/modules/martial_arts/krav_maga.dm
+++ b/code/modules/martial_arts/krav_maga.dm
@@ -146,14 +146,14 @@
dyeable = TRUE
var/datum/martial_art/krav_maga/style
-/obj/item/clothing/gloves/color/black/krav_maga/Initialize()
+/obj/item/clothing/gloves/color/black/krav_maga/Initialize(mapload)
. = ..()
style = new()
/obj/item/clothing/gloves/color/black/krav_maga/equipped(mob/user, slot)
if(!ishuman(user))
return
- if(slot == SLOT_HUD_GLOVES)
+ if(slot == ITEM_SLOT_GLOVES)
var/mob/living/carbon/human/H = user
style.teach(H, TRUE)
@@ -162,7 +162,7 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(SLOT_HUD_GLOVES) == src)
+ if(H.get_item_by_slot(ITEM_SLOT_GLOVES) == src)
style.remove(H)
// Warden gloves
@@ -172,6 +172,7 @@
icon_state = "fightgloves"
item_state = "fightgloves"
dyeable = FALSE
+ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
/obj/item/clothing/gloves/color/black/krav_maga/sec/Initialize(mapload)
. = ..()
diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm
index 603599a92281..9594dc9fdafd 100644
--- a/code/modules/martial_arts/martial.dm
+++ b/code/modules/martial_arts/martial.dm
@@ -261,14 +261,14 @@
layer_over_suit = TRUE
var/datum/martial_art/wrestling/style
-/obj/item/storage/belt/champion/wrestling/Initialize()
+/obj/item/storage/belt/champion/wrestling/Initialize(mapload)
. = ..()
style = new()
/obj/item/storage/belt/champion/wrestling/equipped(mob/user, slot)
if(!ishuman(user))
return
- if(slot == SLOT_HUD_BELT)
+ if(slot == ITEM_SLOT_BELT)
var/mob/living/carbon/human/H = user
if(HAS_TRAIT(user, TRAIT_PACIFISM))
to_chat(user, "In spite of the grandiosity of the belt, you don't feel like getting into any fights.")
@@ -282,7 +282,7 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(SLOT_HUD_BELT) == src)
+ if(H.get_item_by_slot(ITEM_SLOT_BELT) == src)
style.remove(H)
to_chat(user, "You no longer have an urge to flex your muscles.")
@@ -317,7 +317,7 @@
if(!istype(user) || !user)
return
if(user.mind) //Prevents changelings and vampires from being able to learn it
- if(IS_CHANGELING(user))
+ if(IS_CHANGELING(user) || IS_MINDFLAYER(user))
to_chat(user, "We try multiple times, but we are not able to comprehend the contents of the scroll!")
return
else if(user.mind.has_antag_datum(/datum/antagonist/vampire)) //Vampires
@@ -341,7 +341,7 @@
if(!istype(user) || !user)
return
if(user.mind) //Prevents changelings and vampires from being able to learn it
- if(IS_CHANGELING(user))
+ if(IS_CHANGELING(user) || IS_MINDFLAYER(user))
to_chat(user, "We try multiple times, but we simply cannot grasp the basics of CQC!")
return
else if(user.mind.has_antag_datum(/datum/antagonist/vampire)) //Vampires
@@ -369,7 +369,7 @@
righthand_file = 'icons/mob/inhands/staves_righthand.dmi'
force = 10
w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_FLAG_BACK
+ slot_flags = ITEM_SLOT_BACK
throwforce = 20
throw_speed = 2
attack_verb = list("smashed", "slammed", "whacked", "thwacked")
diff --git a/code/modules/martial_arts/torque_enhancer.dm b/code/modules/martial_arts/torque_enhancer.dm
new file mode 100644
index 000000000000..05deda917b5e
--- /dev/null
+++ b/code/modules/martial_arts/torque_enhancer.dm
@@ -0,0 +1,40 @@
+/datum/martial_art/torque
+ name = "Torque enhancer"
+ weight = 500 // You shouldn't be able to override this, it's a passive you actively buy
+ /// What level is the passive at
+ var/level = 1
+
+/datum/martial_art/torque/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
+ MARTIAL_ARTS_ACT_CHECK
+ var/attack_sound
+ var/list/attack_verb = list()
+ switch(level)
+ if(FLAYER_POWER_LEVEL_ONE)
+ attack_sound = 'sound/weapons/sonic_jackhammer.ogg'
+ attack_verb = list("bashes", "batters")
+ if(FLAYER_POWER_LEVEL_TWO)
+ attack_sound = 'sound/effects/meteorimpact.ogg'
+ attack_verb = list("blugeons", "beats")
+ if(FLAYER_POWER_LEVEL_THREE)
+ attack_sound = 'sound/misc/demon_attack1.ogg'
+ attack_verb = list("destroys", "demolishes", "hammers")
+
+ var/datum/species/attacking = A.dna?.species
+ var/damage = 5 // In case the attacker doesn't have a species somehow
+ if(attacking)
+ damage = rand(attacking.punchdamagelow, attacking.punchdamagehigh)
+ damage += 5 * level
+
+ var/picked_hit_type = pick(attack_verb)
+ A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
+ D.apply_damage(damage, BRUTE)
+
+ if(level >= 2) // This is to mimic species unarmed attacks, if you deal more than 10 damage the attackee is knocked down
+ D.KnockDown(4 SECONDS) // The threshold for a knockdown is 9 damage, so at level 2 your minimum is already higher than that
+
+ if(attack_sound)
+ playsound(get_turf(D), attack_sound, 50, TRUE, -1)
+ D.visible_message("[A] [picked_hit_type] [D]!", \
+ "[A] [picked_hit_type] you!")
+ add_attack_logs(A, D, "Melee attacked with [src]")
+ return TRUE
diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm
index 3442e7e98537..6e8241f6dd1b 100644
--- a/code/modules/mining/equipment/kinetic_crusher.dm
+++ b/code/modules/mining/equipment/kinetic_crusher.dm
@@ -11,7 +11,7 @@
item_state = "crusher0"
force = 0 //You can't hit stuff unless wielded
w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_FLAG_BACK
+ slot_flags = ITEM_SLOT_BACK
throwforce = 5
throw_speed = 4
armour_penetration_flat = 10
@@ -510,9 +510,6 @@
chaser.monster_damage_boost = FALSE // Weaker due to no cooldown
chaser.damage = 20 //But also stronger due to AI / mining mob resistance
-/obj/effect/temp_visual/hierophant/wall/crusher
- duration = 75
-
/obj/item/crusher_trophy/adaptive_intelligence_core
name = "adaptive intelligence core"
desc = "Seems to be one of the cores from a massive robot. Suitable as a trophy for a kinetic crusher."
diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm
index 1d353d1309c8..f0acc21cc535 100644
--- a/code/modules/mining/equipment/marker_beacons.dm
+++ b/code/modules/mining/equipment/marker_beacons.dm
@@ -74,7 +74,8 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list(
name = "marker beacon"
desc = "A Prism-brand path illumination device. It is anchored in place and glowing steadily."
icon = 'icons/obj/lighting.dmi'
- icon_state = "marker"
+ icon_state = "markerrandom"
+ base_icon_state = "marker"
layer = BELOW_OPEN_DOOR_LAYER
armor = list(MELEE = 50, BULLET = 75, LASER = 75, ENERGY = 75, BOMB = 25, RAD = 100, FIRE = 25, ACID = 0)
max_integrity = 50
@@ -104,7 +105,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list(
/obj/structure/marker_beacon/update_icon_state()
while(!picked_color || !GLOB.marker_beacon_colors[picked_color])
picked_color = pick(GLOB.marker_beacon_colors)
- icon_state = "[initial(icon_state)][lowertext(picked_color)]-on"
+ icon_state = "[base_icon_state][lowertext(picked_color)]-on"
set_light(light_range, light_power, GLOB.marker_beacon_colors[picked_color])
/obj/structure/marker_beacon/attack_hand(mob/living/user)
@@ -150,6 +151,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list(
name = "docking beacon"
desc = "An illumination device used to designate docking ports. It is anchored in place and pulsing steadily."
icon_state = "dockingmarker"
+ base_icon_state = "dockingmarker"
flags = NODECONSTRUCT
/obj/structure/marker_beacon/dock_marker/update_icon_state()
diff --git a/code/modules/mining/equipment/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm
index e610361bdd67..fe0fd5b0a785 100644
--- a/code/modules/mining/equipment/mineral_scanner.dm
+++ b/code/modules/mining/equipment/mineral_scanner.dm
@@ -7,7 +7,7 @@
item_state = "analyzer"
w_class = WEIGHT_CLASS_SMALL
flags = CONDUCT
- slot_flags = SLOT_FLAG_BELT
+ slot_flags = ITEM_SLOT_BELT
var/cooldown = 35
var/current_cooldown = 0
@@ -26,8 +26,8 @@
/obj/item/mining_scanner/admin/attack_self(mob/user)
for(var/turf/simulated/mineral/M in world)
- if(M.scan_state)
- M.icon_state = M.scan_state
+ if(M.ore?.scan_icon_state)
+ M.icon_state = M.ore.scan_icon_state
qdel(src)
/obj/item/t_scanner/adv_mining_scanner
@@ -37,7 +37,7 @@
item_state = "analyzer"
w_class = WEIGHT_CLASS_SMALL
flags = CONDUCT
- slot_flags = SLOT_FLAG_BELT
+ slot_flags = ITEM_SLOT_BELT
var/cooldown = 35
var/current_cooldown = 0
var/range = 7
@@ -61,7 +61,7 @@
/proc/mineral_scan_pulse(turf/T, range = world.view)
var/list/minerals = list()
for(var/turf/simulated/mineral/M in range(range, T))
- if(M.scan_state)
+ if(M.ore?.scan_icon_state)
minerals += M
if(LAZYLEN(minerals))
for(var/turf/simulated/mineral/M in minerals)
@@ -69,12 +69,13 @@
if(oldC)
qdel(oldC)
var/obj/effect/temp_visual/mining_overlay/C = new /obj/effect/temp_visual/mining_overlay(M)
- C.icon_state = M.scan_state
+ C.icon_state = M.ore.scan_icon_state
/obj/effect/temp_visual/mining_overlay
plane = FULLSCREEN_PLANE
layer = FLASH_LAYER
icon = 'icons/effects/ore_visuals.dmi'
+ icon_state = null
appearance_flags = 0 //to avoid having TILE_BOUND in the flags, so that the 480x480 icon states let you see it no matter where you are
duration = 35
pixel_x = -224
diff --git a/code/modules/mining/equipment/mining_charges.dm b/code/modules/mining/equipment/mining_charges.dm
index f338e1ebddc9..74454a4b4ab8 100644
--- a/code/modules/mining/equipment/mining_charges.dm
+++ b/code/modules/mining/equipment/mining_charges.dm
@@ -15,7 +15,7 @@
var/boom_sizes = list(2, 3, 5)
var/hacked = FALSE
-/obj/item/grenade/plastic/miningcharge/Initialize()
+/obj/item/grenade/plastic/miningcharge/Initialize(mapload)
. = ..()
image_overlay = mutable_appearance(icon, "[icon_state]_active", ON_EDGED_TURF_LAYER)
@@ -82,8 +82,10 @@
for(var/turf/simulated/mineral/rock in circlerangeturfs(location, boom_sizes[3]))
var/distance = get_dist_euclidian(location, rock)
if(distance <= boom_sizes[3])
- rock.mineralAmt += 3 // if rock is going to get drilled, add bonus mineral amount
- rock.gets_drilled()
+ if(rock.ore)
+ rock.ore.drop_max += 3 // if rock is going to get drilled, add bonus mineral amount
+ rock.ore.drop_min += 3
+ rock.gets_drilled(triggered_by_explosion = TRUE)
for(var/mob/living/carbon/C in circlerange(location, boom_sizes[3]))
var/distance = get_dist_euclidian(location, C)
C.flash_eyes()
diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm
index 8a9bb832b883..4d5a6e63d55b 100644
--- a/code/modules/mining/equipment/mining_tools.dm
+++ b/code/modules/mining/equipment/mining_tools.dm
@@ -5,7 +5,7 @@
icon = 'icons/obj/mining_tool.dmi'
icon_state = "pickaxe"
flags = CONDUCT
- slot_flags = SLOT_FLAG_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 15
throwforce = 10
item_state = "pickaxe"
@@ -130,7 +130,7 @@
icon = 'icons/obj/mining_tool.dmi'
icon_state = "shovel"
flags = CONDUCT
- slot_flags = SLOT_FLAG_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 8
throwforce = 4
item_state = "shovel"
diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm
index 6f7fccc38d53..03b66feb0118 100644
--- a/code/modules/mining/equipment/survival_pod.dm
+++ b/code/modules/mining/equipment/survival_pod.dm
@@ -99,6 +99,10 @@
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "pwindow"
+/obj/structure/window/full/shuttle/survival_pod/tinted
+ name = "tinted pod window"
+ opacity = TRUE
+
//Floors
/turf/simulated/floor/pod
name = "pod floor"
@@ -279,7 +283,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/economy/vending/wallmed/survival_pod,
var/buildstacktype = /obj/item/stack/sheet/metal
var/buildstackamount = 5
-/obj/structure/fans/Initialize(loc)
+/obj/structure/fans/Initialize(mapload, loc)
. = ..()
recalculate_atmos_connectivity()
diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm
index f82264900213..17cf4e80bd8f 100644
--- a/code/modules/mining/equipment/wormhole_jaunter.dm
+++ b/code/modules/mining/equipment/wormhole_jaunter.dm
@@ -12,7 +12,7 @@ GLOBAL_LIST_EMPTY(wormhole_effect)
throw_speed = 3
throw_range = 5
origin_tech = "bluespace=2"
- slot_flags = SLOT_FLAG_BELT
+ slot_flags = ITEM_SLOT_BELT
/obj/item/wormhole_jaunter/attack_self(mob/user)
user.visible_message("[user.name] activates the [name]!")
@@ -55,7 +55,7 @@ GLOBAL_LIST_EMPTY(wormhole_effect)
qdel(src)
/obj/item/wormhole_jaunter/proc/chasm_react(mob/user)
- if(user.get_item_by_slot(SLOT_HUD_BELT) == src)
+ if(user.get_item_by_slot(ITEM_SLOT_BELT) == src)
to_chat(user, "Your [name] activates, saving you from the chasm!")
activate(user, FALSE)
else
@@ -181,7 +181,7 @@ GLOBAL_LIST_EMPTY(wormhole_effect)
icon_state = "flare-contractor-on"
duration = 5.1 SECONDS // Needs to be slightly longer then the callback to make the portal
-/obj/effect/temp_visual/getaway_flare/Initialize()
+/obj/effect/temp_visual/getaway_flare/Initialize(mapload)
. = ..()
playsound(loc, 'sound/goonstation/misc/matchstick_light.ogg', 50, TRUE)
set_light(8, l_color = "#FFD165")
@@ -379,7 +379,7 @@ GLOBAL_LIST_EMPTY(wormhole_effect)
/obj/effect/temp_visual/thunderbolt_targeting/wormhole_weaver
duration = 5 SECONDS
-/obj/effect/temp_visual/thunderbolt_targeting/wormhole_weaver/Initialize()
+/obj/effect/temp_visual/thunderbolt_targeting/wormhole_weaver/Initialize(mapload)
. = ..()
GLOB.wormhole_effect += src
playsound(loc, 'sound/machines/twobeep.ogg', 50, TRUE)
diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm
index 66e473e25bf2..f05c780505a4 100644
--- a/code/modules/mining/fulton.dm
+++ b/code/modules/mining/fulton.dm
@@ -66,7 +66,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons)
to_chat(user, "
You start attaching the pack to [A]...")
if(do_after(user, 50, target = A))
to_chat(user, "
You attach the pack to [A] and activate it.")
- user.equip_to_slot_if_possible(src, SLOT_HUD_IN_BACKPACK, FALSE, TRUE)
+ user.equip_to_slot_if_possible(src, ITEM_SLOT_IN_BACKPACK, FALSE, TRUE)
uses_left--
if(uses_left <= 0)
user.drop_item(src)
@@ -178,10 +178,10 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons)
/obj/effect/extraction_holder
name = "extraction holder"
- desc = "you shouldnt see this"
+ desc = "You shouldnt see this."
var/atom/movable/stored_obj
-/obj/effect/extraction_holder/Initialize()
+/obj/effect/extraction_holder/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_EFFECT_CAN_TELEPORT, ROUNDSTART_TRAIT)
diff --git a/code/modules/mining/laborcamp/laborshuttle.dm b/code/modules/mining/laborcamp/laborshuttle.dm
index 7a79f1b96436..837b6b5f8b88 100644
--- a/code/modules/mining/laborcamp/laborshuttle.dm
+++ b/code/modules/mining/laborcamp/laborshuttle.dm
@@ -36,7 +36,7 @@
var/inserted_id_uid
var/obj/item/radio/intercom/announcer
-/obj/machinery/mineral/labor_prisoner_shuttle_console/Initialize()
+/obj/machinery/mineral/labor_prisoner_shuttle_console/Initialize(mapload)
. = ..()
announcer = new /obj/item/radio/intercom(null)
announcer.follow_target = src
diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm
index 9768e5d08e68..9780ef5a7c84 100644
--- a/code/modules/mining/lavaland/ash_flora.dm
+++ b/code/modules/mining/lavaland/ash_flora.dm
@@ -2,7 +2,8 @@
gender = PLURAL
layer = PROJECTILE_HIT_THRESHHOLD_LAYER //sporangiums up don't shoot
icon = 'icons/obj/lavaland/ash_flora.dmi'
- icon_state = "l_mushroom"
+ icon_state = "l_mushroom1"
+ base_icon_state = "l_mushroom"
name = "large mushrooms"
desc = "A number of large mushrooms, covered in a faint layer of ash and what can only be spores."
anchored = TRUE
@@ -24,7 +25,7 @@
/obj/structure/flora/ash/Initialize(mapload)
. = ..()
- base_icon = "[icon_state][rand(1, 4)]"
+ base_icon = "[base_icon_state][rand(1, 4)]"
icon_state = base_icon
/obj/structure/flora/ash/proc/harvest(user)
@@ -80,7 +81,8 @@
regrowth_time_low = 4200
/obj/structure/flora/ash/leaf_shroom
- icon_state = "s_mushroom"
+ icon_state = "s_mushroom1"
+ base_icon_state = "s_mushroom"
name = "leafy mushrooms"
desc = "A number of mushrooms, each of which surrounds a greenish sporangium with a number of leaf-like structures."
harvested_name = "leafless mushrooms"
@@ -96,7 +98,8 @@
regrowth_time_high = 6000
/obj/structure/flora/ash/cap_shroom
- icon_state = "r_mushroom"
+ icon_state = "r_mushroom1"
+ base_icon_state = "r_mushroom"
name = "tall mushrooms"
desc = "Several mushrooms, the larger of which have a ring of conks at the midpoint of their stems."
harvested_name = "small mushrooms"
@@ -111,7 +114,8 @@
regrowth_time_high = 5400
/obj/structure/flora/ash/stem_shroom
- icon_state = "t_mushroom"
+ icon_state = "t_mushroom1"
+ base_icon_state = "t_mushroom"
name = "numerous mushrooms"
desc = "A large number of mushrooms, some of which have long, fleshy stems. They're radiating light!"
light_range = 1.5
@@ -128,7 +132,8 @@
regrowth_time_high = 6000
/obj/structure/flora/ash/cacti
- icon_state = "cactus"
+ icon_state = "cactus1"
+ base_icon_state = "cactus"
name = "fruiting cacti"
desc = "Several prickly cacti, brimming with ripe fruit and covered in a thin layer of ash."
harvested_name = "cacti"
@@ -156,6 +161,7 @@
name = "large rock"
desc = "A volcanic rock. Pioneers used to ride these babies for miles."
icon_state = "basalt1"
+ base_icon_state = "basalt"
density = TRUE
resistance_flags = FIRE_PROOF
harvest = /obj/item/stack/ore/glass/basalt
diff --git a/code/modules/mining/lavaland/loot/ashdragon_loot.dm b/code/modules/mining/lavaland/loot/ashdragon_loot.dm
index 31f42bc2ef8b..94fc152dab4e 100644
--- a/code/modules/mining/lavaland/loot/ashdragon_loot.dm
+++ b/code/modules/mining/lavaland/loot/ashdragon_loot.dm
@@ -252,7 +252,7 @@
lefthand_file = 'icons/mob/inhands/staves_lefthand.dmi'
righthand_file = 'icons/mob/inhands/staves_righthand.dmi'
item_state = "lavastaff"
- slot_flags = SLOT_FLAG_BACK
+ slot_flags = ITEM_SLOT_BACK
w_class = WEIGHT_CLASS_BULKY
force = 25
damtype = BURN
diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm
index def0e5c7c202..a4786aa23cfd 100644
--- a/code/modules/mining/lavaland/loot/colossus_loot.dm
+++ b/code/modules/mining/lavaland/loot/colossus_loot.dm
@@ -79,7 +79,7 @@
/obj/machinery/anomalous_crystal/ex_act()
ActivationReaction(null,"bomb")
-/obj/machinery/anomalous_crystal/random/Initialize() //Just a random crysal spawner for loot
+/obj/machinery/anomalous_crystal/random/Initialize(mapload) //Just a random crysal spawner for loot
. = ..()
var/random_crystal = pick(typesof(/obj/machinery/anomalous_crystal) - /obj/machinery/anomalous_crystal/random - /obj/machinery/anomalous_crystal)
new random_crystal(loc)
@@ -376,7 +376,7 @@
/datum/spell/exit_possession
name = "Exit Possession"
- desc = "Exits the body you are possessing"
+ desc = "Exits the body you are possessing."
base_cooldown = 60
clothes_req = FALSE
invocation_type = "none"
diff --git a/code/modules/mining/lavaland/loot/hierophant_loot.dm b/code/modules/mining/lavaland/loot/hierophant_loot.dm
index eb5b621a6300..eaa7ecc93184 100644
--- a/code/modules/mining/lavaland/loot/hierophant_loot.dm
+++ b/code/modules/mining/lavaland/loot/hierophant_loot.dm
@@ -10,7 +10,7 @@
righthand_file = 'icons/mob/inhands/64x64_righthand.dmi'
inhand_x_dimension = 64
inhand_y_dimension = 64
- slot_flags = SLOT_FLAG_BACK
+ slot_flags = ITEM_SLOT_BACK
w_class = WEIGHT_CLASS_BULKY
force = 15
attack_verb = list("clubbed", "beat", "pummeled")
@@ -242,6 +242,8 @@
var/turf/turf_to_teleport_to = get_step(target, get_dir(source, M)) //get position relative to caster
if(!turf_to_teleport_to || is_blocked_turf(turf_to_teleport_to, TRUE))
return
+ if(SEND_SIGNAL(M, COMSIG_MOVABLE_TELEPORTING, turf_to_teleport_to) & COMPONENT_BLOCK_TELEPORT)
+ return FALSE
if(ishuman(M))
var/mob/living/carbon/human/H = M
H.set_alpha_tracking(0, src, update_alpha = FALSE)
diff --git a/code/modules/mining/lavaland/loot/legion_loot.dm b/code/modules/mining/lavaland/loot/legion_loot.dm
index 40c1e51167a3..4153ea14f90f 100644
--- a/code/modules/mining/lavaland/loot/legion_loot.dm
+++ b/code/modules/mining/lavaland/loot/legion_loot.dm
@@ -6,7 +6,7 @@
righthand_file = 'icons/mob/inhands/staves_righthand.dmi'
item_state = "staffofstorms"
icon = 'icons/obj/guns/magic.dmi'
- slot_flags = SLOT_FLAG_BACK
+ slot_flags = ITEM_SLOT_BACK
w_class = WEIGHT_CLASS_BULKY
force = 25
damtype = BURN
@@ -96,7 +96,7 @@
// This early return stops the staff from shooting lightning at someone when being used as a lighter.
if(iscarbon(target))
var/mob/living/carbon/cig_haver = target
- var/mask_item = cig_haver.get_item_by_slot(SLOT_HUD_WEAR_MASK)
+ var/mask_item = cig_haver.get_item_by_slot(ITEM_SLOT_MASK)
if(istype(mask_item, /obj/item/clothing/mask/cigarette) && user.zone_selected == "mouth" && user.a_intent == INTENT_HELP)
return
diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm
index 2055b5e736ab..0f8f872a5a04 100644
--- a/code/modules/mining/lavaland/loot/tendril_loot.dm
+++ b/code/modules/mining/lavaland/loot/tendril_loot.dm
@@ -18,7 +18,7 @@
desc = "Somehow, it's in two places at once."
icon = 'icons/obj/storage.dmi'
icon_state = "cultpack"
- slot_flags = SLOT_FLAG_BACK
+ slot_flags = ITEM_SLOT_BACK
resistance_flags = INDESTRUCTIBLE
var/obj/item/storage/backpack/shared/bag
@@ -41,7 +41,7 @@
bag.red = src
bag.blue = blue
-/obj/item/shared_storage/Initialize()
+/obj/item/shared_storage/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_ADJACENCY_TRANSPARENT, ROUNDSTART_TRAIT)
@@ -293,6 +293,8 @@
if(cooldown)
to_chat(user, "
[src] sparks and fizzles.")
return
+ if(SEND_SIGNAL(user, COMSIG_MOVABLE_TELEPORTING, get_turf(linked)) & COMPONENT_BLOCK_TELEPORT)
+ return FALSE
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(1, FALSE, user)
@@ -342,6 +344,7 @@
desc = "a hook."
projectile_type = /obj/item/projectile/hook
caliber = "hook"
+ icon = 'icons/obj/lavaland/artefacts.dmi'
icon_state = "hook"
muzzle_flash_effect = null
@@ -426,7 +429,7 @@
icon = 'icons/effects/effects.dmi'
var/can_destroy = FALSE
-/obj/effect/immortality_talisman/Initialize()
+/obj/effect/immortality_talisman/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_EFFECT_CAN_TELEPORT, ROUNDSTART_TRAIT)
diff --git a/code/modules/mob/inventory_procs.dm b/code/modules/mob/inventory_procs.dm
index f38dabacd7e4..569f493d25ab 100644
--- a/code/modules/mob/inventory_procs.dm
+++ b/code/modules/mob/inventory_procs.dm
@@ -61,9 +61,9 @@
/mob/proc/put_in_hand(obj/item/I, slot)
switch(slot)
- if(SLOT_HUD_LEFT_HAND)
+ if(ITEM_SLOT_LEFT_HAND)
return put_in_l_hand(I)
- if(SLOT_HUD_RIGHT_HAND)
+ if(ITEM_SLOT_RIGHT_HAND)
return put_in_r_hand(I)
//Puts the item into your l_hand if possible and calls all necessary triggers/updates. returns 1 on success.
@@ -75,7 +75,7 @@
l_hand = W
W.layer = ABOVE_HUD_LAYER //TODO: move to equipped?
W.plane = ABOVE_HUD_PLANE //TODO: move to equipped?
- W.equipped(src, SLOT_HUD_LEFT_HAND)
+ W.equipped(src, ITEM_SLOT_LEFT_HAND)
if(pulling == W)
stop_pulling()
update_inv_l_hand()
@@ -91,7 +91,7 @@
r_hand = W
W.layer = ABOVE_HUD_LAYER
W.plane = ABOVE_HUD_PLANE
- W.equipped(src,SLOT_HUD_RIGHT_HAND)
+ W.equipped(src,ITEM_SLOT_RIGHT_HAND)
if(pulling == W)
stop_pulling()
update_inv_r_hand()
@@ -277,17 +277,17 @@
S.handle_item_insertion(src, M)
return TRUE
- S = M.get_item_by_slot(SLOT_HUD_WEAR_ID)
+ S = M.get_item_by_slot(ITEM_SLOT_ID)
if(istype(S) && S.can_be_inserted(src, TRUE)) //else we put in a wallet
S.handle_item_insertion(src, M)
return TRUE
- S = M.get_item_by_slot(SLOT_HUD_BELT)
+ S = M.get_item_by_slot(ITEM_SLOT_BELT)
if(istype(S) && S.can_be_inserted(src, TRUE)) //else we put in belt
S.handle_item_insertion(src, M)
return TRUE
- var/obj/item/O = M.get_item_by_slot(SLOT_HUD_BACK) //else we put in backpack
+ var/obj/item/O = M.get_item_by_slot(ITEM_SLOT_BACK) //else we put in backpack
if(istype(O, /obj/item/storage))
S = O
if(S.can_be_inserted(src, TRUE))
@@ -315,16 +315,31 @@
/mob/proc/get_item_by_slot(slot_id)
switch(slot_id)
- if(SLOT_HUD_WEAR_MASK)
+ if(ITEM_SLOT_MASK)
return wear_mask
- if(SLOT_HUD_BACK)
+ if(ITEM_SLOT_BACK)
return back
- if(SLOT_HUD_LEFT_HAND)
+ if(ITEM_SLOT_LEFT_HAND)
return l_hand
- if(SLOT_HUD_RIGHT_HAND)
+ if(ITEM_SLOT_RIGHT_HAND)
return r_hand
return null
+/mob/proc/get_slot_by_item(obj/item/looking_for)
+ if(looking_for == wear_mask)
+ return ITEM_SLOT_MASK
+
+ if(looking_for == back)
+ return ITEM_SLOT_BACK
+
+ if(looking_for == l_hand)
+ return ITEM_SLOT_LEFT_HAND
+
+ if(looking_for == r_hand)
+ return ITEM_SLOT_RIGHT_HAND
+
+ return null
+
//search for a path in inventory and storage items in that inventory (backpack, belt, etc) and return it.
/mob/proc/find_item(path)
var/list/L = get_contents()
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index f2b18ff15e9e..c01cffefa31c 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -138,7 +138,7 @@
// Noise "language", for audible emotes.
/datum/language/noise
name = "Noise"
- desc = "Noises"
+ desc = "Noises."
key = ""
flags = RESTRICTED|NONGLOBAL|INNATE|NO_TALK_MSG|NO_STUTTER
@@ -731,6 +731,8 @@
popup.open()
/mob/living/Topic(href, href_list)
+ if(..())
+ return TRUE
if(href_list["default_lang"])
if(href_list["default_lang"] == "reset")
set_default_language(null)
@@ -740,8 +742,6 @@
set_default_language(L)
check_languages()
return TRUE
- else
- return ..()
/datum/language/human/monkey
name = "Chimpanzee"
diff --git a/code/modules/mob/living/carbon/alien/alien_base.dm b/code/modules/mob/living/carbon/alien/alien_base.dm
index e37f2a8705ef..92152327c4c7 100644
--- a/code/modules/mob/living/carbon/alien/alien_base.dm
+++ b/code/modules/mob/living/carbon/alien/alien_base.dm
@@ -5,6 +5,7 @@
bubble_icon = "alien"
icon = 'icons/mob/alien.dmi'
gender = NEUTER
+ faction = list("alien")
var/nightvision = TRUE
see_in_dark = 4
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_inventory.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_inventory.dm
index 6a929602998e..7bef0ed3234b 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_inventory.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_inventory.dm
@@ -11,7 +11,7 @@
var/obj/item/W = get_active_hand()
if(!W)
switch(slot_id)
- if(SLOT_HUD_OUTER_SUIT)
+ if(ITEM_SLOT_OUTER_SUIT)
if(wear_suit) wear_suit.attack_alien(src)
- if(SLOT_HUD_HEAD)
+ if(ITEM_SLOT_HEAD)
if(head) head.attack_alien(src)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm
index ac13fd82732f..0f2ee12fcfce 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm
@@ -68,7 +68,7 @@
/mob/living/carbon/alien/humanoid/update_inv_wear_suit()
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HUD_OUTER_SUIT]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_OUTER_SUIT)]
inv.update_icon()
if(wear_suit)
diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm
index 191ae6906660..39920b0cacef 100644
--- a/code/modules/mob/living/carbon/alien/special/facehugger.dm
+++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm
@@ -138,7 +138,7 @@
"
[src] tears [W] off of [target]'s face!")
src.loc = target
- target.equip_to_slot_if_possible(src, SLOT_HUD_WEAR_MASK, FALSE, TRUE)
+ target.equip_to_slot_if_possible(src, ITEM_SLOT_MASK, FALSE, TRUE)
if(!sterile)
M.KnockDown(impregnation_time + 2 SECONDS)
flags |= NODROP //You can't take it off until it dies... or figures out you're an IPC.
diff --git a/code/modules/mob/living/carbon/carbon_procs.dm b/code/modules/mob/living/carbon/carbon_procs.dm
index e3a91388a67d..57cca14845f8 100644
--- a/code/modules/mob/living/carbon/carbon_procs.dm
+++ b/code/modules/mob/living/carbon/carbon_procs.dm
@@ -539,10 +539,15 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven
/mob/living/proc/add_ventcrawl(obj/machinery/atmospherics/starting_machine, obj/machinery/atmospherics/target_move)
if(!istype(starting_machine) || !starting_machine.returnPipenet(target_move) || !starting_machine.can_see_pipes())
return
- var/datum/pipeline/pipeline = starting_machine.returnPipenet(target_move)
+ var/datum/pipeline/pipenet = starting_machine.returnPipenet(target_move)
+ pipenet.add_ventcrawler(src)
+ add_ventcrawl_images(pipenet)
+
+
+/mob/living/proc/add_ventcrawl_images(datum/pipeline/pipenet)
var/list/totalMembers = list()
- totalMembers |= pipeline.members
- totalMembers |= pipeline.other_atmosmch
+ totalMembers |= pipenet.members
+ totalMembers |= pipenet.other_atmosmch
for(var/obj/machinery/atmospherics/A in totalMembers)
if(!A.pipe_image)
A.update_pipe_image()
@@ -551,6 +556,10 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven
client.images += A.pipe_image
/mob/living/proc/remove_ventcrawl()
+ SEND_SIGNAL(src, COMSIG_LIVING_EXIT_VENTCRAWL)
+ remove_ventcrawl_images()
+
+/mob/living/proc/remove_ventcrawl_images()
if(client)
for(var/image/current_image in pipes_shown)
client.images -= current_image
@@ -571,9 +580,14 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven
remove_ventcrawl()
else
if(is_ventcrawling(src))
+ var/obj/machinery/atmospherics/atmos_machine = loc
+ if(!atmos_machine.can_see_pipes())
+ return
if(target_move)
- remove_ventcrawl()
- add_ventcrawl(loc, target_move)
+ remove_ventcrawl_images()
+ var/obj/machinery/atmospherics/current_pipe = loc
+ var/datum/pipeline/pipenet = current_pipe.returnPipenet(target_move)
+ add_ventcrawl_images(pipenet)
//Throwing stuff
@@ -757,22 +771,37 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven
/mob/living/carbon/get_item_by_slot(slot_id)
switch(slot_id)
- if(SLOT_HUD_BACK)
+ if(ITEM_SLOT_BACK)
return back
- if(SLOT_HUD_WEAR_MASK)
+ if(ITEM_SLOT_MASK)
return wear_mask
- if(SLOT_HUD_OUTER_SUIT)
+ if(ITEM_SLOT_OUTER_SUIT)
return wear_suit
- if(SLOT_HUD_LEFT_HAND)
+ if(ITEM_SLOT_LEFT_HAND)
return l_hand
- if(SLOT_HUD_RIGHT_HAND)
+ if(ITEM_SLOT_RIGHT_HAND)
return r_hand
- if(SLOT_HUD_HANDCUFFED)
+ if(ITEM_SLOT_HANDCUFFED)
return handcuffed
- if(SLOT_HUD_LEGCUFFED)
+ if(ITEM_SLOT_LEGCUFFED)
return legcuffed
return null
+/mob/living/carbon/get_slot_by_item(obj/item/looking_for)
+ if(looking_for == back)
+ return ITEM_SLOT_BACK
+
+ // if(back && (looking_for in back))
+ // return ITEM_SLOT_BACKPACK
+
+ if(looking_for == wear_mask)
+ return ITEM_SLOT_MASK
+
+ if(looking_for == head)
+ return ITEM_SLOT_HEAD
+
+ return ..()
+
//generates realistic-ish pulse output based on preset levels
/mob/living/carbon/proc/get_pulse()
var/temp = 0
@@ -949,6 +978,10 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven
/mob/living/carbon/emp_act(severity)
..()
+ if(HAS_TRAIT(src, TRAIT_EMP_IMMUNE))
+ return
+ if(HAS_TRAIT(src, TRAIT_EMP_RESIST))
+ severity = clamp(severity, EMP_LIGHT, EMP_WEAKENED)
for(var/X in internal_organs)
var/obj/item/organ/internal/O = X
O.emp_act(severity)
diff --git a/code/modules/mob/living/carbon/carbon_stripping.dm b/code/modules/mob/living/carbon/carbon_stripping.dm
index e29abf475da8..19125b47082e 100644
--- a/code/modules/mob/living/carbon/carbon_stripping.dm
+++ b/code/modules/mob/living/carbon/carbon_stripping.dm
@@ -1,10 +1,10 @@
/datum/strippable_item/mob_item_slot/head
key = STRIPPABLE_ITEM_HEAD
- item_slot = SLOT_HUD_HEAD
+ item_slot = ITEM_SLOT_HEAD
/datum/strippable_item/mob_item_slot/back
key = STRIPPABLE_ITEM_BACK
- item_slot = SLOT_HUD_BACK
+ item_slot = ITEM_SLOT_BACK
/datum/strippable_item/mob_item_slot/back/get_alternate_actions(atom/source, mob/user)
return get_strippable_alternate_action_internals(get_item(source), source)
@@ -16,7 +16,7 @@
/datum/strippable_item/mob_item_slot/mask
key = STRIPPABLE_ITEM_MASK
- item_slot = SLOT_HUD_WEAR_MASK
+ item_slot = ITEM_SLOT_MASK
/datum/strippable_item/mob_item_slot/mask/get_body_action(atom/source, mob/user)
if(!ishuman(source))
@@ -84,7 +84,7 @@
/datum/strippable_item/mob_item_slot/handcuffs
key = STRIPPABLE_ITEM_HANDCUFFS
- item_slot = SLOT_HUD_HANDCUFFED
+ item_slot = ITEM_SLOT_HANDCUFFED
/datum/strippable_item/mob_item_slot/handcuffs/should_show(atom/source, mob/user)
if(!iscarbon(source))
@@ -99,7 +99,7 @@
/datum/strippable_item/mob_item_slot/legcuffs
key = STRIPPABLE_ITEM_LEGCUFFS
- item_slot = SLOT_HUD_LEGCUFFED
+ item_slot = ITEM_SLOT_LEGCUFFED
/datum/strippable_item/mob_item_slot/legcuffs/should_show(atom/source, mob/user)
if(!iscarbon(source))
@@ -173,8 +173,8 @@
/datum/strippable_item/hand/left
key = STRIPPABLE_ITEM_LHAND
- which_hand = SLOT_HUD_LEFT_HAND
+ which_hand = ITEM_SLOT_LEFT_HAND
/datum/strippable_item/hand/right
key = STRIPPABLE_ITEM_RHAND
- which_hand = SLOT_HUD_RIGHT_HAND
+ which_hand = ITEM_SLOT_RIGHT_HAND
diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm
index 203b7ae10d4e..414130c96d5b 100644
--- a/code/modules/mob/living/carbon/carbon_update_icons.dm
+++ b/code/modules/mob/living/carbon/carbon_update_icons.dm
@@ -12,7 +12,7 @@
final_pixel_y = pixel_y
else //if(lying != 0)
if(lying_prev == 0) //Standing to lying
- final_pixel_y = PIXEL_Y_OFFSET_LYING
+ final_pixel_y = pixel_y + PIXEL_Y_OFFSET_LYING
if(dir & (EAST|WEST)) //Facing east or west
final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass
if(resize != RESIZE_DEFAULT_SIZE)
@@ -35,9 +35,9 @@
/mob/living/carbon/proc/update_hands_hud()
if(!hud_used)
return
- var/atom/movable/screen/inventory/R = hud_used.inv_slots[SLOT_HUD_RIGHT_HAND]
+ var/atom/movable/screen/inventory/R = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_RIGHT_HAND)]
R?.update_icon()
- var/atom/movable/screen/inventory/L = hud_used.inv_slots[SLOT_HUD_LEFT_HAND]
+ var/atom/movable/screen/inventory/L = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_LEFT_HAND)]
L?.update_icon()
/mob/living/carbon/update_inv_r_hand(ignore_cuffs)
@@ -66,8 +66,8 @@
update_hud_wear_mask(wear_mask)
/mob/living/carbon/update_inv_back()
- if(client && hud_used && hud_used.inv_slots[SLOT_HUD_BACK])
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HUD_BACK]
+ if(client && hud_used && hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_BACK)])
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_BACK)]
inv.update_icon()
if(back)
diff --git a/code/modules/mob/living/carbon/carbon_update_status.dm b/code/modules/mob/living/carbon/carbon_update_status.dm
index d06555cc6310..5b1d89a4da6c 100644
--- a/code/modules/mob/living/carbon/carbon_update_status.dm
+++ b/code/modules/mob/living/carbon/carbon_update_status.dm
@@ -1,7 +1,8 @@
/mob/living/carbon/update_stat(reason = "none given")
if(status_flags & GODMODE)
return
- if(stat != DEAD)
+
+ if(stat != DEAD && !(status_flags & TERMINATOR_FORM))
if(health <= HEALTH_THRESHOLD_DEAD && check_death_method())
death()
create_debug_log("died of damage, trigger reason: [reason]")
diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm
index 42511b04c461..bba2f1c9e9fa 100644
--- a/code/modules/mob/living/carbon/examine.dm
+++ b/code/modules/mob/living/carbon/examine.dm
@@ -208,7 +208,7 @@
var/just_sleeping = FALSE //We don't appear as dead upon casual examination, just sleeping
if(stat == DEAD || HAS_TRAIT(src, TRAIT_FAKEDEATH))
- var/obj/item/clothing/glasses/E = get_item_by_slot(SLOT_HUD_GLASSES)
+ var/obj/item/clothing/glasses/E = get_item_by_slot(ITEM_SLOT_EYES)
var/are_we_in_weekend_at_bernies = E?.tint && istype(buckled, /obj/structure/chair) //Are we in a chair with our eyes obscured?
if(isliving(user) && are_we_in_weekend_at_bernies)
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index f508bc1e511f..e0f3c1d304f3 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -26,8 +26,8 @@
if(dna.species && amount > 0)
if(use_brain_mod)
amount *= dna.species.brain_mod
- sponge.damage = clamp(sponge.damage + amount, 0, 120)
- if(sponge.damage >= 120)
+ sponge.damage = clamp(sponge.damage + amount, 0, sponge.max_damage)
+ if(sponge.damage >= sponge.max_damage)
death()
if(updating)
update_stat("adjustBrainLoss")
@@ -44,7 +44,7 @@
if(use_brain_mod)
amount *= dna.species.brain_mod
sponge.damage = clamp(amount, 0, 120)
- if(sponge.damage >= 120)
+ if(sponge.damage >= sponge.max_damage)
death()
if(updating)
update_stat("setBrainLoss")
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 2c2f3d4d7417..ceed21264053 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -287,6 +287,10 @@ emp_act
/mob/living/carbon/human/emp_act(severity)
..()
+ if(HAS_TRAIT(src, TRAIT_EMP_IMMUNE))
+ return
+ if(HAS_TRAIT(src, TRAIT_EMP_RESIST))
+ severity = clamp(severity, EMP_LIGHT, EMP_WEAKENED)
for(var/X in bodyparts)
var/obj/item/organ/external/L = X
L.emp_act(severity)
diff --git a/code/modules/mob/living/carbon/human/human_inventory.dm b/code/modules/mob/living/carbon/human/human_inventory.dm
index 206958d2e123..b9ca980f82ea 100644
--- a/code/modules/mob/living/carbon/human/human_inventory.dm
+++ b/code/modules/mob/living/carbon/human/human_inventory.dm
@@ -20,50 +20,50 @@
/mob/living/carbon/human/proc/has_organ_for_slot(slot)
switch(slot)
- if(SLOT_HUD_BACK)
+ if(ITEM_SLOT_BACK)
return has_organ("chest")
- if(SLOT_HUD_WEAR_MASK)
+ if(ITEM_SLOT_MASK)
return has_organ("head")
- if(SLOT_HUD_HANDCUFFED)
+ if(ITEM_SLOT_HANDCUFFED)
return has_organ("l_hand") && has_organ("r_hand")
- if(SLOT_HUD_LEGCUFFED)
+ if(ITEM_SLOT_LEGCUFFED)
return has_organ("l_leg") && has_organ("r_leg")
- if(SLOT_HUD_LEFT_HAND)
+ if(ITEM_SLOT_LEFT_HAND)
return has_organ("l_hand")
- if(SLOT_HUD_RIGHT_HAND)
+ if(ITEM_SLOT_RIGHT_HAND)
return has_organ("r_hand")
- if(SLOT_HUD_BELT)
+ if(ITEM_SLOT_BELT)
return has_organ("chest")
- if(SLOT_HUD_WEAR_ID)
+ if(ITEM_SLOT_ID)
// the only relevant check for this is the uniform check
return TRUE
- if(SLOT_HUD_WEAR_PDA)
+ if(ITEM_SLOT_PDA)
return TRUE
- if(SLOT_HUD_LEFT_EAR)
+ if(ITEM_SLOT_LEFT_EAR)
return has_organ("head")
- if(SLOT_HUD_RIGHT_EAR)
+ if(ITEM_SLOT_RIGHT_EAR)
return has_organ("head")
- if(SLOT_HUD_GLASSES)
+ if(ITEM_SLOT_EYES)
return has_organ("head")
- if(SLOT_HUD_GLOVES)
+ if(ITEM_SLOT_GLOVES)
return has_organ("l_hand") && has_organ("r_hand")
- if(SLOT_HUD_HEAD)
+ if(ITEM_SLOT_HEAD)
return has_organ("head")
- if(SLOT_HUD_SHOES)
+ if(ITEM_SLOT_SHOES)
return has_organ("r_foot") && has_organ("l_foot")
- if(SLOT_HUD_OUTER_SUIT)
+ if(ITEM_SLOT_OUTER_SUIT)
return has_organ("chest")
- if(SLOT_HUD_JUMPSUIT)
+ if(ITEM_SLOT_JUMPSUIT)
return has_organ("chest")
- if(SLOT_HUD_LEFT_STORE)
+ if(ITEM_SLOT_LEFT_POCKET)
return has_organ("chest")
- if(SLOT_HUD_RIGHT_STORE)
+ if(ITEM_SLOT_RIGHT_POCKET)
return has_organ("chest")
- if(SLOT_HUD_SUIT_STORE)
+ if(ITEM_SLOT_SUIT_STORE)
return has_organ("chest")
- if(SLOT_HUD_IN_BACKPACK)
+ if(ITEM_SLOT_IN_BACKPACK)
return TRUE
- if(SLOT_HUD_TIE)
+ if(ITEM_SLOT_ACCESSORY)
return TRUE
/mob/living/carbon/human/unEquip(obj/item/I, force, silent = FALSE)
@@ -187,7 +187,6 @@
src.r_hand = null
update_inv_r_hand()
- I.screen_loc = null
if(client)
client.screen -= I
if(length(observers))
@@ -201,10 +200,10 @@
I.plane = ABOVE_HUD_PLANE
switch(slot)
- if(SLOT_HUD_BACK)
+ if(ITEM_SLOT_BACK)
back = I
update_inv_back()
- if(SLOT_HUD_WEAR_MASK)
+ if(ITEM_SLOT_MASK)
wear_mask = I
if((wear_mask.flags & BLOCKHAIR) || (wear_mask.flags & BLOCKHEADHAIR))
update_hair() //rebuild hair
@@ -215,48 +214,48 @@
wear_mask_update(I, toggle_off = TRUE)
update_misc_effects()
update_inv_wear_mask()
- if(SLOT_HUD_HANDCUFFED)
+ if(ITEM_SLOT_HANDCUFFED)
handcuffed = I
update_inv_handcuffed()
- if(SLOT_HUD_LEGCUFFED)
+ if(ITEM_SLOT_LEGCUFFED)
legcuffed = I
update_inv_legcuffed()
- if(SLOT_HUD_LEFT_HAND)
+ if(ITEM_SLOT_LEFT_HAND)
l_hand = I
update_inv_l_hand()
- if(SLOT_HUD_RIGHT_HAND)
+ if(ITEM_SLOT_RIGHT_HAND)
r_hand = I
update_inv_r_hand()
- if(SLOT_HUD_BELT)
+ if(ITEM_SLOT_BELT)
belt = I
update_inv_belt()
- if(SLOT_HUD_WEAR_ID)
+ if(ITEM_SLOT_ID)
wear_id = I
if(length(hud_list))
sec_hud_set_ID()
update_inv_wear_id()
- if(SLOT_HUD_WEAR_PDA)
+ if(ITEM_SLOT_PDA)
wear_pda = I
update_inv_wear_pda()
- if(SLOT_HUD_LEFT_EAR)
+ if(ITEM_SLOT_LEFT_EAR)
l_ear = I
- if(l_ear.slot_flags & SLOT_FLAG_TWOEARS)
- var/obj/item/clothing/ears/offear/O = new(I)
- O.forceMove(src)
- r_ear = O
- O.layer = ABOVE_HUD_LAYER
- O.plane = ABOVE_HUD_PLANE
+ // if(l_ear.slot_flags & ITEM_SLOT_LEFT_EAR) CHAP-TODO: ACTUALLY FIX OFFEARS OR REMOVE THEM COMPLETELY
+ // var/obj/item/clothing/ears/offear/O = new(I)
+ // O.forceMove(src)
+ // r_ear = O
+ // O.layer = ABOVE_HUD_LAYER
+ // O.plane = ABOVE_HUD_PLANE
update_inv_ears()
- if(SLOT_HUD_RIGHT_EAR)
+ if(ITEM_SLOT_RIGHT_EAR)
r_ear = I
- if(r_ear.slot_flags & SLOT_FLAG_TWOEARS)
- var/obj/item/clothing/ears/offear/O = new(I)
- O.forceMove(src)
- l_ear = O
- O.layer = ABOVE_HUD_LAYER
- O.plane = ABOVE_HUD_PLANE
+ // if(r_ear.slot_flags & ITEM_SLOT_RIGHT_EAR)
+ // var/obj/item/clothing/ears/offear/O = new(I)
+ // O.forceMove(src)
+ // l_ear = O
+ // O.layer = ABOVE_HUD_LAYER
+ // O.plane = ABOVE_HUD_PLANE
update_inv_ears()
- if(SLOT_HUD_GLASSES)
+ if(ITEM_SLOT_EYES)
glasses = I
var/obj/item/clothing/glasses/G = I
if(G.tint)
@@ -267,10 +266,10 @@
update_sight()
update_inv_glasses()
update_client_colour()
- if(SLOT_HUD_GLOVES)
+ if(ITEM_SLOT_GLOVES)
gloves = I
update_inv_gloves()
- if(SLOT_HUD_HEAD)
+ if(ITEM_SLOT_HEAD)
head = I
if((head.flags & BLOCKHAIR) || (head.flags & BLOCKHEADHAIR))
update_hair() //rebuild hair
@@ -284,27 +283,27 @@
// this calls update_inv_head() on its own
update_misc_effects()
head_update(I)
- if(SLOT_HUD_SHOES)
+ if(ITEM_SLOT_SHOES)
shoes = I
update_inv_shoes()
- if(SLOT_HUD_OUTER_SUIT)
+ if(ITEM_SLOT_OUTER_SUIT)
wear_suit = I
if(wear_suit.flags_inv & HIDESHOES)
update_inv_shoes()
update_inv_wear_suit()
- if(SLOT_HUD_JUMPSUIT)
+ if(ITEM_SLOT_JUMPSUIT)
w_uniform = I
update_inv_w_uniform()
- if(SLOT_HUD_LEFT_STORE)
+ if(ITEM_SLOT_LEFT_POCKET)
l_store = I
update_inv_pockets()
- if(SLOT_HUD_RIGHT_STORE)
+ if(ITEM_SLOT_RIGHT_POCKET)
r_store = I
update_inv_pockets()
- if(SLOT_HUD_SUIT_STORE)
+ if(ITEM_SLOT_SUIT_STORE)
s_store = I
update_inv_s_store()
- if(SLOT_HUD_IN_BACKPACK)
+ if(ITEM_SLOT_IN_BACKPACK)
if(get_active_hand() == I)
unEquip(I)
if(ismodcontrol(back))
@@ -313,12 +312,14 @@
I.forceMove(C.bag)
else
I.forceMove(back)
- if(SLOT_HUD_TIE)
+ if(ITEM_SLOT_ACCESSORY)
var/obj/item/clothing/under/uniform = src.w_uniform
uniform.attackby(I, src)
else
to_chat(src, "
You are trying to equip this item to an unsupported inventory slot. Report this to a coder!")
+ I.screen_loc = null
+
/mob/living/carbon/human/put_in_hands(obj/item/I)
if(!I)
return FALSE
@@ -337,48 +338,90 @@
// Return the item currently in the slot ID
/mob/living/carbon/human/get_item_by_slot(slot_id)
switch(slot_id)
- if(SLOT_HUD_BACK)
+ if(ITEM_SLOT_BACK)
return back
- if(SLOT_HUD_WEAR_MASK)
+ if(ITEM_SLOT_MASK)
return wear_mask
- if(SLOT_HUD_HANDCUFFED)
+ if(ITEM_SLOT_HANDCUFFED)
return handcuffed
- if(SLOT_HUD_LEGCUFFED)
+ if(ITEM_SLOT_LEGCUFFED)
return legcuffed
- if(SLOT_HUD_LEFT_HAND)
+ if(ITEM_SLOT_LEFT_HAND)
return l_hand
- if(SLOT_HUD_RIGHT_HAND)
+ if(ITEM_SLOT_RIGHT_HAND)
return r_hand
- if(SLOT_HUD_BELT)
+ if(ITEM_SLOT_BELT)
return belt
- if(SLOT_HUD_WEAR_ID)
+ if(ITEM_SLOT_ID)
return wear_id
- if(SLOT_HUD_WEAR_PDA)
+ if(ITEM_SLOT_PDA)
return wear_pda
- if(SLOT_HUD_LEFT_EAR)
+ if(ITEM_SLOT_LEFT_EAR)
return l_ear
- if(SLOT_HUD_RIGHT_EAR)
+ if(ITEM_SLOT_RIGHT_EAR)
return r_ear
- if(SLOT_HUD_GLASSES)
+ if(ITEM_SLOT_EYES)
return glasses
- if(SLOT_HUD_GLOVES)
+ if(ITEM_SLOT_GLOVES)
return gloves
- if(SLOT_HUD_HEAD)
+ if(ITEM_SLOT_HEAD)
return head
- if(SLOT_HUD_SHOES)
+ if(ITEM_SLOT_SHOES)
return shoes
- if(SLOT_HUD_OUTER_SUIT)
+ if(ITEM_SLOT_OUTER_SUIT)
return wear_suit
- if(SLOT_HUD_JUMPSUIT)
+ if(ITEM_SLOT_JUMPSUIT)
return w_uniform
- if(SLOT_HUD_LEFT_STORE)
+ if(ITEM_SLOT_LEFT_POCKET)
return l_store
- if(SLOT_HUD_RIGHT_STORE)
+ if(ITEM_SLOT_RIGHT_POCKET)
return r_store
- if(SLOT_HUD_SUIT_STORE)
+ if(ITEM_SLOT_SUIT_STORE)
return s_store
return null
+/mob/living/carbon/human/get_slot_by_item(obj/item/looking_for)
+ if(looking_for == belt)
+ return ITEM_SLOT_BELT
+
+ if(looking_for == wear_id)
+ return ITEM_SLOT_ID
+
+ if(looking_for == l_ear)
+ return ITEM_SLOT_LEFT_EAR
+
+ if(looking_for == r_ear)
+ return ITEM_SLOT_RIGHT_EAR
+
+ if(looking_for == glasses)
+ return ITEM_SLOT_EYES
+
+ if(looking_for == gloves)
+ return ITEM_SLOT_GLOVES
+
+ if(looking_for == head)
+ return ITEM_SLOT_HEAD
+
+ if(looking_for == shoes)
+ return ITEM_SLOT_SHOES
+
+ if(looking_for == wear_suit)
+ return ITEM_SLOT_OUTER_SUIT
+
+ if(looking_for == w_uniform)
+ return ITEM_SLOT_JUMPSUIT
+
+ if(looking_for == r_store)
+ return ITEM_SLOT_BOTH_POCKETS
+
+ if(looking_for == l_store)
+ return ITEM_SLOT_BOTH_POCKETS
+
+ // if(looking_for == s_store)
+ // return ITEM_SLOT_SUIT_STORE
+
+ return ..()
+
/mob/living/carbon/human/get_all_slots()
. = get_body_slots() | get_head_slots()
diff --git a/code/modules/mob/living/carbon/human/human_life.dm b/code/modules/mob/living/carbon/human/human_life.dm
index a71035751c39..1df47997fc71 100644
--- a/code/modules/mob/living/carbon/human/human_life.dm
+++ b/code/modules/mob/living/carbon/human/human_life.dm
@@ -42,6 +42,12 @@
if(life_tick == 1)
regenerate_icons() // Make sure the inventory updates
+ var/datum/antagonist/mindflayer/F = mind?.has_antag_datum(/datum/antagonist/mindflayer)
+ if(F)
+ F.handle_mindflayer()
+ if(life_tick == 1)
+ regenerate_icons()
+
if(player_ghosted > 0 && stat == CONSCIOUS && job && !restrained())
handle_ghosted()
if(player_logged > 0 && stat != DEAD && job)
@@ -605,17 +611,22 @@
if(status_flags & GODMODE)
return 0
+ if(status_flags & TERMINATOR_FORM)
+ return FALSE
+
var/guaranteed_death_threshold = health + (getOxyLoss() * 0.5) - (getFireLoss() * 0.67) - (getBruteLoss() * 0.67)
- if(getBrainLoss() >= 120 || (guaranteed_death_threshold) <= -500)
+ var/obj/item/organ/internal/brain = get_int_organ(/obj/item/organ/internal/brain)
+ if(brain?.damage >= brain.max_damage || (guaranteed_death_threshold) <= -500)
death()
return
- if(getBrainLoss() >= 100) // braindeath
+ if(check_brain_threshold(BRAIN_DAMAGE_RATIO_CRITICAL)) // braindeath
dna.species.handle_brain_death(src)
if(!check_death_method())
if(health <= HEALTH_THRESHOLD_DEAD)
+ // No need to get the fraction of the max brain damage here, because for it to matter, they'd probably be dead already
var/deathchance = min(99, ((getBrainLoss() / 5) + (health + (getOxyLoss() / -2))) * -0.1)
if(prob(deathchance))
death()
diff --git a/code/modules/mob/living/carbon/human/human_mob.dm b/code/modules/mob/living/carbon/human/human_mob.dm
index 4c914284b5c9..4a2c6548fe3c 100644
--- a/code/modules/mob/living/carbon/human/human_mob.dm
+++ b/code/modules/mob/living/carbon/human/human_mob.dm
@@ -656,14 +656,6 @@
break
if(skills)
to_chat(usr, "
Employment records: [skills]\n")
-
- if(href_list["lookitem"])
- var/obj/item/I = locate(href_list["lookitem"])
- src.examinate(I)
-
- if(href_list["lookmob"])
- var/mob/M = locate(href_list["lookmob"])
- src.examinate(M)
. = ..()
/mob/living/carbon/human/proc/try_set_criminal_status(mob/user)
@@ -777,13 +769,13 @@
///Checked in life.dm. 0 & 1 = no impairment, 2 = welding mask overlay, 3 = You can see jack, but you can't see shit.
/mob/living/carbon/human/tintcheck()
var/tinted = 0
- if(istype(src.head, /obj/item/clothing/head))
+ if(istype(head, /obj/item/clothing/head))
var/obj/item/clothing/head/HT = src.head
tinted += HT.tint
- if(istype(src.glasses, /obj/item/clothing/glasses))
+ if(istype(glasses, /obj/item/clothing/glasses))
var/obj/item/clothing/glasses/GT = src.glasses
tinted += GT.tint
- if(istype(src.wear_mask, /obj/item/clothing/mask))
+ if(istype(wear_mask, /obj/item/clothing/mask))
var/obj/item/clothing/mask/MT = src.wear_mask
tinted += MT.tint
@@ -813,7 +805,7 @@
xylophone=0
return
-/mob/living/carbon/human/can_inject(mob/user, error_msg, target_zone, penetrate_thick = FALSE, piercing = FALSE)
+/mob/living/carbon/human/can_inject(mob/user, error_msg, target_zone, penetrate_thick = FALSE, penetrate_everything = FALSE)
. = TRUE
if(!target_zone)
@@ -823,12 +815,6 @@
else
target_zone = user.zone_selected
- if(HAS_TRAIT(src, TRAIT_PIERCEIMMUNE))
- . = FALSE
-
- if(wear_suit && HAS_TRAIT(wear_suit, TRAIT_RSG_IMMUNE))
- return FALSE
-
var/obj/item/organ/external/affecting = get_organ(target_zone)
var/fail_msg
if(!affecting)
@@ -838,9 +824,16 @@
. = FALSE
fail_msg = "That limb is robotic."
- if(piercing)
+ // If there is flesh, inject.
+ if(penetrate_everything)
return TRUE
+ if(HAS_TRAIT(src, TRAIT_PIERCEIMMUNE))
+ . = FALSE
+
+ if(wear_suit && HAS_TRAIT(wear_suit, TRAIT_RSG_IMMUNE))
+ . = FALSE
+
if(target_zone == "head")
if((head?.flags & THICKMATERIAL) && !penetrate_thick)
. = FALSE
@@ -852,30 +845,34 @@
fail_msg = "There is no exposed flesh or thin material [target_zone == "head" ? "on [p_their()] head" : "on [p_their()] body"] to inject into."
to_chat(user, "
[fail_msg]")
+///
+/**
+ * Gets the obscured ITEM_SLOTs on a human
+ *
+ * Returns:
+ * * A bitfield containing the ITEM_SLOTS bitflags that are obscured.
+ */
/mob/living/carbon/human/proc/check_obscured_slots()
- var/list/obscured = list()
+ var/obscured = NONE
if(wear_suit)
if(wear_suit.flags_inv & HIDEGLOVES)
- obscured |= SLOT_HUD_GLOVES
+ obscured |= ITEM_SLOT_GLOVES
if(wear_suit.flags_inv & HIDEJUMPSUIT)
- obscured |= SLOT_HUD_JUMPSUIT
+ obscured |= ITEM_SLOT_JUMPSUIT
if(wear_suit.flags_inv & HIDESHOES)
- obscured |= SLOT_HUD_SHOES
+ obscured |= ITEM_SLOT_SHOES
if(head)
if(head.flags_inv & HIDEMASK)
- obscured |= SLOT_HUD_WEAR_MASK
+ obscured |= ITEM_SLOT_MASK
if(head.flags_inv & HIDEEYES)
- obscured |= SLOT_HUD_GLASSES
+ obscured |= ITEM_SLOT_EYES
if(head.flags_inv & HIDEEARS)
- obscured |= SLOT_HUD_RIGHT_EAR
- obscured |= SLOT_HUD_LEFT_EAR
+ obscured |= ITEM_SLOT_BOTH_EARS
- if(length(obscured) > 0)
+ if(obscured)
return obscured
- else
- return null
/mob/living/carbon/human/proc/check_has_mouth()
// Todo, check stomach organ when implemented.
@@ -885,9 +882,8 @@
return TRUE
/mob/living/carbon/human/proc/get_visible_gender()
- var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((SLOT_HUD_JUMPSUIT in obscured) && skipface)
+ if(skipface && (check_obscured_slots() & ITEM_SLOT_JUMPSUIT))
return PLURAL
return gender
@@ -936,7 +932,7 @@
if(!(organ in types_of_int_organs)) //If the mob is missing this particular organ...
var/obj/item/organ/internal/I = new organ(temp_holder) //Create the organ inside our holder so we can check it before implantation.
if(H.get_organ_slot(I.slot)) //Check to see if the user already has an organ in the slot the 'missing organ' belongs to. If they do, skip implantation.
- continue //In an example, this will prevent duplication of the mob's eyes if the mob is a Human and they have Nucleation eyes, since,
+ continue //In an example, this will prevent duplication of the mob's eyes if the mob is a Human and they have Nian eyes, since,
//while the organ in the eyes slot may not be listed in the mob's species' organs definition, it is still viable and fits in the appropriate organ slot.
else
I = new organ(H) //Create the organ inside the player.
@@ -1115,7 +1111,7 @@
if(!(dna.species.bodyflags & HAS_SKIN_TONE))
s_tone = 0
- var/list/thing_to_check = list(SLOT_HUD_WEAR_MASK, SLOT_HUD_HEAD, SLOT_HUD_SHOES, SLOT_HUD_GLOVES, SLOT_HUD_LEFT_EAR, SLOT_HUD_RIGHT_EAR, SLOT_HUD_GLASSES, SLOT_HUD_LEFT_HAND, SLOT_HUD_RIGHT_HAND)
+ var/list/thing_to_check = list(ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_SHOES, ITEM_SLOT_GLOVES, ITEM_SLOT_LEFT_EAR, ITEM_SLOT_RIGHT_EAR, ITEM_SLOT_EYES, ITEM_SLOT_LEFT_HAND, ITEM_SLOT_RIGHT_HAND)
var/list/kept_items[0]
var/list/item_flags[0]
for(var/thing in thing_to_check)
@@ -1785,8 +1781,8 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
organs_list[O.name] = O.serialize()
// Equipment
- equip_list.len = SLOT_HUD_AMOUNT
- for(var/i = 1, i < SLOT_HUD_AMOUNT, i++)
+ equip_list.len = ITEM_SLOT_AMOUNT
+ for(var/i = 1, i < ITEM_SLOT_AMOUNT, i++)
var/obj/item/thing = get_item_by_slot(i)
if(thing != null)
equip_list[i] = thing.serialize()
@@ -1845,16 +1841,16 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
// #1: Jumpsuit
// #2: Outer suit
// #3+: Everything else
- if(islist(equip_list[SLOT_HUD_JUMPSUIT]))
- var/obj/item/clothing/C = list_to_object(equip_list[SLOT_HUD_JUMPSUIT], T)
- equip_to_slot_if_possible(C, SLOT_HUD_JUMPSUIT)
+ if(islist(equip_list[ITEM_SLOT_JUMPSUIT]))
+ var/obj/item/clothing/C = list_to_object(equip_list[ITEM_SLOT_JUMPSUIT], T)
+ equip_to_slot_if_possible(C, ITEM_SLOT_JUMPSUIT)
- if(islist(equip_list[SLOT_HUD_OUTER_SUIT]))
- var/obj/item/clothing/C = list_to_object(equip_list[SLOT_HUD_OUTER_SUIT], T)
- equip_to_slot_if_possible(C, SLOT_HUD_OUTER_SUIT)
+ if(islist(equip_list[ITEM_SLOT_OUTER_SUIT]))
+ var/obj/item/clothing/C = list_to_object(equip_list[ITEM_SLOT_OUTER_SUIT], T)
+ equip_to_slot_if_possible(C, ITEM_SLOT_OUTER_SUIT)
- for(var/i = 1, i < SLOT_HUD_AMOUNT, i++)
- if(i == SLOT_HUD_JUMPSUIT || i == SLOT_HUD_OUTER_SUIT)
+ for(var/i = 1, i < ITEM_SLOT_AMOUNT, i++)
+ if(i == ITEM_SLOT_JUMPSUIT || i == ITEM_SLOT_OUTER_SUIT)
continue
if(islist(equip_list[i]))
var/obj/item/clothing/C = list_to_object(equip_list[i], T)
@@ -2061,3 +2057,10 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
. = ALPHA_VISIBLE
for(var/source in alpha_sources)
. = min(., alpha_sources[source])
+
+/*
+ * Returns wether or not the brain is below the threshold
+ */
+/mob/living/carbon/human/proc/check_brain_threshold(threshold_level)
+ var/obj/item/organ/internal/brain/brain_organ = get_int_organ(/obj/item/organ/internal/brain)
+ return brain_organ.damage >= (brain_organ.max_damage * threshold_level)
diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm
index f992b4215c79..4c87b39d007b 100644
--- a/code/modules/mob/living/carbon/human/human_say.dm
+++ b/code/modules/mob/living/carbon/human/human_say.dm
@@ -53,9 +53,9 @@
return has_changer
if(mind)
- var/datum/antagonist/changeling/cling = mind.has_antag_datum(/datum/antagonist/changeling)
- if(cling?.mimicing)
- return cling.mimicing
+ var/datum/antagonist/antagonist_status = mind.has_antag_datum(/datum/antagonist)
+ if(antagonist_status?.mimicking)
+ return antagonist_status.mimicking
if(GetSpecialVoice())
return GetSpecialVoice()
diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm
index 1e159ce42c68..fdb6e8a3d83f 100644
--- a/code/modules/mob/living/carbon/human/human_stripping.dm
+++ b/code/modules/mob/living/carbon/human/human_stripping.dm
@@ -26,11 +26,11 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/eyes
key = STRIPPABLE_ITEM_EYES
- item_slot = SLOT_HUD_GLASSES
+ item_slot = ITEM_SLOT_EYES
/datum/strippable_item/mob_item_slot/jumpsuit
key = STRIPPABLE_ITEM_JUMPSUIT
- item_slot = SLOT_HUD_JUMPSUIT
+ item_slot = ITEM_SLOT_JUMPSUIT
/datum/strippable_item/mob_item_slot/jumpsuit/get_alternate_actions(atom/source, mob/user)
var/list/multiple_options = list()
@@ -74,27 +74,27 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/left_ear
key = STRIPPABLE_ITEM_L_EAR
- item_slot = SLOT_HUD_LEFT_EAR
+ item_slot = ITEM_SLOT_LEFT_EAR
/datum/strippable_item/mob_item_slot/right_ear
key = STRIPPABLE_ITEM_R_EAR
- item_slot = SLOT_HUD_RIGHT_EAR
+ item_slot = ITEM_SLOT_RIGHT_EAR
/datum/strippable_item/mob_item_slot/suit
key = STRIPPABLE_ITEM_SUIT
- item_slot = SLOT_HUD_OUTER_SUIT
+ item_slot = ITEM_SLOT_OUTER_SUIT
/datum/strippable_item/mob_item_slot/gloves
key = STRIPPABLE_ITEM_GLOVES
- item_slot = SLOT_HUD_GLOVES
+ item_slot = ITEM_SLOT_GLOVES
/datum/strippable_item/mob_item_slot/feet
key = STRIPPABLE_ITEM_FEET
- item_slot = SLOT_HUD_SHOES
+ item_slot = ITEM_SLOT_SHOES
/datum/strippable_item/mob_item_slot/suit_storage
key = STRIPPABLE_ITEM_SUIT_STORAGE
- item_slot = SLOT_HUD_SUIT_STORE
+ item_slot = ITEM_SLOT_SUIT_STORE
/datum/strippable_item/mob_item_slot/suit_storage/get_alternate_actions(atom/source, mob/user)
return get_strippable_alternate_action_internals(get_item(source), source)
@@ -106,11 +106,11 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/id
key = STRIPPABLE_ITEM_ID
- item_slot = SLOT_HUD_WEAR_ID
+ item_slot = ITEM_SLOT_ID
/datum/strippable_item/mob_item_slot/pda
key = STRIPPABLE_ITEM_PDA
- item_slot = SLOT_HUD_WEAR_PDA
+ item_slot = ITEM_SLOT_PDA
/datum/strippable_item/mob_item_slot/pda/get_obscuring(atom/source)
return isnull(get_item(source)) \
@@ -119,7 +119,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/belt
key = STRIPPABLE_ITEM_BELT
- item_slot = SLOT_HUD_BELT
+ item_slot = ITEM_SLOT_BELT
/datum/strippable_item/mob_item_slot/belt/get_alternate_actions(atom/source, mob/user)
return get_strippable_alternate_action_internals(get_item(source), source)
@@ -168,12 +168,12 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/pocket/left
key = STRIPPABLE_ITEM_LPOCKET
- item_slot = SLOT_HUD_LEFT_STORE
+ item_slot = ITEM_SLOT_LEFT_POCKET
pocket_side = "left"
/datum/strippable_item/mob_item_slot/pocket/right
key = STRIPPABLE_ITEM_RPOCKET
- item_slot = SLOT_HUD_RIGHT_STORE
+ item_slot = ITEM_SLOT_RIGHT_POCKET
pocket_side = "right"
/proc/get_strippable_alternate_action_internals(obj/item/item, atom/source)
diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm
index 52db0245ce1c..a50446542ffa 100644
--- a/code/modules/mob/living/carbon/human/human_update_icons.dm
+++ b/code/modules/mob/living/carbon/human/human_update_icons.dm
@@ -574,7 +574,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
/mob/living/carbon/human/update_inv_w_uniform()
remove_overlay(UNIFORM_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HUD_JUMPSUIT]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_JUMPSUIT)]
if(inv)
inv.update_icon()
@@ -648,7 +648,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
/mob/living/carbon/human/update_inv_wear_id()
remove_overlay(ID_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HUD_WEAR_ID]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_ID)]
if(inv)
inv.update_icon()
@@ -664,7 +664,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
remove_overlay(L_HAND_BLOOD_LAYER)
remove_overlay(R_HAND_BLOOD_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HUD_GLOVES]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_GLOVES)]
if(inv)
inv.update_icon()
@@ -708,7 +708,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
remove_overlay(OVER_MASK_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HUD_GLASSES]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_EYES)]
if(inv)
inv.update_icon()
@@ -745,8 +745,8 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
remove_overlay(RIGHT_EAR_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/left_ear_inv = hud_used.inv_slots[SLOT_HUD_LEFT_EAR]
- var/atom/movable/screen/inventory/right_ear_inv = hud_used.inv_slots[SLOT_HUD_RIGHT_EAR]
+ var/atom/movable/screen/inventory/left_ear_inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_LEFT_EAR)]
+ var/atom/movable/screen/inventory/right_ear_inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_RIGHT_EAR)]
if(left_ear_inv)
left_ear_inv.update_icon()
if(right_ear_inv)
@@ -786,7 +786,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
remove_overlay(L_FOOT_BLOOD_LAYER)
remove_overlay(R_FOOT_BLOOD_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HUD_SHOES]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_SHOES)]
if(inv)
inv.update_icon()
@@ -826,7 +826,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
/mob/living/carbon/human/update_inv_s_store()
remove_overlay(SUIT_STORE_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HUD_SUIT_STORE]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_SUIT_STORE)]
if(inv)
inv.update_icon()
@@ -846,7 +846,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
..()
remove_overlay(HEAD_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HUD_HEAD]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_HEAD)]
if(inv)
inv.update_icon()
@@ -900,7 +900,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
- /obj/item/claymore/..
*/
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HUD_BELT]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_BELT)]
if(inv)
inv.update_icon()
@@ -939,7 +939,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
/mob/living/carbon/human/update_inv_wear_suit()
remove_overlay(SUIT_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HUD_OUTER_SUIT]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_OUTER_SUIT)]
if(inv)
inv.update_icon()
@@ -982,11 +982,11 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
if(client && hud_used)
var/atom/movable/screen/inventory/inv
- inv = hud_used.inv_slots[SLOT_HUD_LEFT_STORE]
+ inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_LEFT_POCKET)]
if(inv)
inv.update_icon()
- inv = hud_used.inv_slots[SLOT_HUD_RIGHT_STORE]
+ inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_RIGHT_POCKET)]
if(inv)
inv.update_icon()
@@ -1006,7 +1006,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
/mob/living/carbon/human/update_inv_wear_pda()
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HUD_WEAR_PDA]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_PDA)]
if(inv)
inv.update_icon()
@@ -1017,12 +1017,12 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
..()
remove_overlay(FACEMASK_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HUD_WEAR_MASK]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_MASK)]
if(inv)
inv.update_icon()
if(wear_mask && (istype(wear_mask, /obj/item/clothing/mask) || istype(wear_mask, /obj/item/clothing/accessory)))
update_hud_wear_mask(wear_mask)
- if(!(SLOT_HUD_WEAR_MASK in check_obscured_slots()))
+ if(!(check_obscured_slots() & ITEM_SLOT_MASK))
var/obj/item/organ/external/head/head_organ = get_organ("head")
if(!istype(head_organ))
return // Nothing to update here
diff --git a/code/modules/mob/living/carbon/human/npcs.dm b/code/modules/mob/living/carbon/human/npcs.dm
index 6974075c918f..9aab8fc08f5f 100644
--- a/code/modules/mob/living/carbon/human/npcs.dm
+++ b/code/modules/mob/living/carbon/human/npcs.dm
@@ -13,7 +13,7 @@
. = ..()
name = "Pun Pun"
real_name = name
- equip_to_slot(new /obj/item/clothing/under/punpun(src), SLOT_HUD_JUMPSUIT)
+ equip_to_slot(new /obj/item/clothing/under/punpun(src), ITEM_SLOT_JUMPSUIT)
/mob/living/carbon/human/monkey/teeny/Initialize(mapload)
. = ..()
@@ -40,7 +40,7 @@
update_transform()
real_name = name
- equip_to_slot_or_del(new headwear(src), SLOT_HUD_HEAD)
+ equip_to_slot_or_del(new headwear(src), ITEM_SLOT_HEAD)
RegisterSignal(src, list(COMSIG_HUMAN_ATTACKED, COMSIG_HOSTILE_ATTACKINGTARGET), PROC_REF(ouch))
for(var/trait in list(TRAIT_RESISTHEAT, TRAIT_NOBREATH, TRAIT_RESISTCOLD, TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE))
diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm
index 5cc343669642..c84b5b6d821a 100644
--- a/code/modules/mob/living/carbon/human/species/_species.dm
+++ b/code/modules/mob/living/carbon/human/species/_species.dm
@@ -91,7 +91,7 @@
var/exotic_blood
var/own_species_blood = FALSE // Can it only use blood from it's species?
var/skinned_type
- var/list/no_equip = list() // slots the race can't equip stuff to
+ var/no_equip // bitflags of slots the race can't equip stuff to
var/nojumpsuit = 0 // this is sorta... weird. it basically lets you equip stuff that usually needs jumpsuits without one, like belts and pockets and ids
var/can_craft = TRUE // Can this mob using crafting or not?
@@ -358,7 +358,11 @@
#undef SLOWDOWN_MULTIPLIER
/datum/species/proc/on_species_gain(mob/living/carbon/human/H) //Handles anything not already covered by basic species assignment.
- for(var/slot_id in no_equip)
+ for(var/slot_id in GLOB.bitflags) // Iterate through all bitflags
+ if(slot_id > ITEM_SLOT_AMOUNT_FLAG) // If the slot_id bitflag is larger than the largest ITEM_SLOT flag we're done
+ break
+ if(!(slot_id & no_equip)) // If the slot_id bitflag isn't in the no_equip flag, check the next bitflag
+ continue
var/obj/item/thing = H.get_item_by_slot(slot_id)
if(thing && (!thing.species_exception || !is_type_in_list(src, thing.species_exception)))
H.unEquip(thing)
@@ -516,6 +520,14 @@
return FALSE
if(target != user && handle_harm_antag(user, target))
return FALSE
+ //Mind Flayer code
+ var/datum/antagonist/mindflayer/MF = user?.mind?.has_antag_datum(/datum/antagonist/mindflayer)
+ var/obj/item/organ/internal/brain/victims_brain = target.get_int_organ(/obj/item/organ/internal/brain) //In case someone's brain isn't in their head
+ if(MF && !MF.harvesting && user.zone_selected == victims_brain.parent_organ && target != user)
+ MF.handle_harvest(target)
+ add_attack_logs(user, target, "flayerdrain")
+ return
+ //End Mind Flayer Code
if(target.check_block())
target.visible_message("
[target] blocks [user]'s attack!")
return FALSE
@@ -720,9 +732,26 @@
attack_sound = 'sound/weapons/bite.ogg'
sharp = TRUE
animation_type = ATTACK_EFFECT_BITE
+/*
+* Returns a copy of the datum that called this. I know this is pretty dumb
+*/
+/datum/unarmed_attack/proc/copy_attack()
+ var/datum/unarmed_attack/copy = new /datum/unarmed_attack
+ copy.attack_verb = attack_verb
+ copy.damage = damage
+ copy.attack_sound = attack_sound
+ copy.miss_sound = miss_sound
+ copy.sharp = sharp
+ copy.animation_type = animation_type
+ return copy
+
+/datum/unarmed_attack/claws/copy_attack()
+ var/datum/unarmed_attack/claws/copy = ..()
+ copy.has_been_sharpened = has_been_sharpened
+ return copy
/datum/species/proc/can_equip(obj/item/I, slot, disable_warning = FALSE, mob/living/carbon/human/H)
- if(slot in no_equip)
+ if(slot & no_equip)
if(!I.species_exception || !is_type_in_list(src, I.species_exception))
return FALSE
@@ -730,21 +759,21 @@
return FALSE
switch(slot)
- if(SLOT_HUD_LEFT_HAND)
+ if(ITEM_SLOT_LEFT_HAND)
return !H.l_hand && !H.incapacitated()
- if(SLOT_HUD_RIGHT_HAND)
+ if(ITEM_SLOT_RIGHT_HAND)
return !H.r_hand && !H.incapacitated()
- if(SLOT_HUD_WEAR_MASK)
- return !H.wear_mask && (I.slot_flags & SLOT_FLAG_MASK)
- if(SLOT_HUD_BACK)
- return !H.back && (I.slot_flags & SLOT_FLAG_BACK)
- if(SLOT_HUD_OUTER_SUIT)
- return !H.wear_suit && (I.slot_flags & SLOT_FLAG_OCLOTHING)
- if(SLOT_HUD_GLOVES)
- return !H.gloves && (I.slot_flags & SLOT_FLAG_GLOVES)
- if(SLOT_HUD_SHOES)
- return !H.shoes && (I.slot_flags & SLOT_FLAG_FEET)
- if(SLOT_HUD_BELT)
+ if(ITEM_SLOT_MASK)
+ return !H.wear_mask && (I.slot_flags & ITEM_SLOT_MASK)
+ if(ITEM_SLOT_BACK)
+ return !H.back && (I.slot_flags & ITEM_SLOT_BACK)
+ if(ITEM_SLOT_OUTER_SUIT)
+ return !H.wear_suit && (I.slot_flags & ITEM_SLOT_OUTER_SUIT)
+ if(ITEM_SLOT_GLOVES)
+ return !H.gloves && (I.slot_flags & ITEM_SLOT_GLOVES)
+ if(ITEM_SLOT_SHOES)
+ return !H.shoes && (I.slot_flags & ITEM_SLOT_SHOES)
+ if(ITEM_SLOT_BELT)
if(H.belt)
return FALSE
var/obj/item/organ/external/O = H.get_organ(BODY_ZONE_CHEST)
@@ -753,20 +782,20 @@
if(!disable_warning)
to_chat(H, "
You need a jumpsuit before you can attach this [I.name].")
return FALSE
- if(!(I.slot_flags & SLOT_FLAG_BELT))
+ if(!(I.slot_flags & ITEM_SLOT_BELT))
return
return TRUE
- if(SLOT_HUD_GLASSES)
- return !H.glasses && (I.slot_flags & SLOT_FLAG_EYES)
- if(SLOT_HUD_HEAD)
- return !H.head && (I.slot_flags & SLOT_FLAG_HEAD)
- if(SLOT_HUD_LEFT_EAR)
- return !H.l_ear && (I.slot_flags & SLOT_FLAG_EARS) && !((I.slot_flags & SLOT_FLAG_TWOEARS) && H.r_ear)
- if(SLOT_HUD_RIGHT_EAR)
- return !H.r_ear && (I.slot_flags & SLOT_FLAG_EARS) && !((I.slot_flags & SLOT_FLAG_TWOEARS) && H.l_ear)
- if(SLOT_HUD_JUMPSUIT)
- return !H.w_uniform && (I.slot_flags & SLOT_FLAG_ICLOTHING)
- if(SLOT_HUD_WEAR_ID)
+ if(ITEM_SLOT_EYES)
+ return !H.glasses && (I.slot_flags & ITEM_SLOT_EYES)
+ if(ITEM_SLOT_HEAD)
+ return !H.head && (I.slot_flags & ITEM_SLOT_HEAD)
+ if(ITEM_SLOT_LEFT_EAR)
+ return !H.l_ear && (I.slot_flags & ITEM_SLOT_LEFT_EAR)
+ if(ITEM_SLOT_RIGHT_EAR)
+ return !H.r_ear && (I.slot_flags & ITEM_SLOT_RIGHT_EAR)
+ if(ITEM_SLOT_JUMPSUIT)
+ return !H.w_uniform && (I.slot_flags & ITEM_SLOT_JUMPSUIT)
+ if(ITEM_SLOT_ID)
if(H.wear_id)
return FALSE
var/obj/item/organ/external/O = H.get_organ(BODY_ZONE_CHEST)
@@ -775,10 +804,10 @@
if(!disable_warning)
to_chat(H, "
You need a jumpsuit before you can attach this [I.name].")
return FALSE
- if(!(I.slot_flags & SLOT_FLAG_ID))
+ if(!(I.slot_flags & ITEM_SLOT_ID))
return FALSE
return TRUE
- if(SLOT_HUD_WEAR_PDA)
+ if(ITEM_SLOT_PDA)
if(H.wear_pda)
return FALSE
var/obj/item/organ/external/O = H.get_organ(BODY_ZONE_CHEST)
@@ -787,10 +816,10 @@
if(!disable_warning)
to_chat(H, "
You need a jumpsuit before you can attach this [I.name].")
return FALSE
- if(!(I.slot_flags & SLOT_FLAG_PDA))
+ if(!(I.slot_flags & ITEM_SLOT_PDA))
return FALSE
return TRUE
- if(SLOT_HUD_LEFT_STORE)
+ if(ITEM_SLOT_LEFT_POCKET)
if(I.flags & NODROP) //Pockets aren't visible, so you can't move NODROP items into them.
return FALSE
if(H.l_store)
@@ -801,9 +830,9 @@
if(!disable_warning)
to_chat(H, "
You need a jumpsuit before you can attach this [I.name].")
return FALSE
- if(I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & SLOT_FLAG_POCKET))
+ if(I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_BOTH_POCKETS))
return TRUE
- if(SLOT_HUD_RIGHT_STORE)
+ if(ITEM_SLOT_RIGHT_POCKET)
if(I.flags & NODROP)
return FALSE
if(H.r_store)
@@ -814,10 +843,10 @@
if(!disable_warning)
to_chat(H, "
You need a jumpsuit before you can attach this [I.name].")
return FALSE
- if(I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & SLOT_FLAG_POCKET))
+ if(I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_BOTH_POCKETS))
return TRUE
return FALSE
- if(SLOT_HUD_SUIT_STORE)
+ if(ITEM_SLOT_SUIT_STORE)
if(I.flags & NODROP) //Suit storage NODROP items drop if you take a suit off, this is to prevent people exploiting this.
return FALSE
if(H.s_store)
@@ -837,11 +866,11 @@
if(istype(I, /obj/item/pda) || is_pen(I) || is_type_in_list(I, H.wear_suit.allowed))
return TRUE
return FALSE
- if(SLOT_HUD_HANDCUFFED)
+ if(ITEM_SLOT_HANDCUFFED)
return !H.handcuffed && istype(I, /obj/item/restraints/handcuffs)
- if(SLOT_HUD_LEGCUFFED)
+ if(ITEM_SLOT_LEGCUFFED)
return !H.legcuffed && istype(I, /obj/item/restraints/legcuffs)
- if(SLOT_HUD_IN_BACKPACK)
+ if(ITEM_SLOT_IN_BACKPACK)
if(H.back && istype(H.back, /obj/item/storage/backpack))
var/obj/item/storage/backpack/B = H.back
if(length(B.contents) < B.storage_slots && I.w_class <= B.max_w_class)
@@ -853,7 +882,7 @@
if(length(B.contents) < B.storage_slots && I.w_class <= B.max_w_class)
return TRUE
return FALSE
- if(SLOT_HUD_TIE)
+ if(ITEM_SLOT_ACCESSORY)
if(!istype(I, /obj/item/clothing/accessory))
return FALSE
var/obj/item/clothing/under/uniform = H.w_uniform
@@ -865,7 +894,7 @@
if(!disable_warning)
to_chat(H, "
You already have an accessory of this type attached to your [uniform].")
return FALSE
- if(!(I.slot_flags & SLOT_FLAG_TIE))
+ if(!(I.slot_flags & ITEM_SLOT_ACCESSORY))
return FALSE
return TRUE
diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm
index 5c04aef27953..abb29f946ebe 100644
--- a/code/modules/mob/living/carbon/human/species/golem.dm
+++ b/code/modules/mob/living/carbon/human/species/golem.dm
@@ -15,7 +15,7 @@
punchdamagelow = 5
punchdamagehigh = 14
punchstunthreshold = 11 //about 40% chance to stun
- no_equip = list(SLOT_HUD_WEAR_MASK, SLOT_HUD_OUTER_SUIT, SLOT_HUD_GLOVES, SLOT_HUD_SHOES, SLOT_HUD_JUMPSUIT, SLOT_HUD_SUIT_STORE)
+ no_equip = ITEM_SLOT_MASK | ITEM_SLOT_OUTER_SUIT | ITEM_SLOT_GLOVES | ITEM_SLOT_SHOES | ITEM_SLOT_JUMPSUIT | ITEM_SLOT_SUIT_STORE
nojumpsuit = TRUE
dietflags = DIET_OMNI //golems can eat anything because they are magic or something
@@ -572,8 +572,8 @@
..()
last_banana = world.time
last_honk = world.time
- H.equip_to_slot_or_del(new /obj/item/reagent_containers/drinks/bottle/bottleofbanana(H), SLOT_HUD_RIGHT_STORE)
- H.equip_to_slot_or_del(new /obj/item/bikehorn(H), SLOT_HUD_LEFT_STORE)
+ H.equip_to_slot_or_del(new /obj/item/reagent_containers/drinks/bottle/bottleofbanana(H), ITEM_SLOT_RIGHT_POCKET)
+ H.equip_to_slot_or_del(new /obj/item/bikehorn(H), ITEM_SLOT_LEFT_POCKET)
H.AddElement(/datum/element/waddling)
/datum/species/golem/bananium/on_species_loss(mob/living/carbon/C)
@@ -650,9 +650,9 @@
/datum/species/golem/tranquillite/on_species_gain(mob/living/carbon/human/H)
..()
- H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), SLOT_HUD_HEAD)
- H.equip_to_slot_or_del(new /obj/item/reagent_containers/drinks/bottle/bottleofnothing(H), SLOT_HUD_RIGHT_STORE)
- H.equip_to_slot_or_del(new /obj/item/cane(H), SLOT_HUD_LEFT_HAND)
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), ITEM_SLOT_HEAD)
+ H.equip_to_slot_or_del(new /obj/item/reagent_containers/drinks/bottle/bottleofnothing(H), ITEM_SLOT_RIGHT_POCKET)
+ H.equip_to_slot_or_del(new /obj/item/cane(H), ITEM_SLOT_LEFT_HAND)
if(H.mind)
H.mind.AddSpell(new /datum/spell/aoe/conjure/build/mime_wall(null))
H.mind.AddSpell(new /datum/spell/mime/speak(null))
diff --git a/code/modules/mob/living/carbon/human/species/machine.dm b/code/modules/mob/living/carbon/human/species/machine.dm
index 38b70dcfa4d0..9243510ddb41 100644
--- a/code/modules/mob/living/carbon/human/species/machine.dm
+++ b/code/modules/mob/living/carbon/human/species/machine.dm
@@ -152,11 +152,11 @@
if(!head_organ)
return
if(!robohead.is_monitor) //If they've got a prosthetic head and it isn't a monitor, they've no screen to adjust. Instead, let them change the colour of their optics!
- var/optic_colour = input(H, "Select optic colour", H.m_colours["head"]) as color|null
+ var/optic_colour = tgui_input_color(H, "Please select an optic color", "Select Optic Color", H.m_colours["head"])
if(H.incapacitated(TRUE, TRUE))
- to_chat(H, "
You were interrupted while changing the colour of your optics.")
+ to_chat(H, "
You were interrupted while changing the color of your optics.")
return
- if(optic_colour)
+ if(!isnull(optic_colour))
H.change_markings(optic_colour, "head")
else if(robohead.is_monitor) //Means that the character's head is a monitor (has a screen). Time to customize.
@@ -175,7 +175,7 @@
var/new_style = tgui_input_list(H, "Select a monitor display", "Monitor Display", hair)
if(!new_style)
return
- var/new_color = input("Please select hair color.", "Monitor Color", head_organ.hair_colour) as null|color
+ var/new_color = tgui_input_color(H, "Please select hair color.", "Monitor Color", head_organ.hair_colour)
if(H.incapacitated(TRUE, TRUE))
to_chat(H, "
You were interrupted while changing your monitor display.")
@@ -183,7 +183,7 @@
if(new_style)
H.change_hair(new_style, 1) // The 1 is to enable custom sprites
- if(new_color)
+ if(!isnull(new_color))
H.change_hair_color(new_color)
/datum/species/machine/spec_electrocute_act(mob/living/carbon/human/H, shock_damage, source, siemens_coeff, flags)
diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm
index f0eeac4251ed..607005f0edbc 100644
--- a/code/modules/mob/living/carbon/human/species/monkey.dm
+++ b/code/modules/mob/living/carbon/human/species/monkey.dm
@@ -13,7 +13,7 @@
species_traits = list(NOT_SELECTABLE)
skinned_type = /obj/item/stack/sheet/animalhide/monkey
greater_form = /datum/species/human
- no_equip = list(SLOT_HUD_BELT, SLOT_HUD_WEAR_ID, SLOT_HUD_LEFT_EAR, SLOT_HUD_RIGHT_EAR, SLOT_HUD_GLASSES, SLOT_HUD_GLOVES, SLOT_HUD_SHOES, SLOT_HUD_OUTER_SUIT, SLOT_HUD_JUMPSUIT, SLOT_HUD_LEFT_STORE, SLOT_HUD_RIGHT_STORE, SLOT_HUD_SUIT_STORE, SLOT_HUD_WEAR_PDA)
+ no_equip = ITEM_SLOT_BELT | ITEM_SLOT_ID | ITEM_SLOT_LEFT_EAR | ITEM_SLOT_RIGHT_EAR | ITEM_SLOT_EYES | ITEM_SLOT_GLOVES | ITEM_SLOT_SHOES | ITEM_SLOT_OUTER_SUIT | ITEM_SLOT_JUMPSUIT | ITEM_SLOT_LEFT_POCKET | ITEM_SLOT_RIGHT_POCKET | ITEM_SLOT_SUIT_STORE | ITEM_SLOT_PDA
inherent_factions = list("jungle", "monkey")
can_craft = FALSE
is_small = 1
diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm
index cf0d80700287..74a2e22ff0de 100644
--- a/code/modules/mob/living/carbon/human/species/plasmaman.dm
+++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm
@@ -189,7 +189,7 @@
if(!H.mind || !H.mind.assigned_role || H.mind.assigned_role != "Clown" && H.mind.assigned_role != "Mime")
H.unEquip(H.wear_mask)
- H.equip_or_collect(new /obj/item/clothing/mask/breath(H), SLOT_HUD_WEAR_MASK)
+ H.equip_or_collect(new /obj/item/clothing/mask/breath(H), ITEM_SLOT_MASK)
var/tank_pref = H.client && H.client.prefs ? H.client.prefs.active_character.speciesprefs : null
var/obj/item/tank/internal_tank
if(tank_pref) //Diseasel, here you go
@@ -198,7 +198,7 @@
internal_tank = new /obj/item/tank/internals/plasmaman/belt/full(H)
if(!H.equip_to_appropriate_slot(internal_tank) && !H.put_in_any_hand_if_possible(internal_tank))
H.unEquip(H.l_hand)
- H.equip_or_collect(internal_tank, SLOT_HUD_LEFT_HAND)
+ H.equip_or_collect(internal_tank, ITEM_SLOT_LEFT_HAND)
to_chat(H, "
Could not find an empty slot for internals! Please report this as a bug.")
stack_trace("Failed to equip plasmaman with a tank, with the job [J.type]")
H.internal = internal_tank
diff --git a/code/modules/mob/living/carbon/human/species/vox.dm b/code/modules/mob/living/carbon/human/species/vox.dm
index fc4e91bc9369..80ae2e26b451 100644
--- a/code/modules/mob/living/carbon/human/species/vox.dm
+++ b/code/modules/mob/living/carbon/human/species/vox.dm
@@ -79,7 +79,7 @@
if(!H.mind || !H.mind.assigned_role || H.mind.assigned_role != "Clown" && H.mind.assigned_role != "Mime")
H.unEquip(H.wear_mask)
- H.equip_or_collect(new /obj/item/clothing/mask/breath/vox/respirator(H), SLOT_HUD_WEAR_MASK)
+ H.equip_or_collect(new /obj/item/clothing/mask/breath/vox/respirator(H), ITEM_SLOT_MASK)
var/tank_pref = H.client && H.client.prefs ? H.client.prefs.active_character.speciesprefs : null
var/obj/item/tank/internal_tank
if(tank_pref)//Diseasel, here you go
@@ -89,7 +89,7 @@
if(!H.equip_to_appropriate_slot(internal_tank))
if(!H.put_in_any_hand_if_possible(internal_tank))
H.unEquip(H.l_hand)
- H.equip_or_collect(internal_tank, SLOT_HUD_LEFT_HAND)
+ H.equip_or_collect(internal_tank, ITEM_SLOT_LEFT_HAND)
to_chat(H, "
Could not find an empty slot for internals! Please report this as a bug")
H.internal = internal_tank
to_chat(H, "
You are now running on nitrogen internals from [internal_tank]. Your species finds oxygen toxic, so you must breathe nitrogen only.")
diff --git a/code/modules/mob/living/carbon/superheroes.dm b/code/modules/mob/living/carbon/superheroes.dm
index 3c317c8688e3..8b9218bac336 100644
--- a/code/modules/mob/living/carbon/superheroes.dm
+++ b/code/modules/mob/living/carbon/superheroes.dm
@@ -16,7 +16,7 @@
H.rename_character(H.real_name, name)
for(var/obj/item/W in H.get_all_slots())
H.unEquip(W)
- H.equip_to_slot_or_del(new /obj/item/radio/headset(H), SLOT_HUD_LEFT_EAR)
+ H.equip_to_slot_or_del(new /obj/item/radio/headset(H), ITEM_SLOT_LEFT_EAR)
/datum/superheroes/proc/fixflags(mob/living/carbon/human/H)
for(var/obj/item/W in H.get_all_slots())
@@ -52,7 +52,7 @@
W.SetOwnerInfo(H)
W.UpdateName()
W.flags |= NODROP
- H.equip_to_slot_or_del(W, SLOT_HUD_WEAR_ID)
+ H.equip_to_slot_or_del(W, ITEM_SLOT_ID)
H.regenerate_icons()
to_chat(H, desc)
@@ -67,12 +67,12 @@
/datum/superheroes/owlman/equip(mob/living/carbon/human/H)
..()
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black/greytide(H), SLOT_HUD_SHOES)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/owl(H), SLOT_HUD_JUMPSUIT)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/owlwings(H), SLOT_HUD_OUTER_SUIT)
- H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/owl_mask/super_hero(H), SLOT_HUD_WEAR_MASK)
- H.equip_to_slot_or_del(new /obj/item/storage/belt/bluespace/owlman(H), SLOT_HUD_BELT)
- H.equip_to_slot_or_del(new /obj/item/clothing/glasses/night(H), SLOT_HUD_GLASSES)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black/greytide(H), ITEM_SLOT_SHOES)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/owl(H), ITEM_SLOT_JUMPSUIT)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/owlwings(H), ITEM_SLOT_OUTER_SUIT)
+ H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/owl_mask/super_hero(H), ITEM_SLOT_MASK)
+ H.equip_to_slot_or_del(new /obj/item/storage/belt/bluespace/owlman(H), ITEM_SLOT_BELT)
+ H.equip_to_slot_or_del(new /obj/item/clothing/glasses/night(H), ITEM_SLOT_EYES)
/datum/superheroes/griffin
@@ -86,10 +86,10 @@
/datum/superheroes/griffin/equip(mob/living/carbon/human/H)
..()
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/griffin(H), SLOT_HUD_SHOES)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/griffin(H), SLOT_HUD_JUMPSUIT)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/owlwings/griffinwings(H), SLOT_HUD_OUTER_SUIT)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/griffin/(H), SLOT_HUD_HEAD)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/griffin(H), ITEM_SLOT_SHOES)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/griffin(H), ITEM_SLOT_JUMPSUIT)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/owlwings/griffinwings(H), ITEM_SLOT_OUTER_SUIT)
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/griffin/(H), ITEM_SLOT_HEAD)
var/obj/item/bio_chip/freedom/L = new/obj/item/bio_chip/freedom(H)
L.implant(H)
@@ -106,12 +106,12 @@
/datum/superheroes/lightnian/equip(mob/living/carbon/human/H)
..()
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(H), SLOT_HUD_SHOES)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/color/brown(H), SLOT_HUD_JUMPSUIT)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/corgisuit/super_hero(H), SLOT_HUD_OUTER_SUIT)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/corgi/super_hero(H), SLOT_HUD_HEAD)
- H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(H), SLOT_HUD_GLOVES)
- H.equip_to_slot_or_del(new /obj/item/bedsheet/orange(H), SLOT_HUD_BACK)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(H), ITEM_SLOT_SHOES)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/color/brown(H), ITEM_SLOT_JUMPSUIT)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/corgisuit/super_hero(H), ITEM_SLOT_OUTER_SUIT)
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/corgi/super_hero(H), ITEM_SLOT_HEAD)
+ H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(H), ITEM_SLOT_GLOVES)
+ H.equip_to_slot_or_del(new /obj/item/bedsheet/orange(H), ITEM_SLOT_BACK)
/datum/superheroes/electro
@@ -125,11 +125,11 @@
/datum/superheroes/electro/equip(mob/living/carbon/human/H)
..()
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black/greytide(H), SLOT_HUD_SHOES)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), SLOT_HUD_JUMPSUIT)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/corgisuit/super_hero/en(H), SLOT_HUD_OUTER_SUIT)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/corgi/super_hero/en(H), SLOT_HUD_HEAD)
- H.equip_to_slot_or_del(new /obj/item/bedsheet/cult(H), SLOT_HUD_BACK)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black/greytide(H), ITEM_SLOT_SHOES)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), ITEM_SLOT_JUMPSUIT)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/corgisuit/super_hero/en(H), ITEM_SLOT_OUTER_SUIT)
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/corgi/super_hero/en(H), ITEM_SLOT_HEAD)
+ H.equip_to_slot_or_del(new /obj/item/bedsheet/cult(H), ITEM_SLOT_BACK)
@@ -223,10 +223,10 @@
for(var/obj/item/W in target.get_all_slots())
target.unEquip(W)
target.rename_character(target.real_name, "Generic Henchman ([rand(1, 1000)])")
- target.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey/greytide(target), SLOT_HUD_JUMPSUIT)
- target.equip_to_slot_or_del(new /obj/item/clothing/shoes/black/greytide(target), SLOT_HUD_SHOES)
- target.equip_to_slot_or_del(new /obj/item/storage/toolbox/mechanical/greytide(target), SLOT_HUD_LEFT_HAND)
- target.equip_to_slot_or_del(new /obj/item/radio/headset(target), SLOT_HUD_LEFT_EAR)
+ target.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey/greytide(target), ITEM_SLOT_JUMPSUIT)
+ target.equip_to_slot_or_del(new /obj/item/clothing/shoes/black/greytide(target), ITEM_SLOT_SHOES)
+ target.equip_to_slot_or_del(new /obj/item/storage/toolbox/mechanical/greytide(target), ITEM_SLOT_LEFT_HAND)
+ target.equip_to_slot_or_del(new /obj/item/radio/headset(target), ITEM_SLOT_LEFT_EAR)
var/obj/item/card/id/syndicate/W = new(target)
W.icon_state = "lifetimeid"
W.access = list(ACCESS_MAINT_TUNNELS)
@@ -235,5 +235,5 @@
W.flags |= NODROP
W.SetOwnerInfo(target)
W.UpdateName()
- target.equip_to_slot_or_del(W, SLOT_HUD_WEAR_ID)
+ target.equip_to_slot_or_del(W, ITEM_SLOT_ID)
target.regenerate_icons()
diff --git a/code/modules/mob/living/default_language.dm b/code/modules/mob/living/default_language.dm
index 14497d34a6e2..06bc251fe9e2 100644
--- a/code/modules/mob/living/default_language.dm
+++ b/code/modules/mob/living/default_language.dm
@@ -2,6 +2,9 @@
set name = "Set Default Language"
set category = "IC"
+ if(!(language in languages) && !isnull(language))
+ to_chat(src, "
You don't seem to know how to speak [language].")
+ return
if(language)
to_chat(src, "
You will now speak [language] if you do not specify a language when speaking.")
else
@@ -13,6 +16,9 @@
set name = "Set Default Language"
set category = "IC"
+ if(!(language in speech_synthesizer_langs) && !isnull(language))
+ to_chat(src, "
You don't seem to know how to speak [language].")
+ return
if(language)
to_chat(src, "
You will now speak [language] if you do not specify a language when speaking.")
else
diff --git a/code/modules/mob/living/init_signals.dm b/code/modules/mob/living/init_signals.dm
index 081b4cdd86ae..b2fd6735f89b 100644
--- a/code/modules/mob/living/init_signals.dm
+++ b/code/modules/mob/living/init_signals.dm
@@ -1,4 +1,4 @@
-/// Called on [/mob/living/Initialize(mapload)], for the mob to register to relevant signals.
+/// Called on [/mob/living/proc/Initialize], for the mob to register to relevant signals.
/mob/living/proc/register_init_signals()
RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_KNOCKEDOUT), PROC_REF(on_knockedout_trait_gain))
RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_KNOCKEDOUT), PROC_REF(on_knockedout_trait_loss))
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 22b318ff3b21..c39e6d73ef8c 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1,4 +1,4 @@
-/mob/living/Initialize()
+/mob/living/Initialize(mapload)
. = ..()
var/datum/atom_hud/data/human/medical/advanced/medhud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
medhud.add_to_hud(src)
@@ -391,8 +391,7 @@
temperature -= change
if(actual < desired)
temperature = desired
-// if(istype(src, /mob/living/carbon/human))
-// to_chat(world, "[src] ~ [bodytemperature] ~ [temperature]")
+
return temperature
@@ -664,6 +663,8 @@
var/mob/living/carbon/human/H = src
if(H.dna.species.blood_color)
existing_trail.color = H.dna.species.blood_color
+ else if(isalien(src))
+ existing_trail.color = "#05EE05"
else
existing_trail.color = "#A10808"
@@ -1126,8 +1127,15 @@
C.adjustBruteLoss(damage)
C.Weaken(3 SECONDS)
else
- C.take_organ_damage(damage)
+ var/obj/item/organ/external/affecting = C.get_organ(ran_zone(throwingdatum.target_zone))
+ if(affecting)
+ var/armor_block = C.run_armor_check(affecting, MELEE)
+ C.apply_damage(damage, BRUTE, affecting, armor_block)
+ else
+ C.take_organ_damage(damage)
+
C.KnockDown(3 SECONDS)
+
C.visible_message("
[C] crashes into [src], knocking them both over!", "
You violently crash into [src]!")
/**
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 56427c70ef26..8bccc0b57c25 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -115,3 +115,5 @@
var/last_taste_time
/// Stores a var of the last tast message we got. used so we don't spam people messages while they eat
var/last_taste_text
+ ///If a creature gets to be super special and have extra range on their chat messages
+ var/extra_message_range = 0
diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm
index 18ad834c87e4..f6f892547924 100644
--- a/code/modules/mob/living/living_say.dm
+++ b/code/modules/mob/living/living_say.dm
@@ -237,6 +237,8 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key)
var/list/listening = list()
var/list/listening_obj = list()
+ message_range += extra_message_range
+
if(T)
//make sure the air can transmit speech - speaker's side
var/datum/gas_mixture/environment = T.get_readonly_air()
diff --git a/code/modules/mob/living/living_status_procs.dm b/code/modules/mob/living/living_status_procs.dm
index 2afbf16a7273..35a56aa0ae62 100644
--- a/code/modules/mob/living/living_status_procs.dm
+++ b/code/modules/mob/living/living_status_procs.dm
@@ -118,7 +118,6 @@ STATUS EFFECTS
layer = BLASTDOOR_LAYER
else
layer = LYING_MOB_LAYER //so mob lying always appear behind standing mobs
- pixel_y = PIXEL_Y_OFFSET_LYING
ADD_TRAIT(src, TRAIT_UI_BLOCKED, LYING_DOWN_TRAIT)
ADD_TRAIT(src, TRAIT_CANNOT_PULL, LYING_DOWN_TRAIT)
RegisterSignal(src, COMSIG_ATOM_DIR_CHANGE, PROC_REF(orient_crawling))
diff --git a/code/modules/mob/living/silicon/ai/ai_mob.dm b/code/modules/mob/living/silicon/ai/ai_mob.dm
index 3fc1f085738d..0e904215b1dd 100644
--- a/code/modules/mob/living/silicon/ai/ai_mob.dm
+++ b/code/modules/mob/living/silicon/ai/ai_mob.dm
@@ -641,6 +641,10 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
set category = "AI Commands"
set name = "Toggle Floor Bolts"
+ if(stat == DEAD)
+ to_chat(src, "
You are dead!")
+ return
+
if(!isturf(loc)) // if their location isn't a turf
return // stop
diff --git a/code/modules/mob/living/silicon/ai/freelook/chunk.dm b/code/modules/mob/living/silicon/ai/freelook/chunk.dm
index 2af0044d5968..142072118e5c 100644
--- a/code/modules/mob/living/silicon/ai/freelook/chunk.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/chunk.dm
@@ -20,6 +20,8 @@
/datum/camerachunk/proc/add_camera(obj/machinery/camera/cam)
if(active_cameras[cam] || inactive_cameras[cam])
return
+ if(cam.non_chunking_camera)
+ return
// Register all even though it is active/inactive. Won't get called incorrectly
RegisterSignal(cam, COMSIG_CAMERA_OFF, PROC_REF(deactivate_camera), TRUE)
RegisterSignal(cam, COMSIG_CAMERA_ON, PROC_REF(activate_camera), TRUE)
diff --git a/code/modules/mob/living/silicon/decoy/decoy.dm b/code/modules/mob/living/silicon/decoy/decoy.dm
index 14c00ecf25d7..93700276264d 100644
--- a/code/modules/mob/living/silicon/decoy/decoy.dm
+++ b/code/modules/mob/living/silicon/decoy/decoy.dm
@@ -20,7 +20,7 @@
faction = list("syndicate")
bubble_icon = "syndibot"
name = "R.O.D.G.E.R"
- desc = "Red Operations, Depot General Emission Regulator"
+ desc = "Red Operations, Depot General Emission Regulator."
icon_state = "ai-magma"
/mob/living/silicon/decoy/syndicate/Initialize(mapload)
diff --git a/code/modules/mob/living/silicon/robot/robot_death.dm b/code/modules/mob/living/silicon/robot/robot_death.dm
index 78e6bfb9ca8b..15d400000b05 100644
--- a/code/modules/mob/living/silicon/robot/robot_death.dm
+++ b/code/modules/mob/living/silicon/robot/robot_death.dm
@@ -58,7 +58,7 @@
diag_hud_set_status()
diag_hud_set_health()
if(camera)
- camera.status = FALSE
+ camera.turn_off(src, FALSE)
update_headlamp(1) //So borg lights are disabled when killed.
if(in_contents_of(/obj/machinery/recharge_station))//exit the recharge station
diff --git a/code/modules/mob/living/silicon/robot/robot_life.dm b/code/modules/mob/living/silicon/robot/robot_life.dm
index c25b202e3f20..515bc7578294 100644
--- a/code/modules/mob/living/silicon/robot/robot_life.dm
+++ b/code/modules/mob/living/silicon/robot/robot_life.dm
@@ -45,11 +45,9 @@
handle_no_power()
/mob/living/silicon/robot/proc/handle_equipment()
- if(camera && !scrambledcodes)
+ if(camera && camera.status && !scrambledcodes) //Don't turn off cameras already off
if(stat == DEAD || wires.is_cut(WIRE_BORG_CAMERA))
- camera.status = FALSE
- else
- camera.status = TRUE
+ camera.turn_off(src, FALSE)
//update the state of modules and components here
if(stat != CONSCIOUS)
diff --git a/code/modules/mob/living/silicon/robot/robot_mob.dm b/code/modules/mob/living/silicon/robot/robot_mob.dm
index 43d30fcc1b49..6b9fba1c9379 100644
--- a/code/modules/mob/living/silicon/robot/robot_mob.dm
+++ b/code/modules/mob/living/silicon/robot/robot_mob.dm
@@ -56,7 +56,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
/// Does the robot have a non-default sprite for an open service panel?
var/custom_panel = null
/// Robot skins with non-default sprites for an open service panel.
- var/list/custom_panel_names = list("Cricket")
+ var/list/custom_panel_names = list("Cricket", "Rover")
/// Robot skins with multiple variants for different modules. They require special handling to make their eyes display.
var/list/custom_eye_names = list("Cricket", "Standard")
/// Has the robot been emagged?
@@ -185,7 +185,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
camera.c_tag = real_name
camera.network = list("SS13","Robots")
if(wires.is_cut(WIRE_BORG_CAMERA)) // 5 = BORG CAMERA
- camera.status = FALSE
+ camera.turn_off(src, FALSE)
if(mmi == null)
mmi = new /obj/item/mmi/robotic_brain(src) //Give the borg an MMI if he spawns without for some reason. (probably not the correct way to spawn a robotic brain, but it works)
@@ -418,6 +418,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
"Landmate" = image('icons/mob/robots.dmi', "landmate"),
"Standard" = image('icons/mob/robots.dmi', "Standard-Engi"),
"Noble-ENG" = image('icons/mob/robots.dmi', "Noble-ENG"),
+ "Rover" = image('icons/mob/robots.dmi', "Rover-Engi"),
"Cricket" = image('icons/mob/robots.dmi', "Cricket-ENGI")
)
if("Janitor")
@@ -428,6 +429,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
"Standard" = image('icons/mob/robots.dmi', "Standard-Jani"),
"Noble-CLN" = image('icons/mob/robots.dmi', "Noble-CLN"),
"Cricket" = image('icons/mob/robots.dmi', "Cricket-JANI"),
+ "Rover" = image('icons/mob/robots.dmi', "Rover-Jani"),
"Custodiborg" = image('icons/mob/robots.dmi', "custodiborg")
)
if("Medical")
@@ -502,7 +504,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
*/
/mob/living/silicon/robot/proc/robot_module_hat_offset(module)
switch(module)
- if("Engineering", "Miner_old", "JanBot2", "Medbot", "engineerrobot", "maximillion", "secborg", "Hydrobot")
+ if("Engineering", "Miner_old", "JanBot2", "Medbot", "engineerrobot", "maximillion", "secborg", "Rover-Jani", "Rover-Engi", "Hydrobot")
can_be_hatted = FALSE // Their base sprite already comes with a hat
hat_offset_y = -1
if("Noble-CLN", "Noble-SRV", "Noble-DIG", "Noble-MED", "Noble-SEC", "Noble-ENG", "Noble-STD")
@@ -1169,7 +1171,8 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
to_chat(src, "
Your allegiance has not been compromised. Keep serving your current master.")
else
to_chat(src, "
Your allegiance has not been compromised. Keep serving all Syndicate agents to the best of your abilities.")
-
+ if(mmi.syndiemmi)
+ to_chat(src, "
Warning: Remote lockdown and detonation protections have been disabled due to system instability.")
SetLockdown(0)
if(module)
module.emag_act(user)
@@ -1397,7 +1400,10 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
disconnect_from_ai()
lawupdate = FALSE
lockcharge = 0
+ clear_alert("locked")
REMOVE_TRAITS_IN(src, LOCKDOWN_TRAIT)
+ for(var/datum/action/innate/robot_override_lock/override in actions)
+ override.Remove(src)
scrambledcodes = TRUE
//Disconnect it's camera so it's not so easily tracked.
QDEL_NULL(camera)
@@ -1406,18 +1412,6 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
// to have to check if every camera is null or not before doing anything, to prevent runtime errors.
// I could change the network to null but I don't know what would happen, and it seems too hacky for me.
-/mob/living/silicon/robot/proc/ResetSecurityCodes()
- set category = "Robot Commands"
- set name = "Reset Identity Codes"
- set desc = "Scrambles your security and identification codes and resets your current buffers. Unlocks you and but permanently severs you from your AI and the robotics console and will deactivate your camera system."
-
- var/mob/living/silicon/robot/R = src
-
- if(R)
- R.UnlinkSelf()
- to_chat(R, "Buffers flushed and reset. Camera system shutdown. All systems operational.")
- remove_verb(src, /mob/living/silicon/robot/proc/ResetSecurityCodes)
-
/mob/living/silicon/robot/mode()
set name = "Activate Held Object"
set category = "IC"
@@ -1439,8 +1433,14 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
ADD_TRAIT(src, TRAIT_IMMOBILIZED, LOCKDOWN_TRAIT)
ADD_TRAIT(src, TRAIT_UI_BLOCKED, LOCKDOWN_TRAIT)
ADD_TRAIT(src, TRAIT_HANDS_BLOCKED, LOCKDOWN_TRAIT)
+ if(mmi.syndiemmi && !emagged) // Being emagged removes your syndie MMI protections
+ to_chat(src, "
You can override your lockdown, permanently cutting your connection to NT's systems. You will be undetectable to the station's robotics control and camera monitoring systems.")
+ var/datum/action/override = new /datum/action/innate/robot_override_lock()
+ override.Grant(src)
else
REMOVE_TRAITS_IN(src, LOCKDOWN_TRAIT)
+ for(var/datum/action/innate/robot_override_lock/override in actions)
+ override.Remove(src)
/mob/living/silicon/robot/proc/notify_ai(notifytype, oldname, newname)
if(!connected_ai)
diff --git a/code/modules/mob/living/silicon/robot/robot_module_actions.dm b/code/modules/mob/living/silicon/robot/robot_module_actions.dm
index ffc0064e0639..cb6834e24746 100644
--- a/code/modules/mob/living/silicon/robot/robot_module_actions.dm
+++ b/code/modules/mob/living/silicon/robot/robot_module_actions.dm
@@ -107,3 +107,12 @@
robot.speed -= slowdown_active
button_overlay_icon_state = initial(button_overlay_icon_state)
active = FALSE
+
+/datum/action/innate/robot_override_lock
+ name = "Override lockdown"
+ button_overlay_icon_state = "unlock_self"
+
+/datum/action/innate/robot_override_lock/Activate()
+ to_chat(owner, "
HARDWARE_OVERRIDE_SYNDICATE: Lockdown lifted. Connection to NT systems severed.")
+ var/mob/living/silicon/robot/robot = owner
+ robot.UnlinkSelf()
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 7ab9a7379a5e..ca3cd3db10d5 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -1,7 +1,7 @@
/obj/item/robot_module
name = "robot module"
icon = 'icons/obj/module.dmi'
- icon_state = "std_module"
+ icon_state = "std_mod"
w_class = 100
item_state = "electronic"
flags = CONDUCT
diff --git a/code/modules/mob/living/silicon/robot/robot_update_status.dm b/code/modules/mob/living/silicon/robot/robot_update_status.dm
index a152d9262353..26e3e0b3b2f1 100644
--- a/code/modules/mob/living/silicon/robot/robot_update_status.dm
+++ b/code/modules/mob/living/silicon/robot/robot_update_status.dm
@@ -25,6 +25,9 @@
else
if(health > 0 && !suiciding && has_power_source())
update_revive()
+ if(camera)
+ if(!wires.is_cut(WIRE_BORG_CAMERA))
+ camera.turn_on(src, FALSE)
var/mob/dead/observer/ghost = get_ghost()
if(ghost)
to_chat(ghost, "
Your cyborg shell has been repaired and repowered, re-enter if you want to continue! (Verbs -> Ghost -> Re-enter corpse)")
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index 20d431963001..f3c299651902 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -947,6 +947,7 @@ Pass a positive integer as an argument to override a bot's default speed.
return has_access(list(), req_access, acc)
/mob/living/simple_animal/bot/Topic(href, href_list)
+ ..()
if(href_list["close"]) // HUE HUE
if(usr in users)
users.Remove(usr)
diff --git a/code/modules/mob/living/simple_animal/bot/bot_construction.dm b/code/modules/mob/living/simple_animal/bot/bot_construction.dm
index d73819b64759..ade672f36864 100644
--- a/code/modules/mob/living/simple_animal/bot/bot_construction.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot_construction.dm
@@ -230,8 +230,8 @@
//Floorbot assemblies
/obj/item/toolbox_tiles
- desc = "It's a toolbox with tiles sticking out the top"
name = "tiles and toolbox"
+ desc = "It's a toolbox with tiles sticking out the top."
icon = 'icons/obj/aibots.dmi'
icon_state = "toolbox_tiles"
force = 3
@@ -244,15 +244,15 @@
var/toolbox_color = "" //Blank for blue, r for red, y for yellow, etc.
/obj/item/toolbox_tiles/sensor
- desc = "It's a toolbox with tiles sticking out the top and a sensor attached"
name = "tiles, toolbox and sensor arrangement"
+ desc = "It's a toolbox with tiles sticking out the top and a sensor attached."
icon_state = "toolbox_tiles_sensor"
/obj/item/storage/toolbox/attackby(obj/item/stack/tile/plasteel/T, mob/user, params)
if(!istype(T, /obj/item/stack/tile/plasteel))
..()
return
- if(!istype(src, /obj/item/storage/toolbox))
+ if(QDELETED(src))
return
if(length(contents) >= 1)
to_chat(user, "
They won't fit in, as there is already stuff inside.")
diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
index bb0c73ac7d6c..105fe7d83944 100644
--- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
@@ -3,7 +3,7 @@
/mob/living/simple_animal/bot/ed209
name = "\improper ED-209 Security Robot"
- desc = "A security robot. He looks less than thrilled."
+ desc = "A security robot. He looks less than thrilled."
icon = 'icons/obj/aibots.dmi'
icon_state = "ed2090"
density = TRUE
diff --git a/code/modules/mob/living/simple_animal/bot/griefsky.dm b/code/modules/mob/living/simple_animal/bot/griefsky.dm
index 58a3b0731528..f91168748fea 100644
--- a/code/modules/mob/living/simple_animal/bot/griefsky.dm
+++ b/code/modules/mob/living/simple_animal/bot/griefsky.dm
@@ -23,7 +23,7 @@
/// A toy version of general griefsky!
/mob/living/simple_animal/bot/secbot/griefsky/toy
name = "Genewul Giftskee"
- desc = "An adorable looking secbot with four toy swords taped to its arms"
+ desc = "An adorable looking secbot with four toy swords taped to its arms."
spin_icon = "griefskyj-c"
health = 50
maxHealth = 50
diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm
index e8fcc65ec949..d3245101d07c 100644
--- a/code/modules/mob/living/simple_animal/bot/medbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/medbot.dm
@@ -538,7 +538,7 @@
if("machine")
new /obj/item/storage/firstaid/machine/empty(Tsec)
else
- new /obj/item/storage/firstaid(Tsec)
+ new /obj/item/storage/firstaid/regular/empty(Tsec)
new /obj/item/assembly/prox_sensor(Tsec)
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index 82b3a1c68802..0a9f94f34f3f 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -3,7 +3,7 @@
/mob/living/simple_animal/bot/secbot
name = "\improper Securitron"
- desc = "A little security robot. He looks less than thrilled."
+ desc = "A little security robot. He looks less than thrilled."
icon = 'icons/obj/aibots.dmi'
icon_state = "secbot0"
density = FALSE
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index 906518cb9414..d17e5842d695 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -109,7 +109,7 @@
/mob/living/simple_animal/hostile/construct/armoured
name = "Juggernaut"
real_name = "Juggernaut"
- desc = "A possessed suit of armour driven by the will of the restless dead"
+ desc = "A possessed suit of armour driven by the will of the restless dead."
icon_state = "behemoth"
icon_living = "behemoth"
hud_type = /datum/hud/construct/armoured
@@ -153,7 +153,7 @@
/mob/living/simple_animal/hostile/construct/wraith
name = "Wraith"
real_name = "Wraith"
- desc = "A wicked bladed shell contraption piloted by a bound spirit"
+ desc = "A wicked bladed shell contraption piloted by a bound spirit."
icon_state = "floating"
icon_living = "floating"
hud_type = /datum/hud/construct/wraith
diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm
index b70492d567a0..78496dbe6117 100644
--- a/code/modules/mob/living/simple_animal/corpse.dm
+++ b/code/modules/mob/living/simple_animal/corpse.dm
@@ -102,9 +102,9 @@
/datum/outfit/sovietcorpse
name = "Corpse of a Soviet"
- uniform = /obj/item/clothing/under/costume/soviet
+ uniform = /obj/item/clothing/under/new_soviet
shoes = /obj/item/clothing/shoes/jackboots
- head = /obj/item/clothing/head/bearpelt
+ head = /obj/item/clothing/head/sovietsidecap
/obj/effect/mob_spawn/human/corpse/soviet/ranged
@@ -112,7 +112,7 @@
/datum/outfit/sovietcorpse/ranged
name = "Corpse of a Ranged Soviet"
- head = /obj/item/clothing/head/ushanka
+ suit = /obj/item/clothing/suit/sovietcoat
/obj/effect/mob_spawn/human/corpse/wizard
diff --git a/code/modules/mob/living/simple_animal/friendly/bunny.dm b/code/modules/mob/living/simple_animal/friendly/bunny.dm
index fdb751512fbe..881e014f1477 100644
--- a/code/modules/mob/living/simple_animal/friendly/bunny.dm
+++ b/code/modules/mob/living/simple_animal/friendly/bunny.dm
@@ -1,7 +1,7 @@
/mob/living/simple_animal/bunny
name = "bunny"
real_name = "bunny"
- desc = "Awww a cute bunny"
+ desc = "Awww a cute bunny."
icon_state = "m_bunny"
icon_living = "m_bunny"
icon_dead = "bunny_dead"
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 7d620baf3e70..b716622e685a 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -31,7 +31,7 @@
//RUNTIME IS ALIVE! SQUEEEEEEEE~
/mob/living/simple_animal/pet/cat/Runtime
name = "Runtime"
- desc = "GCAT"
+ desc = "GCAT."
icon_state = "cat"
icon_living = "cat"
icon_dead = "cat_dead"
@@ -187,7 +187,7 @@
/mob/living/simple_animal/pet/cat/kitten
name = "kitten"
- desc = "D'aaawwww"
+ desc = "D'aaawwww."
icon_state = "kitten"
icon_living = "kitten"
icon_dead = "kitten_dead"
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index 2ceba7b97492..04f71eb69595 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -138,7 +138,7 @@
mob_biotypes = MOB_ORGANIC | MOB_BEAST
footstep_type = FOOTSTEP_MOB_SHOE
-/mob/living/simple_animal/cow/Initialize()
+/mob/living/simple_animal/cow/Initialize(mapload)
udder = new()
. = ..()
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index b07a72482e6a..73232630370d 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -205,18 +205,22 @@
return FALSE
var/datum/mind/blobmind = mind
var/client/C = client
+ var/obj/structure/blob/core/core
if(istype(blobmind) && istype(C))
- var/obj/structure/blob/core/core = new(T, C, 3)
+ core = new(T, C, 3)
core.lateblobtimer()
qdel(blobmind) // Delete the old mind. THe blob will make a new one
else
- new /obj/structure/blob/core(T) // Ghosts will be prompted to control it.
+ core = new(T) // Ghosts will be prompted to control it.
if(ismob(loc)) // in case some taj/etc ate the mouse.
var/mob/M = loc
M.gib()
if(!gibbed)
gib()
+ if(core)
+ core.admin_spawned = admin_spawned
+
SSticker.record_biohazard_start(BIOHAZARD_BLOB)
/mob/living/simple_animal/mouse/blobinfected/get_scooped(mob/living/carbon/grabber)
diff --git a/code/modules/mob/living/simple_animal/friendly/nian_caterpillar.dm b/code/modules/mob/living/simple_animal/friendly/nian_caterpillar.dm
index 14a22fce199e..3a2145527bb4 100644
--- a/code/modules/mob/living/simple_animal/friendly/nian_caterpillar.dm
+++ b/code/modules/mob/living/simple_animal/friendly/nian_caterpillar.dm
@@ -48,7 +48,7 @@
/// The amount of nutrition the nian caterpillar needs to evolve, default is 500.
var/nutrition_need = 500
-/mob/living/simple_animal/nian_caterpillar/Initialize()
+/mob/living/simple_animal/nian_caterpillar/Initialize(mapload)
. = ..()
real_name = name
add_language("Tkachi")
diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm
index dd9b7433f8f6..dcbcc16ba39c 100644
--- a/code/modules/mob/living/simple_animal/hostile/bees.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bees.dm
@@ -246,7 +246,7 @@
//Botany Queen Bee
/mob/living/simple_animal/hostile/poison/bees/queen
name = "queen bee"
- desc = "She's the queen of bees, BZZ BZZ"
+ desc = "She's the queen of bees, BZZ BZZ!"
icon_base = "queen"
isqueen = TRUE
mouse_opacity = MOUSE_OPACITY_OPAQUE
@@ -278,7 +278,7 @@
/obj/item/queen_bee
name = "queen bee"
- desc = "She's the queen of bees, BZZ BZZ"
+ desc = "She's the queen of bees, BZZ BZZ!"
icon_state = "queen_item"
item_state = ""
icon = 'icons/mob/bees.dmi'
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index ff1588298fec..a4ddaf327b03 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -33,7 +33,7 @@
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxbodytemp = 1500
- faction = list("carp")
+ faction = list("carp", "mining")
pressure_resistance = 200
gold_core_spawnable = HOSTILE_SPAWN
@@ -148,7 +148,7 @@
var/regen_cooldown = 0
-/mob/living/simple_animal/hostile/carp/megacarp/Initialize()
+/mob/living/simple_animal/hostile/carp/megacarp/Initialize(mapload)
. = ..()
name = "[pick(GLOB.megacarp_first_names)] [pick(GLOB.megacarp_last_names)]"
melee_damage_lower += rand(2, 10)
diff --git a/code/modules/mob/living/simple_animal/hostile/drakehound.dm b/code/modules/mob/living/simple_animal/hostile/drakehound.dm
new file mode 100644
index 000000000000..61c8a2778c59
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/hostile/drakehound.dm
@@ -0,0 +1,57 @@
+/mob/living/simple_animal/hostile/drakehound_breacher
+ name = "Drakehound Breacher"
+ desc = "A unathi raider with a viscious streak."
+ icon = 'icons/mob/simple_human.dmi'
+ icon_state = "drakehound"
+ icon_living = "drakehound"
+ icon_dead = "drakehound_dead" // Does not actually exist. del_on_death.
+ mob_biotypes = MOB_ORGANIC | MOB_HUMANOID
+ speak_chance = 1
+ turns_per_move = 3
+ response_help = "pushes the"
+ response_disarm = "shoves"
+ response_harm = "slashes"
+ speed = 0
+ maxHealth = 100
+ health = 100
+
+ harm_intent_damage = 5
+ obj_damage = 60
+ melee_damage_lower = 30
+ melee_damage_upper = 30
+ attacktext = "slashes"
+ attack_sound = 'sound/weapons/bladeslice.ogg'
+ minbodytemp = 0
+
+ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
+ speak_emote = list("hisses")
+ loot = list(
+ /obj/effect/decal/cleanable/blood/innards,
+ /obj/effect/decal/cleanable/blood,
+ /obj/effect/gibspawner/generic,
+ /obj/effect/gibspawner/generic)
+ del_on_death = TRUE
+ faction = list("pirate")
+ sentience_type = SENTIENCE_OTHER
+ footstep_type = FOOTSTEP_MOB_SHOE
+
+/mob/living/simple_animal/hostile/drakehound_breacher/Initialize(mapload)
+ . = ..()
+ if(prob(50))
+ loot = list(
+ /obj/item/salvage/loot/pirate,
+ /obj/effect/decal/cleanable/blood/innards,
+ /obj/effect/decal/cleanable/blood,
+ /obj/effect/gibspawner/generic,
+ /obj/effect/gibspawner/generic)
+
+/mob/living/simple_animal/hostile/drakehound_breacher/Process_Spacemove(movement_dir = 0)
+ return TRUE
+
+/mob/living/simple_animal/hostile/drakehound_breacher/ListTargetsLazy()
+ return ListTargets()
+
+/mob/living/simple_animal/hostile/drakehound_breacher/Aggro()
+ . = ..()
+ if(target)
+ playsound(loc, 'sound/effects/unathihiss.ogg', 70, TRUE)
diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm
index 351365207bbf..21243b038a57 100644
--- a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm
+++ b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm
@@ -43,7 +43,7 @@
/// Chance of doing the throw or stamina damage, along with the flat damage amount
var/throw_onhit = 50
-/mob/living/simple_animal/hostile/gorilla/Initialize()
+/mob/living/simple_animal/hostile/gorilla/Initialize(mapload)
. = ..()
var/datum/action/innate/gorilla/gorilla_toggle/toggle = new
toggle.Grant(src)
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index b94de5402a04..ecf791c723cb 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -472,6 +472,9 @@
A.attack_animal(src)//Bang on it till we get out
/mob/living/simple_animal/hostile/proc/FindHidden()
+ if(QDELETED(target))
+ LoseTarget()
+ return
if(istype(target.loc, /obj/structure/closet) || istype(target.loc, /obj/machinery/disposal) || istype(target.loc, /obj/machinery/sleeper) || istype(target.loc, /obj/machinery/bodyscanner) || istype(target.loc, /obj/machinery/recharge_station))
var/atom/A = target.loc
Goto(A,move_to_delay,minimum_distance)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
index e87e4cbfea06..323508edfe16 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
@@ -560,6 +560,7 @@ Difficulty: Hard
/obj/effect/temp_visual/bubblegum_hands
icon = 'icons/effects/bubblegum.dmi'
+ icon_state = null
duration = 9
/obj/effect/temp_visual/bubblegum_hands/rightthumb
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
index 9edf3e3d0001..b9bddd139c78 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
@@ -600,10 +600,10 @@ Difficulty: Medium
/mob/living/simple_animal/hostile/megafauna/dragon/space_dragon
name = "space dragon"
+ desc = "A space carp turned dragon by vile magic. Has the same ferocity of a space carp, but also a much more enabling body."
maxHealth = 1000
health = 1000
faction = list("carp")
- desc = "A space carp turned dragon by vile magic. Has the same ferocity of a space carp, but also a much more enabling body."
icon = 'icons/mob/spacedragon.dmi'
icon_state = "spacedragon"
icon_living = "spacedragon"
diff --git a/code/modules/mob/living/simple_animal/hostile/mining/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining/elites/goliath_broodmother.dm
index 798337995444..c2bfa29476cb 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining/elites/goliath_broodmother.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining/elites/goliath_broodmother.dm
@@ -18,7 +18,7 @@
/mob/living/simple_animal/hostile/asteroid/elite/broodmother
name = "goliath broodmother"
- desc = "An example of sexual dimorphism, this female goliath looks much different than the males of her species. She is, however, just as dangerous, if not more."
+ desc = "An example of sexual dimorphism, this female goliath looks much different than the males of her species. She is, however, just as dangerous, if not more."
gender = FEMALE
icon_state = "broodmother"
icon_living = "broodmother"
@@ -165,7 +165,7 @@
//The goliath's children. Pretty weak, simple mobs which are able to put a single tentacle under their target when at range.
/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child
name = "baby goliath"
- desc = "A young goliath recently born from it's mother. While they hatch from eggs, said eggs are incubated in the mother until they are ready to be born."
+ desc = "A young goliath recently born from it's mother. While they hatch from eggs, said eggs are incubated in the mother until they are ready to be born."
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
icon_state = "goliath_baby"
icon_living = "goliath_baby"
diff --git a/code/modules/mob/living/simple_animal/hostile/mining/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining/elites/herald.dm
index 395e32f4157b..3217f7cdc2e2 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining/elites/herald.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining/elites/herald.dm
@@ -199,7 +199,7 @@
/mob/living/simple_animal/hostile/asteroid/elite/herald/mirror
name = "herald's mirror"
- desc = "This fiendish work of magic copies the herald's attacks. Seems logical to smash it."
+ desc = "This fiendish work of magic copies the herald's attacks. Seems logical to smash it."
health = 60
maxHealth = 60
icon_state = "herald_mirror"
@@ -264,7 +264,7 @@
icon_state = "herald_cloak"
item_state = "herald_cloak"
item_color = "herald_cloak"
- slot_flags = SLOT_FLAG_TIE
+ slot_flags = ITEM_SLOT_ACCESSORY
allow_duplicates = FALSE
actions_types = list(/datum/action/item_action/accessory/herald)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining/elites/legionnaire.dm b/code/modules/mob/living/simple_animal/hostile/mining/elites/legionnaire.dm
index 68c4c3f6c938..cf8b65a09d9c 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining/elites/legionnaire.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining/elites/legionnaire.dm
@@ -281,7 +281,7 @@
//The legionnaire's bonfire, which can be swapped positions with. Also sets flammable living beings on fire when they walk over it.
/obj/structure/legionnaire_bonfire
name = "bone pile"
- desc = "A pile of bones which seems to occasionally move a little. It's probably a good idea to smash them."
+ desc = "A pile of bones which seems to occasionally move a little. It's probably a good idea to smash them."
icon = 'icons/obj/lavaland/legionnaire_bonfire.dmi'
icon_state = "bonfire"
max_integrity = 100
diff --git a/code/modules/mob/living/simple_animal/hostile/mining/elites/pandora.dm b/code/modules/mob/living/simple_animal/hostile/mining/elites/pandora.dm
index f893634965df..c9450b56f572 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining/elites/pandora.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining/elites/pandora.dm
@@ -19,7 +19,7 @@
/mob/living/simple_animal/hostile/asteroid/elite/pandora
name = "pandora"
- desc = "A large magic box with similar power and design to the Hierophant. Once it opens, it's not easy to close it."
+ desc = "A large magic box with similar power and design to the Hierophant. Once it opens, it's not easy to close it."
icon_state = "pandora"
icon_living = "pandora"
icon_aggro = "pandora"
@@ -206,7 +206,7 @@
icon_state = "hope"
item_state = "hope"
item_color = "hope"
- slot_flags = SLOT_FLAG_TIE
+ slot_flags = ITEM_SLOT_ACCESSORY
allow_duplicates = FALSE
resistance_flags = FIRE_PROOF
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm
index ae8634db2b17..08a695f79d14 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm
@@ -157,7 +157,7 @@
/obj/structure/spider/terrorweb
name = "terror web"
- desc = "it's stringy and sticky"
+ desc = "It's stringy and sticky!"
icon = 'icons/effects/effects.dmi'
anchored = TRUE // prevents people dragging it
density = FALSE // prevents it blocking all movement
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ghost_interaction.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ghost_interaction.dm
index 5f132fa5487d..c5d8473379bb 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ghost_interaction.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ghost_interaction.dm
@@ -1,5 +1,6 @@
/mob/living/simple_animal/hostile/poison/terror_spider/Topic(href, href_list)
+ ..()
if(href_list["activate"])
var/mob/user = usr
if(HAS_TRAIT(user, TRAIT_RESPAWNABLE))
diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm
index 8129b49d1c83..61cd634b258c 100644
--- a/code/modules/mob/living/simple_animal/shade.dm
+++ b/code/modules/mob/living/simple_animal/shade.dm
@@ -1,7 +1,7 @@
/mob/living/simple_animal/shade
name = "Shade"
real_name = "Shade"
- desc = "A bound spirit"
+ desc = "A bound spirit."
icon = 'icons/mob/cult.dmi'
icon_state = "shade"
icon_living = "shade"
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 8ce7b533a7dd..88ddc6189a2f 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -474,14 +474,14 @@
/mob/living/simple_animal/get_item_by_slot(slot_id)
switch(slot_id)
- if(SLOT_HUD_COLLAR)
+ if(ITEM_SLOT_COLLAR)
return pcollar
. = ..()
/mob/living/simple_animal/can_equip(obj/item/I, slot, disable_warning = 0)
// . = ..() // Do not call parent. We do not want animals using their hand slots.
switch(slot)
- if(SLOT_HUD_COLLAR)
+ if(ITEM_SLOT_COLLAR)
if(pcollar)
return FALSE
if(!can_collar)
@@ -501,7 +501,7 @@
W.plane = ABOVE_HUD_PLANE
switch(slot)
- if(SLOT_HUD_COLLAR)
+ if(ITEM_SLOT_COLLAR)
add_collar(W)
/mob/living/simple_animal/unEquip(obj/item/I, force, silent = FALSE)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 5cd8ae5ed495..c551cf1ae3a6 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -241,9 +241,9 @@
src:update_fhair()
/mob/proc/put_in_any_hand_if_possible(obj/item/W as obj, del_on_fail = 0, disable_warning = 1)
- if(equip_to_slot_if_possible(W, SLOT_HUD_LEFT_HAND, del_on_fail, disable_warning))
+ if(equip_to_slot_if_possible(W, ITEM_SLOT_LEFT_HAND, del_on_fail, disable_warning))
return 1
- else if(equip_to_slot_if_possible(W, SLOT_HUD_RIGHT_HAND, del_on_fail, disable_warning))
+ else if(equip_to_slot_if_possible(W, ITEM_SLOT_RIGHT_HAND, del_on_fail, disable_warning))
return 1
return 0
@@ -303,23 +303,23 @@
//The list of slots by priority. equip_to_appropriate_slot() uses this list. Doesn't matter if a mob type doesn't have a slot.
GLOBAL_LIST_INIT(slot_equipment_priority, list( \
- SLOT_HUD_BACK,\
- SLOT_HUD_WEAR_PDA,\
- SLOT_HUD_WEAR_ID,\
- SLOT_HUD_JUMPSUIT,\
- SLOT_HUD_OUTER_SUIT,\
- SLOT_HUD_WEAR_MASK,\
- SLOT_HUD_HEAD,\
- SLOT_HUD_SHOES,\
- SLOT_HUD_GLOVES,\
- SLOT_HUD_LEFT_EAR,\
- SLOT_HUD_RIGHT_EAR,\
- SLOT_HUD_GLASSES,\
- SLOT_HUD_BELT,\
- SLOT_HUD_SUIT_STORE,\
- SLOT_HUD_TIE,\
- SLOT_HUD_LEFT_STORE,\
- SLOT_HUD_RIGHT_STORE\
+ ITEM_SLOT_BACK,\
+ ITEM_SLOT_PDA,\
+ ITEM_SLOT_ID,\
+ ITEM_SLOT_JUMPSUIT,\
+ ITEM_SLOT_OUTER_SUIT,\
+ ITEM_SLOT_MASK,\
+ ITEM_SLOT_HEAD,\
+ ITEM_SLOT_SHOES,\
+ ITEM_SLOT_GLOVES,\
+ ITEM_SLOT_LEFT_EAR,\
+ ITEM_SLOT_RIGHT_EAR,\
+ ITEM_SLOT_EYES,\
+ ITEM_SLOT_BELT,\
+ ITEM_SLOT_SUIT_STORE,\
+ ITEM_SLOT_ACCESSORY,\
+ ITEM_SLOT_LEFT_POCKET,\
+ ITEM_SLOT_RIGHT_POCKET\
))
//puts the item "W" into an appropriate slot in a human's inventory
@@ -328,7 +328,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
if(!istype(W)) return 0
for(var/slot in GLOB.slot_equipment_priority)
- if(isstorage(W) && slot == SLOT_HUD_HEAD) // Storage items should be put on the belt before the head
+ if(isstorage(W) && slot == ITEM_SLOT_HEAD) // Storage items should be put on the belt before the head
continue
if(equip_to_slot_if_possible(W, slot, FALSE, TRUE)) //del_on_fail = 0; disable_warning = 0
return 1
@@ -352,22 +352,22 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
var/mob/living/carbon/human/H = M
switch(slot)
- if(SLOT_HUD_LEFT_HAND)
+ if(ITEM_SLOT_LEFT_HAND)
if(H.l_hand)
return 0
return 1
- if(SLOT_HUD_RIGHT_HAND)
+ if(ITEM_SLOT_RIGHT_HAND)
if(H.r_hand)
return 0
return 1
- if(SLOT_HUD_WEAR_MASK)
- if(!(slot_flags & SLOT_FLAG_MASK))
+ if(ITEM_SLOT_MASK)
+ if(!(slot_flags & ITEM_SLOT_MASK))
return 0
if(H.wear_mask)
return 0
return 1
- if(SLOT_HUD_BACK)
- if(!(slot_flags & SLOT_FLAG_BACK))
+ if(ITEM_SLOT_BACK)
+ if(!(slot_flags & ITEM_SLOT_BACK))
return 0
if(H.back)
if(!(H.back.flags & NODROP))
@@ -375,8 +375,8 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
else
return 0
return 1
- if(SLOT_HUD_OUTER_SUIT)
- if(!(slot_flags & SLOT_FLAG_OCLOTHING))
+ if(ITEM_SLOT_OUTER_SUIT)
+ if(!(slot_flags & ITEM_SLOT_OUTER_SUIT))
return 0
if(H.wear_suit)
if(!(H.wear_suit.flags & NODROP))
@@ -384,8 +384,8 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
else
return 0
return 1
- if(SLOT_HUD_GLOVES)
- if(!(slot_flags & SLOT_FLAG_GLOVES))
+ if(ITEM_SLOT_GLOVES)
+ if(!(slot_flags & ITEM_SLOT_GLOVES))
return 0
if(H.gloves)
if(!(H.gloves.flags & NODROP))
@@ -393,8 +393,8 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
else
return 0
return 1
- if(SLOT_HUD_SHOES)
- if(!(slot_flags & SLOT_FLAG_FEET))
+ if(ITEM_SLOT_SHOES)
+ if(!(slot_flags & ITEM_SLOT_SHOES))
return 0
if(H.shoes)
if(!(H.shoes.flags & NODROP))
@@ -402,12 +402,12 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
else
return 0
return 1
- if(SLOT_HUD_BELT)
+ if(ITEM_SLOT_BELT)
if(!H.w_uniform)
if(!disable_warning)
to_chat(H, "
You need a jumpsuit before you can attach this [name].")
return 0
- if(!(slot_flags & SLOT_FLAG_BELT))
+ if(!(slot_flags & ITEM_SLOT_BELT))
return 0
if(H.belt)
if(!(H.belt.flags & NODROP))
@@ -415,8 +415,8 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
else
return 0
return 1
- if(SLOT_HUD_GLASSES)
- if(!(slot_flags & SLOT_FLAG_EYES))
+ if(ITEM_SLOT_EYES)
+ if(!(slot_flags & ITEM_SLOT_EYES))
return 0
if(H.glasses)
if(!(H.glasses.flags & NODROP))
@@ -424,8 +424,8 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
else
return 0
return 1
- if(SLOT_HUD_HEAD)
- if(!(slot_flags & SLOT_FLAG_HEAD))
+ if(ITEM_SLOT_HEAD)
+ if(!(slot_flags & ITEM_SLOT_HEAD))
return 0
if(H.head)
if(!(H.head.flags & NODROP))
@@ -433,8 +433,8 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
else
return 0
return 1
- if(SLOT_HUD_LEFT_EAR)
- if(!(slot_flags & SLOT_HUD_LEFT_EAR))
+ if(ITEM_SLOT_LEFT_EAR)
+ if(!(slot_flags & ITEM_SLOT_LEFT_EAR))
return 0
if(H.l_ear)
if(!(H.l_ear.flags & NODROP))
@@ -442,8 +442,8 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
else
return 0
return 1
- if(SLOT_HUD_RIGHT_EAR)
- if(!(slot_flags & SLOT_HUD_RIGHT_EAR))
+ if(ITEM_SLOT_RIGHT_EAR)
+ if(!(slot_flags & ITEM_SLOT_RIGHT_EAR))
return 0
if(H.r_ear)
if(!(H.r_ear.flags & NODROP))
@@ -451,8 +451,8 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
else
return 0
return 1
- if(SLOT_HUD_JUMPSUIT)
- if(!(slot_flags & SLOT_FLAG_ICLOTHING))
+ if(ITEM_SLOT_JUMPSUIT)
+ if(!(slot_flags & ITEM_SLOT_JUMPSUIT))
return 0
if(H.w_uniform)
if(!(H.w_uniform.flags & NODROP))
@@ -460,12 +460,12 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
else
return 0
return 1
- if(SLOT_HUD_WEAR_ID)
+ if(ITEM_SLOT_ID)
if(!H.w_uniform)
if(!disable_warning)
to_chat(H, "
You need a jumpsuit before you can attach this [name].")
return 0
- if(!(slot_flags & SLOT_FLAG_ID))
+ if(!(slot_flags & ITEM_SLOT_ID))
return 0
if(H.wear_id)
if(!(H.wear_id.flags & NODROP))
@@ -473,26 +473,26 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
else
return 0
return 1
- if(SLOT_HUD_LEFT_STORE)
+ if(ITEM_SLOT_LEFT_POCKET)
if(H.l_store)
return 0
if(!H.w_uniform)
if(!disable_warning)
to_chat(H, "
You need a jumpsuit before you can attach this [name].")
return 0
- if(w_class <= WEIGHT_CLASS_SMALL || (slot_flags & SLOT_FLAG_POCKET))
+ if(w_class <= WEIGHT_CLASS_SMALL || (slot_flags & ITEM_SLOT_BOTH_POCKETS))
return 1
- if(SLOT_HUD_RIGHT_STORE)
+ if(ITEM_SLOT_RIGHT_POCKET)
if(H.r_store)
return 0
if(!H.w_uniform)
if(!disable_warning)
to_chat(H, "
You need a jumpsuit before you can attach this [name].")
return 0
- if(w_class <= WEIGHT_CLASS_SMALL || (slot_flags & SLOT_FLAG_POCKET))
+ if(w_class <= WEIGHT_CLASS_SMALL || (slot_flags & ITEM_SLOT_BOTH_POCKETS))
return 1
return 0
- if(SLOT_HUD_SUIT_STORE)
+ if(ITEM_SLOT_SUIT_STORE)
if(!H.wear_suit)
if(!disable_warning)
to_chat(H, "
You need a suit before you can attach this [name].")
@@ -505,7 +505,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
if(!disable_warning)
to_chat(usr, "The [name] is too big to attach.")
return 0
- if(istype(src, /obj/item/pda) || is_pen(src) || is_type_in_list(src, H.wear_suit.allowed))
+ if(is_pda(src) || is_pen(src) || is_type_in_list(src, H.wear_suit.allowed))
if(H.s_store)
if(!(H.s_store.flags & NODROP))
return 2
@@ -514,19 +514,15 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
else
return 1
return 0
- if(SLOT_HUD_HANDCUFFED)
+ if(ITEM_SLOT_HANDCUFFED)
if(H.handcuffed)
return 0
- if(!istype(src, /obj/item/restraints/handcuffs))
- return 0
- return 1
- if(SLOT_HUD_LEGCUFFED)
+ return istype(src, /obj/item/restraints/handcuffs)
+ if(ITEM_SLOT_LEGCUFFED)
if(H.legcuffed)
return 0
- if(!istype(src, /obj/item/restraints/legcuffs))
- return 0
- return 1
- if(SLOT_HUD_IN_BACKPACK)
+ return istype(src, /obj/item/restraints/legcuffs)
+ if(ITEM_SLOT_IN_BACKPACK)
if(H.back && istype(H.back, /obj/item/storage/backpack))
var/obj/item/storage/backpack/B = H.back
if(length(B.contents) < B.storage_slots && w_class <= B.max_w_class)
@@ -617,6 +613,8 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
DEFAULT_QUEUE_OR_CALL_VERB(VERB_CALLBACK(src, PROC_REF(run_examinate), A))
/mob/proc/run_examinate(atom/A)
+ if(QDELETED(A))
+ return
if(A.invisibility > see_invisible)
A = get_turf(A)
if(!has_vision(information_only = TRUE) && !isobserver(src))
@@ -792,18 +790,22 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
src:cameraFollow = null
/mob/Topic(href, href_list)
- ..()
- if(href_list["mach_close"])
- var/t1 = "window=[href_list["mach_close"]]"
- unset_machine()
- src << browse(null, t1)
-
if(href_list["flavor_more"])
usr << browse(text("
[][]", name, replacetext(flavor_text, "\n", "
")), "window=[name];size=500x200")
onclose(usr, "[name]")
if(href_list["flavor_change"])
update_flavor_text()
+ if(usr != src)
+ return TRUE
+ if(..())
+ return TRUE
+ if(href_list["mach_close"])
+ var/t1 = "window=[href_list["mach_close"]]"
+ unset_machine()
+ src << browse(null, t1)
+
+
if(href_list["scoreboard"])
usr << browse(GLOB.scoreboard, "window=roundstats;size=500x600")
diff --git a/code/modules/mob/mob_death_base.dm b/code/modules/mob/mob_death_base.dm
index 508dd271849e..b6f32f69e703 100644
--- a/code/modules/mob/mob_death_base.dm
+++ b/code/modules/mob/mob_death_base.dm
@@ -9,7 +9,7 @@
return FALSE
/mob/proc/death(gibbed)
- SEND_SIGNAL(src, COMSIG_MOB_DEATH, gibbed)
+ SEND_SIGNAL(src, COMSIG_MOB_DEATH, gibbed, src)
return FALSE
/mob/proc/dust_animation()
diff --git a/code/modules/mob/mob_holder.dm b/code/modules/mob/mob_holder.dm
index e727ab7af83e..f99b8229166e 100644
--- a/code/modules/mob/mob_holder.dm
+++ b/code/modules/mob/mob_holder.dm
@@ -3,7 +3,7 @@
name = "holder"
desc = "You shouldn't ever see this."
icon = 'icons/obj/objects.dmi'
- slot_flags = SLOT_FLAG_HEAD|SLOT_FLAG_EARS
+ slot_flags = ITEM_SLOT_HEAD|ITEM_SLOT_BOTH_EARS
/obj/item/holder/New()
..()
@@ -98,7 +98,7 @@
name = "nian caterpillar"
desc = "It's a tiny little itty bitty critter."
icon_state = "mothroach"
- slot_flags = SLOT_FLAG_HEAD
+ slot_flags = ITEM_SLOT_HEAD
/obj/item/holder/drone/emagged
name = "maintenance drone"
@@ -107,7 +107,7 @@
/obj/item/holder/pai
name = "pAI"
desc = "It's a little robot."
- icon_state = "pai"
+ icon_state = null
/obj/item/holder/mouse
name = "mouse"
@@ -117,7 +117,7 @@
/obj/item/holder/bunny
name = "bunny"
- desc = "Awww a cute bunny"
+ desc = "Awww a cute bunny."
icon = 'icons/mob/animal.dmi'
icon_state = "m_bunny"
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 48f7e6cf8cb3..c3a043807110 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -112,6 +112,10 @@
if(!client)
return FALSE
+ if(usr != src)
+ message_admins("[key_name_admin(usr)] may have attempted to href exploit with [key_name_admin(src)]'s new_player mob.")
+ return
+
if(href_list["consent_signed"])
var/datum/db_query/query = SSdbcore.NewQuery("REPLACE INTO privacy (ckey, datetime, consent) VALUES (:ckey, Now(), 1)", list(
"ckey" = ckey
diff --git a/code/modules/mod/mod_activation.dm b/code/modules/mod/mod_activation.dm
index 5dd2e207e106..915d02d123cb 100644
--- a/code/modules/mod/mod_activation.dm
+++ b/code/modules/mod/mod_activation.dm
@@ -74,13 +74,13 @@
to_chat(user, "
[part.name] already deployed!")
playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
if(part in overslotting_parts)
- var/obj/item/overslot = wearer.get_item_by_slot(slot_bitfield_to_slot(part.slot_flags))
+ var/obj/item/overslot = wearer.get_item_by_slot(part.slot_flags)
if(overslot)
wearer.unEquip(overslot, TRUE)
overslotting_parts[part] = overslot
overslot.forceMove(part)
RegisterSignal(part, COMSIG_ATOM_EXITED, PROC_REF(on_overslot_exit))
- if(wearer.equip_to_slot_if_possible(part, slot_bitfield_to_slot(part.slot_flags), disable_warning = TRUE))
+ if(wearer.equip_to_slot_if_possible(part, part.slot_flags, disable_warning = TRUE))
part.flags |= NODROP
if(mass)
return TRUE
@@ -109,7 +109,7 @@
if(overslotting_parts[part])
UnregisterSignal(part, COMSIG_ATOM_EXITED)
var/obj/item/overslot = overslotting_parts[part]
- if(!wearer.equip_to_slot_if_possible(overslot, slot_bitfield_to_slot(overslot.slot_flags), disable_warning = TRUE))
+ if(!wearer.equip_to_slot_if_possible(overslot, overslot.slot_flags, disable_warning = TRUE))
overslot.forceMove(get_turf(wearer))
overslotting_parts[part] = null
if(mass)
diff --git a/code/modules/mod/mod_construction.dm b/code/modules/mod/mod_construction.dm
index d526ae37a71b..e74d76e3a35d 100644
--- a/code/modules/mod/mod_construction.dm
+++ b/code/modules/mod/mod_construction.dm
@@ -1,7 +1,6 @@
/obj/item/mod/construction
desc = "A part used in MOD construction. You could insert it into a MOD shell."
icon = 'icons/obj/clothing/modsuit/mod_construction.dmi'
- icon_state = "rack_parts"
/obj/item/mod/construction/helmet
name = "MOD helmet"
diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm
index 4f5b79b684fd..f20cada75cf5 100644
--- a/code/modules/mod/mod_control.dm
+++ b/code/modules/mod/mod_control.dm
@@ -8,11 +8,11 @@
/obj/item/mod/control
name = "MOD control unit"
desc = "The control unit of a Modular Outerwear Device, a powered suit that protects against various environments."
- icon_state = "mod_control"
+ icon_state = null
item_state = "mod_control"
base_icon_state = "control"
w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_FLAG_BACK
+ slot_flags = ITEM_SLOT_BACK
strip_delay = 10 SECONDS
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 0, ACID = 0)
actions_types = list(
@@ -231,14 +231,14 @@
/obj/item/mod/control/equipped(mob/user, slot)
..()
- if(slot == SLOT_HUD_BACK)
+ if(slot == ITEM_SLOT_BACK)
set_wearer(user)
else if(wearer)
unset_wearer()
/obj/item/mod/control/item_action_slot_check(slot)
- if(slot == SLOT_HUD_BACK)
+ if(slot == ITEM_SLOT_BACK)
return TRUE
/obj/item/mod/control/on_mob_move(direction, mob/user)
diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm
index 635b99e03d14..29a472134b73 100644
--- a/code/modules/mod/mod_theme.dm
+++ b/code/modules/mod/mod_theme.dm
@@ -20,7 +20,7 @@
/// Default skin of the MOD.
var/default_skin = "standard"
/// The slot this mod theme fits on
- var/slot_flags = SLOT_FLAG_BACK
+ var/slot_flags = ITEM_SLOT_BACK
/// Armor shared across the MOD parts.
var/obj/item/mod/armor/armor_type_1 = /obj/item/mod/armor/mod_theme
/// the actual armor object placed in a datum as I am tired and I just want this to work
diff --git a/code/modules/mod/modules/module_pathfinder.dm b/code/modules/mod/modules/module_pathfinder.dm
index 9bb73673b999..c99b4989b09d 100644
--- a/code/modules/mod/modules/module_pathfinder.dm
+++ b/code/modules/mod/modules/module_pathfinder.dm
@@ -51,9 +51,9 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/human_user = user
- if(human_user.get_item_by_slot(SLOT_HUD_BACK) && !human_user.unEquip(human_user.get_item_by_slot(SLOT_HUD_BACK)))
+ if(human_user.get_item_by_slot(ITEM_SLOT_BACK) && !human_user.unEquip(human_user.get_item_by_slot(ITEM_SLOT_BACK)))
return
- if(!human_user.equip_to_slot_if_possible(mod, SLOT_HUD_BACK, disable_warning = TRUE))
+ if(!human_user.equip_to_slot_if_possible(mod, ITEM_SLOT_BACK, disable_warning = TRUE))
return
mod.quick_deploy(user)
human_user.update_action_buttons(TRUE)
diff --git a/code/modules/mod/modules/modules_engineering.dm b/code/modules/mod/modules/modules_engineering.dm
index d42f440676e6..e5abb7c873a2 100644
--- a/code/modules/mod/modules/modules_engineering.dm
+++ b/code/modules/mod/modules/modules_engineering.dm
@@ -133,22 +133,25 @@
name = "tether"
icon_state = "tether_projectile"
icon = 'icons/obj/clothing/modsuit/mod_modules.dmi'
+ var/chain_icon_state = "line"
speed = 2
damage = 5
range = 15
hitsound = 'sound/weapons/batonextend.ogg'
hitsound_wall = 'sound/weapons/batonextend.ogg'
+ ///How fast the tether will throw the user at the target
+ var/yank_speed = 1
/obj/item/projectile/tether/proc/make_chain()
if(firer)
- chain = Beam(firer, icon_state = "line", icon = 'icons/obj/clothing/modsuit/mod_modules.dmi', time = 10 SECONDS, maxdistance = 15)
+ chain = Beam(firer, chain_icon_state, icon, time = 10 SECONDS, maxdistance = range)
/obj/item/projectile/tether/on_hit(atom/target)
. = ..()
if(firer && isliving(firer))
var/mob/living/L = firer
L.apply_status_effect(STATUS_EFFECT_IMPACT_IMMUNE)
- L.throw_at(target, 15, 1, L, FALSE, FALSE, callback = CALLBACK(L, TYPE_PROC_REF(/mob/living, remove_status_effect), STATUS_EFFECT_IMPACT_IMMUNE), block_movement = FALSE)
+ L.throw_at(target, 15, yank_speed, L, FALSE, FALSE, callback = CALLBACK(L, TYPE_PROC_REF(/mob/living, remove_status_effect), STATUS_EFFECT_IMPACT_IMMUNE), block_movement = FALSE)
/obj/item/projectile/tether/Destroy()
QDEL_NULL(chain)
diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm
index 62d78a570305..3ef82f70ca50 100644
--- a/code/modules/mod/modules/modules_general.dm
+++ b/code/modules/mod/modules/modules_general.dm
@@ -16,7 +16,7 @@
var/max_items = 7
var/obj/item/storage/backpack/modstorage/bag
-/obj/item/mod/module/storage/Initialize()
+/obj/item/mod/module/storage/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_ADJACENCY_TRANSPARENT, ROUNDSTART_TRAIT)
var/obj/item/storage/backpack/modstorage/S = new(src)
@@ -251,8 +251,8 @@
/obj/item/mod/module/flashlight/configure_edit(key, value)
switch(key)
if("light_color")
- value = input(usr, "Pick new light color", "Flashlight Color") as color|null
- if(!value)
+ value = tgui_input_color(usr, "Pick new light color", "Flashlight Color", light_color)
+ if(isnull(value))
return
if(is_color_dark(value, 50))
to_chat(mod.wearer, ("
That is too dark"))
diff --git a/code/modules/mod/modules/modules_supply.dm b/code/modules/mod/modules/modules_supply.dm
index daf0c8832451..e6696f395494 100644
--- a/code/modules/mod/modules/modules_supply.dm
+++ b/code/modules/mod/modules/modules_supply.dm
@@ -550,7 +550,7 @@
mineral_turf.gets_drilled(firer)
for(var/mob/living/mob in range(power, src))
mob.apply_damage(damage * (ishostile(mob) ? fauna_boost : 1), BRUTE, spread_damage = TRUE)
- if(!ishostile(mob) || !firer)
+ if(!ishostile(mob) || !firer || mob.stat != CONSCIOUS)
continue
var/mob/living/simple_animal/hostile/hostile_mob = mob
hostile_mob.GiveTarget(firer)
diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm
index 9700564be7f8..e160887fe6ff 100644
--- a/code/modules/ninja/energy_katana.dm
+++ b/code/modules/ninja/energy_katana.dm
@@ -1,6 +1,6 @@
/obj/item/katana/energy
name = "energy katana"
- desc = "A katana infused with a strong energy"
+ desc = "A katana infused with a strong energy."
icon = 'icons/obj/weapons/energy_melee.dmi'
icon_state = "energy_katana"
item_state = "energy_katana"
@@ -54,7 +54,7 @@
if(user.put_in_hands(src))
msg = "Your Energy Katana teleports into your hand!"
- else if(user.equip_to_slot_if_possible(src, SLOT_HUD_BELT, FALSE, TRUE))
+ else if(user.equip_to_slot_if_possible(src, ITEM_SLOT_BELT, FALSE, TRUE))
msg = "Your Energy Katana teleports back to you, sheathing itself as it does so!"
else
loc = get_turf(user)
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index 347f05a16831..620fb395ddf3 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -11,7 +11,7 @@
throw_speed = 3
var/obj/item/pen/containedpen
var/obj/item/toppaper
- slot_flags = SLOT_FLAG_BELT
+ slot_flags = ITEM_SLOT_BELT
resistance_flags = FLAMMABLE
/obj/item/clipboard/New()
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 03009f4c219e..1616104ccf2d 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -14,7 +14,7 @@
throw_range = 1
throw_speed = 1
pressure_resistance = 0
- slot_flags = SLOT_FLAG_HEAD
+ slot_flags = ITEM_SLOT_HEAD
body_parts_covered = HEAD
resistance_flags = FLAMMABLE
max_integrity = 50
@@ -47,6 +47,7 @@
var/const/deffont = "Verdana"
var/const/signfont = "Times New Roman"
var/const/crayonfont = "Comic Sans MS"
+ var/regex/blacklist = new("(
);
};
diff --git a/tgui/packages/tgui/components/Interactive.tsx b/tgui/packages/tgui/components/Interactive.tsx
new file mode 100644
index 000000000000..c2d1b899b24a
--- /dev/null
+++ b/tgui/packages/tgui/components/Interactive.tsx
@@ -0,0 +1,138 @@
+/**
+ * MIT License
+ * https://github.com/omgovich/react-colorful/
+ *
+ * Copyright (c) 2020 Vlad Shilov