"
- src << browse(msg.Join(), "window=Player_playtime_check")
+ new /datum/player_playtime(usr)
/obj/effect/temp_visual/fireball
icon = 'icons/obj/wizard.dmi'
diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm
index 2f7e160e6e..a1b1a1288e 100644
--- a/code/modules/antagonists/_common/antag_datum.dm
+++ b/code/modules/antagonists/_common/antag_datum.dm
@@ -50,6 +50,10 @@ GLOBAL_LIST_EMPTY(antagonists)
var/show_name_in_check_antagonists = FALSE
/// Should this antagonist be shown as antag to ghosts? Shouldn't be used for stealthy antagonists like traitors
var/show_to_ghosts = FALSE
+//ambition start
+ /// Lazy list for antagonists to request the admins objectives.
+ var/list/requested_objective_changes
+//ambition end
/* CIT SPECIFIC */
/// Quirks that will be removed upon gaining this antag. Pacifist and mute are default.
@@ -78,7 +82,9 @@ GLOBAL_LIST_EMPTY(antagonists)
if(!owner)
stack_trace("Destroy()ing antagonist datum when it has no owner.")
else
- LAZYREMOVE(owner.antag_datums, src)
+//ambition start
+ owner?.do_remove_antag_datum(src)
+//ambition end
owner = null
return ..()
@@ -230,7 +236,7 @@ GLOBAL_LIST_EMPTY(antagonists)
remove_innate_effects()
clear_antag_moodies()
- LAZYREMOVE(owner.antag_datums, src)
+ owner.do_remove_antag_datum(src)
// cit skill
for(var/A in skill_modifiers)
owner.remove_skill_modifier(GET_SKILL_MOD_ID(A, type))
@@ -524,3 +530,33 @@ GLOBAL_LIST_EMPTY(antagonists)
/datum/action/antag_info/IsAvailable()
return TRUE
+
+///Clears change requests from deleted objectives to avoid broken references.
+/datum/antagonist/proc/clean_request_from_del_objective(datum/objective/source, force)
+ var/objective_reference = REF(source)
+ for(var/uid in requested_objective_changes)
+ var/list/change_request = requested_objective_changes[uid]
+ if(change_request["target"] != objective_reference)
+ continue
+ LAZYREMOVE(requested_objective_changes, uid)
+
+
+/datum/antagonist/proc/add_objective_change(uid, list/additions)
+ LAZYADD(requested_objective_changes, uid)
+ var/datum/objective/request_target = additions["target"]
+ if(!ispath(request_target))
+ request_target = locate(request_target) in objectives
+ if(istype(request_target))
+ RegisterSignal(request_target, COMSIG_PARENT_QDELETING, .proc/clean_request_from_del_objective)
+ requested_objective_changes[uid] = additions
+
+
+/datum/antagonist/proc/remove_objective_change(uid)
+ if(!LAZYACCESS(requested_objective_changes, uid))
+ return
+ var/datum/objective/request_target = requested_objective_changes[uid]["target"]
+ if(!ispath(request_target))
+ request_target = locate(request_target) in objectives
+ if(istype(request_target))
+ UnregisterSignal(request_target, COMSIG_PARENT_QDELETING)
+ LAZYREMOVE(requested_objective_changes, uid)
diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
index 8484732d8d..011d175cfa 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
@@ -62,7 +62,7 @@
A.UpdateButtonIcon()
/obj/item/clothing/suit/armor/abductor/vest/item_action_slot_check(slot, mob/user, datum/action/A)
- if(slot == SLOT_WEAR_SUIT) //we only give the mob the ability to activate the vest if he's actually wearing it.
+ if(slot == ITEM_SLOT_OCLOTHING) //we only give the mob the ability to activate the vest if he's actually wearing it.
return TRUE
/obj/item/clothing/suit/armor/abductor/vest/proc/SetDisguise(datum/icon_snapshot/entry)
diff --git a/code/modules/antagonists/blob/blob/theblob.dm b/code/modules/antagonists/blob/blob/theblob.dm
index a95f73f90d..8ca7e65c3f 100644
--- a/code/modules/antagonists/blob/blob/theblob.dm
+++ b/code/modules/antagonists/blob/blob/theblob.dm
@@ -75,11 +75,10 @@
/obj/structure/blob/CanAtmosPass(turf/T)
return !atmosblock
-/obj/structure/blob/CanAStarPass(ID, dir, caller)
- . = 0
- if(ismovable(caller))
- var/atom/movable/mover = caller
- . = . || (mover.pass_flags & PASSBLOB)
+/obj/structure/blob/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller)
+ . = FALSE
+ if(istype(caller))
+ . = . || (caller.pass_flags & PASSBLOB)
/obj/structure/blob/update_icon() //Updates color based on overmind color if we have an overmind.
if(overmind)
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
index 29e64a4913..c5f1cfbb40 100644
--- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm
@@ -84,7 +84,7 @@
return FALSE
if(owner.current.reagents.has_reagent(/datum/reagent/consumable/garlic))
return FALSE
- if(istype(owner.current.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace))
+ if(istype(owner.current.get_item_by_slot(ITEM_SLOT_NECK), /obj/item/clothing/neck/garlic_necklace))
return FALSE
owner.current.adjustStaminaLoss(-1.5 + (actual_regen * -7) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more.
owner.current.adjustCloneLoss(-0.1 * (actual_regen * 2) * mult, 0)
diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm
index 2fb7a2ccca..0a799021e9 100644
--- a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm
+++ b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm
@@ -94,7 +94,7 @@
if(display_error)
to_chat(owner, "You have a stake in your chest! Your powers are useless.")
return FALSE
- if(istype(owner.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace))
+ if(istype(owner.get_item_by_slot(ITEM_SLOT_NECK), /obj/item/clothing/neck/garlic_necklace))
if(display_error)
to_chat(owner, "")
return FALSE
diff --git a/code/modules/antagonists/bloodsucker/powers/brawn.dm b/code/modules/antagonists/bloodsucker/powers/brawn.dm
index 5444cccd3f..db3ce92ec1 100644
--- a/code/modules/antagonists/bloodsucker/powers/brawn.dm
+++ b/code/modules/antagonists/bloodsucker/powers/brawn.dm
@@ -105,7 +105,7 @@
var/mob/living/carbon/user_C = owner
//message_admins("DEBUG3: attempt_cast() [name] / [user_C.handcuffed] ")
if(user_C.handcuffed)
- var/obj/O = user_C.get_item_by_slot(SLOT_HANDCUFFED)
+ var/obj/O = user_C.get_item_by_slot(ITEM_SLOT_HANDCUFFED)
if(istype(O))
user_C.clear_cuffs(O,TRUE)
playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1)
@@ -124,7 +124,7 @@
return TRUE */
// Destroy Leg Cuffs
if(user_C.legcuffed)
- var/obj/O = user_C.get_item_by_slot(SLOT_LEGCUFFED)
+ var/obj/O = user_C.get_item_by_slot(ITEM_SLOT_LEGCUFFED)
if(istype(O))
user_C.clear_cuffs(O,TRUE)
playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1)
diff --git a/code/modules/antagonists/brainwashing/brainwashing.dm b/code/modules/antagonists/brainwashing/brainwashing.dm
index bd7a9a43cb..65c58611cb 100644
--- a/code/modules/antagonists/brainwashing/brainwashing.dm
+++ b/code/modules/antagonists/brainwashing/brainwashing.dm
@@ -73,7 +73,7 @@
brainwash(C, objectives)
var/obj_list = english_list(objectives)
message_admins("[key_name_admin(admin)] has brainwashed [key_name_admin(C)] with the following objectives: [obj_list].")
- C.log_message("has been force-brainwashed with the objective '[obj_list]' by admin [key_name(admin)]", LOG_ATTACK, log_globally = FALSE)
+ C.log_message("has been force-brainwashed with the objective '[obj_list]' by admin [key_name(admin)]", LOG_VICTIM)
log_admin("[key_name(admin)] has brainwashed [key_name(C)] with the following objectives: [obj_list].")
/datum/objective/brainwashing
diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm
index 208fefee70..4e68e27583 100644
--- a/code/modules/antagonists/changeling/powers/absorb.dm
+++ b/code/modules/antagonists/changeling/powers/absorb.dm
@@ -65,7 +65,9 @@
user.copy_languages(target, LANGUAGE_ABSORB)
if(target.mind && user.mind)//if the victim and user have minds
- target.mind.show_memory(user, 0) //I can read your mind, kekeke. Output all their notes.
+//ambition start
+ to_chat(user, "[target.mind.show_memory()]") //I can read your mind, kekeke. Output all their notes.
+//ambition end
//Some of target's recent speech, so the changeling can attempt to imitate them better.
//Recent as opposed to all because rounds tend to have a LOT of text.
diff --git a/code/modules/antagonists/changeling/powers/biodegrade.dm b/code/modules/antagonists/changeling/powers/biodegrade.dm
index 8b3b1659d1..b440228a4e 100644
--- a/code/modules/antagonists/changeling/powers/biodegrade.dm
+++ b/code/modules/antagonists/changeling/powers/biodegrade.dm
@@ -17,7 +17,7 @@
return FALSE
if(user.handcuffed)
- var/obj/O = user.get_item_by_slot(SLOT_HANDCUFFED)
+ var/obj/O = user.get_item_by_slot(ITEM_SLOT_HANDCUFFED)
if(!istype(O))
return FALSE
user.visible_message("[user] vomits a glob of acid on [user.p_their()] [O]!", \
@@ -27,7 +27,7 @@
used = TRUE
if(user.legcuffed)
- var/obj/O = user.get_item_by_slot(SLOT_LEGCUFFED)
+ var/obj/O = user.get_item_by_slot(ITEM_SLOT_LEGCUFFED)
if(!istype(O))
return FALSE
user.visible_message("[user] vomits a glob of acid on [user.p_their()] [O]!", \
@@ -37,7 +37,7 @@
used = TRUE
if(user.wear_suit && user.wear_suit.breakouttime && !used)
- var/obj/item/clothing/suit/S = user.get_item_by_slot(SLOT_WEAR_SUIT)
+ var/obj/item/clothing/suit/S = user.get_item_by_slot(ITEM_SLOT_OCLOTHING)
if(!istype(S))
return FALSE
user.visible_message("[user] vomits a glob of acid across the front of [user.p_their()] [S]!", \
diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm
index f4b74c5567..ec95ee4ef6 100644
--- a/code/modules/antagonists/changeling/powers/mutations.dm
+++ b/code/modules/antagonists/changeling/powers/mutations.dm
@@ -130,8 +130,8 @@
user.dropItemToGround(user.head)
user.dropItemToGround(user.wear_suit)
- user.equip_to_slot_if_possible(new suit_type(user), SLOT_WEAR_SUIT, 1, 1, 1)
- user.equip_to_slot_if_possible(new helmet_type(user), SLOT_HEAD, 1, 1, 1)
+ user.equip_to_slot_if_possible(new suit_type(user), ITEM_SLOT_OCLOTHING, 1, 1, 1)
+ user.equip_to_slot_if_possible(new helmet_type(user), ITEM_SLOT_HEAD, 1, 1, 1)
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
changeling.chem_recharge_slowdown += recharge_slowdown
@@ -637,7 +637,7 @@
user.dropItemToGround(user.gloves)
- user.equip_to_slot_if_possible(new glove_type(user), SLOT_GLOVES, 1, 1, 1)
+ user.equip_to_slot_if_possible(new glove_type(user), ITEM_SLOT_GLOVES, 1, 1, 1)
playsound(user, 'sound/effects/blobattack.ogg', 30, 1)
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
changeling.chem_recharge_slowdown += recharge_slowdown
@@ -733,7 +733,7 @@
/obj/item/clothing/gloves/fingerless/pugilist/cling/equipped(mob/user, slot)
. = ..()
- if(current_equipped_slot == SLOT_GLOVES)
+ if(current_equipped_slot == ITEM_SLOT_GLOVES)
to_chat(user, "With [src] formed around our arms, we are ready to fight.")
/obj/item/clothing/gloves/fingerless/pugilist/cling/dropped(mob/user)
diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm
index 9bda1bf5b9..2e684b514b 100644
--- a/code/modules/antagonists/changeling/powers/tiny_prick.dm
+++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm
@@ -47,8 +47,8 @@
return
if(!isturf(user.loc))
return
- if(!AStar(user, target.loc, /turf/proc/Distance, changeling.sting_range, simulated_only = 0))
- return
+ if(!length(get_path_to(user, target, max_distance = changeling.sting_range, simulated_only = FALSE)))
+ return // no path within the sting's range is found. what a weird place to use the pathfinding system
return 1
/obj/effect/proc_holder/changeling/sting/sting_feedback(mob/user, mob/target)
diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
index ad507adcec..b5f2a358e6 100644
--- a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
@@ -38,7 +38,7 @@
/obj/item/clothing/head/helmet/clockwork/equipped(mob/living/user, slot)
..()
- if(slot == SLOT_HEAD && !is_servant_of_ratvar(user))
+ if(slot == ITEM_SLOT_HEAD && !is_servant_of_ratvar(user))
if(!iscultist(user))
to_chat(user, "\"Now now, this is for my servants, not you.\"")
user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] head!", "The helmet flickers off your head, leaving only nausea!")
@@ -105,7 +105,7 @@
/obj/item/clothing/suit/armor/clockwork/equipped(mob/living/user, slot)
..()
- if(slot == SLOT_WEAR_SUIT && !is_servant_of_ratvar(user))
+ if(slot == ITEM_SLOT_OCLOTHING && !is_servant_of_ratvar(user))
if(!iscultist(user))
to_chat(user, "\"Now now, this is for my servants, not you.\"")
user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] body!", "The cuirass flickers off your body, leaving only nausea!")
@@ -165,7 +165,7 @@
/obj/item/clothing/gloves/clockwork/equipped(mob/living/user, slot)
..()
- if(slot == SLOT_GLOVES && !is_servant_of_ratvar(user))
+ if(slot == ITEM_SLOT_GLOVES && !is_servant_of_ratvar(user))
if(!iscultist(user))
to_chat(user, "\"Now now, this is for my servants, not you.\"")
user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] arms!", "The gauntlets flicker off your arms, leaving only nausea!")
@@ -215,7 +215,7 @@
/obj/item/clothing/shoes/clockwork/equipped(mob/living/user, slot)
..()
- if(slot == SLOT_SHOES && !is_servant_of_ratvar(user))
+ if(slot == ITEM_SLOT_FEET && !is_servant_of_ratvar(user))
if(!iscultist(user))
to_chat(user, "\"Now now, this is for my servants, not you.\"")
user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] feet!", "The treads flicker off your feet, leaving only nausea!")
diff --git a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm
index daee9f5c2c..9342cd8ea5 100644
--- a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm
+++ b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm
@@ -117,4 +117,4 @@
S.no_cost = TRUE
if(seasonal_hat && seasonal_hat != "none")
var/obj/item/hat = new seasonal_hat(construct)
- construct.equip_to_slot_or_del(hat, SLOT_HEAD)
+ construct.equip_to_slot_or_del(hat, ITEM_SLOT_HEAD)
diff --git a/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm b/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm
index e748da8765..138f04feb3 100644
--- a/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm
+++ b/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm
@@ -28,13 +28,13 @@
return ..()
/obj/item/clothing/glasses/judicial_visor/item_action_slot_check(slot, mob/user, datum/action/A)
- if(slot != SLOT_GLASSES)
+ if(slot != ITEM_SLOT_EYES)
return 0
return ..()
/obj/item/clothing/glasses/judicial_visor/equipped(mob/living/user, slot)
..()
- if(slot != SLOT_GLASSES)
+ if(slot != ITEM_SLOT_EYES)
update_status(FALSE)
if(blaster.ranged_ability_user)
blaster.remove_ranged_ability()
@@ -55,13 +55,13 @@
addtimer(CALLBACK(src, .proc/check_on_mob, user), 1) //dropped is called before the item is out of the slot, so we need to check slightly later
/obj/item/clothing/glasses/judicial_visor/proc/check_on_mob(mob/user)
- if(user && src != user.get_item_by_slot(SLOT_GLASSES)) //if we happen to check and we AREN'T in the slot, we need to remove our shit from whoever we got dropped from
+ if(user && src != user.get_item_by_slot(ITEM_SLOT_EYES)) //if we happen to check and we AREN'T in the slot, we need to remove our shit from whoever we got dropped from
update_status(FALSE)
if(blaster.ranged_ability_user)
blaster.remove_ranged_ability()
/obj/item/clothing/glasses/judicial_visor/attack_self(mob/user)
- if(is_servant_of_ratvar(user) && src == user.get_item_by_slot(SLOT_GLASSES))
+ if(is_servant_of_ratvar(user) && src == user.get_item_by_slot(ITEM_SLOT_EYES))
blaster.toggle(user)
/obj/item/clothing/glasses/judicial_visor/proc/update_status(change_to)
@@ -89,7 +89,7 @@
if(!src)
return 0
recharging = FALSE
- if(user && src == user.get_item_by_slot(SLOT_GLASSES))
+ if(user && src == user.get_item_by_slot(ITEM_SLOT_EYES))
to_chat(user, "Your [name] hums. It is ready.")
else
active = FALSE
@@ -115,7 +115,7 @@
/obj/effect/proc_holder/judicial_visor/InterceptClickOn(mob/living/caller, params, atom/target)
if(..())
return
- if(ranged_ability_user.incapacitated() || !visor || visor != ranged_ability_user.get_item_by_slot(SLOT_GLASSES))
+ if(ranged_ability_user.incapacitated() || !visor || visor != ranged_ability_user.get_item_by_slot(ITEM_SLOT_EYES))
remove_ranged_ability()
return
diff --git a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm
index 5e25b8de82..837844d0cb 100644
--- a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm
+++ b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm
@@ -75,7 +75,7 @@
/obj/item/clothing/glasses/wraith_spectacles/equipped(mob/living/user, slot)
..()
- if(slot != SLOT_GLASSES || up)
+ if(slot != ITEM_SLOT_EYES || up)
return
if(HAS_TRAIT(user, TRAIT_BLIND))
to_chat(user, "\"You're blind, idiot. Stop embarrassing yourself.\"" )
diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm
index 7ba4ce0936..be4785f4a7 100644
--- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm
+++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm
@@ -200,18 +200,18 @@
/datum/action/innate/clockwork_armaments/Activate()
var/do_message = 0
- var/obj/item/I = owner.get_item_by_slot(SLOT_WEAR_SUIT)
+ var/obj/item/I = owner.get_item_by_slot(ITEM_SLOT_OCLOTHING)
if(remove_item_if_better(I, owner))
- do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/suit/armor/clockwork(null), SLOT_WEAR_SUIT)
- I = owner.get_item_by_slot(SLOT_HEAD)
+ do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/suit/armor/clockwork(null), ITEM_SLOT_OCLOTHING)
+ I = owner.get_item_by_slot(ITEM_SLOT_HEAD)
if(remove_item_if_better(I, owner))
- do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/head/helmet/clockwork(null), SLOT_HEAD)
- I = owner.get_item_by_slot(SLOT_GLOVES)
+ do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/head/helmet/clockwork(null), ITEM_SLOT_HEAD)
+ I = owner.get_item_by_slot(ITEM_SLOT_GLOVES)
if(remove_item_if_better(I, owner))
- do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/gloves/clockwork(null), SLOT_GLOVES)
- I = owner.get_item_by_slot(SLOT_SHOES)
+ do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/gloves/clockwork(null), ITEM_SLOT_GLOVES)
+ I = owner.get_item_by_slot(ITEM_SLOT_FEET)
if(remove_item_if_better(I, owner))
- do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/shoes/clockwork(null), SLOT_SHOES)
+ do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/shoes/clockwork(null), ITEM_SLOT_FEET)
if(do_message)
owner.visible_message("Strange armor appears on [owner]!", "A bright shimmer runs down your body, equipping you with Ratvarian armor.")
playsound(owner, 'sound/magic/clockwork/fellowship_armory.ogg', 15 * do_message, TRUE) //get sound loudness based on how much we equipped
@@ -309,16 +309,16 @@
continue
T = get_turf(M)
var/heal_ticks = 0 //one heal tick for each piece of ratvarian armor worn
- var/obj/item/I = H.get_item_by_slot(SLOT_WEAR_SUIT)
+ var/obj/item/I = H.get_item_by_slot(ITEM_SLOT_OCLOTHING)
if(is_type_in_typecache(I, ratvarian_armor_typecache))
heal_ticks++
- I = H.get_item_by_slot(SLOT_HEAD)
+ I = H.get_item_by_slot(ITEM_SLOT_HEAD)
if(is_type_in_typecache(I, ratvarian_armor_typecache))
heal_ticks++
- I = H.get_item_by_slot(SLOT_GLOVES)
+ I = H.get_item_by_slot(ITEM_SLOT_GLOVES)
if(is_type_in_typecache(I, ratvarian_armor_typecache))
heal_ticks++
- I = H.get_item_by_slot(SLOT_SHOES)
+ I = H.get_item_by_slot(ITEM_SLOT_FEET)
if(is_type_in_typecache(I, ratvarian_armor_typecache))
heal_ticks++
if(heal_ticks)
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index 521c32fe3d..0efde2d3db 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -678,12 +678,12 @@
uses--
var/mob/living/carbon/C = target
C.visible_message("Otherworldly armor suddenly appears on [C]!")
- C.equip_to_slot_or_del(new /obj/item/clothing/under/color/black,SLOT_W_UNIFORM)
- C.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(user), SLOT_HEAD)
- C.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), SLOT_WEAR_SUIT)
- C.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), SLOT_SHOES)
- C.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), SLOT_BACK)
- C.equip_to_slot_or_del(new /obj/item/clothing/gloves/fingerless/pugilist/hungryghost(user), SLOT_GLOVES)
+ C.equip_to_slot_or_del(new /obj/item/clothing/under/color/black,ITEM_SLOT_ICLOTHING)
+ C.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(user), ITEM_SLOT_HEAD)
+ C.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), ITEM_SLOT_OCLOTHING)
+ C.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), ITEM_SLOT_FEET)
+ C.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), ITEM_SLOT_BACK)
+ C.equip_to_slot_or_del(new /obj/item/clothing/gloves/fingerless/pugilist/hungryghost(user), ITEM_SLOT_GLOVES)
if(C == user)
qdel(src) //Clears the hands
C.put_in_hands(new /obj/item/melee/cultblade(user))
diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm
index a18523069e..2850cb85cc 100644
--- a/code/modules/antagonists/cult/cult.dm
+++ b/code/modules/antagonists/cult/cult.dm
@@ -49,7 +49,10 @@
cult_team = new_team
/datum/antagonist/cult/proc/add_objectives()
- objectives |= cult_team?.objectives
+//ambition start
+ if(cult_team)
+ objectives |= cult_team.objectives
+//ambition end
/datum/antagonist/cult/Destroy()
QDEL_NULL(communion)
@@ -95,9 +98,9 @@
/datum/antagonist/cult/proc/cult_give_item(obj/item/item_path, mob/living/carbon/human/mob)
var/list/slots = list(
- "backpack" = SLOT_IN_BACKPACK,
- "left pocket" = SLOT_L_STORE,
- "right pocket" = SLOT_R_STORE
+ "backpack" = ITEM_SLOT_BACKPACK,
+ "left pocket" = ITEM_SLOT_LPOCKET,
+ "right pocket" = ITEM_SLOT_RPOCKET
)
var/T = new item_path(mob)
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index 7981a10701..3b73a998e7 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -1090,7 +1090,7 @@ structure_check() searches for nearby cultist structures required for the invoca
/proc/hudFix(mob/living/carbon/human/target)
if(!target || !target.client)
return
- var/obj/O = target.get_item_by_slot(SLOT_GLASSES)
+ var/obj/O = target.get_item_by_slot(ITEM_SLOT_EYES)
if(istype(O, /obj/item/clothing/glasses/hud/security))
var/datum/atom_hud/AH = GLOB.huds[DATA_HUD_SECURITY_ADVANCED]
AH.add_hud_to(target)
diff --git a/code/modules/antagonists/devil/devil.dm b/code/modules/antagonists/devil/devil.dm
index 65ce89d33f..9f69f10887 100644
--- a/code/modules/antagonists/devil/devil.dm
+++ b/code/modules/antagonists/devil/devil.dm
@@ -460,10 +460,10 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
return -1
currentMob.change_mob_type( /mob/living/carbon/human, targetturf, null, 1)
var/mob/living/carbon/human/H = owner.current
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/civilian/lawyer/black(H), SLOT_W_UNIFORM)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), SLOT_SHOES)
- H.equip_to_slot_or_del(new /obj/item/storage/briefcase(H), SLOT_HANDS)
- H.equip_to_slot_or_del(new /obj/item/pen(H), SLOT_L_STORE)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/civilian/lawyer/black(H), ITEM_SLOT_ICLOTHING)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), ITEM_SLOT_FEET)
+ H.equip_to_slot_or_del(new /obj/item/storage/briefcase(H), ITEM_SLOT_HANDS)
+ H.equip_to_slot_or_del(new /obj/item/pen(H), ITEM_SLOT_LPOCKET)
if(SOULVALUE >= BLOOD_THRESHOLD)
H.set_species(/datum/species/lizard, 1)
H.underwear = "Nude"
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_antag.dm b/code/modules/antagonists/eldritch_cult/eldritch_antag.dm
index fc0a5cdc6a..d7334d6c9c 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_antag.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_antag.dm
@@ -72,9 +72,9 @@
/datum/antagonist/heretic/proc/ecult_give_item(obj/item/item_path, mob/living/carbon/human/H)
var/list/slots = list(
- "backpack" = SLOT_IN_BACKPACK,
- "left pocket" = SLOT_L_STORE,
- "right pocket" = SLOT_R_STORE
+ "backpack" = ITEM_SLOT_BACKPACK,
+ "left pocket" = ITEM_SLOT_LPOCKET,
+ "right pocket" = ITEM_SLOT_RPOCKET
)
var/T = new item_path(H)
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_items.dm b/code/modules/antagonists/eldritch_cult/eldritch_items.dm
index 28228aedd6..c0f3e2be7c 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_items.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_items.dm
@@ -145,7 +145,7 @@
/obj/item/clothing/neck/eldritch_amulet/equipped(mob/user, slot)
. = ..()
- if(ishuman(user) && user.mind && slot == SLOT_NECK && (IS_HERETIC(user) || IS_HERETIC_MONSTER(user)))
+ if(ishuman(user) && user.mind && slot == ITEM_SLOT_NECK && (IS_HERETIC(user) || IS_HERETIC_MONSTER(user)))
ADD_TRAIT(user, trait, CLOTHING_TRAIT)
user.update_sight()
@@ -239,7 +239,7 @@
/obj/item/clothing/mask/void_mask/equipped(mob/user, slot)
. = ..()
- if(ishuman(user) && user.mind && slot == SLOT_WEAR_MASK)
+ if(ishuman(user) && user.mind && slot == ITEM_SLOT_MASK)
local_user = user
START_PROCESSING(SSobj, src)
diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm
index 43a7e561c0..a8e57ee08b 100644
--- a/code/modules/antagonists/ert/ert.dm
+++ b/code/modules/antagonists/ert/ert.dm
@@ -234,8 +234,8 @@
var/obj/O = new C(owner.current)
var/list/slots = list (
"backpack" = ITEM_SLOT_BACKPACK,
- "left pocket" = SLOT_L_STORE,
- "right pocket" = SLOT_R_STORE
+ "left pocket" = ITEM_SLOT_LPOCKET,
+ "right pocket" = ITEM_SLOT_RPOCKET
)
var/mob/living/carbon/human/H = owner.current
var/equipped = H.equip_in_one_of_slots(O, slots)
diff --git a/code/modules/antagonists/highlander/highlander.dm b/code/modules/antagonists/highlander/highlander.dm
index ffca67b882..b2fce0269a 100644
--- a/code/modules/antagonists/highlander/highlander.dm
+++ b/code/modules/antagonists/highlander/highlander.dm
@@ -45,11 +45,11 @@
qdel(I)
for(var/obj/item/I in H.held_items)
qdel(I)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/kilt/highlander(H), SLOT_W_UNIFORM)
- H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), SLOT_EARS)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), SLOT_HEAD)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), SLOT_SHOES)
- H.equip_to_slot_or_del(new /obj/item/pinpointer/nuke(H), SLOT_L_STORE)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/kilt/highlander(H), ITEM_SLOT_ICLOTHING)
+ H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), ITEM_SLOT_EARS)
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), ITEM_SLOT_HEAD)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), ITEM_SLOT_FEET)
+ H.equip_to_slot_or_del(new /obj/item/pinpointer/nuke(H), ITEM_SLOT_LPOCKET)
for(var/obj/item/pinpointer/nuke/P in H)
P.attack_self(H)
var/obj/item/card/id/W = new(H)
@@ -60,7 +60,7 @@
W.registered_name = H.real_name
ADD_TRAIT(W, TRAIT_NODROP, HIGHLANDER)
W.update_label(H.real_name)
- H.equip_to_slot_or_del(W, SLOT_WEAR_ID)
+ H.equip_to_slot_or_del(W, ITEM_SLOT_ID)
sword = new(H)
if(!GLOB.highlander)
diff --git a/code/modules/antagonists/overthrow/overthrow.dm b/code/modules/antagonists/overthrow/overthrow.dm
index f086f5db97..fffd8f9237 100644
--- a/code/modules/antagonists/overthrow/overthrow.dm
+++ b/code/modules/antagonists/overthrow/overthrow.dm
@@ -127,9 +127,9 @@
// Give AI hacking board
var/obj/item/aiModule/core/full/overthrow/O = new(H)
var/list/slots = list (
- "backpack" = SLOT_IN_BACKPACK,
- "left pocket" = SLOT_L_STORE,
- "right pocket" = SLOT_R_STORE
+ "backpack" = ITEM_SLOT_BACKPACK,
+ "left pocket" = ITEM_SLOT_LPOCKET,
+ "right pocket" = ITEM_SLOT_RPOCKET
)
var/where = H.equip_in_one_of_slots(O, slots, critical = TRUE)
if (!where)
diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm
index 925527f35e..e4625b4ef2 100644
--- a/code/modules/antagonists/revolution/revolution.dm
+++ b/code/modules/antagonists/revolution/revolution.dm
@@ -272,9 +272,9 @@
if(give_flash)
var/obj/item/assembly/flash/T = new(H)
var/list/slots = list (
- "backpack" = SLOT_IN_BACKPACK,
- "left pocket" = SLOT_L_STORE,
- "right pocket" = SLOT_R_STORE
+ "backpack" = ITEM_SLOT_BACKPACK,
+ "left pocket" = ITEM_SLOT_LPOCKET,
+ "right pocket" = ITEM_SLOT_RPOCKET
)
var/where = H.equip_in_one_of_slots(T, slots, critical = TRUE)
if (!where)
diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm
index 78403d4e27..f184961004 100644
--- a/code/modules/antagonists/traitor/datum_traitor.dm
+++ b/code/modules/antagonists/traitor/datum_traitor.dm
@@ -240,9 +240,9 @@
folder = new/obj/item/folder/syndicate/blue(mob.loc)
var/list/slots = list (
- "backpack" = SLOT_IN_BACKPACK,
- "left pocket" = SLOT_L_STORE,
- "right pocket" = SLOT_R_STORE
+ "backpack" = ITEM_SLOT_BACKPACK,
+ "left pocket" = ITEM_SLOT_LPOCKET,
+ "right pocket" = ITEM_SLOT_RPOCKET
)
var/where = "At your feet"
diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm
index 44f267358a..6f7ba374f7 100644
--- a/code/modules/antagonists/wizard/equipment/artefact.dm
+++ b/code/modules/antagonists/wizard/equipment/artefact.dm
@@ -229,12 +229,12 @@
H.dropItemToGround(I)
var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionnaire)
- H.equip_to_slot_or_del(new hat(H), SLOT_HEAD)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/roman(H), SLOT_W_UNIFORM)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), SLOT_SHOES)
+ H.equip_to_slot_or_del(new hat(H), ITEM_SLOT_HEAD)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/roman(H), ITEM_SLOT_ICLOTHING)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), ITEM_SLOT_FEET)
H.put_in_hands(new /obj/item/shield/riot/roman(H), TRUE)
H.put_in_hands(new /obj/item/claymore(H), TRUE)
- H.equip_to_slot_or_del(new /obj/item/spear(H), SLOT_BACK)
+ H.equip_to_slot_or_del(new /obj/item/spear(H), ITEM_SLOT_BACK)
/obj/item/voodoo
diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm
index c52436a3c4..63bb2b5b57 100644
--- a/code/modules/antagonists/wizard/wizard.dm
+++ b/code/modules/antagonists/wizard/wizard.dm
@@ -208,17 +208,17 @@
if(!istype(master_mob) || !istype(H))
return
if(master_mob.ears)
- H.equip_to_slot_or_del(new master_mob.ears.type, SLOT_EARS)
+ H.equip_to_slot_or_del(new master_mob.ears.type, ITEM_SLOT_EARS)
if(master_mob.w_uniform)
- H.equip_to_slot_or_del(new master_mob.w_uniform.type, SLOT_W_UNIFORM)
+ H.equip_to_slot_or_del(new master_mob.w_uniform.type, ITEM_SLOT_ICLOTHING)
if(master_mob.shoes)
- H.equip_to_slot_or_del(new master_mob.shoes.type, SLOT_SHOES)
+ H.equip_to_slot_or_del(new master_mob.shoes.type, ITEM_SLOT_FEET)
if(master_mob.wear_suit)
- H.equip_to_slot_or_del(new master_mob.wear_suit.type, SLOT_WEAR_SUIT)
+ H.equip_to_slot_or_del(new master_mob.wear_suit.type, ITEM_SLOT_OCLOTHING)
if(master_mob.head)
- H.equip_to_slot_or_del(new master_mob.head.type, SLOT_HEAD)
+ H.equip_to_slot_or_del(new master_mob.head.type, ITEM_SLOT_HEAD)
if(master_mob.back)
- H.equip_to_slot_or_del(new master_mob.back.type, SLOT_BACK)
+ H.equip_to_slot_or_del(new master_mob.back.type, ITEM_SLOT_BACK)
//Operation: Fuck off and scare people
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(null))
diff --git a/code/modules/atmospherics/auxgm/gas_types.dm b/code/modules/atmospherics/auxgm/gas_types.dm
index aaf3945aac..6ee234d64d 100644
--- a/code/modules/atmospherics/auxgm/gas_types.dm
+++ b/code/modules/atmospherics/auxgm/gas_types.dm
@@ -129,7 +129,7 @@
heat_penalty = 10
transmit_modifier = 30
fire_products = list(GAS_H2O = 1)
- enthalpy = 40000
+ enthalpy = 300000
fire_burn_rate = 2
fire_radiation_released = 50 // arbitrary number, basically 60 moles of trit burning will just barely start to harm you
fire_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 50
diff --git a/code/modules/awaymissions/mission_code/jungleresort.dm b/code/modules/awaymissions/mission_code/jungleresort.dm
index 6c82b2c0c4..f520cfdbee 100644
--- a/code/modules/awaymissions/mission_code/jungleresort.dm
+++ b/code/modules/awaymissions/mission_code/jungleresort.dm
@@ -27,7 +27,7 @@
/obj/item/clothing/head/rice_hat/cursed/equipped(mob/M, slot)
. = ..()
- if (slot == SLOT_HEAD)
+ if (slot == ITEM_SLOT_HEAD)
RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech)
else
UnregisterSignal(M, COMSIG_MOB_SAY)
diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm
index 5d30ccd907..ba3f07bd7d 100644
--- a/code/modules/awaymissions/mission_code/snowdin.dm
+++ b/code/modules/awaymissions/mission_code/snowdin.dm
@@ -589,7 +589,7 @@
back = /obj/item/storage/backpack
mask = /obj/item/clothing/mask/breath
r_pocket = /obj/item/tank/internals/emergency_oxygen/engi
- internals_slot = SLOT_R_STORE
+ internals_slot = ITEM_SLOT_RPOCKET
/obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive/female
mob_gender = FEMALE
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 9948802bc9..4b93f42d4d 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -154,7 +154,15 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
var/atom/target = locate(href_list["statpanel_item_target"])
if(!target)
return
- Click(target, target.loc, null, "[href_list["statpanel_item_shiftclick"]?"shift=1;":null][href_list["statpanel_item_ctrlclick"]?"ctrl=1;":null]&alt=[href_list["statpanel_item_altclick"]?"alt=1;":null]", FALSE, "statpanel")
+ var/button = "left=1"
+ switch(href_list["statpanel_item_click"])
+ if("middle")
+ button = "middle=1"
+ if("right")
+ button = "right=1"
+ else
+ button = "left=1"
+ Click(target, target.loc, null, "[button];[href_list["statpanel_item_shiftclick"]?"shift=1;":null][href_list["statpanel_item_ctrlclick"]?"ctrl=1;":null]&alt=[href_list["statpanel_item_altclick"]?"alt=1;":null]", FALSE, "statpanel")
/client/proc/is_content_unlocked()
if(!prefs.unlock_content)
@@ -1012,6 +1020,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
var/list/actualview = getviewsize(view)
update_clickcatcher()
parallax_holder.Reset()
+ mob.hud_used.screentip_text.update_view()
mob.reload_fullscreen()
if (isliving(mob))
var/mob/living/M = mob
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 3272060835..5fcb6787d2 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -62,6 +62,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/UI_style = null
var/outline_enabled = TRUE
var/outline_color = COLOR_THEME_MIDNIGHT
+ var/screentip_pref = TRUE
+ var/screentip_color = "#ffd391"
var/buttons_locked = FALSE
var/hotkeys = FALSE
@@ -788,6 +790,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "UI Style:[UI_style] "
dat += "Outline:[outline_enabled ? "Enabled" : "Disabled"] "
dat += "Outline Color: [outline_color ? "" : "Theme-based (null)"] Change "
+ dat += "Screentip:[screentip_pref ? "Enabled" : "Disabled"] "
+ dat += "Screentip Color:Change "
dat += "tgui Monitors:[(tgui_lock) ? "Primary" : "All"] "
dat += "tgui Style:[(tgui_fancy) ? "Fancy" : "No Frills"] "
dat += "Show Runechat Chat Bubbles:[chat_on_map ? "Enabled" : "Disabled"] "
@@ -2136,6 +2140,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/datum/sprite_accessory/S = instance
if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id))
continue
+ if(S.ignore)
+ continue
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
snowflake_taur_list[S.name] = path
var/new_taur
@@ -2746,6 +2752,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/pickedOutlineColor = input(user, "Choose your outline color.", "General Preference", outline_color) as color|null
if(pickedOutlineColor != pickedOutlineColor)
outline_color = pickedOutlineColor // nullable
+ if("screentip_pref")
+ screentip_pref = !screentip_pref
+ if("screentip_color")
+ var/pickedScreentipColor = input(user, "Choose your screentip color.", "General Preference", screentip_color) as color|null
+ if(pickedScreentipColor)
+ screentip_color = pickedScreentipColor
if("tgui_lock")
tgui_lock = !tgui_lock
if("winflash")
@@ -3066,6 +3078,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
save_character()
character.dna.features = features.Copy()
+
character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE)
character.dna.species.eye_type = eye_type
if(chosen_limb_id && (chosen_limb_id in character.dna.species.allowed_limb_ids))
@@ -3224,10 +3237,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/occupied_slots = L[initial(G.category)] ? L[initial(G.category)] + 1 : 1
LAZYSET(L, initial(G.category), occupied_slots)
switch(slot)
- if(SLOT_IN_BACKPACK)
+ if(ITEM_SLOT_BACKPACK)
if(L[LOADOUT_CATEGORY_BACKPACK] < BACKPACK_SLOT_AMT)
return TRUE
- if(SLOT_HANDS)
+ if(ITEM_SLOT_HANDS)
if(L[LOADOUT_CATEGORY_HANDS] < HANDS_SLOT_AMT)
return TRUE
else
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 72b2f5d949..628a51ed44 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -385,6 +385,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["UI_style"] >> UI_style
S["outline_color"] >> outline_color
S["outline_enabled"] >> outline_enabled
+ S["screentip_pref"] >> screentip_pref
+ S["screentip_color"] >> screentip_color
S["hotkeys"] >> hotkeys
S["chat_on_map"] >> chat_on_map
S["max_chat_length"] >> max_chat_length
@@ -567,6 +569,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["UI_style"], UI_style)
WRITE_FILE(S["outline_enabled"], outline_enabled)
WRITE_FILE(S["outline_color"], outline_color)
+ WRITE_FILE(S["screentip_pref"], screentip_pref)
+ WRITE_FILE(S["screentip_color"], screentip_color)
WRITE_FILE(S["hotkeys"], hotkeys)
WRITE_FILE(S["chat_on_map"], chat_on_map)
WRITE_FILE(S["max_chat_length"], max_chat_length)
diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm
index 008772663d..697afd4885 100644
--- a/code/modules/clothing/chameleon.dm
+++ b/code/modules/clothing/chameleon.dm
@@ -63,8 +63,8 @@
// it's TRAIT_NODROP
D.dropItemToGround(target, TRUE)
qdel(old_headgear)
- // where is `SLOT_HEAD` defined? WHO KNOWS
- D.equip_to_slot(new_headgear, SLOT_HEAD)
+ // where is `ITEM_SLOT_HEAD` defined? WHO KNOWS
+ D.equip_to_slot(new_headgear, ITEM_SLOT_HEAD)
return 1
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 1a7c220550..572cce28b2 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -219,7 +219,7 @@
..()
if (!istype(user))
return
- if(slot_flags & slotdefine2slotbit(slot)) //Was equipped to a valid slot for this item?
+ if(slot_flags & slot) //Was equipped to a valid slot for this item?
if(iscarbon(user) && LAZYLEN(zones_disabled))
RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/bristle)
if(LAZYLEN(user_vars_to_edit))
@@ -450,7 +450,7 @@ BLIND // can't see anything
return FALSE
// Skip species restriction checks on non-equipment slots
- if(slot in list(SLOT_IN_BACKPACK, SLOT_L_STORE, SLOT_R_STORE))
+ if(slot in list(ITEM_SLOT_BACKPACK, ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET))
return TRUE
if(species_restricted && ishuman(M))
diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm
index f58be1373a..a2f0c80041 100644
--- a/code/modules/clothing/ears/_ears.dm
+++ b/code/modules/clothing/ears/_ears.dm
@@ -20,7 +20,7 @@
/obj/item/clothing/ears/earmuffs/ComponentInitialize()
. = ..()
AddElement(/datum/element/earhealing)
- AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
+ AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS))
/obj/item/clothing/ears/headphones
name = "headphones"
diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm
index 737bbbb522..9726ab6b59 100644
--- a/code/modules/clothing/glasses/_glasses.dm
+++ b/code/modules/clothing/glasses/_glasses.dm
@@ -115,7 +115,7 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
/obj/item/clothing/glasses/science/item_action_slot_check(slot, mob/user, datum/action/A)
- if(slot == SLOT_GLASSES)
+ if(slot == ITEM_SLOT_EYES)
return 1
/obj/item/clothing/glasses/night
@@ -158,7 +158,7 @@
/obj/item/clothing/glasses/eyepatch/syndicate/equipped(mob/living/carbon/human/user, slot)
. = ..()
- if(slot == SLOT_GLASSES)
+ if(slot == ITEM_SLOT_EYES)
user.visible_message("Circuitry from the eyepatch links itself to your brain as you put on the eyepatch.")
if(HAS_TRAIT(user, TRAIT_POOR_AIM))
user.visible_message("You hear a fizzing noise from the circuit. That can't be good.")
@@ -351,7 +351,7 @@
/obj/item/clothing/glasses/sunglasses/blindfold/equipped(mob/living/carbon/human/user, slot)
. = ..()
- if(slot == SLOT_GLASSES)
+ if(slot == ITEM_SLOT_EYES)
user.become_blind("blindfold_[REF(src)]")
/obj/item/clothing/glasses/sunglasses/blindfold/dropped(mob/living/carbon/human/user)
@@ -372,7 +372,7 @@
var/colored_before = FALSE
/obj/item/clothing/glasses/sunglasses/blindfold/white/equipped(mob/living/carbon/human/user, slot)
- if(ishuman(user) && slot == SLOT_GLASSES)
+ if(ishuman(user) && slot == ITEM_SLOT_EYES)
update_icon(user)
user.update_inv_glasses() //Color might have been changed by update_icon.
..()
diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm
index cad91315a3..c848dbdfa8 100644
--- a/code/modules/clothing/glasses/hud.dm
+++ b/code/modules/clothing/glasses/hud.dm
@@ -18,7 +18,7 @@
/obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot)
..()
- if(hud_type && slot == SLOT_GLASSES)
+ if(hud_type && slot == ITEM_SLOT_EYES)
var/datum/atom_hud/H = GLOB.huds[hud_type]
H.add_hud_to(user)
diff --git a/code/modules/clothing/glasses/phantomthief.dm b/code/modules/clothing/glasses/phantomthief.dm
index ba3ea2830e..db77f17218 100644
--- a/code/modules/clothing/glasses/phantomthief.dm
+++ b/code/modules/clothing/glasses/phantomthief.dm
@@ -17,7 +17,7 @@
/obj/item/clothing/glasses/phantomthief/syndicate/examine(mob/user)
. = ..()
- if(user.get_item_by_slot(SLOT_GLASSES) == src)
+ if(user.get_item_by_slot(ITEM_SLOT_EYES) == src)
if(world.time >= nextadrenalinepop)
. += "The built-in adrenaline injector is ready for use."
else
@@ -33,7 +33,7 @@
. = ..()
if(!istype(user))
return
- if(slot != SLOT_GLASSES)
+ if(slot != ITEM_SLOT_EYES)
return
RegisterSignal(user, COMSIG_LIVING_COMBAT_ENABLED, .proc/injectadrenaline)
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index 836b845faa..1e3f2c08cf 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -31,7 +31,7 @@
C.visible_message("[U] sprays glittery rubber on the hands of [C]!")
else
user.visible_message("The rubber fails to stick to [C]'s hands!",
- "The rubber fails to stick to [C]'s [(SLOT_GLOVES in C.check_obscured_slots()) ? "unexposed" : ""] hands!")
+ "The rubber fails to stick to [C]'s [(ITEM_SLOT_GLOVES in C.check_obscured_slots()) ? "unexposed" : ""] hands!")
qdel(src)
@@ -226,7 +226,7 @@
/obj/item/clothing/gloves/color/latex/equipped(mob/user, slot)
..()
- if(slot == SLOT_GLOVES)
+ if(slot == ITEM_SLOT_GLOVES)
ADD_TRAIT(user, carrytrait, GLOVE_TRAIT)
/obj/item/clothing/gloves/color/latex/dropped(mob/user)
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index 8c8400a45d..381e70161b 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -9,6 +9,8 @@
equip_delay_other = 20
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
+ heat_protection = HANDS
+ max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT
strip_mod = 0.9
custom_price = PRICE_ALMOST_CHEAP
@@ -36,7 +38,7 @@
/obj/item/clothing/gloves/fingerless/pugilist/equipped(mob/user, slot)
. = ..()
- if(slot == SLOT_GLOVES)
+ if(slot == ITEM_SLOT_GLOVES)
wornonce = TRUE
if((HAS_TRAIT(user, TRAIT_NOPUGILIST)))
to_chat(user, "What purpose is there to don the weapons of pugilism if you're already well-practiced in martial arts? Mixing arts is blasphemous!")
@@ -195,7 +197,7 @@
/obj/item/clothing/gloves/fingerless/ablative/equipped(mob/user, slot)
. = ..()
- if(current_equipped_slot == SLOT_GLOVES)
+ if(current_equipped_slot == ITEM_SLOT_GLOVES)
RegisterSignal(user, COMSIG_LIVING_ACTIVE_PARRY_START, .proc/get_component_parry_data)
wornonce = TRUE
@@ -262,7 +264,7 @@
/obj/item/clothing/gloves/fingerless/pugilist/mauler/equipped(mob/user, slot)
. = ..()
- if(slot == SLOT_GLOVES)
+ if(slot == ITEM_SLOT_GLOVES)
wornonce = TRUE
if((HAS_TRAIT(user, TRAIT_NOPUGILIST)))
return
@@ -349,6 +351,8 @@
transfer_prints = TRUE
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
+ heat_protection = HANDS
+ max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT
strip_mod = 0.9
/obj/item/clothing/gloves/evening/black
diff --git a/code/modules/clothing/gloves/mittens.dm b/code/modules/clothing/gloves/mittens.dm
index 42250aae2f..b1b17c9afe 100644
--- a/code/modules/clothing/gloves/mittens.dm
+++ b/code/modules/clothing/gloves/mittens.dm
@@ -6,6 +6,8 @@
//item_color = "white"
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
+ heat_protection = HANDS
+ max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT
resistance_flags = NONE
/obj/item/clothing/gloves/mittens/random
diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm
index 39d39ba58f..754a72ff0c 100644
--- a/code/modules/clothing/gloves/tacklers.dm
+++ b/code/modules/clothing/gloves/tacklers.dm
@@ -6,6 +6,8 @@
transfer_prints = TRUE
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
+ heat_protection = HANDS
+ max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT
resistance_flags = NONE
//custom_premium_price = PRICE_EXPENSIVE
/// For storing our tackler datum so we can remove it after
@@ -28,7 +30,7 @@
if(!ishuman(user))
return
switch(slot) // I didn't like how it looked
- if(SLOT_GLOVES)
+ if(ITEM_SLOT_GLOVES)
var/mob/living/carbon/human/H = user
tackler = H.AddComponent(/datum/component/tackler, stamina_cost=tackle_stam_cost, base_knockdown = base_knockdown, range = tackle_range, speed = tackle_speed, skill_mod = skill_mod, min_distance = min_distance)
else
@@ -103,7 +105,7 @@
/obj/item/clothing/gloves/tackler/combat/insulated/infiltrator/equipped(mob/user, slot)
. = ..()
- if(slot == SLOT_GLOVES)
+ if(slot == ITEM_SLOT_GLOVES)
ADD_TRAIT(user, carrytrait, GLOVE_TRAIT)
/obj/item/clothing/gloves/tackler/combat/insulated/infiltrator/dropped(mob/user)
diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm
index 6ad3a19694..ea58d0bc88 100644
--- a/code/modules/clothing/head/_head.dm
+++ b/code/modules/clothing/head/_head.dm
@@ -34,7 +34,7 @@
var/obj/item/WH = H.head
H.visible_message("[src] bounces off [H]'s [WH.name]!", "[src] bounces off your [WH.name], falling to the floor.")
return
- if(H.equip_to_slot_if_possible(src, SLOT_HEAD, FALSE, TRUE))
+ if(H.equip_to_slot_if_possible(src, ITEM_SLOT_HEAD, FALSE, TRUE))
H.visible_message("[src] lands neatly on [H]'s head!", "[src] lands perfectly onto your head!")
return
if(iscyborg(hit_atom))
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 6b698f9619..126b1af40f 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -27,7 +27,7 @@
/obj/item/clothing/head/helmet/ComponentInitialize()
. = ..()
- AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_HEAD))
+ AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_HEAD))
/obj/item/clothing/head/helmet/examine(mob/user)
. = ..()
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index 5af694ea1b..592614af61 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -220,7 +220,7 @@
/obj/item/clothing/head/warden/drill/equipped(mob/M, slot)
. = ..()
- if (slot == SLOT_HEAD)
+ if (slot == ITEM_SLOT_HEAD)
RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech)
else
UnregisterSignal(M, COMSIG_MOB_SAY)
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index 76e8ca53df..eb48048c00 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -264,7 +264,8 @@
item_state = "that"
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
-
+ heat_protection = HEAD
+ max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT
dog_fashion = /datum/dog_fashion/head/santa
beepsky_fashion = /datum/beepsky_fashion/santa
@@ -354,7 +355,7 @@
/obj/item/clothing/head/frenchberet/equipped(mob/M, slot)
. = ..()
- if (slot == SLOT_HEAD)
+ if (slot == ITEM_SLOT_HEAD)
RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech)
else
UnregisterSignal(M, COMSIG_MOB_SAY)
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index 247062581d..21cec4f7d2 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -93,6 +93,8 @@
var/earflaps = TRUE
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
+ heat_protection = HEAD
+ max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT
///Sprite visible when the ushanka flaps are folded up.
var/upsprite = "ushankaup"
///Sprite visible when the ushanka flaps are folded down.
@@ -147,7 +149,7 @@
beepsky_fashion = /datum/beepsky_fashion/cat
/obj/item/clothing/head/kitty/equipped(mob/living/carbon/human/user, slot)
- if(ishuman(user) && slot == SLOT_HEAD)
+ if(ishuman(user) && slot == ITEM_SLOT_HEAD)
update_icon(user)
user.update_inv_head() //Color might have been changed by update_icon.
..()
@@ -186,7 +188,7 @@
/obj/item/clothing/head/cardborg/equipped(mob/living/user, slot)
..()
- if(ishuman(user) && slot == SLOT_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))
var/obj/item/clothing/suit/cardborg/CB = H.wear_suit
@@ -265,7 +267,7 @@
/obj/item/clothing/head/foilhat/equipped(mob/living/carbon/human/user, slot)
. = ..()
- if(slot != SLOT_HEAD || warped)
+ if(slot != ITEM_SLOT_HEAD || warped)
return
if(paranoia)
QDEL_NULL(paranoia)
@@ -295,7 +297,7 @@
if(!isliving(loc) || !paranoia)
return
var/mob/living/target = loc
- if(target.get_item_by_slot(SLOT_HEAD) != src)
+ if(target.get_item_by_slot(ITEM_SLOT_HEAD) != src)
return
QDEL_NULL(paranoia)
if(!target.IsUnconscious())
diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm
index ef7c6a1926..cca13ce1d8 100644
--- a/code/modules/clothing/masks/_masks.dm
+++ b/code/modules/clothing/masks/_masks.dm
@@ -18,7 +18,7 @@
/obj/item/clothing/mask/equipped(mob/M, slot)
. = ..()
- if (slot == SLOT_WEAR_MASK && modifies_speech)
+ if (slot == ITEM_SLOT_MASK && modifies_speech)
RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech)
else
UnregisterSignal(M, COMSIG_MOB_SAY)
diff --git a/code/modules/clothing/masks/cluwne.dm b/code/modules/clothing/masks/cluwne.dm
index a1177e2b47..f39f5e73b8 100644
--- a/code/modules/clothing/masks/cluwne.dm
+++ b/code/modules/clothing/masks/cluwne.dm
@@ -55,7 +55,7 @@
. = ..()
if(!ishuman(user))
return
- if(slot == SLOT_WEAR_MASK)
+ if(slot == ITEM_SLOT_MASK)
var/mob/living/carbon/human/H = user
H.dna.add_mutation(CLUWNEMUT)
return
@@ -88,7 +88,7 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
- if(slot == SLOT_WEAR_MASK)
+ if(slot == ITEM_SLOT_MASK)
if(is_cursed && can_cluwne) //logic predetermined
log_admin("[key_name(H)] was made into a cluwne by [src]")
message_admins("[key_name(H)] got cluwned by [src]")
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index c33e6098c0..d78488ec0b 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -119,6 +119,23 @@
to_chat(user, "Your Clown Mask has now morphed into [choice], all praise the Honkmother!")
return TRUE
+/obj/item/clothing/mask/gas/clown_hat_polychromic
+ name = "polychromic clown wig and mask"
+ desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask."
+ clothing_flags = ALLOWINTERNALS
+ icon_state = "clown"
+ item_state = "clown_hat"
+ dye_color = "clown"
+ w_class = WEIGHT_CLASS_SMALL
+ flags_cover = MASKCOVERSEYES
+ resistance_flags = FLAMMABLE
+ dog_fashion = /datum/dog_fashion/head/clown
+ var/list/poly_colors = list("#FF8000", "#FFFFFF", "#FF0000", "#0000FF", "#FFFF00")
+
+/obj/item/clothing/mask/gas/clown_hat_polychromic/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/polychromic, poly_colors, 5, names = list("Hair", "Frame", "Mouth", "Eyes", "Markings"))
+
/obj/item/clothing/mask/gas/clown_hat/sexy
name = "sexy-clown wig and mask"
desc = "A feminine clown mask for the dabbling crossdressers or female entertainers."
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index e6a0425920..45da6a9a75 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -290,7 +290,7 @@
. = ..()
if(iscarbon(user))
var/mob/living/carbon/C = user
- if((C.get_item_by_slot(SLOT_HEAD == src)) || (C.get_item_by_slot(SLOT_WEAR_MASK) == src))
+ if((C.get_item_by_slot(ITEM_SLOT_HEAD == src)) || (C.get_item_by_slot(ITEM_SLOT_MASK) == src))
to_chat(user, "You can't tie [src] while wearing it!")
return
if(slot_flags & ITEM_SLOT_HEAD)
diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm
index 28a3343ae6..1f40df0f57 100644
--- a/code/modules/clothing/neck/_neck.dm
+++ b/code/modules/clothing/neck/_neck.dm
@@ -226,7 +226,7 @@
return
/obj/item/clothing/neck/petcollar/locked/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
- if(loc == user && user.get_item_by_slot(SLOT_NECK) && lock != FALSE)
+ if(loc == user && user.get_item_by_slot(ITEM_SLOT_NECK) && lock != FALSE)
to_chat(user, "The collar is locked! You'll need unlock the collar before you can take it off!")
return
..()
@@ -323,7 +323,7 @@
. = ..()
if(iscarbon(user))
var/mob/living/carbon/C = user
- if(C.get_item_by_slot(SLOT_NECK) == src)
+ if(C.get_item_by_slot(ITEM_SLOT_NECK) == src)
to_chat(user, "You can't untie [src] while wearing it!")
return
if(user.is_holding(src))
diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm
index ac852a35a8..99fc5d1359 100644
--- a/code/modules/clothing/outfits/vr.dm
+++ b/code/modules/clothing/outfits/vr.dm
@@ -36,7 +36,7 @@
. = ..()
var/key = H.key ? H.key : preference_source ? preference_source.key : null
var/obj/item/uplink/U = new /obj/item/uplink/nuclear_restricted(H, key, 80)
- H.equip_to_slot_or_del(U, SLOT_IN_BACKPACK)
+ H.equip_to_slot_or_del(U, ITEM_SLOT_BACKPACK)
var/obj/item/implant/weapons_auth/W = new
W.implant(H)
var/obj/item/implant/explosive/E = new
diff --git a/code/modules/clothing/outfits/vv_outfit.dm b/code/modules/clothing/outfits/vv_outfit.dm
index b9d9bf0b22..de230b254e 100644
--- a/code/modules/clothing/outfits/vv_outfit.dm
+++ b/code/modules/clothing/outfits/vv_outfit.dm
@@ -10,35 +10,35 @@
/datum/outfit/varedit/proc/set_equipement_by_slot(slot,item_path)
switch(slot)
- if(SLOT_W_UNIFORM)
+ if(ITEM_SLOT_ICLOTHING)
uniform = item_path
- if(SLOT_BACK)
+ if(ITEM_SLOT_BACK)
back = item_path
- if(SLOT_WEAR_SUIT)
+ if(ITEM_SLOT_OCLOTHING)
suit = item_path
- if(SLOT_BELT)
+ if(ITEM_SLOT_BELT)
belt = item_path
- if(SLOT_GLOVES)
+ if(ITEM_SLOT_GLOVES)
gloves = item_path
- if(SLOT_SHOES)
+ if(ITEM_SLOT_FEET)
shoes = item_path
- if(SLOT_HEAD)
+ if(ITEM_SLOT_HEAD)
head = item_path
- if(SLOT_WEAR_MASK)
+ if(ITEM_SLOT_MASK)
mask = item_path
- if(SLOT_NECK)
+ if(ITEM_SLOT_NECK)
neck = item_path
- if(SLOT_EARS)
+ if(ITEM_SLOT_EARS)
ears = item_path
- if(SLOT_GLASSES)
+ if(ITEM_SLOT_EYES)
glasses = item_path
- if(SLOT_WEAR_ID)
+ if(ITEM_SLOT_ID)
id = item_path
- if(SLOT_S_STORE)
+ if(ITEM_SLOT_SUITSTORE)
suit_store = item_path
- if(SLOT_L_STORE)
+ if(ITEM_SLOT_LPOCKET)
l_pocket = item_path
- if(SLOT_R_STORE)
+ if(ITEM_SLOT_RPOCKET)
r_pocket = item_path
@@ -68,7 +68,7 @@
//Copy equipment
var/list/result = list()
- var/list/slots_to_check = list(SLOT_W_UNIFORM,SLOT_BACK,SLOT_WEAR_SUIT,SLOT_BELT,SLOT_GLOVES,SLOT_SHOES,SLOT_HEAD,SLOT_WEAR_MASK,SLOT_NECK,SLOT_EARS,SLOT_GLASSES,SLOT_WEAR_ID,SLOT_S_STORE,SLOT_L_STORE,SLOT_R_STORE)
+ var/list/slots_to_check = list(ITEM_SLOT_ICLOTHING,ITEM_SLOT_BACK,ITEM_SLOT_OCLOTHING,ITEM_SLOT_BELT,ITEM_SLOT_GLOVES,ITEM_SLOT_FEET,ITEM_SLOT_HEAD,ITEM_SLOT_MASK,ITEM_SLOT_NECK,ITEM_SLOT_EARS,ITEM_SLOT_EYES,ITEM_SLOT_ID,ITEM_SLOT_SUITSTORE,ITEM_SLOT_LPOCKET,ITEM_SLOT_RPOCKET)
for(var/s in slots_to_check)
var/obj/item/I = get_item_by_slot(s)
var/vedits = collect_vv(I)
@@ -79,7 +79,7 @@
//Copy access
O.stored_access = list()
- var/obj/item/id_slot = get_item_by_slot(SLOT_WEAR_ID)
+ var/obj/item/id_slot = get_item_by_slot(ITEM_SLOT_ID)
if(id_slot)
O.stored_access |= id_slot.GetAccess()
//Copy hands
@@ -98,7 +98,7 @@
result["RHAND"] = vedits
O.vv_values = result
//Copy backpack contents if exist.
- var/obj/item/backpack = get_item_by_slot(SLOT_BACK)
+ var/obj/item/backpack = get_item_by_slot(ITEM_SLOT_BACK)
if(istype(backpack) && SEND_SIGNAL(backpack, COMSIG_CONTAINS_STORAGE))
var/list/bp_stuff = list()
var/list/typecounts = list()
@@ -136,7 +136,7 @@
for(var/vname in edits)
I.vv_edit_var(vname,edits[vname])
//Apply access
- var/obj/item/id_slot = H.get_item_by_slot(SLOT_WEAR_ID)
+ var/obj/item/id_slot = H.get_item_by_slot(ITEM_SLOT_ID)
if(id_slot)
var/obj/item/card/id/card = id_slot.GetID()
if(istype(card))
diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm
index c98824fa7f..d8ac875df5 100644
--- a/code/modules/clothing/shoes/_shoes.dm
+++ b/code/modules/clothing/shoes/_shoes.dm
@@ -87,7 +87,7 @@
/obj/item/clothing/shoes/equipped(mob/user, slot)
. = ..()
- if(offset && slot_flags & slotdefine2slotbit(slot))
+ if(offset && (slot_flags & slot))
user.pixel_y += offset
worn_y_dimension -= (offset * 2)
user.update_inv_shoes()
diff --git a/code/modules/clothing/shoes/cluwne.dm b/code/modules/clothing/shoes/cluwne.dm
index fbe1ba624b..aec57a2148 100644
--- a/code/modules/clothing/shoes/cluwne.dm
+++ b/code/modules/clothing/shoes/cluwne.dm
@@ -23,7 +23,7 @@
. = ..()
if(!ishuman(user))
return
- if(slot == SLOT_SHOES)
+ if(slot == ITEM_SLOT_FEET)
var/mob/living/carbon/human/H = user
H.dna.add_mutation(CLUWNEMUT)
return
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index 773b1ac361..cd01d6f099 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -96,7 +96,7 @@
/obj/item/clothing/shoes/magboots/crushing/equipped(mob/user,slot)
. = ..()
- if (slot == SLOT_SHOES && magpulse)
+ if (slot == ITEM_SLOT_FEET && magpulse)
RegisterSignal(user, COMSIG_MOVABLE_MOVED,.proc/crush)
/obj/item/clothing/shoes/magboots/crushing/dropped(mob/user)
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 669ffa1780..7a67308760 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -28,7 +28,7 @@
/obj/item/clothing/shoes/combat/sneakboots/equipped(mob/user, slot)
. = ..()
- if(slot == SLOT_SHOES)
+ if(slot == ITEM_SLOT_FEET)
ADD_TRAIT(user, TRAIT_SILENT_STEP, SHOES_TRAIT)
/obj/item/clothing/shoes/combat/sneakboots/dropped(mob/user)
@@ -112,7 +112,7 @@
/obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot)
. = ..()
- if(slot == SLOT_SHOES)
+ if(slot == ITEM_SLOT_FEET)
if(enabled_waddle)
waddle = user.AddComponent(/datum/component/waddling)
if(user.mind && HAS_TRAIT(user.mind, TRAIT_CLOWN_MENTALITY))
@@ -340,7 +340,7 @@
/obj/item/clothing/shoes/wheelys/ui_action_click(mob/user, action)
if(!isliving(user))
return
- if(!istype(user.get_item_by_slot(SLOT_SHOES), /obj/item/clothing/shoes/wheelys))
+ if(!istype(user.get_item_by_slot(ITEM_SLOT_FEET), /obj/item/clothing/shoes/wheelys))
to_chat(user, "You must be wearing the wheely-heels to use them!")
return
if(!(W.is_occupant(user)))
@@ -460,7 +460,7 @@
/obj/item/clothing/shoes/wallwalkers/equipped(mob/user,slot)
. = ..()
- if(slot == SLOT_SHOES)
+ if(slot == ITEM_SLOT_FEET)
RegisterSignal(user, COMSIG_MOB_CLIENT_MOVE,.proc/intercept_user_move)
/obj/item/clothing/shoes/wallwalkers/dropped(mob/user)
diff --git a/code/modules/clothing/shoes/taeclowndo.dm b/code/modules/clothing/shoes/taeclowndo.dm
index c0f8a77543..82f467d8b1 100644
--- a/code/modules/clothing/shoes/taeclowndo.dm
+++ b/code/modules/clothing/shoes/taeclowndo.dm
@@ -15,7 +15,7 @@
var/mob/living/carbon/human/H = user
if(!(HAS_TRAIT(H, TRAIT_CLUMSY)) && !(H.mind && HAS_TRAIT(H.mind, TRAIT_CLOWN_MENTALITY)))
return
- if(slot == SLOT_SHOES)
+ if(slot == ITEM_SLOT_FEET)
spells = new
for(var/spell in spelltypes)
var/obj/effect/proc_holder/spell/S = new spell
@@ -29,7 +29,7 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(SLOT_SHOES) == src)
+ if(H.get_item_by_slot(ITEM_SLOT_FEET) == src)
for(var/spell in spells)
var/obj/effect/proc_holder/spell/S = spell
H.mind.spell_list.Remove(S)
diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm
index 6642731d8b..e30b0953c6 100644
--- a/code/modules/clothing/spacesuits/chronosuit.dm
+++ b/code/modules/clothing/spacesuits/chronosuit.dm
@@ -107,7 +107,7 @@
teleport_now.UpdateButtonIcon()
- var/list/nonsafe_slots = list(SLOT_BELT, SLOT_BACK)
+ var/list/nonsafe_slots = list(ITEM_SLOT_BELT, ITEM_SLOT_BACK)
var/list/exposed = list()
for(var/slot in nonsafe_slots)
var/obj/item/slot_item = user.get_item_by_slot(slot)
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 18138bf4b6..d8a6426295 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -50,12 +50,12 @@
soundloop.stop(user)
/obj/item/clothing/head/helmet/space/hardsuit/item_action_slot_check(slot, mob/user, datum/action/A)
- if(slot == SLOT_HEAD)
+ if(slot == ITEM_SLOT_HEAD)
return 1
/obj/item/clothing/head/helmet/space/hardsuit/equipped(mob/user, slot)
..()
- if(slot != SLOT_HEAD)
+ if(slot != ITEM_SLOT_HEAD)
if(suit)
suit.RemoveHelmet()
soundloop.stop(user)
@@ -118,7 +118,7 @@
if(jetpack)
to_chat(user, "[src] already has a jetpack installed.")
return
- if(src == user.get_item_by_slot(SLOT_WEAR_SUIT)) //Make sure the player is not wearing the suit before applying the upgrade.
+ if(src == user.get_item_by_slot(ITEM_SLOT_OCLOTHING)) //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
@@ -130,7 +130,7 @@
if(!jetpack)
to_chat(user, "[src] has no jetpack installed.")
return
- if(src == user.get_item_by_slot(SLOT_WEAR_SUIT))
+ if(src == user.get_item_by_slot(ITEM_SLOT_OCLOTHING))
to_chat(user, "You cannot remove the jetpack from [src] while wearing it.")
return
@@ -145,7 +145,7 @@
/obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot)
..()
if(jetpack)
- if(slot == SLOT_WEAR_SUIT)
+ if(slot == ITEM_SLOT_OCLOTHING)
for(var/X in jetpack.actions)
var/datum/action/A = X
A.Grant(user)
@@ -158,7 +158,7 @@
A.Remove(user)
/obj/item/clothing/suit/space/hardsuit/item_action_slot_check(slot, mob/user, datum/action/A)
- if(slot == SLOT_WEAR_SUIT) //we only give the mob the ability to toggle the helmet if he's wearing the hardsuit.
+ if(slot == ITEM_SLOT_OCLOTHING) //we only give the mob the ability to toggle the helmet if he's wearing the hardsuit.
return 1
//Engineering
@@ -488,7 +488,7 @@
/obj/item/clothing/head/helmet/space/hardsuit/medical/equipped(mob/living/carbon/human/user, slot)
..()
- if (slot == SLOT_HEAD)
+ if (slot == ITEM_SLOT_HEAD)
var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
DHUD.add_hud_to(user)
@@ -528,7 +528,7 @@
/obj/item/clothing/head/helmet/space/hardsuit/rd/equipped(mob/living/carbon/human/user, slot)
..()
- if (slot == SLOT_HEAD)
+ if (slot == ITEM_SLOT_HEAD)
var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC_BASIC]
DHUD.add_hud_to(user)
@@ -702,7 +702,7 @@
/obj/item/clothing/head/helmet/space/hardsuit/ancient/mason/equipped(mob/living/carbon/human/user, slot)
..()
- if (slot == SLOT_HEAD)
+ if (slot == ITEM_SLOT_HEAD)
var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC_BASIC]
DHUD.add_hud_to(user)
ADD_TRAIT(user, TRAIT_TESLA_SHOCKIMMUNE, "mason_hardsuit")
@@ -726,7 +726,7 @@
/obj/item/clothing/suit/space/hardsuit/ancient/equipped(mob/user, slot)
. = ..()
- if(slot != SLOT_WEAR_SUIT)
+ if(slot != ITEM_SLOT_OCLOTHING)
if(listeningTo)
UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
return
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index c944b2aa1f..f51593b590 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -234,7 +234,6 @@ Contains:
icon_state = "ert_medical"
item_state = "ert_medical"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/med
- species_exception = list(/datum/species/angel)
//Red alert ERT
@@ -296,7 +295,6 @@ Contains:
icon_state = "ert_medical-alert"
item_state = "ert_medical-alert"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert/med
- species_exception = list(/datum/species/angel)
/obj/item/clothing/suit/space/eva
name = "EVA suit"
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 513ad94365..57d2ae5c69 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -206,7 +206,7 @@
/obj/item/clothing/suit/cardborg/equipped(mob/living/user, slot)
..()
- if(slot == SLOT_WEAR_SUIT)
+ if(slot == ITEM_SLOT_OCLOTHING)
disguise(user)
/obj/item/clothing/suit/cardborg/dropped(mob/living/user)
@@ -279,7 +279,9 @@
item_state = "labcoat"
body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET
cold_protection = CHEST|GROIN|ARMS
+ heat_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too
+ max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT
allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/gun/ballistic/automatic/speargun, /obj/item/staff/bostaff)
hoodtype = /obj/item/clothing/head/hooded/carp_hood
@@ -289,7 +291,9 @@
icon_state = "carp_casual"
body_parts_covered = HEAD
cold_protection = HEAD
+ heat_protection = HEAD
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT
flags_inv = HIDEHAIR|HIDEEARS
/obj/item/clothing/suit/hooded/ian_costume //It's Ian, rub his bell- oh god what happened to his inside parts?
@@ -362,7 +366,10 @@
item_state = "ran_suit"
body_parts_covered = CHEST|GROIN|LEGS
flags_inv = HIDEJUMPSUIT|HIDETAUR
- heat_protection = CHEST|GROIN|LEGS //fluffy tails!
+ cold_protection = CHEST|GROIN|LEGS //fluffy tails!
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Bleh, same as winter coat
+ heat_protection = CHEST|GROIN|LEGS
+ max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
/obj/item/clothing/head/ran
@@ -419,7 +426,9 @@
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/radio)
body_parts_covered = CHEST|ARMS
cold_protection = CHEST|GROIN|ARMS
+ heat_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
/obj/item/clothing/suit/jacket/flannel
@@ -520,6 +529,7 @@
icon_state = "leathercoat"
body_parts_covered = CHEST|GROIN|ARMS|LEGS
cold_protection = CHEST|GROIN|ARMS|LEGS
+ heat_protection = CHEST|GROIN|ARMS|LEGS
mutantrace_variation = STYLE_DIGITIGRADE
/obj/item/clothing/suit/jacket/puffer
@@ -537,6 +547,7 @@
item_state = "armor"
body_parts_covered = CHEST|GROIN
cold_protection = CHEST|GROIN
+ heat_protection = CHEST|GROIN
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = 0)
/obj/item/clothing/suit/jacket/miljacket
@@ -655,7 +666,9 @@
item_state = "coatwinter"
body_parts_covered = CHEST|GROIN|ARMS
cold_protection = CHEST|GROIN|ARMS
+ heat_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
@@ -666,7 +679,9 @@
icon_state = "winterhood"
body_parts_covered = HEAD
cold_protection = HEAD
+ heat_protection = HEAD
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT
flags_inv = HIDEHAIR|HIDEEARS
rad_flags = RAD_NO_CONTAMINATE
@@ -1012,7 +1027,7 @@
/obj/item/clothing/suit/hooded/wintercoat/ratvar/equipped(mob/living/user,slot)
..()
- if (slot != SLOT_WEAR_SUIT || !real)
+ if (slot != ITEM_SLOT_OCLOTHING || !real)
return
if (is_servant_of_ratvar(user))
return
@@ -1034,7 +1049,7 @@
/obj/item/clothing/suit/hooded/wintercoat/narsie/equipped(mob/living/user,slot)
..()
- if (slot != SLOT_WEAR_SUIT || !real)
+ if (slot != ITEM_SLOT_OCLOTHING || !real)
return
if (iscultist(user))
return
diff --git a/code/modules/clothing/suits/reactive_armour.dm b/code/modules/clothing/suits/reactive_armour.dm
index 98fb836c38..608aca2aad 100644
--- a/code/modules/clothing/suits/reactive_armour.dm
+++ b/code/modules/clothing/suits/reactive_armour.dm
@@ -51,7 +51,7 @@
icon_state = "reactiveoff"
item_state = "reactiveoff"
add_fingerprint(user)
- if(user.get_item_by_slot(SLOT_WEAR_SUIT) == src)
+ if(user.get_item_by_slot(ITEM_SLOT_OCLOTHING) == src)
user.update_inv_wear_suit()
/obj/item/clothing/suit/armor/reactive/emp_act(severity)
@@ -177,7 +177,7 @@
/obj/item/clothing/suit/armor/reactive/tesla/equipped(mob/user, slot)
..()
- if(slot_flags & slotdefine2slotbit(slot)) //Was equipped to a valid slot for this item?
+ if(slot_flags & slot) //Was equipped to a valid slot for this item?
ADD_TRAIT(user, TRAIT_TESLA_SHOCKIMMUNE, "reactive_tesla_armor")
/obj/item/clothing/suit/armor/reactive/tesla/block_action(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm
index 78708f54bb..5ee247e135 100644
--- a/code/modules/clothing/suits/toggles.dm
+++ b/code/modules/clothing/suits/toggles.dm
@@ -31,11 +31,11 @@
ToggleHood()
/obj/item/clothing/suit/hooded/item_action_slot_check(slot, mob/user, datum/action/A)
- if(slot == SLOT_WEAR_SUIT || slot == SLOT_NECK)
+ if(slot == ITEM_SLOT_OCLOTHING || slot == ITEM_SLOT_NECK)
return 1
/obj/item/clothing/suit/hooded/equipped(mob/user, slot)
- if(slot != SLOT_WEAR_SUIT && slot != SLOT_NECK)
+ if(slot != ITEM_SLOT_OCLOTHING && slot != ITEM_SLOT_NECK)
RemoveHood()
..()
@@ -80,7 +80,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_HEAD,0,0,1))
+ else if(H.equip_to_slot_if_possible(hood,ITEM_SLOT_HEAD,0,0,1))
suittoggled = TRUE
update_icon()
H.update_inv_wear_suit()
@@ -102,7 +102,7 @@
/obj/item/clothing/head/hooded/equipped(mob/user, slot)
..()
- if(slot != SLOT_HEAD)
+ if(slot != ITEM_SLOT_HEAD)
if(suit)
suit.RemoveHood()
else
@@ -177,7 +177,7 @@
/obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot)
if(!helmettype)
return
- if(slot != SLOT_WEAR_SUIT)
+ if(slot != ITEM_SLOT_OCLOTHING)
RemoveHelmet()
..()
@@ -222,7 +222,7 @@
if(message)
to_chat(H, "You're already wearing something on your head!")
return
- else if(H.equip_to_slot_if_possible(helmet,SLOT_HEAD,0,0,1))
+ else if(H.equip_to_slot_if_possible(helmet,ITEM_SLOT_HEAD,0,0,1))
if(message)
to_chat(H, "You engage the helmet on the hardsuit.")
suittoggled = TRUE
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index 977e916f87..5b131749b8 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -167,7 +167,7 @@
actions_types = list(/datum/action/item_action/stickmen)
/obj/item/clothing/suit/wizrobe/paper/item_action_slot_check(slot, mob/user, datum/action/A)
- if(A.type == /datum/action/item_action/stickmen && slot != SLOT_WEAR_SUIT)
+ if(A.type == /datum/action/item_action/stickmen && slot != ITEM_SLOT_OCLOTHING)
return FALSE
return ..()
diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm
index 59af632d2a..61e4bb5149 100644
--- a/code/modules/clothing/under/_under.dm
+++ b/code/modules/clothing/under/_under.dm
@@ -114,7 +114,7 @@
if(!alt_covers_chest)
body_parts_covered |= CHEST
- if(attached_accessory && slot != SLOT_HANDS && ishuman(user))
+ if(attached_accessory && slot != ITEM_SLOT_HANDS && ishuman(user))
var/mob/living/carbon/human/H = user
attached_accessory.on_uniform_equip(src, user)
if(attached_accessory.above_suit)
diff --git a/code/modules/clothing/under/cluwne.dm b/code/modules/clothing/under/cluwne.dm
index 5a908c5663..e1af4b5171 100644
--- a/code/modules/clothing/under/cluwne.dm
+++ b/code/modules/clothing/under/cluwne.dm
@@ -16,7 +16,7 @@
/obj/item/clothing/under/cluwne/equipped(mob/living/carbon/user, slot)
if(!ishuman(user))
return
- if(slot == SLOT_W_UNIFORM)
+ if(slot == ITEM_SLOT_ICLOTHING)
var/mob/living/carbon/human/H = user
H.dna.add_mutation(CLUWNEMUT)
return ..()
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
index 824f026e8c..06d2771d88 100644
--- a/code/modules/clothing/under/color.dm
+++ b/code/modules/clothing/under/color.dm
@@ -17,7 +17,7 @@
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
- H.equip_to_slot_or_del(new C(H), SLOT_W_UNIFORM) //or else you end up with naked assistants running around everywhere...
+ H.equip_to_slot_or_del(new C(H), ITEM_SLOT_ICLOTHING) //or else you end up with naked assistants running around everywhere...
else
new C(loc)
return INITIALIZE_HINT_QDEL
@@ -30,7 +30,7 @@
var/obj/item/clothing/under/color/jumpskirt/C = pick(subtypesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/jumpskirt/random)
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
- H.equip_to_slot_or_del(new C(H), SLOT_W_UNIFORM)
+ H.equip_to_slot_or_del(new C(H), ITEM_SLOT_ICLOTHING)
else
new C(loc)
return INITIALIZE_HINT_QDEL
diff --git a/code/modules/clothing/under/jobs/civilian/clown_mime.dm b/code/modules/clothing/under/jobs/civilian/clown_mime.dm
index 470a3695fc..25c40ee5d8 100644
--- a/code/modules/clothing/under/jobs/civilian/clown_mime.dm
+++ b/code/modules/clothing/under/jobs/civilian/clown_mime.dm
@@ -32,6 +32,20 @@
can_adjust = FALSE
mutantrace_variation = STYLE_DIGITIGRADE //The clown suit must look funny, no taur alpha masks where possible.
+/obj/item/clothing/under/rank/civilian/polychromic_clown
+ name = "polychromic clown suit"
+ desc = "'HONK!'"
+ icon_state = "clown"
+ item_state = "clown"
+ fitted = FEMALE_UNIFORM_TOP
+ can_adjust = FALSE
+ mutantrace_variation = STYLE_DIGITIGRADE //The clown suit must look funny, no taur alpha masks where possible.
+ var/list/poly_colors = list("#FF0000", "#FF99FF", "#FFFF00", "#FFFFFF")
+
+/obj/item/clothing/under/rank/civilian/polychromic_clown/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/polychromic, poly_colors, 4)
+
/obj/item/clothing/under/rank/civilian/clown/blue
name = "blue clown suit"
desc = "'BLUE HONK!'"
diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm
index 2f0b9c68f8..061de0ea7c 100644
--- a/code/modules/events/wizard/curseditems.dm
+++ b/code/modules/events/wizard/curseditems.dm
@@ -18,23 +18,23 @@
switch(item_set)
if("wizardmimic")
- loadout[SLOT_WEAR_SUIT] = /obj/item/clothing/suit/wizrobe
- loadout[SLOT_SHOES] = /obj/item/clothing/shoes/sandal/magic
- loadout[SLOT_HEAD] = /obj/item/clothing/head/wizard
+ loadout[ITEM_SLOT_OCLOTHING] = /obj/item/clothing/suit/wizrobe
+ loadout[ITEM_SLOT_FEET] = /obj/item/clothing/shoes/sandal/magic
+ loadout[ITEM_SLOT_HEAD] = /obj/item/clothing/head/wizard
ruins_spaceworthiness = 1
if("swords")
- loadout[SLOT_HANDS] = /obj/item/katana/cursed
+ loadout[ITEM_SLOT_HANDS] = /obj/item/katana/cursed
if("bigfatdoobie")
- loadout[SLOT_WEAR_MASK] = /obj/item/clothing/mask/cigarette/rollie/trippy
+ loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/cigarette/rollie/trippy
ruins_spaceworthiness = 1
if("boxing")
- loadout[SLOT_WEAR_MASK] = /obj/item/clothing/mask/luchador
- loadout[SLOT_GLOVES] = /obj/item/clothing/gloves/boxing
+ loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/luchador
+ loadout[ITEM_SLOT_GLOVES] = /obj/item/clothing/gloves/boxing
ruins_spaceworthiness = 1
if("voicemodulators")
- loadout[SLOT_WEAR_MASK] = /obj/item/clothing/mask/chameleon
+ loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/chameleon
if("catgirls2015")
- loadout[SLOT_HEAD] = /obj/item/clothing/head/kitty
+ loadout[ITEM_SLOT_HEAD] = /obj/item/clothing/head/kitty
ruins_spaceworthiness = 1
ruins_wizard_loadout = 1
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 5d84901e7f..a2e822ba08 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -739,7 +739,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
if(close_other) //increase the odds
for(var/i in 1 to 5)
message_pool.Add("You feel a tiny prick!")
- var/obj/item/storage/equipped_backpack = other.get_item_by_slot(SLOT_BACK)
+ var/obj/item/storage/equipped_backpack = other.get_item_by_slot(ITEM_SLOT_BACK)
if(istype(equipped_backpack))
for(var/i in 1 to 5) //increase the odds
message_pool.Add("[other] puts the [pick(\
diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
index f650a935ea..1c151511af 100644
--- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
@@ -35,7 +35,7 @@
//If they have a hat/helmet and the user is targeting their head.
if(affecting == BODY_ZONE_HEAD)
- var/obj/item/I = target.get_item_by_slot(SLOT_HEAD)
+ var/obj/item/I = target.get_item_by_slot(ITEM_SLOT_HEAD)
if(I)
headarmor = I.armor.melee
diff --git a/code/modules/holiday/dynamic.dm b/code/modules/holiday/dynamic.dm
new file mode 100644
index 0000000000..f75dd37542
--- /dev/null
+++ b/code/modules/holiday/dynamic.dm
@@ -0,0 +1,10 @@
+/datum/holiday/dynamic
+ name = "Dynamic Day"
+
+/datum/holiday/dynamic/shouldCelebrate(dd, mm, yy, ww, ddd)
+ var/list/days = CONFIG_GET(keyed_list/dynamic_mode_days)
+ return lowertext(ddd) in days
+
+/datum/holiday/dynamic/celebrate()
+ GLOB.dynamic_forced_threat_level = rand(90, 100)
+ CONFIG_SET(string/force_gamemode, "dynamic") // prevents the round vote, which prevents extended
diff --git a/code/modules/holiday/halloween/jacqueen.dm b/code/modules/holiday/halloween/jacqueen.dm
index 1ebacf0968..723b404717 100644
--- a/code/modules/holiday/halloween/jacqueen.dm
+++ b/code/modules/holiday/halloween/jacqueen.dm
@@ -432,7 +432,7 @@
var/obj/item/W = C.head
C.dropItemToGround(W, TRUE)
var/jaqc_latern = new /obj/item/clothing/head/hardhat/pumpkinhead/jaqc
- C.equip_to_slot(jaqc_latern, SLOT_HEAD, 1, 1)
+ C.equip_to_slot(jaqc_latern, ITEM_SLOT_HEAD, 1, 1)
if(4)
visible_message("[src] waves their arms around, \"In your body there's something amiss, you'll find it's a chem made by my sis!\"")
jacqrunes("In your body there's something amiss, you'll find it's a chem made by my sis!", C)
@@ -449,7 +449,7 @@
var/obj/item/W = H.wear_suit
H.dropItemToGround(W, TRUE)
var/ghost = new /obj/item/clothing/suit/ghost_sheet/sticky
- H.equip_to_slot(ghost, SLOT_WEAR_SUIT, 1, 1)
+ H.equip_to_slot(ghost, ITEM_SLOT_OCLOTHING, 1, 1)
poof()
//Blame Fel
diff --git a/code/modules/integrated_electronics/subtypes/smart.dm b/code/modules/integrated_electronics/subtypes/smart.dm
index 5dc866c556..e1fdc36552 100644
--- a/code/modules/integrated_electronics/subtypes/smart.dm
+++ b/code/modules/integrated_electronics/subtypes/smart.dm
@@ -97,7 +97,7 @@
return
idc.access = assembly.access_card.access
var/turf/a_loc = get_turf(assembly)
- var/list/P = cir_get_path_to(assembly, locate(get_pin_data(IC_INPUT, 1),get_pin_data(IC_INPUT, 2),a_loc.z), /turf/proc/Distance_cardinal, 0, 200, id=idc, exclude=get_turf(get_pin_data_as_type(IC_INPUT,3, /atom)), simulated_only = 0)
+ var/list/P = get_path_to(assembly, locate(get_pin_data(IC_INPUT, 1),get_pin_data(IC_INPUT, 2),a_loc.z), 200, id=idc, exclude=get_turf(get_pin_data_as_type(IC_INPUT,3, /atom)), simulated_only = 0)
if(!P)
activate_pin(3)
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index 1f5becace8..6eaad5e2dc 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -241,7 +241,7 @@
var/satchel = /obj/item/storage/backpack/satchel
var/duffelbag = /obj/item/storage/backpack/duffelbag
- var/pda_slot = SLOT_BELT
+ var/pda_slot = ITEM_SLOT_BELT
/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
var/preference_backpack = preference_source?.prefs.backbag
diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm
index de66c32138..82eae55bde 100644
--- a/code/modules/jobs/job_types/atmospheric_technician.dm
+++ b/code/modules/jobs/job_types/atmospheric_technician.dm
@@ -40,7 +40,7 @@
satchel = /obj/item/storage/backpack/satchel/eng
duffelbag = /obj/item/storage/backpack/duffelbag/engineering
box = /obj/item/storage/box/survival/engineer
- pda_slot = SLOT_L_STORE
+ pda_slot = ITEM_SLOT_LPOCKET
backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1)
/datum/outfit/job/atmos/rig
@@ -49,4 +49,4 @@
mask = /obj/item/clothing/mask/gas
suit = /obj/item/clothing/suit/space/hardsuit/engine/atmos
suit_store = /obj/item/tank/internals/oxygen
- internals_slot = SLOT_S_STORE
+ internals_slot = ITEM_SLOT_SUITSTORE
diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm
index a9e891a303..7789e3c614 100644
--- a/code/modules/jobs/job_types/chaplain.dm
+++ b/code/modules/jobs/job_types/chaplain.dm
@@ -34,7 +34,7 @@
B.icon_state = GLOB.bible_icon_state
B.item_state = GLOB.bible_item_state
to_chat(H, "There is already an established religion onboard the station. You are an acolyte of [GLOB.deity]. Defer to the Chaplain.")
- H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK)
+ H.equip_to_slot_or_del(B, ITEM_SLOT_BACKPACK)
var/nrt = GLOB.holy_weapon_type || /obj/item/nullrod
var/obj/item/nullrod/N = new nrt(H)
H.put_in_hands(N)
@@ -108,7 +108,7 @@
GLOB.bible_name = B.name
GLOB.deity = B.deity_name
- H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK)
+ H.equip_to_slot_or_del(B, ITEM_SLOT_BACKPACK)
SSblackbox.record_feedback("text", "religion_name", 1, "[new_religion]", 1)
SSblackbox.record_feedback("text", "religion_deity", 1, "[new_deity]", 1)
diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm
index 804952dbb2..6fbf546e95 100644
--- a/code/modules/jobs/job_types/chief_engineer.dm
+++ b/code/modules/jobs/job_types/chief_engineer.dm
@@ -55,7 +55,7 @@
satchel = /obj/item/storage/backpack/satchel/eng
duffelbag = /obj/item/storage/backpack/duffelbag/engineering
box = /obj/item/storage/box/survival/engineer
- pda_slot = SLOT_L_STORE
+ pda_slot = ITEM_SLOT_LPOCKET
chameleon_extras = /obj/item/stamp/ce
/datum/outfit/job/ce/rig
@@ -68,4 +68,4 @@
glasses = /obj/item/clothing/glasses/meson/engine
gloves = /obj/item/clothing/gloves/color/yellow
head = null
- internals_slot = SLOT_S_STORE
+ internals_slot = ITEM_SLOT_SUITSTORE
diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm
index 331bad9bfe..b9fc5809e3 100644
--- a/code/modules/jobs/job_types/paramedic.dm
+++ b/code/modules/jobs/job_types/paramedic.dm
@@ -41,7 +41,7 @@
r_pocket = /obj/item/pinpointer/crew
l_pocket = /obj/item/pda/medical
backpack_contents = list(/obj/item/roller=1)
- pda_slot = SLOT_L_STORE
+ pda_slot = ITEM_SLOT_LPOCKET
backpack = /obj/item/storage/backpack/medic
satchel = /obj/item/storage/backpack/satchel/med
diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm
index 6c2cb94d13..e70e747ae6 100644
--- a/code/modules/jobs/job_types/research_director.dm
+++ b/code/modules/jobs/job_types/research_director.dm
@@ -63,4 +63,4 @@
mask = /obj/item/clothing/mask/breath
suit = /obj/item/clothing/suit/space/hardsuit/rd
suit_store = /obj/item/tank/internals/oxygen
- internals_slot = SLOT_S_STORE
+ internals_slot = ITEM_SLOT_SUITSTORE
diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm
index b44d536cd2..90dacc0482 100644
--- a/code/modules/jobs/job_types/roboticist.dm
+++ b/code/modules/jobs/job_types/roboticist.dm
@@ -37,4 +37,4 @@
backpack = /obj/item/storage/backpack/science
satchel = /obj/item/storage/backpack/satchel/tox
- pda_slot = SLOT_L_STORE
+ pda_slot = ITEM_SLOT_LPOCKET
diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm
index 3462fb96c9..1823a2498a 100644
--- a/code/modules/jobs/job_types/security_officer.dm
+++ b/code/modules/jobs/job_types/security_officer.dm
@@ -84,7 +84,7 @@ GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, S
if(ears)
if(H.ears)
qdel(H.ears)
- H.equip_to_slot_or_del(new ears(H),SLOT_EARS)
+ H.equip_to_slot_or_del(new ears(H),ITEM_SLOT_EARS)
var/obj/item/card/id/W = H.wear_id
W.access |= dep_access
diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm
index 0c04380afe..273f74defa 100644
--- a/code/modules/jobs/job_types/shaft_miner.dm
+++ b/code/modules/jobs/job_types/shaft_miner.dm
@@ -60,7 +60,7 @@
mask = /obj/item/clothing/mask/gas/explorer
glasses = /obj/item/clothing/glasses/meson
suit_store = /obj/item/tank/internals/oxygen
- internals_slot = SLOT_S_STORE
+ internals_slot = ITEM_SLOT_SUITSTORE
backpack_contents = list(
/obj/item/flashlight/seclite=1,\
/obj/item/kitchen/knife/combat/survival=1,
diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm
index 25bd2196a0..83b11b22f6 100644
--- a/code/modules/jobs/job_types/station_engineer.dm
+++ b/code/modules/jobs/job_types/station_engineer.dm
@@ -43,7 +43,7 @@
satchel = /obj/item/storage/backpack/satchel/eng
duffelbag = /obj/item/storage/backpack/duffelbag/engineering
box = /obj/item/storage/box/survival/engineer
- pda_slot = SLOT_L_STORE
+ pda_slot = ITEM_SLOT_LPOCKET
backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1)
/datum/outfit/job/engineer/gloved
@@ -56,6 +56,6 @@
suit = /obj/item/clothing/suit/space/hardsuit/engine
suit_store = /obj/item/tank/internals/oxygen
head = null
- internals_slot = SLOT_S_STORE
+ internals_slot = ITEM_SLOT_SUITSTORE
diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm
index 9c503279d4..9eed296851 100644
--- a/code/modules/mining/equipment/wormhole_jaunter.dm
+++ b/code/modules/mining/equipment/wormhole_jaunter.dm
@@ -20,7 +20,7 @@
/obj/item/wormhole_jaunter/equipped(mob/user, slot)
. = ..()
- if(slot == SLOT_BELT)
+ if(slot == ITEM_SLOT_BELT)
RegisterSignal(user, COMSIG_MOVABLE_CHASM_DROP, .proc/chasm_react)
/obj/item/wormhole_jaunter/dropped(mob/user)
@@ -68,7 +68,7 @@
var/mob/M = loc
if(istype(M))
- if(M.get_item_by_slot(SLOT_BELT) == src)
+ if(M.get_item_by_slot(ITEM_SLOT_BELT) == src)
if(prob(severity))
M.visible_message("[src] overloads and activates!")
SSblackbox.record_feedback("tally", "jaunter", 1, "EMP") // EMP accidental activation
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index b005822438..0b394e0fc5 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -307,7 +307,7 @@
var/mob/living/carbon/human/active_owner
/obj/item/clothing/neck/necklace/memento_mori/item_action_slot_check(slot, mob/user, datum/action/A)
- return slot == SLOT_NECK
+ return slot == ITEM_SLOT_NECK
/obj/item/clothing/neck/necklace/memento_mori/dropped(mob/user)
..()
@@ -694,16 +694,20 @@
/datum/reagent/flightpotion/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
if(iscarbon(M) && M.stat != DEAD)
- if(!ishumanbasic(M) || reac_volume < 5) // implying xenohumans are holy
+ var/mob/living/carbon/C = M
+ if(reac_volume < 5)
if(method == INGEST && show_message)
- to_chat(M, "You feel nothing but a terrible aftertaste.")
+ to_chat(C, "You feel nothing but a terrible aftertaste.")
return ..()
-
- to_chat(M, "A terrible pain travels down your back as wings burst out!")
- M.set_species(/datum/species/angel)
- playsound(M.loc, 'sound/items/poster_ripped.ogg', 50, 1, -1)
- M.adjustBruteLoss(20)
- M.emote("scream")
+ var/has_wings = (C.dna.species.mutant_bodyparts["deco_wings"] && C.dna.features["deco_wings"] != "None" || C.dna.species.mutant_bodyparts["insect_wings"] && C.dna.features["insect_wings"] != "None")
+ var/has_functional_wings = (C.dna.species.mutant_bodyparts["wings"] != null)
+ to_chat(C, "A terrible pain travels down your back as [has_wings || has_functional_wings ? "your wings transform" : "wings burst out"]!")
+ C.dna.species.GiveSpeciesFlight(C, has_functional_wings ? TRUE : FALSE) //give them the full list of wing choices if this is their second flight potion
+ to_chat(C, "You feel blessed!")
+ ADD_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT) //implying anyone is truly holy in a setting where people throw tantrums when things aren't violent
+ playsound(C.loc, 'sound/items/poster_ripped.ogg', 50, TRUE, -1)
+ C.adjustBruteLoss(20)
+ C.emote("scream")
..()
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm
index 1dc50bfe73..08ae75d728 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm
@@ -28,10 +28,9 @@
for(var/path in typesof(prototype))
if(path == prototype && skip_prototype)
continue
- if(roundstart)
- var/datum/sprite_accessory/P = path
- if(initial(P.locked))
- continue
+ var/datum/sprite_accessory/P = path
+ if((roundstart && initial(P.locked)))
+ continue
var/datum/sprite_accessory/D = new path()
if(D.icon_state)
@@ -64,6 +63,7 @@
var/mutant_part_string //Also used in species.handle_mutant_bodyparts() to generate the overlay icon state.
var/alpha_mask_state
var/matrixed_sections = MATRIX_NONE //if color_src is MATRIXED, how many sections does it have? 1-3
+ var/ignore = FALSE //NEVER include in customization if set to TRUE
//Special / holdover traits for Citadel specific sprites.
var/extra = FALSE
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm b/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm
index c525a13ef8..11fde50a37 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm
@@ -126,6 +126,11 @@
hide_legs = USE_SNEK_CLIP_MASK
matrixed_sections = MATRIX_RED_GREEN
+/datum/sprite_accessory/taur/naga/coiled
+ name = "Naga (coiled)"
+ icon_state = "naga_coiled"
+ ignore = TRUE
+
/datum/sprite_accessory/taur/otie
name = "Otie"
icon_state = "otie"
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm
index 800682b8cf..07adec0aa4 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm
@@ -1,4 +1,8 @@
-//Angel Wings
+//Functional Wings
+
+/datum/sprite_accessory/wings
+ icon = 'icons/mob/wings_functional.dmi'
+ relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
/datum/sprite_accessory/wings/none
name = "None"
@@ -9,23 +13,12 @@
return (!H.dna.features["wings"] || H.dna.features["wings"] == "None" || (H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception))))
/datum/sprite_accessory/wings_open
- icon = 'icons/mob/wings.dmi'
+ icon = 'icons/mob/wings_functional.dmi'
relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
/datum/sprite_accessory/wings_open/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
return (H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception)) || H.dna.species.mutant_bodyparts["wings"])
-/datum/sprite_accessory/wings_open/angel
- name = "Angel"
- icon_state = "angel"
- color_src = 0
- dimension_x = 46
- center = TRUE
- dimension_y = 34
-
-/datum/sprite_accessory/wings
- icon = 'icons/mob/wings.dmi'
- relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
/datum/sprite_accessory/wings/angel
name = "Angel"
@@ -36,6 +29,114 @@
dimension_y = 34
locked = TRUE
+/datum/sprite_accessory/wings_open/angel
+ name = "Angel"
+ icon_state = "angel"
+ color_src = 0
+ dimension_x = 46
+ center = TRUE
+ dimension_y = 34
+
+/datum/sprite_accessory/wings/dragon
+ name = "Dragon"
+ icon_state = "dragon"
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+ locked = TRUE
+
+/datum/sprite_accessory/wings_open/dragon
+ name = "Dragon"
+ icon_state = "dragon"
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+
+/datum/sprite_accessory/wings/megamoth
+ name = "Megamoth"
+ icon_state = "megamoth"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+ locked = TRUE
+
+/datum/sprite_accessory/wings_open/megamoth
+ name = "Megamoth"
+ icon_state = "megamoth"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+
+/datum/sprite_accessory/wings/mothra
+ name = "Mothra"
+ icon_state = "mothra"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+ locked = TRUE
+
+/datum/sprite_accessory/wings_open/mothra
+ name = "Mothra"
+ icon_state = "mothra"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+
+/datum/sprite_accessory/wings/skeleton
+ name = "Skeleton"
+ icon_state = "skele"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+ locked = TRUE
+
+/datum/sprite_accessory/wings_open/skeleton
+ name = "Skeleton"
+ icon_state = "skele"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+
+/datum/sprite_accessory/wings/robotic
+ name = "Robotic"
+ icon_state = "robotic"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+ locked = TRUE
+
+/datum/sprite_accessory/wings_open/robotic
+ name = "Robotic"
+ icon_state = "robotic"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+
+/datum/sprite_accessory/wings/fly
+ name = "Fly"
+ icon_state = "fly"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+ locked = TRUE
+
+/datum/sprite_accessory/wings_open/fly
+ name = "Fly"
+ icon_state = "fly"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+
// Decorative wings
/datum/sprite_accessory/deco_wings
@@ -43,6 +144,10 @@
color_src = WINGCOLOR
mutant_part_string = "insect_wings"
relevant_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
+ var/list/upgrade_to = list() //What the wings change to if the mob consumes a flight potion or gains true wings through other means. If it's an empty list, it will pick the species alternative instead.
+
+/datum/sprite_accessory/deco_wings/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
+ return (H.dna.features["wings"] != "None") //true wings will override decorative wings
/datum/sprite_accessory/deco_wings/none
name = "None"
@@ -57,162 +162,201 @@
center = TRUE
dimension_y = 34
relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
+ upgrade_to = SPECIES_WINGS_ANGEL //obviously
//nonmoth wings
/datum/sprite_accessory/deco_wings/bat
name = "Bat"
icon_state = "bat"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/deco_wings/bee
name = "Bee"
icon_state = "bee"
+ upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/deco_wings/bee2
name = "Small Bee"
icon_state = "beewings"
+ upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/deco_wings/dragon
name = "Dragon"
icon_state = "dragon"
+ upgrade_to = SPECIES_WINGS_DRAGON //lol
/datum/sprite_accessory/deco_wings/dragonfly
name = "Dragonfly"
icon_state = "dragonfly"
+ upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/deco_wings/fairy
name = "Fairy"
icon_state = "fairy"
+ upgrade_to = SPECIES_WINGS_INSECT //rip people's sparkly wings until someone sprites in some huge fairy wings or something
/datum/sprite_accessory/deco_wings/featheredwing
name = "Feathery"
icon_state = "feathery"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/deco_wings/featheredwingmedium
name = "Medium Feathered"
icon_state = "feathered3"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/deco_wings/featheredwinglarge
name = "Large Feathered"
icon_state = "feathered2"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/deco_wings/harpywings
name = "Harpy"
icon_state = "harpywings"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/deco_wings/roboticwing
name = "Robotic"
icon_state = "drago"
+ upgrade_to = SPECIES_WINGS_ROBOT
/datum/sprite_accessory/deco_wings/succubusblack
name = "Succubus Black"
icon_state = "succubusblack"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/deco_wings/succubuspurple
name = "Succubus Purple"
icon_state = "succubuspurple"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/deco_wings/succubusred
name = "Succubus Red"
icon_state = "succubusred"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/deco_wings/xenobackplate
name = "Xenomorph Backplate"
icon_state = "snagbackplate"
+ upgrade_to = list()
//moth wings
/datum/sprite_accessory/deco_wings/atlas
name = "Atlas"
icon_state = "atlas"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/brown
name = "Brown"
icon_state = "brown"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/deathhead
name = "Deathshead"
icon_state = "deathhead"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/featherymoth
name = "Feathery Moth Wings"
icon_state = "featherymoth"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/firewatch
name = "Firewatch"
icon_state = "firewatch"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/gothic
name = "Gothic"
icon_state = "gothic"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/jungle
name = "Jungle"
icon_state = "jungle"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/lovers
name = "Lovers"
icon_state = "lovers"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/luna
name = "Luna"
icon_state = "luna"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/monarch
name = "Monarch"
icon_state = "monarch"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/moonfly
name = "Moon Fly"
icon_state = "moonfly"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/oakworm
name = "Oak Worm"
icon_state = "oakworm"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/plain
name = "Plain"
icon_state = "plain"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/plasmafire
name = "Plasma Fire"
icon_state = "plasmafire"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/poison
name = "Poison"
icon_state = "poison"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/punished
name = "Burnt Off"
icon_state = "punished"
+ upgrade_to = SPECIES_WINGS_MOTH //through TG code moth wings aren't meant to get upgraded if they're burnt off but...
/datum/sprite_accessory/deco_wings/ragged
name = "Ragged"
icon_state = "ragged"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/reddish
name = "Reddish"
icon_state = "redish"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/rosy
name = "Rosy"
icon_state = "rosy"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/royal
name = "Royal"
icon_state = "royal"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/snow
name = "Snow"
icon_state = "snow"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/whitefly
name = "White Fly"
icon_state = "whitefly"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/witchwing
name = "Witch Wing"
icon_state = "witchwing"
+ upgrade_to = SPECIES_WINGS_MOTH
//INSECT WINGS
@@ -220,67 +364,86 @@
icon = 'icons/mob/wings.dmi'
color_src = WINGCOLOR
relevant_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
+ var/list/upgrade_to = list()
+
+/datum/sprite_accessory/insect_wings/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
+ return (H.dna.features["wings"] != "None") //true wings will override decorative wings
//non insect wings
-/datum/sprite_accessory/deco_wings/bat
+/datum/sprite_accessory/insect_wings/bat
name = "Bat"
icon_state = "bat"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/insect_wings/bee
name = "Bee"
icon_state = "bee"
+ upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/insect_wings/bee2
name = "Small Bee"
icon_state = "beewings"
+ upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/insect_wings/dragon
name = "Dragon"
icon_state = "dragon"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/insect_wings/dragonfly
name = "Dragonfly"
icon_state = "dragonfly"
+ upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/insect_wings/fairy
name = "Fairy"
icon_state = "fairy"
+ upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/insect_wings/featheredwing
name = "Feathery"
icon_state = "feathery"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/insect_wings/featheredwingmedium
name = "Medium Feathered"
icon_state = "feathered3"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/insect_wings/featheredwinglarge
name = "Large Feathered"
icon_state = "feathered2"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/insect_wings/harpywings
name = "Harpy"
icon_state = "harpywings"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/insect_wings/roboticwing
name = "Robotic"
icon_state = "drago"
+ upgrade_to = SPECIES_WINGS_ROBOT
/datum/sprite_accessory/insect_wings/succubusblack
name = "Succubus Black"
icon_state = "succubusblack"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/insect_wings/succubuspurple
name = "Succubus Purple"
icon_state = "succubuspurple"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/insect_wings/succubusred
name = "Succubus Red"
icon_state = "succubusred"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/insect_wings/xenobackplate
name = "Xenomorph Backplate"
icon_state = "snagbackplate"
+ upgrade_to = list()
//moth wings
@@ -288,98 +451,122 @@
name = "None"
icon_state = "none"
relevant_layers = null
+ upgrade_to = list()
/datum/sprite_accessory/insect_wings/atlas
name = "Atlas"
icon_state = "atlas"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/brown
name = "Brown"
icon_state = "brown"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/deathhead
name = "Deathshead"
icon_state = "deathhead"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/featherymoth
name = "Feathery Moth Wings"
icon_state = "featherymoth"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/firewatch
name = "Firewatch"
icon_state = "firewatch"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/gothic
name = "Gothic"
icon_state = "gothic"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/jungle
name = "Jungle"
icon_state = "jungle"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/lovers
name = "Lovers"
icon_state = "lovers"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/luna
name = "Luna"
icon_state = "luna"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/monarch
name = "Monarch"
icon_state = "monarch"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/moonfly
name = "Moon Fly"
icon_state = "moonfly"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/oakworm
name = "Oak Worm"
icon_state = "oakworm"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/plain
name = "Plain"
icon_state = "plain"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/plasmafire
name = "Plasma Fire"
icon_state = "plasmafire"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/poison
name = "Poison"
icon_state = "poison"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/punished
name = "Burnt Off"
icon_state = "punished"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/ragged
name = "Ragged"
icon_state = "ragged"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/reddish
name = "Reddish"
icon_state = "redish"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/rosy
name = "Rosy"
icon_state = "rosy"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/royal
name = "Royal"
icon_state = "royal"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/snow
name = "Snow"
icon_state = "snow"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/whitefly
name = "White Fly"
icon_state = "whitefly"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/witchwing
name = "Witch Wing"
icon_state = "witchwing"
+ upgrade_to = SPECIES_WINGS_MOTH
//insect markings
/datum/sprite_accessory/insect_markings // Extra markings for insects ported from tg.
@@ -453,9 +640,11 @@
/datum/sprite_accessory/deco_wings/eyestalks
name = "gazer eyestalks"
icon_state = "eyestalks"
+ upgrade_to = list() //and suddenly flight potions become a lot more awkward when they gouge your tentacle eyes out.
//ckeys_allowed = list("liquidfirefly","seiga") //At request.
/datum/sprite_accessory/insect_wings/eyestalks
name = "gazer eyestalks"
icon_state = "eyestalks"
+ upgrade_to = list()
//ckeys_allowed = list("liquidfirefly","seiga") //At request.
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 67a95006ab..849bbb9e38 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -182,7 +182,7 @@
held_items[hand_index] = I
I.layer = ABOVE_HUD_LAYER
I.plane = ABOVE_HUD_PLANE
- I.equipped(src, SLOT_HANDS)
+ I.equipped(src, ITEM_SLOT_HANDS)
if(I.pulledby)
I.pulledby.stop_pulling()
update_inv_hands()
@@ -375,14 +375,14 @@
if(!slot_priority)
slot_priority = list( \
- SLOT_BACK, SLOT_WEAR_ID,\
- SLOT_W_UNIFORM, SLOT_WEAR_SUIT,\
- SLOT_WEAR_MASK, SLOT_HEAD, SLOT_NECK,\
- SLOT_SHOES, SLOT_GLOVES,\
- SLOT_EARS, SLOT_GLASSES,\
- SLOT_BELT, SLOT_S_STORE,\
- SLOT_L_STORE, SLOT_R_STORE,\
- SLOT_GENERC_DEXTROUS_STORAGE\
+ ITEM_SLOT_BACK, ITEM_SLOT_ID,\
+ ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\
+ ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_NECK,\
+ ITEM_SLOT_FEET, ITEM_SLOT_GLOVES,\
+ ITEM_SLOT_EARS, ITEM_SLOT_EYES,\
+ ITEM_SLOT_BELT, ITEM_SLOT_SUITSTORE,\
+ ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET,\
+ ITEM_SLOT_DEX_STORAGE\
)
for(var/slot in slot_priority)
@@ -424,7 +424,7 @@
if(M.active_storage && M.active_storage.parent && SEND_SIGNAL(M.active_storage.parent, COMSIG_TRY_STORAGE_INSERT, src,M))
return TRUE
- var/list/obj/item/possible = list(M.get_inactive_held_item(), M.get_item_by_slot(SLOT_BELT), M.get_item_by_slot(SLOT_GENERC_DEXTROUS_STORAGE), M.get_item_by_slot(SLOT_BACK))
+ var/list/obj/item/possible = list(M.get_inactive_held_item(), M.get_item_by_slot(ITEM_SLOT_BELT), M.get_item_by_slot(ITEM_SLOT_DEX_STORAGE), M.get_item_by_slot(ITEM_SLOT_BACK))
for(var/i in possible)
if(!i)
continue
@@ -446,10 +446,10 @@
//used in code for items usable by both carbon and drones, this gives the proper back slot for each mob.(defibrillator, backpack watertank, ...)
/mob/proc/getBackSlot()
- return SLOT_BACK
+ return ITEM_SLOT_BACK
/mob/proc/getBeltSlot()
- return SLOT_BELT
+ return ITEM_SLOT_BELT
diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm
index ca2946fd8a..7dedf5a739 100644
--- a/code/modules/mob/living/carbon/alien/special/facehugger.dm
+++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm
@@ -172,7 +172,7 @@
if(target.dropItemToGround(W))
target.visible_message("[src] tears [W] off of [target]'s face!", \
"[src] tears [W] off of [target]'s face!")
- target.equip_to_slot_if_possible(src, SLOT_WEAR_MASK, 0, 1, 1)
+ target.equip_to_slot_if_possible(src, ITEM_SLOT_MASK, 0, 1, 1)
return TRUE // time for a smoke
/obj/item/clothing/mask/facehugger/proc/Attach(mob/living/M)
@@ -259,7 +259,7 @@
return 1
var/mob/living/carbon/C = M
- if(ishuman(C) && !(SLOT_WEAR_MASK in C.dna.species.no_equip))
+ if(ishuman(C) && !(ITEM_SLOT_MASK in C.dna.species.no_equip))
var/mob/living/carbon/human/H = C
if(H.is_mouth_covered(head_only = 1))
return FALSE
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 61839ce123..cc17928a98 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -261,7 +261,7 @@
// too soon.
var/buckle_cd = 600
if(handcuffed)
- var/obj/item/restraints/O = src.get_item_by_slot(SLOT_HANDCUFFED)
+ var/obj/item/restraints/O = src.get_item_by_slot(ITEM_SLOT_HANDCUFFED)
buckle_cd = O.breakouttime
MarkResistTime()
visible_message("[src] attempts to unbuckle [p_them()]self!", \
@@ -845,16 +845,16 @@
update_inv_handcuffed()
update_hud_handcuffed()
-/mob/living/carbon/proc/can_defib()
+/mob/living/carbon/proc/can_revive(ignore_timelimit = FALSE, maximum_brute_dam = MAX_REVIVE_BRUTE_DAMAGE, maximum_fire_dam = MAX_REVIVE_FIRE_DAMAGE, ignore_heart = FALSE)
var/tlimit = DEFIB_TIME_LIMIT * 10
var/obj/item/organ/heart = getorgan(/obj/item/organ/heart)
if(suiciding || hellbound || HAS_TRAIT(src, TRAIT_HUSK) || AmBloodsucker(src))
return
- if((world.time - timeofdeath) > tlimit)
+ if(!ignore_timelimit && (world.time - timeofdeath) > tlimit)
return
- if((getBruteLoss() >= MAX_REVIVE_BRUTE_DAMAGE) || (getFireLoss() >= MAX_REVIVE_FIRE_DAMAGE))
+ if((getBruteLoss() >= maximum_brute_dam) || (getFireLoss() >= maximum_fire_dam))
return
- if(!heart || (heart.organ_flags & ORGAN_FAILING))
+ if(!ignore_heart && (!heart || (heart.organ_flags & ORGAN_FAILING)))
return
var/obj/item/organ/brain/BR = getorgan(/obj/item/organ/brain)
if(QDELETED(BR) || BR.brain_death || (BR.organ_flags & ORGAN_FAILING) || suiciding)
@@ -1137,15 +1137,15 @@
/mob/living/carbon/check_obscured_slots()
if(head)
if(head.flags_inv & HIDEMASK)
- LAZYOR(., SLOT_WEAR_MASK)
+ LAZYOR(., ITEM_SLOT_MASK)
if(head.flags_inv & HIDEEYES)
- LAZYOR(., SLOT_GLASSES)
+ LAZYOR(., ITEM_SLOT_EYES)
if(head.flags_inv & HIDEEARS)
- LAZYOR(., SLOT_EARS)
+ LAZYOR(., ITEM_SLOT_EARS)
if(wear_mask)
if(wear_mask.flags_inv & HIDEEYES)
- LAZYOR(., SLOT_GLASSES)
+ LAZYOR(., ITEM_SLOT_EYES)
// if any of our bodyparts are bleeding
/mob/living/carbon/proc/is_bleeding()
diff --git a/code/modules/mob/living/carbon/carbon_stripping.dm b/code/modules/mob/living/carbon/carbon_stripping.dm
index 45ff02f0d5..afbd6edaeb 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_HEAD
+ item_slot = ITEM_SLOT_HEAD
/datum/strippable_item/mob_item_slot/back
key = STRIPPABLE_ITEM_BACK
- item_slot = SLOT_BACK
+ item_slot = ITEM_SLOT_BACK
/datum/strippable_item/mob_item_slot/back/get_alternate_action(atom/source, mob/user)
if(..() == FALSE)
@@ -18,15 +18,15 @@
/datum/strippable_item/mob_item_slot/mask
key = STRIPPABLE_ITEM_MASK
- item_slot = SLOT_WEAR_MASK
+ item_slot = ITEM_SLOT_MASK
/datum/strippable_item/mob_item_slot/neck
key = STRIPPABLE_ITEM_NECK
- item_slot = SLOT_NECK
+ item_slot = ITEM_SLOT_NECK
/datum/strippable_item/mob_item_slot/handcuffs
key = STRIPPABLE_ITEM_HANDCUFFS
- item_slot = SLOT_HANDCUFFED
+ item_slot = ITEM_SLOT_HANDCUFFED
/datum/strippable_item/mob_item_slot/handcuffs/should_show(atom/source, mob/user)
if (!iscarbon(source))
@@ -41,7 +41,7 @@
/datum/strippable_item/mob_item_slot/legcuffs
key = STRIPPABLE_ITEM_LEGCUFFS
- item_slot = SLOT_LEGCUFFED
+ item_slot = ITEM_SLOT_LEGCUFFED
/datum/strippable_item/mob_item_slot/legcuffs/should_show(atom/source, mob/user)
if (!iscarbon(source))
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index c3fb82de36..32a4fac90f 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -31,7 +31,7 @@
. += "[t_He] [t_is] a [spec_trait_examine_font()][dna.custom_species ? dna.custom_species : dna.species.name]!"
//uniform
- if(w_uniform && !(SLOT_W_UNIFORM in obscured))
+ if(w_uniform && !(ITEM_SLOT_ICLOTHING in obscured))
//accessory
var/accessory_msg
if(istype(w_uniform, /obj/item/clothing/under))
@@ -47,7 +47,7 @@
if(wear_suit && !(wear_suit.obj_flags & EXAMINE_SKIP))
. += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)]."
//suit/armor storage
- if(s_store && !(SLOT_S_STORE in obscured))
+ if(s_store && !(ITEM_SLOT_SUITSTORE in obscured))
. += "[t_He] [t_is] carrying [s_store.get_examine_string(user)] on [t_his] [wear_suit.name]."
//back
if(back)
@@ -59,7 +59,7 @@
. += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))]."
//gloves
- if(gloves && !(SLOT_GLOVES in obscured))
+ if(gloves && !(ITEM_SLOT_GLOVES in obscured))
. += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands."
else if(length(blood_DNA))
var/hand_number = get_num_arms(FALSE)
@@ -78,18 +78,18 @@
. += "[t_He] [t_has] [belt.get_examine_string(user)] about [t_his] waist."
//shoes
- if(shoes && !(SLOT_SHOES in obscured))
+ if(shoes && !(ITEM_SLOT_FEET in obscured))
. += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet."
//mask
- if(wear_mask && !(SLOT_WEAR_MASK in obscured))
+ if(wear_mask && !(ITEM_SLOT_MASK in obscured))
. += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face."
- if(wear_neck && !(SLOT_NECK in obscured))
+ if(wear_neck && !(ITEM_SLOT_NECK in obscured))
. += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck."
//eyes
- if(!(SLOT_GLASSES in obscured))
+ if(!(ITEM_SLOT_EYES in obscured))
if(glasses)
. += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes."
else if((left_eye_color == BLOODCULT_EYE || right_eye_color == BLOODCULT_EYE) && iscultist(src) && HAS_TRAIT(src, TRAIT_CULT_EYES))
@@ -100,7 +100,7 @@
. += "[t_His] eyes are flickering a bright yellow!"
//ears
- if(ears && !(SLOT_EARS in obscured))
+ if(ears && !(ITEM_SLOT_EARS in obscured))
. += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] ears."
//ID
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 4fc60cc6ac..0f149928df 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -372,11 +372,11 @@
. = ..()
if(wear_suit)
if(wear_suit.flags_inv & HIDEGLOVES)
- LAZYOR(., SLOT_GLOVES)
+ LAZYOR(., ITEM_SLOT_GLOVES)
if(wear_suit.flags_inv & HIDEJUMPSUIT)
- LAZYOR(., SLOT_W_UNIFORM)
+ LAZYOR(., ITEM_SLOT_ICLOTHING)
if(wear_suit.flags_inv & HIDESHOES)
- LAZYOR(., SLOT_SHOES)
+ LAZYOR(., ITEM_SLOT_FEET)
/mob/living/carbon/human/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null)
if(judgement_criteria & JUDGE_EMAGGED)
@@ -942,15 +942,15 @@
. += "[t_He] [t_is] a [spec_trait_examine_font()][dna.custom_species ? dna.custom_species : dna.species.name]"
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, usr, .)
+/mob/living/carbon/human/chestonly
+ bodyparts = list(/obj/item/bodypart/chest)
+
/mob/living/carbon/human/species/abductor
race = /datum/species/abductor
/mob/living/carbon/human/species/android
race = /datum/species/android
-/mob/living/carbon/human/species/angel
- race = /datum/species/angel
-
/mob/living/carbon/human/species/corporate
race = /datum/species/corporate
diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm
index 6197241ef3..cd05e06731 100644
--- a/code/modules/mob/living/carbon/human/human_stripping.dm
+++ b/code/modules/mob/living/carbon/human/human_stripping.dm
@@ -35,15 +35,15 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/eyes
key = STRIPPABLE_ITEM_EYES
- item_slot = SLOT_GLASSES
+ item_slot = ITEM_SLOT_EYES
/datum/strippable_item/mob_item_slot/ears
key = STRIPPABLE_ITEM_EARS
- item_slot = SLOT_EARS
+ item_slot = ITEM_SLOT_EARS
/datum/strippable_item/mob_item_slot/jumpsuit
key = STRIPPABLE_ITEM_JUMPSUIT
- item_slot = SLOT_W_UNIFORM
+ item_slot = ITEM_SLOT_ICLOTHING
/datum/strippable_item/mob_item_slot/jumpsuit/get_alternate_action(atom/source, mob/user)
if(..() == FALSE)
@@ -75,7 +75,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/suit
key = STRIPPABLE_ITEM_SUIT
- item_slot = SLOT_WEAR_SUIT
+ item_slot = ITEM_SLOT_OCLOTHING
/datum/strippable_item/mob_item_slot/suit/get_alternate_action(atom/source, mob/user)
if(..() == FALSE)
@@ -108,11 +108,11 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/gloves
key = STRIPPABLE_ITEM_GLOVES
- item_slot = SLOT_GLOVES
+ item_slot = ITEM_SLOT_GLOVES
/datum/strippable_item/mob_item_slot/feet
key = STRIPPABLE_ITEM_FEET
- item_slot = SLOT_SHOES
+ item_slot = ITEM_SLOT_FEET
/datum/strippable_item/mob_item_slot/feet/get_alternate_action(atom/source, mob/user)
if(..() == FALSE)
@@ -141,7 +141,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/suit_storage
key = STRIPPABLE_ITEM_SUIT_STORAGE
- item_slot = SLOT_S_STORE
+ item_slot = ITEM_SLOT_SUITSTORE
/datum/strippable_item/mob_item_slot/suit_storage/get_alternate_action(atom/source, mob/user)
if(..() == FALSE)
@@ -155,11 +155,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_WEAR_ID
+ item_slot = ITEM_SLOT_ID
/datum/strippable_item/mob_item_slot/belt
key = STRIPPABLE_ITEM_BELT
- item_slot = SLOT_BELT
+ item_slot = ITEM_SLOT_BELT
/datum/strippable_item/mob_item_slot/belt/get_alternate_action(atom/source, mob/user)
if(..() == FALSE)
@@ -212,12 +212,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_L_STORE
+ item_slot = ITEM_SLOT_LPOCKET
pocket_side = "left"
/datum/strippable_item/mob_item_slot/pocket/right
key = STRIPPABLE_ITEM_RPOCKET
- item_slot = SLOT_R_STORE
+ item_slot = ITEM_SLOT_RPOCKET
pocket_side = "right"
/proc/get_strippable_alternate_action_internals(obj/item/item, atom/source)
diff --git a/code/modules/mob/living/carbon/human/innate_abilities/coiling.dm b/code/modules/mob/living/carbon/human/innate_abilities/coiling.dm
new file mode 100644
index 0000000000..52e2a87a7d
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/innate_abilities/coiling.dm
@@ -0,0 +1,89 @@
+
+/datum/action/innate/ability/coiling
+ name = "Coil Grabbed Mob"
+ check_flags = AB_CHECK_CONSCIOUS
+ button_icon_state = "coil_icon"
+ icon_icon = 'icons/mob/actions/actions_snake.dmi'
+ background_icon_state = "bg_alien"
+ required_mobility_flags = MOBILITY_STAND
+ var/currently_coiling = FALSE
+ var/mob/living/carbon/human/currently_coiled
+ var/mutable_appearance/tracked_overlay
+
+/datum/action/innate/ability/coiling/Activate()
+ // make sure they meet the mobility/check flags
+ if(IsAvailable())
+ // check that the user has grabbed someone and they are not currently coiling someone
+ if(ishuman(owner.pulling) && !currently_coiling)
+ coil_mob(owner.pulling)
+
+/datum/action/innate/ability/coiling/proc/update_coil_offset(atom/source, old_dir, new_dir)
+ // update the coiling offset on the coiled user depending on the way the owner is facing
+ switch(new_dir)
+ if(NORTH)
+ currently_coiled.pixel_x = -12
+ if(EAST)
+ currently_coiled.pixel_x = -12
+ if(SOUTH)
+ currently_coiled.pixel_x = 12
+ if(WEST)
+ currently_coiled.pixel_x = 12
+
+/datum/action/innate/ability/coiling/proc/coil_mob(var/mob/living/carbon/human/H)
+ // begin the coiling action
+ H.visible_message("[owner] coils [H] with their tail!", \
+ "[owner] coils you with their tail!")
+ currently_coiling = TRUE
+ currently_coiled = H
+
+ H.layer -= 0.1 // LISTEN I HATE TOUCHING MOB LAYERS TOO BUT THIS IS JUST SO THEY RENDER UNDER THE OTHER PLAYER SDFHSDFHDSFHDSH
+
+ // move user to same tile
+ H.forceMove(get_turf(owner))
+
+ // cancel the coiling action if certain things are done
+ RegisterSignal(owner, COMSIG_MOVABLE_MOVED, .proc/cancel_coil)
+ RegisterSignal(owner, COMSIG_LIVING_RESTING, .proc/cancel_coil)
+ RegisterSignal(owner, COMSIG_LIVING_STOPPED_PULLING, .proc/cancel_coil)
+
+ // update the coil offset, update again if owner changes direction
+ RegisterSignal(owner, COMSIG_ATOM_DIR_CHANGE, .proc/update_coil_offset)
+ update_coil_offset(null, null, owner.dir)
+
+ // set our overlay to new image
+ var/mob/living/carbon/human/user = owner
+ user.dna.species.mutant_bodyparts["taur"] = "Naga (coiled)"
+ user.dna.features["taur"] = "Naga (coiled)"
+ user.update_mutant_bodyparts()
+
+/datum/action/innate/ability/coiling/proc/cancel_coil()
+ var/mob/living/carbon/human/H = owner
+
+ // cancel the coiling action by removing the overlay
+ currently_coiled.pixel_x = 0
+
+ currently_coiling = FALSE
+ currently_coiled = null
+
+ // unregister signals
+ UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
+ UnregisterSignal(owner, COMSIG_LIVING_RESTING)
+ UnregisterSignal(owner, COMSIG_LIVING_STOPPED_PULLING)
+ UnregisterSignal(owner, COMSIG_ATOM_DIR_CHANGE)
+
+ // change overlay back to original image
+ H.dna.species.mutant_bodyparts["taur"] = "Naga"
+ H.dna.features["taur"] = "Naga"
+ H.update_mutant_bodyparts()
+
+ H.update_body()
+
+ H.layer += 0.1
+
+ // remove the added overlay
+ owner.cut_overlay(tracked_overlay)
+ tracked_overlay = null
+
+/datum/action/innate/ability/coiling/Remove(mob/M)
+ cancel_coil()
+ ..(M)
diff --git a/code/modules/mob/living/carbon/human/innate_abilities/customization.dm b/code/modules/mob/living/carbon/human/innate_abilities/customization.dm
index 363f6ecbb2..463cdfde1e 100644
--- a/code/modules/mob/living/carbon/human/innate_abilities/customization.dm
+++ b/code/modules/mob/living/carbon/human/innate_abilities/customization.dm
@@ -135,6 +135,8 @@
var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path]
if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance
+ if(S.ignore)
+ continue
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
snowflake_taur_list[S.name] = path
var/new_taur
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 199a6b44be..4c30a1d742 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -17,39 +17,39 @@
// Return the item currently in the slot ID
/mob/living/carbon/human/get_item_by_slot(slot_id)
switch(slot_id)
- if(SLOT_BACK)
+ if(ITEM_SLOT_BACK)
return back
- if(SLOT_WEAR_MASK)
+ if(ITEM_SLOT_MASK)
return wear_mask
- if(SLOT_NECK)
+ if(ITEM_SLOT_NECK)
return wear_neck
- if(SLOT_HANDCUFFED)
+ if(ITEM_SLOT_HANDCUFFED)
return handcuffed
- if(SLOT_LEGCUFFED)
+ if(ITEM_SLOT_LEGCUFFED)
return legcuffed
- if(SLOT_BELT)
+ if(ITEM_SLOT_BELT)
return belt
- if(SLOT_WEAR_ID)
+ if(ITEM_SLOT_ID)
return wear_id
- if(SLOT_EARS)
+ if(ITEM_SLOT_EARS)
return ears
- if(SLOT_GLASSES)
+ if(ITEM_SLOT_EYES)
return glasses
- if(SLOT_GLOVES)
+ if(ITEM_SLOT_GLOVES)
return gloves
- if(SLOT_HEAD)
+ if(ITEM_SLOT_HEAD)
return head
- if(SLOT_SHOES)
+ if(ITEM_SLOT_FEET)
return shoes
- if(SLOT_WEAR_SUIT)
+ if(ITEM_SLOT_OCLOTHING)
return wear_suit
- if(SLOT_W_UNIFORM)
+ if(ITEM_SLOT_ICLOTHING)
return w_uniform
- if(SLOT_L_STORE)
+ if(ITEM_SLOT_LPOCKET)
return l_store
- if(SLOT_R_STORE)
+ if(ITEM_SLOT_RPOCKET)
return r_store
- if(SLOT_S_STORE)
+ if(ITEM_SLOT_SUITSTORE)
return s_store
return null
@@ -98,17 +98,17 @@
var/not_handled = FALSE //Added in case we make this type path deeper one day
switch(slot)
- if(SLOT_BELT)
+ if(ITEM_SLOT_BELT)
belt = I
update_inv_belt()
- if(SLOT_WEAR_ID)
+ if(ITEM_SLOT_ID)
wear_id = I
sec_hud_set_ID()
update_inv_wear_id()
- if(SLOT_EARS)
+ if(ITEM_SLOT_EARS)
ears = I
update_inv_ears()
- if(SLOT_GLASSES)
+ if(ITEM_SLOT_EYES)
glasses = I
var/obj/item/clothing/glasses/G = I
if(G.glass_colour_type)
@@ -121,13 +121,13 @@
if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha))
update_sight()
update_inv_glasses()
- if(SLOT_GLOVES)
+ if(ITEM_SLOT_GLOVES)
gloves = I
update_inv_gloves()
- if(SLOT_SHOES)
+ if(ITEM_SLOT_FEET)
shoes = I
update_inv_shoes()
- if(SLOT_WEAR_SUIT)
+ if(ITEM_SLOT_OCLOTHING)
wear_suit = I
if(I.flags_inv & HIDEJUMPSUIT)
update_inv_w_uniform()
@@ -135,17 +135,17 @@
stop_pulling() //can't pull if restrained
update_action_buttons_icon() //certain action buttons will no longer be usable.
update_inv_wear_suit()
- if(SLOT_W_UNIFORM)
+ if(ITEM_SLOT_ICLOTHING)
w_uniform = I
update_suit_sensors()
update_inv_w_uniform()
- if(SLOT_L_STORE)
+ if(ITEM_SLOT_LPOCKET)
l_store = I
update_inv_pockets()
- if(SLOT_R_STORE)
+ if(ITEM_SLOT_RPOCKET)
r_store = I
update_inv_pockets()
- if(SLOT_S_STORE)
+ if(ITEM_SLOT_SUITSTORE)
s_store = I
update_inv_s_store()
else
@@ -296,7 +296,7 @@
if(incapacitated())
return
var/obj/item/thing = get_active_held_item()
- var/obj/item/equipped_back = get_item_by_slot(SLOT_BACK)
+ var/obj/item/equipped_back = get_item_by_slot(ITEM_SLOT_BACK)
if(!equipped_back) // We also let you equip a backpack like this
if(!thing)
to_chat(src, "You have no backpack to take something out of!")
@@ -327,7 +327,7 @@
if(incapacitated())
return
var/obj/item/thing = get_active_held_item()
- var/obj/item/equipped_belt = get_item_by_slot(SLOT_BELT)
+ var/obj/item/equipped_belt = get_item_by_slot(ITEM_SLOT_BELT)
if(!equipped_belt) // We also let you equip a belt like this
if(!thing)
to_chat(src, "You have no belt to take something out of!")
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 22e97290ad..ee98288c5d 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -142,6 +142,15 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
/// A path to an outfit that is important for species life e.g. plasmaman outfit
var/datum/outfit/outfit_important_for_life
+ ///Is this species a flying species? Used as an easy check for some things
+ var/flying_species = FALSE
+ ///The actual flying ability given to flying species
+ var/datum/action/innate/flight/fly
+ ///Current wings icon
+ var/wings_icon = "Angel"
+ //Dictates which wing icons are allowed for a given species. If count is >1 a radial menu is used to choose between all icons in list
+ var/list/wings_icons = SPECIES_WINGS_ANGEL
+
///Species-only traits. Can be found in [code/__DEFINES/DNA.dm]
var/list/species_traits = list(HAS_FLESH,HAS_BONE) //by default they can scar and have bones/flesh unless set to something else
///Generic traits tied to having the species.
@@ -495,6 +504,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
for(var/datum/disease/A in C.diseases)
A.cure(FALSE)
+ if(flying_species && isnull(fly))
+ fly = new
+ fly.Grant(C)
+
if(ishuman(C))
var/mob/living/carbon/human/H = C
if(NOGENITALS in H.dna.species.species_traits)
@@ -569,6 +582,16 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(F)
qdel(F)
+ if(flying_species)
+ if(C.movement_type & FLYING)
+ ToggleFlight(C)
+ fly.Remove(C)
+ QDEL_NULL(fly)
+ if(C.dna && C.dna.species && (C.dna.features["wings"] == wings_icon))
+ if("wings" in C.dna.species.mutant_bodyparts)
+ C.dna.species.mutant_bodyparts -= "wings"
+ C.dna.features["wings"] = "None"
+ C.update_body()
if(ROBOTIC_LIMBS in species_traits)
for(var/obj/item/bodypart/B in C.bodyparts)
@@ -589,7 +612,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(Q.type in blacklisted_quirks)
removed_quirks += Q.type
. += 1
- qdel(Q)
+ qdel(Q)
else
var/point_overhead = 0
for(var/datum/quirk/Q as anything in C.roundstart_quirks)
@@ -883,6 +906,22 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/tauric = mutant_bodyparts["taur"] && H.dna.features["taur"] && H.dna.features["taur"] != "None"
+ // stuff for adding/removing the coiling ability if you have a taur part
+ // if another action is ever based on mutant parts we should probably make a system for it so it's all done in one proc with less overhead
+ var/datum/action/found_action
+
+ for(var/datum/action/A in H.actions)
+ if(A.type == /datum/action/innate/ability/coiling)
+ found_action = A
+
+ if(found_action && (!tauric || (H.dna.features["taur"] != "Naga" && H.dna.features["taur"] != "Naga (coiled)")))
+ found_action.Remove(H)
+
+ if(!found_action && tauric && H.dna.features["taur"] == "Naga")
+ found_action = new /datum/action/innate/ability/coiling()
+ found_action.Grant(H)
+
+
for(var/mutant_part in mutant_bodyparts)
var/reference_list = GLOB.mutant_reference_list[mutant_part]
if(reference_list)
@@ -1186,6 +1225,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
return move_trail */
/datum/species/proc/spec_life(mob/living/carbon/human/H)
+ if(flying_species) //turns off flight automatically if they can't.
+ HandleFlight(H)
if(HAS_TRAIT(H, TRAIT_NOBREATH))
H.setOxyLoss(0)
H.losebreath = 0
@@ -1195,7 +1236,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(!HAS_TRAIT(H, TRAIT_ROBOTIC_ORGANISM))
H.adjustBruteLoss(1)
else
- H.adjustFireLoss(1) //Robots melt instead of taking brute.
+ H.adjustFireLoss(1) //Robots melt instead of taking brute.
/datum/species/proc/spec_death(gibbed, mob/living/carbon/human/H)
if(H)
@@ -1219,11 +1260,11 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/num_legs = H.get_num_legs(FALSE)
switch(slot)
- if(SLOT_HANDS)
+ if(ITEM_SLOT_HANDS)
if(H.get_empty_held_indexes())
return TRUE
return FALSE
- if(SLOT_WEAR_MASK)
+ if(ITEM_SLOT_MASK)
if(H.wear_mask)
return FALSE
if(!(I.slot_flags & ITEM_SLOT_MASK))
@@ -1231,25 +1272,25 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(!H.get_bodypart(BODY_ZONE_HEAD))
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
- if(SLOT_NECK)
+ if(ITEM_SLOT_NECK)
if(H.wear_neck)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_NECK) )
return FALSE
return TRUE
- if(SLOT_BACK)
+ if(ITEM_SLOT_BACK)
if(H.back)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_BACK) )
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
- if(SLOT_WEAR_SUIT)
+ if(ITEM_SLOT_OCLOTHING)
if(H.wear_suit)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_OCLOTHING) )
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
- if(SLOT_GLOVES)
+ if(ITEM_SLOT_GLOVES)
if(H.gloves)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_GLOVES) )
@@ -1257,7 +1298,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(num_arms < 2)
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
- if(SLOT_SHOES)
+ if(ITEM_SLOT_FEET)
if(H.shoes)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_FEET) )
@@ -1270,7 +1311,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
else
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
- if(SLOT_BELT)
+ if(ITEM_SLOT_BELT)
if(H.belt)
return FALSE
if(!(I.item_flags & NO_UNIFORM_REQUIRED))
@@ -1282,7 +1323,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(!(I.slot_flags & ITEM_SLOT_BELT))
return
return equip_delay_self_check(I, H, bypass_equip_delay_self)
- if(SLOT_GLASSES)
+ if(ITEM_SLOT_EYES)
if(H.glasses)
return FALSE
if(!(I.slot_flags & ITEM_SLOT_EYES))
@@ -1290,7 +1331,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(!H.get_bodypart(BODY_ZONE_HEAD))
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
- if(SLOT_HEAD)
+ if(ITEM_SLOT_HEAD)
if(H.head)
return FALSE
if(!(I.slot_flags & ITEM_SLOT_HEAD))
@@ -1298,7 +1339,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(!H.get_bodypart(BODY_ZONE_HEAD))
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
- if(SLOT_EARS)
+ if(ITEM_SLOT_EARS)
if(H.ears)
return FALSE
if(!(I.slot_flags & ITEM_SLOT_EARS))
@@ -1306,13 +1347,13 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(!H.get_bodypart(BODY_ZONE_HEAD))
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
- if(SLOT_W_UNIFORM)
+ if(ITEM_SLOT_ICLOTHING)
if(H.w_uniform)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_ICLOTHING) )
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
- if(SLOT_WEAR_ID)
+ if(ITEM_SLOT_ID)
if(H.wear_id)
return FALSE
if(!(I.item_flags & NO_UNIFORM_REQUIRED))
@@ -1324,7 +1365,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if( !(I.slot_flags & ITEM_SLOT_ID) )
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
- if(SLOT_L_STORE)
+ if(ITEM_SLOT_LPOCKET)
if(HAS_TRAIT(I, TRAIT_NODROP)) //Pockets aren't visible, so you can't move TRAIT_NODROP items into them.
return FALSE
if(H.l_store)
@@ -1336,11 +1377,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(return_warning)
return_warning[1] = "You need a jumpsuit before you can attach this [I.name]!"
return FALSE
- if(I.slot_flags & ITEM_SLOT_DENYPOCKET)
- return FALSE
- if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKET) )
+ if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKETS) )
return TRUE
- if(SLOT_R_STORE)
+ if(ITEM_SLOT_RPOCKET)
if(HAS_TRAIT(I, TRAIT_NODROP))
return FALSE
if(H.r_store)
@@ -1352,12 +1391,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(return_warning)
return_warning[1] = "You need a jumpsuit before you can attach this [I.name]!"
return FALSE
- if(I.slot_flags & ITEM_SLOT_DENYPOCKET)
- return FALSE
- if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKET) )
+ if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKETS) )
return TRUE
return FALSE
- if(SLOT_S_STORE)
+ if(ITEM_SLOT_SUITSTORE)
if(HAS_TRAIT(I, TRAIT_NODROP))
return FALSE
if(H.s_store)
@@ -1377,7 +1414,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if( istype(I, /obj/item/pda) || istype(I, /obj/item/pen) || is_type_in_list(I, H.wear_suit.allowed) )
return TRUE
return FALSE
- if(SLOT_HANDCUFFED)
+ if(ITEM_SLOT_HANDCUFFED)
if(H.handcuffed)
return FALSE
if(!istype(I, /obj/item/restraints/handcuffs))
@@ -1385,7 +1422,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(num_arms < 2)
return FALSE
return TRUE
- if(SLOT_LEGCUFFED)
+ if(ITEM_SLOT_LEGCUFFED)
if(H.legcuffed)
return FALSE
if(!istype(I, /obj/item/restraints/legcuffs))
@@ -1393,7 +1430,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(num_legs < 2)
return FALSE
return TRUE
- if(SLOT_IN_BACKPACK)
+ if(ITEM_SLOT_BACKPACK)
if(H.back)
if(SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_CAN_INSERT, I, H, TRUE))
return TRUE
@@ -2388,10 +2425,13 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
return
////////////
-//Stun//
+// Stun //
////////////
/datum/species/proc/spec_stun(mob/living/carbon/human/H,amount)
+ if(flying_species && H.movement_type & FLYING)
+ ToggleFlight(H,0)
+ flyslip(H)
if(H)
stop_wagging_tail(H)
. = stunmod * H.physiology.stun_mod * amount
@@ -2401,10 +2441,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
//////////////
/datum/species/proc/space_move(mob/living/carbon/human/H)
- return 0
+ if(H.movement_type & FLYING)
+ return TRUE
+ return FALSE
/datum/species/proc/negates_gravity(mob/living/carbon/human/H)
- return 0
+ if(H.movement_type & FLYING)
+ return TRUE
+ return FALSE
////////////////
//Tail Wagging//
@@ -2438,3 +2482,130 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
mutant_bodyparts["spines"] = mutant_bodyparts["waggingspines"]
mutant_bodyparts -= "waggingspines"
H.update_body()
+
+///////////////
+//FLIGHT SHIT//
+///////////////
+
+/datum/species/proc/GiveSpeciesFlight(mob/living/carbon/human/H, all_wings = FALSE)
+ if(flying_species) //grant them the choice of all wings if they don't have them
+ all_wings = TRUE
+ flying_species = TRUE
+ //CITADEL CHANGE: check if they already have wings, and "evolve" them based off of the wings they have. If they have none, use their species wings basis.
+ var/list/wingslist
+ if(all_wings) //give them the full list of wing choices to pick from, typically if they drink a second flight potion
+ wingslist = SPECIES_WINGS_ALL
+ else
+ //why the fuck do we have two different wing types anyways? they're literally almost both using the same wing shit too.
+ var/datum/sprite_accessory/deco_wings/D = GLOB.deco_wings_list[H.dna.features["deco_wings"]]
+ var/datum/sprite_accessory/insect_wings/I = GLOB.insect_wings_list[H.dna.features["insect_wings"]]
+ if(mutant_bodyparts["deco_wings"] && D?.upgrade_to.len) //species check to see if they were allowed to have deco wings
+ wingslist = D.upgrade_to
+ else if(mutant_bodyparts["insect_wings"] && I?.upgrade_to.len) //species check to see if they were allowed to have insect wings
+ wingslist = I.upgrade_to
+ else
+ wingslist = wings_icons
+
+ if(wingslist.len > 1)
+ if(!H.client)
+ wings_icon = pick(wingslist)
+ else
+ var/list/wings = list()
+ for(var/W in wingslist)
+ var/datum/sprite_accessory/S = GLOB.wings_list[W] //Gets the datum for every wing this species has, then prompts user with a radial menu
+ var/image/img = image(icon = 'icons/mob/wings_functional.dmi', icon_state = "m_wingsopen_[S.icon_state]_BEHIND") //Process the HUD elements
+ img.transform *= 0.5
+ img.pixel_x = -32
+ if(wings[S.name])
+ stack_trace("Different wing types with repeated names. Please fix as this may cause issues.")
+ else
+ wings[S.name] = img
+ wings_icon = show_radial_menu(H, H, wings, tooltips = TRUE)
+ if(!wings_icon)
+ wings_icon = pick(wings_icons)
+ else
+ wings_icon = wingslist[1]
+ if(isnull(fly))
+ fly = new
+ fly.Grant(H)
+ if(H.dna.features["wings"] != wings_icon)
+ mutant_bodyparts["wings"] = wings_icon
+ H.dna.features["wings"] = wings_icon
+ H.update_body()
+
+/datum/species/proc/HandleFlight(mob/living/carbon/human/H)
+ if(H.movement_type & FLYING)
+ if(!CanFly(H))
+ ToggleFlight(H)
+ return FALSE
+ return TRUE
+ else
+ return FALSE
+
+/datum/species/proc/CanFly(mob/living/carbon/human/H)
+ if(H.stat || !(H.mobility_flags & MOBILITY_STAND))
+ return FALSE
+ if(H.wear_suit && ((H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception)))) //Jumpsuits have tail holes, so it makes sense they have wing holes too
+ to_chat(H, "Your suit blocks your wings from extending!")
+ return FALSE
+ var/turf/T = get_turf(H)
+ if(!T)
+ return FALSE
+ var/datum/gas_mixture/environment = T.return_air()
+ if(environment && !(environment.return_pressure() > 30))
+ to_chat(H, "The atmosphere is too thin for you to fly!")
+ return FALSE
+ else
+ return TRUE
+
+/datum/species/proc/flyslip(mob/living/carbon/human/H)
+ var/obj/buckled_obj
+ if(H.buckled)
+ buckled_obj = H.buckled
+ to_chat(H, "Your wings spazz out and launch you!")
+ playsound(H.loc, 'sound/misc/slip.ogg', 50, TRUE, -3)
+ for(var/obj/item/I in H.held_items)
+ H.accident(I)
+ var/olddir = H.dir
+ H.stop_pulling()
+ if(buckled_obj)
+ buckled_obj.unbuckle_mob(H)
+ step(buckled_obj, olddir)
+ else
+ new /datum/forced_movement(H, get_ranged_target_turf(H, olddir, 4), 1, FALSE, CALLBACK(H, /mob/living/carbon/.proc/spin, 1, 1))
+ return TRUE
+
+//UNSAFE PROC, should only be called through the Activate or other sources that check for CanFly
+/datum/species/proc/ToggleFlight(mob/living/carbon/human/H)
+ if(!(H.movement_type & FLYING) && CanFly(H))
+ stunmod *= 2
+ speedmod -= 0.35
+ H.setMovetype(H.movement_type | FLYING)
+ override_float = TRUE
+ H.pass_flags |= PASSTABLE
+ H.OpenWings()
+ H.update_mobility()
+ else
+ stunmod *= 0.5
+ speedmod += 0.35
+ H.setMovetype(H.movement_type & ~FLYING)
+ override_float = FALSE
+ H.pass_flags &= ~PASSTABLE
+ H.CloseWings()
+
+/datum/action/innate/flight
+ name = "Toggle Flight"
+ check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_STUN
+ icon_icon = 'icons/mob/actions/actions_items.dmi'
+ button_icon_state = "flight"
+
+/datum/action/innate/flight/Activate()
+ var/mob/living/carbon/human/H = owner
+ var/datum/species/S = H.dna.species
+ if(S.CanFly(H))
+ S.ToggleFlight(H)
+ if(!(H.movement_type & FLYING))
+ to_chat(H, "You settle gently back onto the ground...")
+ else
+ to_chat(H, "You beat your wings and begin to hover gently above the ground...")
+ H.set_resting(FALSE, TRUE)
diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm
index 3c6a2a8e13..d9edfc240d 100644
--- a/code/modules/mob/living/carbon/human/species_types/android.dm
+++ b/code/modules/mob/living/carbon/human/species_types/android.dm
@@ -12,3 +12,4 @@
species_language_holder = /datum/language_holder/synthetic
limbs_id = SPECIES_SYNTH
species_category = SPECIES_CATEGORY_ROBOT
+ wings_icons = SPECIES_WINGS_ROBOT
diff --git a/code/modules/mob/living/carbon/human/species_types/angel.dm b/code/modules/mob/living/carbon/human/species_types/angel.dm
deleted file mode 100644
index 977e8aaab3..0000000000
--- a/code/modules/mob/living/carbon/human/species_types/angel.dm
+++ /dev/null
@@ -1,145 +0,0 @@
-/datum/species/angel
- name = "Angel"
- id = SPECIES_ANGEL
- default_color = "FFFFFF"
- species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,HAS_FLESH,HAS_BONE)
- mutant_bodyparts = list("tail_human" = "None", "ears" = "None", "wings" = "Angel")
- use_skintones = USE_SKINTONES_GRAYSCALE_CUSTOM
- no_equip = list(SLOT_BACK)
- blacklisted = 1
- limbs_id = SPECIES_HUMAN
- skinned_type = /obj/item/stack/sheet/animalhide/human
- species_category = SPECIES_CATEGORY_BASIC //they're a kind of human
-
- var/datum/action/innate/flight/fly
-
-/datum/species/angel/on_species_gain(mob/living/carbon/human/H, datum/species/old_species)
- ..()
- if(H.dna && H.dna.species && (H.dna.features["wings"] != "Angel"))
- if(!H.dna.species.mutant_bodyparts["wings"])
- H.dna.species.mutant_bodyparts["wings"] = "Angel"
- H.dna.features["wings"] = "Angel"
- H.update_body()
- if(ishuman(H) && !fly)
- fly = new
- fly.Grant(H)
- ADD_TRAIT(H, TRAIT_HOLY, SPECIES_TRAIT)
-
-/datum/species/angel/on_species_loss(mob/living/carbon/human/H)
- if(fly)
- fly.Remove(H)
- if(H.movement_type & FLYING)
- H.setMovetype(H.movement_type & ~FLYING)
- ToggleFlight(H,0)
- if(H.dna && H.dna.species && (H.dna.features["wings"] == "Angel"))
- if(H.dna.species.mutant_bodyparts["wings"])
- H.dna.species.mutant_bodyparts -= "wings"
- H.dna.features["wings"] = "None"
- H.update_body()
- REMOVE_TRAIT(H, TRAIT_HOLY, SPECIES_TRAIT)
- ..()
-
-/datum/species/angel/spec_life(mob/living/carbon/human/H)
- HandleFlight(H)
-
-/datum/species/angel/proc/HandleFlight(mob/living/carbon/human/H)
- if(H.movement_type & FLYING)
- if(!CanFly(H))
- ToggleFlight(H,0)
- return 0
- return 1
- else
- return 0
-
-/datum/species/angel/proc/CanFly(mob/living/carbon/human/H)
- if(!CHECK_MOBILITY(H, MOBILITY_MOVE))
- return FALSE
- if(H.wear_suit && ((H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception)))) //Jumpsuits have tail holes, so it makes sense they have wing holes too
- to_chat(H, "Your suit blocks your wings from extending!")
- return FALSE
- var/turf/T = get_turf(H)
- if(!T)
- return FALSE
-
- var/datum/gas_mixture/environment = T.return_air()
- if(environment && !(environment.return_pressure() > 30))
- to_chat(H, "The atmosphere is too thin for you to fly!")
- return FALSE
- return TRUE
-
-/datum/action/innate/flight
- name = "Toggle Flight"
- check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_STUN
- icon_icon = 'icons/mob/actions/actions_items.dmi'
- button_icon_state = "flight"
-
-/datum/action/innate/flight/Activate()
- var/mob/living/carbon/human/H = owner
- var/datum/species/angel/A = H.dna.species
- if(A.CanFly(H))
- if(H.movement_type & FLYING)
- to_chat(H, "You settle gently back onto the ground...")
- A.ToggleFlight(H,0)
- H.update_mobility()
- else
- to_chat(H, "You beat your wings and begin to hover gently above the ground...")
- H.set_resting(FALSE, TRUE)
- A.ToggleFlight(H,1)
- H.update_mobility()
-
-/datum/species/angel/proc/flyslip(mob/living/carbon/human/H)
- var/obj/buckled_obj
- if(H.buckled)
- buckled_obj = H.buckled
-
- to_chat(H, "Your wings spazz out and launch you!")
-
- playsound(H.loc, 'sound/misc/slip.ogg', 50, 1, -3)
-
- for(var/obj/item/I in H.held_items)
- H.accident(I)
-
- var/olddir = H.dir
-
- H.stop_pulling()
- if(buckled_obj)
- buckled_obj.unbuckle_mob(H)
- step(buckled_obj, olddir)
- else
- for(var/i=1, i<5, i++)
- spawn (i)
- step(H, olddir)
- H.spin(1,1)
- return 1
-
-
-/datum/species/angel/spec_stun(mob/living/carbon/human/H,amount)
- if(H.movement_type & FLYING)
- ToggleFlight(H,0)
- flyslip(H)
- . = ..()
-
-/datum/species/angel/negates_gravity(mob/living/carbon/human/H)
- if(H.movement_type & FLYING)
- return 1
-
-/datum/species/angel/space_move(mob/living/carbon/human/H)
- if(H.movement_type & FLYING)
- return 1
-
-/datum/species/angel/proc/ToggleFlight(mob/living/carbon/human/H,flight)
- if(flight && CanFly(H))
- stunmod = 2
- speedmod = -0.1
- H.setMovetype(H.movement_type | FLYING)
- override_float = TRUE
- H.pass_flags |= PASSTABLE
- H.OpenWings()
- else
- stunmod = 1
- speedmod = 0
- H.setMovetype(H.movement_type & ~FLYING)
- override_float = FALSE
- H.pass_flags &= ~PASSTABLE
- H.CloseWings()
- update_species_slowdown(H)
diff --git a/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm b/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm
index b79c281b3b..c9af50de9d 100644
--- a/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm
+++ b/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm
@@ -57,4 +57,5 @@
exotic_bloodtype = "S"
exotic_blood_color = BLOOD_COLOR_OIL
allowed_limb_ids = list("mammal","aquatic","avian", "human")
- species_category = "robot"
+ species_category = SPECIES_CATEGORY_ROBOT
+ wings_icons = SPECIES_WINGS_ROBOT
diff --git a/code/modules/mob/living/carbon/human/species_types/arachnid.dm b/code/modules/mob/living/carbon/human/species_types/arachnid.dm
index 454625cf36..7495e2500e 100644
--- a/code/modules/mob/living/carbon/human/species_types/arachnid.dm
+++ b/code/modules/mob/living/carbon/human/species_types/arachnid.dm
@@ -21,6 +21,7 @@
var/web_cooldown = 200
var/web_ready = TRUE
var/spinner_rate = 25
+ wings_icons = SPECIES_WINGS_MOTH //Arachnids' phylum is arthropods, which include butterflies. Might as well hit them with moth wings.
/datum/species/arachnid/random_name(gender,unique,lastname)
if(unique)
diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm
index f87f425b5f..df4abf864a 100644
--- a/code/modules/mob/living/carbon/human/species_types/bugmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm
@@ -19,6 +19,7 @@
tail_type = "mam_tail"
wagging_type = "mam_waggingtail"
species_category = SPECIES_CATEGORY_INSECT
+ wings_icons = SPECIES_WINGS_INSECT
allowed_limb_ids = list("insect","apid","moth","moth_not_greyscale")
diff --git a/code/modules/mob/living/carbon/human/species_types/corporate.dm b/code/modules/mob/living/carbon/human/species_types/corporate.dm
index e9baa786da..48b5032129 100644
--- a/code/modules/mob/living/carbon/human/species_types/corporate.dm
+++ b/code/modules/mob/living/carbon/human/species_types/corporate.dm
@@ -19,3 +19,4 @@
sexes = 0
gib_types = /obj/effect/gibspawner/robot
species_category = SPECIES_CATEGORY_ROBOT
+ wings_icons = SPECIES_WINGS_ROBOT
diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm
index 7cd582d050..facc3dfd8d 100644
--- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm
+++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm
@@ -16,6 +16,7 @@
has_field_of_vision = FALSE //Too much of a trouble, their vision is already bound to their severed head.
species_category = SPECIES_CATEGORY_UNDEAD
var/pumpkin = FALSE
+ wings_icons = SPECIES_WINGS_SKELETAL //seems suitable for an undead.
var/obj/item/dullahan_relay/myhead
diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
index 5a185cbeb8..86720289fe 100644
--- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
@@ -13,6 +13,7 @@
exotic_bloodtype = "BUG"
exotic_blood_color = BLOOD_COLOR_BUG
species_category = SPECIES_CATEGORY_INSECT
+ wings_icons = SPECIES_WINGS_INSECT
/datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
if(istype(chem, /datum/reagent/toxin/pestkiller))
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index ac25c9e021..f90199c8ee 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -12,7 +12,7 @@
punchdamagelow = 5
punchdamagehigh = 14
punchstunthreshold = 10
- no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE)
+ no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_SUITSTORE)
nojumpsuit = 1
sexes = 1
damage_overlay_type = ""
diff --git a/code/modules/mob/living/carbon/human/species_types/ipc.dm b/code/modules/mob/living/carbon/human/species_types/ipc.dm
index c3fd9e21fc..8c9e6bcd4f 100644
--- a/code/modules/mob/living/carbon/human/species_types/ipc.dm
+++ b/code/modules/mob/living/carbon/human/species_types/ipc.dm
@@ -35,6 +35,7 @@
exotic_bloodtype = "S"
exotic_blood_color = BLOOD_COLOR_OIL
species_category = SPECIES_CATEGORY_ROBOT
+ wings_icons = SPECIES_WINGS_ROBOT
var/datum/action/innate/monitor_change/screen
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 0693bf64e1..66402de911 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -29,6 +29,7 @@
tail_type = "mam_tail"
wagging_type = "mam_waggingtail"
species_category = SPECIES_CATEGORY_JELLY
+ wings_icons = SPECIES_WINGS_JELLY
ass_image = 'icons/ass/assslime.png'
/datum/species/jelly/on_species_loss(mob/living/carbon/C)
@@ -69,6 +70,7 @@
to_chat(H, "You feel drained!")
if(H.blood_volume < (BLOOD_VOLUME_BAD*H.blood_ratio))
Cannibalize_Body(H)
+ ..()
/datum/species/jelly/proc/Cannibalize_Body(mob/living/carbon/human/H)
var/list/limbs_to_consume = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) - H.get_missing_limbs()
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index 07fa78a88a..ef8fd35c45 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -29,6 +29,7 @@
tail_type = "tail_lizard"
wagging_type = "waggingtail_lizard"
species_category = SPECIES_CATEGORY_LIZARD
+ wings_icons = SPECIES_WINGS_DRAGON
ass_image = 'icons/ass/asslizard.png'
diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
index 0655b28197..afcec291e9 100644
--- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
@@ -16,7 +16,7 @@
punchdamagehigh = 12 //still better than humans
punchstunthreshold = 10
- no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM)
+ no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING)
burnmod = 1.25
heatmod = 1.5
diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
index 547d017c23..9c29856084 100644
--- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
@@ -23,6 +23,7 @@
outfit_important_for_life = /datum/outfit/plasmaman
species_category = SPECIES_CATEGORY_SKELETON
+ wings_icons = SPECIES_WINGS_SKELETAL
ass_image = 'icons/ass/assplasma.png'
diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
index 4c82a25b4b..f412099831 100644
--- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
@@ -16,6 +16,7 @@
mutanteyes = /obj/item/organ/eyes/night_vision
species_category = SPECIES_CATEGORY_SHADOW
+ wings_icons = SPECIES_WINGS_SKELETAL //not sure what's more spooky for these guys - skeleton or dragon?
/datum/species/shadow/on_species_gain(mob/living/carbon/C, datum/species/old_species)
. = ..()
@@ -36,7 +37,7 @@
limbs_id = SPECIES_SHADOW
burnmod = 1.5
blacklisted = TRUE
- no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE)
+ no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_SUITSTORE)
species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
mutanteyes = /obj/item/organ/eyes/night_vision/nightmare
diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
index 8175f505fa..5a927397fb 100644
--- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm
+++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
@@ -16,6 +16,7 @@
burnmod = 1.25
species_category = SPECIES_CATEGORY_SKELETON //they have their own category that's disassociated from undead, paired with plasmapeople
+ wings_icons = SPECIES_WINGS_SKELETAL
/datum/species/skeleton/New()
if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) //skeletons are stronger during the spooky season!
diff --git a/code/modules/mob/living/carbon/human/species_types/synthliz.dm b/code/modules/mob/living/carbon/human/species_types/synthliz.dm
index c692370030..aa853ee551 100644
--- a/code/modules/mob/living/carbon/human/species_types/synthliz.dm
+++ b/code/modules/mob/living/carbon/human/species_types/synthliz.dm
@@ -35,3 +35,4 @@
tail_type = "mam_tail"
wagging_type = "mam_waggingtail"
species_category = SPECIES_CATEGORY_ROBOT
+ wings_icons = SPECIES_WINGS_ROBOT
diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm
index 91711b5c39..316b129ee8 100644
--- a/code/modules/mob/living/carbon/human/species_types/synths.dm
+++ b/code/modules/mob/living/carbon/human/species_types/synths.dm
@@ -18,6 +18,7 @@
var/datum/species/fake_species = null //a species to do most of our work for us, unless we're damaged
species_language_holder = /datum/language_holder/synthetic
species_category = SPECIES_CATEGORY_ROBOT
+ wings_icons = SPECIES_WINGS_ROBOT
/datum/species/synth/military
name = "Military Synth"
diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm
index e708835ed1..3e54a4e638 100644
--- a/code/modules/mob/living/carbon/human/species_types/vampire.dm
+++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm
@@ -15,8 +15,10 @@
skinned_type = /obj/item/stack/sheet/animalhide/human
var/info_text = "You are a Vampire. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability."
species_category = SPECIES_CATEGORY_UNDEAD
+ wings_icons = SPECIES_WINGS_DRAGON //closest to "bat" wings.
var/batform_enabled = TRUE
+
/datum/species/vampire/roundstart
id = SPECIES_VAMPIRE_WEAK
batform_enabled = FALSE
diff --git a/code/modules/mob/living/carbon/human/species_types/xeno.dm b/code/modules/mob/living/carbon/human/species_types/xeno.dm
index d3249edd96..ffb8ac5a80 100644
--- a/code/modules/mob/living/carbon/human/species_types/xeno.dm
+++ b/code/modules/mob/living/carbon/human/species_types/xeno.dm
@@ -17,3 +17,4 @@
disliked_food = JUNKFOOD
liked_food = GROSS | MEAT
species_category = SPECIES_CATEGORY_ALIEN
+ wings_icons = SPECIES_WINGS_DRAGON //most depictions of xenomorphs with wings are closest to this.
diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm
index 57a11481d7..0dc08eeedb 100644
--- a/code/modules/mob/living/carbon/human/species_types/zombies.dm
+++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm
@@ -16,6 +16,7 @@
disliked_food = NONE
liked_food = GROSS | MEAT | RAW
species_category = SPECIES_CATEGORY_UNDEAD
+ wings_icons = SPECIES_WINGS_SKELETAL //eh.
/datum/species/zombie/notspaceproof
id = "notspaceproofzombie"
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 52d736f9ce..cb2458e376 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -128,7 +128,7 @@ There are several things that need to be remembered:
remove_overlay(UNIFORM_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNIFORM]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_ICLOTHING) + 1]
inv.update_icon()
if(istype(w_uniform, /obj/item/clothing/under))
@@ -180,7 +180,7 @@ There are several things that need to be remembered:
remove_overlay(ID_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_ID]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_ID) + 1]
inv.update_icon()
var/mutable_appearance/id_overlay = overlays_standing[ID_LAYER]
@@ -204,8 +204,8 @@ There are several things that need to be remembered:
if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER))
remove_overlay(GLOVES_LAYER)
- if(client && hud_used && hud_used.inv_slots[SLOT_GLOVES])
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_GLOVES]
+ if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_GLOVES) + 1])
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_GLOVES) + 1]
inv.update_icon()
if(!gloves && bloody_hands)
@@ -242,7 +242,7 @@ There are several things that need to be remembered:
return
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_GLASSES]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EYES) + 1]
inv.update_icon()
if(glasses)
@@ -269,7 +269,7 @@ There are several things that need to be remembered:
return
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EARS) + 1]
inv.update_icon()
if(ears)
@@ -295,7 +295,7 @@ There are several things that need to be remembered:
return
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_SHOES]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_FEET) + 1]
inv.update_icon()
if(dna.species.mutant_bodyparts["taur"])
@@ -330,7 +330,7 @@ There are several things that need to be remembered:
remove_overlay(SUIT_STORE_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_S_STORE]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SUITSTORE) + 1]
inv.update_icon()
if(s_store)
@@ -357,7 +357,7 @@ There are several things that need to be remembered:
return
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_HEAD) + 1]
inv.update_icon()
if(head)
@@ -394,7 +394,7 @@ There are several things that need to be remembered:
remove_overlay(BELT_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_BELT]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BELT) + 1]
inv.update_icon()
if(belt)
@@ -416,7 +416,7 @@ There are several things that need to be remembered:
remove_overlay(SUIT_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_SUIT]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_OCLOTHING) + 1]
inv.update_icon()
if(wear_suit)
@@ -479,10 +479,10 @@ There are several things that need to be remembered:
if(client && hud_used)
var/atom/movable/screen/inventory/inv
- inv = hud_used.inv_slots[SLOT_L_STORE]
+ inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_LPOCKET) + 1]
inv.update_icon()
- inv = hud_used.inv_slots[SLOT_R_STORE]
+ inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_RPOCKET) + 1]
inv.update_icon()
if(l_store)
@@ -506,7 +506,7 @@ There are several things that need to be remembered:
return
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_MASK) + 1]
inv.update_icon()
if(wear_mask)
diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm
index 13f811196e..2422528d21 100644
--- a/code/modules/mob/living/carbon/inventory.dm
+++ b/code/modules/mob/living/carbon/inventory.dm
@@ -1,16 +1,16 @@
/mob/living/carbon/get_item_by_slot(slot_id)
switch(slot_id)
- if(SLOT_BACK)
+ if(ITEM_SLOT_BACK)
return back
- if(SLOT_WEAR_MASK)
+ if(ITEM_SLOT_MASK)
return wear_mask
- if(SLOT_NECK)
+ if(ITEM_SLOT_NECK)
return wear_neck
- if(SLOT_HEAD)
+ if(ITEM_SLOT_HEAD)
return head
- if(SLOT_HANDCUFFED)
+ if(ITEM_SLOT_HANDCUFFED)
return handcuffed
- if(SLOT_LEGCUFFED)
+ if(ITEM_SLOT_LEGCUFFED)
return legcuffed
return null
@@ -20,17 +20,17 @@
return slot
if(critical) //it is CRITICAL they get this item, no matter what
//do they have a backpack?
- var/obj/item/backpack = get_item_by_slot(SLOT_BACK)
+ var/obj/item/backpack = get_item_by_slot(ITEM_SLOT_BACK)
if(!backpack)
//nothing on their back
backpack = new /obj/item/storage/backpack(get_turf(src))
- if(equip_to_slot(backpack, SLOT_BACK)) //worst-case-scenario, something that shouldnt wear a backpack gets one
+ if(equip_to_slot(backpack, ITEM_SLOT_BACK)) //worst-case-scenario, something that shouldnt wear a backpack gets one
I.forceMove(backpack)
- return SLOT_BACK
+ return ITEM_SLOT_BACK
else if(istype(backpack) && SEND_SIGNAL(backpack, COMSIG_CONTAINS_STORAGE))
//place it in here, regardless of storage capacity
I.forceMove(backpack)
- return SLOT_BACK
+ return ITEM_SLOT_BACK
else
//this should NEVER happen, but if it does, report it with the appropriate information
var/conclusion = qdel_on_fail ? "deleted" : "not moved, staying at current position [I.x], [I.y], [I.z]"
@@ -69,28 +69,28 @@
I.appearance_flags |= NO_CLIENT_COLOR
var/not_handled = FALSE
switch(slot)
- if(SLOT_BACK)
+ if(ITEM_SLOT_BACK)
back = I
update_inv_back()
- if(SLOT_WEAR_MASK)
+ if(ITEM_SLOT_MASK)
wear_mask = I
wear_mask_update(I, toggle_off = 0)
- if(SLOT_HEAD)
+ if(ITEM_SLOT_HEAD)
head = I
head_update(I)
- if(SLOT_NECK)
+ if(ITEM_SLOT_NECK)
wear_neck = I
update_inv_neck(I)
- if(SLOT_HANDCUFFED)
+ if(ITEM_SLOT_HANDCUFFED)
handcuffed = I
update_handcuffed()
- if(SLOT_LEGCUFFED)
+ if(ITEM_SLOT_LEGCUFFED)
legcuffed = I
update_inv_legcuffed()
- if(SLOT_HANDS)
+ if(ITEM_SLOT_HANDS)
put_in_hands(I)
update_inv_hands()
- if(SLOT_IN_BACKPACK)
+ if(ITEM_SLOT_BACKPACK)
if(!back || !SEND_SIGNAL(back, COMSIG_TRY_STORAGE_INSERT, I, src, TRUE))
not_handled = TRUE
else
@@ -170,7 +170,7 @@
if(!offered_item)
to_chat(src, "You're not holding anything to give!")
return
-
+
if(IS_DEAD_OR_INCAP(src))
to_chat(src, span_warning("You're unable to offer anything in your current state!"))
return
@@ -184,7 +184,7 @@
visible_message(span_notice("[src] is offering [offered_item]."), \
span_notice("You offer [offered_item]."), null, 2)
-
+
apply_status_effect(STATUS_EFFECT_OFFERING, offered_item)
/**
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 182ae1afb8..27f795015e 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -676,7 +676,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
/mob/living/carbon/proc/get_cooling_efficiency()
if(!HAS_TRAIT(src, TRAIT_ROBOTIC_ORGANISM))
return 1
-
+
var/integration_bonus = min(blood_volume * SYNTH_INTEGRATION_COOLANT_CAP, integrating_blood * SYNTH_INTEGRATION_COOLANT_PENALTY) //Integration blood somewhat helps, though only at 40% impact and to a cap of 25% of current blood level.
var/blood_effective_volume = blood_volume + integration_bonus
var/coolant_efficiency = min(blood_effective_volume / BLOOD_VOLUME_SAFE, 1) //Low coolant is only a negative, adding more than needed will not help you.
@@ -706,13 +706,13 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
return total_environment_efficiency
/mob/living/carbon/proc/check_suitlinking()
- var/suit_item = get_item_by_slot(SLOT_WEAR_SUIT)
- var/head_item = get_item_by_slot(SLOT_HEAD)
+ var/suit_item = get_item_by_slot(ITEM_SLOT_OCLOTHING)
+ var/head_item = get_item_by_slot(ITEM_SLOT_HEAD)
var/turf/T = get_turf(src)
-
+
if(istype(head_item, /obj/item/clothing/head/helmet/space) && istype(suit_item, /obj/item/clothing/suit/space))
return 1
-
+
if(T && is_mining_level(T.z) && istype(head_item, /obj/item/clothing/head/hooded/explorer) && istype(suit_item, /obj/item/clothing/suit/hooded/explorer))
return 1
diff --git a/code/modules/mob/living/carbon/monkey/combat.dm b/code/modules/mob/living/carbon/monkey/combat.dm
index 13d234092c..0c9895c729 100644
--- a/code/modules/mob/living/carbon/monkey/combat.dm
+++ b/code/modules/mob/living/carbon/monkey/combat.dm
@@ -30,7 +30,7 @@
return 0
if(myPath.len <= 0)
- myPath = get_path_to(src, get_turf(target), /turf/proc/Distance, MAX_RANGE_FIND + 1, 250,1)
+ myPath = get_path_to(src, target, 250, 1)
if(myPath)
if(myPath.len > 0)
diff --git a/code/modules/mob/living/carbon/monkey/inventory.dm b/code/modules/mob/living/carbon/monkey/inventory.dm
index 34599028f7..156eef9b6b 100644
--- a/code/modules/mob/living/carbon/monkey/inventory.dm
+++ b/code/modules/mob/living/carbon/monkey/inventory.dm
@@ -5,29 +5,29 @@
return FALSE
switch(slot)
- if(SLOT_HANDS)
+ if(ITEM_SLOT_HANDS)
if(get_empty_held_indexes())
return TRUE
return FALSE
- if(SLOT_WEAR_MASK)
+ if(ITEM_SLOT_MASK)
if(wear_mask)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_MASK) )
return FALSE
return TRUE
- if(SLOT_NECK)
+ if(ITEM_SLOT_NECK)
if(wear_neck)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_NECK) )
return FALSE
return TRUE
- if(SLOT_HEAD)
+ if(ITEM_SLOT_HEAD)
if(head)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_HEAD) )
return FALSE
return TRUE
- if(SLOT_BACK)
+ if(ITEM_SLOT_BACK)
if(back)
return FALSE
if( !(I.slot_flags & ITEM_SLOT_BACK) )
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index f8ac8c6716..8a029613e2 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -184,5 +184,5 @@ GLOBAL_LIST_INIT(strippable_monkey_items, create_strippable_list(list(
. = ..()
if(prob(10))
var/obj/item/clothing/head/helmet/justice/escape/helmet = new(src)
- equip_to_slot_or_del(helmet,SLOT_HEAD)
+ equip_to_slot_or_del(helmet,ITEM_SLOT_HEAD)
INVOKE_ASYNC(helmet, /obj/item.proc/attack_self, src) // todo encapsulate toggle
diff --git a/code/modules/mob/living/carbon/monkey/punpun.dm b/code/modules/mob/living/carbon/monkey/punpun.dm
index c59218a8a3..d71a989c1d 100644
--- a/code/modules/mob/living/carbon/monkey/punpun.dm
+++ b/code/modules/mob/living/carbon/monkey/punpun.dm
@@ -29,9 +29,9 @@
if(ancestor_chain > 1)
generate_fake_scars(rand(ancestor_chain, ancestor_chain * 4))
if(relic_hat)
- equip_to_slot_or_del(new relic_hat, SLOT_HEAD)
+ equip_to_slot_or_del(new relic_hat, ITEM_SLOT_HEAD)
if(relic_mask)
- equip_to_slot_or_del(new relic_mask, SLOT_WEAR_MASK)
+ equip_to_slot_or_del(new relic_mask, ITEM_SLOT_MASK)
/mob/living/carbon/monkey/punpun/BiologicalLife(seconds, times_fired)
if(!(. = ..()))
diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm
index 43e0db1f08..cd9cd5db4c 100644
--- a/code/modules/mob/living/carbon/update_icons.dm
+++ b/code/modules/mob/living/carbon/update_icons.dm
@@ -91,7 +91,7 @@
return
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_MASK) + 1]
inv?.update_icon()
if(wear_mask)
@@ -104,8 +104,8 @@
/mob/living/carbon/update_inv_neck()
remove_overlay(NECK_LAYER)
- if(client && hud_used && hud_used.inv_slots[SLOT_NECK])
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_NECK]
+ if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1])
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1]
inv.update_icon()
if(wear_neck)
@@ -119,7 +119,7 @@
remove_overlay(BACK_LAYER)
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_BACK]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1]
inv?.update_icon()
if(back)
@@ -135,7 +135,7 @@
return
if(client && hud_used)
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD]
+ var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_HEAD) + 1]
inv?.update_icon()
if(head)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 2070d07e14..bf3094cb08 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -395,6 +395,7 @@
..()
update_pull_movespeed()
update_pull_hud_icon()
+ SEND_SIGNAL(src, COMSIG_LIVING_STOPPED_PULLING)
/mob/living/verb/stop_pulling1()
set name = "Stop Pulling"
diff --git a/code/modules/mob/living/living_mobility.dm b/code/modules/mob/living/living_mobility.dm
index af34fb54cf..6aed30ab83 100644
--- a/code/modules/mob/living/living_mobility.dm
+++ b/code/modules/mob/living/living_mobility.dm
@@ -9,6 +9,8 @@
resting = new_resting
if(!silent)
to_chat(src, "You are now [resting? "resting" : "getting up"].")
+ if(resting == 1)
+ SEND_SIGNAL(src, COMSIG_LIVING_RESTING)
update_resting(updating)
/mob/living/proc/update_resting(update_mobility = TRUE)
diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm
index 2b1c2de17a..e9bf3c5d49 100644
--- a/code/modules/mob/living/login.dm
+++ b/code/modules/mob/living/login.dm
@@ -2,7 +2,10 @@
..()
//Mind updates
sync_mind()
- mind.show_memory(src, 0)
+//ambition start
+ if(mind.memory || mind.antag_datums)
+ to_chat(src, "[mind.show_memory()]")
+//ambition end
//Round specific stuff
if(SSticker.mode)
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index ca9ca75e6c..3aec65f6fb 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -551,7 +551,7 @@ Pass a positive integer as an argument to override a bot's default speed.
var/datum/job/captain/All = new/datum/job/captain
all_access.access = All.get_access()
- set_path(get_path_to(src, waypoint, /turf/proc/Distance_cardinal, 0, 200, id=all_access))
+ set_path(get_path_to(src, waypoint, 200, id=all_access))
calling_ai = caller //Link the AI to the bot!
ai_waypoint = waypoint
@@ -730,6 +730,7 @@ Pass a positive integer as an argument to override a bot's default speed.
access_card.access = user_access + prev_access //Adds the user's access, if any.
mode = BOT_SUMMON
speak("Responding.", radio_channel)
+
calc_summon_path()
if("ejectpai")
@@ -765,12 +766,12 @@ Pass a positive integer as an argument to override a bot's default speed.
// given an optional turf to avoid
/mob/living/simple_animal/bot/proc/calc_path(turf/avoid)
check_bot_access()
- set_path(get_path_to(src, patrol_target, /turf/proc/Distance_cardinal, 0, 120, id=access_card, exclude=avoid))
+ set_path(get_path_to(src, patrol_target, 120, id=access_card, exclude=avoid))
/mob/living/simple_animal/bot/proc/calc_summon_path(turf/avoid)
check_bot_access()
spawn()
- set_path(get_path_to(src, summon_target, /turf/proc/Distance_cardinal, 0, 150, id=access_card, exclude=avoid))
+ set_path(get_path_to(src, summon_target, 150, id=access_card, exclude=avoid))
if(!path.len) //Cannot reach target. Give up and announce the issue.
speak("Summon command failed, destination unreachable.",radio_channel)
bot_reset()
diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
index c683267a58..ed68d4d272 100644
--- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
@@ -302,7 +302,7 @@
if(!path || path.len == 0) //No path, need a new one
//Try to produce a path to the target, and ignore airlocks to which it has access.
- path = get_path_to(src, target.loc, /turf/proc/Distance_cardinal, 0, 30, id=access_card)
+ path = get_path_to(src, target, 30, id=access_card)
if(!bot_move(target))
add_to_ignore(target)
target = null
diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm
index 66d1955502..9eea7a85b1 100644
--- a/code/modules/mob/living/simple_animal/bot/firebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/firebot.dm
@@ -223,7 +223,7 @@
if(target_fire && (get_dist(src, target_fire) > 2))
- path = get_path_to(src, get_turf(target_fire), /turf/proc/Distance_cardinal, 0, 30, 1, id=access_card)
+ path = get_path_to(src, target_fire, 30, 1, id=access_card)
mode = BOT_MOVING
if(!path.len)
soft_reset()
diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm
index 5f0075aaa2..c8b502f032 100644
--- a/code/modules/mob/living/simple_animal/bot/floorbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm
@@ -263,9 +263,9 @@
if(path.len == 0)
if(!isturf(target))
var/turf/TL = get_turf(target)
- path = get_path_to(src, TL, /turf/proc/Distance_cardinal, 0, 30, id=access_card,simulated_only = 0)
+ path = get_path_to(src, TL, 30, id=access_card,simulated_only = 0)
else
- path = get_path_to(src, target, /turf/proc/Distance_cardinal, 0, 30, id=access_card,simulated_only = 0)
+ path = get_path_to(src, target, 30, id=access_card,simulated_only = 0)
if(!bot_move(target))
add_to_ignore(target)
diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm
index e00adfd8e8..0b21f4a825 100644
--- a/code/modules/mob/living/simple_animal/bot/medbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/medbot.dm
@@ -492,10 +492,10 @@
return
if(patient && path.len == 0 && (get_dist(src,patient) > 1))
- path = get_path_to(src, get_turf(patient), /turf/proc/Distance_cardinal, 0, 30,id=access_card)
+ path = get_path_to(src, patient, 30, id=access_card)
mode = BOT_MOVING
if(!path.len) //try to get closer if you can't reach the patient directly
- path = get_path_to(src, get_turf(patient), /turf/proc/Distance_cardinal, 0, 30,1,id=access_card)
+ path = get_path_to(src, patient, 30, 1, id=access_card)
if(!path.len) //Do not chase a patient we cannot reach.
soft_reset()
diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm
index dcb5e5f237..56e2f66feb 100644
--- a/code/modules/mob/living/simple_animal/bot/mulebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm
@@ -530,7 +530,7 @@
// calculates a path to the current destination
// given an optional turf to avoid
/mob/living/simple_animal/bot/mulebot/calc_path(turf/avoid = null)
- path = get_path_to(src, target, /turf/proc/Distance_cardinal, 0, 250, id=access_card, exclude=avoid)
+ path = get_path_to(src, target, 250, id=access_card, exclude=avoid)
// sets the current destination
// signals all beacons matching the delivery code
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
index ecd5db3ccf..dfb00f2657 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
@@ -88,10 +88,10 @@
if(default_storage)
var/obj/item/I = new default_storage(src)
- equip_to_slot_or_del(I, SLOT_GENERC_DEXTROUS_STORAGE)
+ equip_to_slot_or_del(I, ITEM_SLOT_DEX_STORAGE)
if(default_hatmask)
var/obj/item/I = new default_hatmask(src)
- equip_to_slot_or_del(I, SLOT_HEAD)
+ equip_to_slot_or_del(I, ITEM_SLOT_HEAD)
ADD_TRAIT(access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm
index 948be53abc..df4d1e0673 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm
@@ -61,7 +61,7 @@
if(!D.default_hatmask && seasonal_hats && possible_seasonal_hats.len)
var/hat_type = pick(possible_seasonal_hats)
var/obj/item/new_hat = new hat_type(D)
- D.equip_to_slot_or_del(new_hat, SLOT_HEAD)
+ D.equip_to_slot_or_del(new_hat, ITEM_SLOT_HEAD)
D.flags_1 |= (flags_1 & ADMIN_SPAWNED_1)
user.transfer_ckey(D, FALSE)
qdel(src)
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm
index 00be08bb1d..4c112858da 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm
@@ -21,13 +21,13 @@
/mob/living/simple_animal/drone/can_equip(obj/item/I, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, clothing_check = FALSE, list/return_warning)
switch(slot)
- if(SLOT_HEAD)
+ if(ITEM_SLOT_HEAD)
if(head)
return 0
if(!((I.slot_flags & ITEM_SLOT_HEAD) || (I.slot_flags & ITEM_SLOT_MASK)))
return 0
return 1
- if(SLOT_GENERC_DEXTROUS_STORAGE)
+ if(ITEM_SLOT_DEX_STORAGE)
if(internal_storage)
return 0
return 1
@@ -36,9 +36,9 @@
/mob/living/simple_animal/drone/get_item_by_slot(slot_id)
switch(slot_id)
- if(SLOT_HEAD)
+ if(ITEM_SLOT_HEAD)
return head
- if(SLOT_GENERC_DEXTROUS_STORAGE)
+ if(ITEM_SLOT_DEX_STORAGE)
return internal_storage
return ..()
@@ -63,10 +63,10 @@
I.plane = ABOVE_HUD_PLANE
switch(slot)
- if(SLOT_HEAD)
+ if(ITEM_SLOT_HEAD)
head = I
update_inv_head()
- if(SLOT_GENERC_DEXTROUS_STORAGE)
+ if(ITEM_SLOT_DEX_STORAGE)
internal_storage = I
update_inv_internal_storage()
else
@@ -77,7 +77,7 @@
I.equipped(src, slot)
/mob/living/simple_animal/drone/getBackSlot()
- return SLOT_GENERC_DEXTROUS_STORAGE
+ return ITEM_SLOT_DEX_STORAGE
/mob/living/simple_animal/drone/getBeltSlot()
- return SLOT_GENERC_DEXTROUS_STORAGE
+ return ITEM_SLOT_DEX_STORAGE
diff --git a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm
index a079507a63..6d421d326e 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm
@@ -52,7 +52,7 @@
/mob/living/simple_animal/hostile/guardian/dextrous/can_equip(obj/item/I, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, clothing_check = FALSE, list/return_warning)
switch(slot)
- if(SLOT_GENERC_DEXTROUS_STORAGE)
+ if(ITEM_SLOT_DEX_STORAGE)
if(internal_storage)
return 0
return 1
@@ -63,17 +63,17 @@
return
switch(slot)
- if(SLOT_GENERC_DEXTROUS_STORAGE)
+ if(ITEM_SLOT_DEX_STORAGE)
internal_storage = I
update_inv_internal_storage()
else
to_chat(src, "You are trying to equip this item to an unsupported inventory slot. Report this to a coder!")
/mob/living/simple_animal/hostile/guardian/dextrous/getBackSlot()
- return SLOT_GENERC_DEXTROUS_STORAGE
+ return ITEM_SLOT_DEX_STORAGE
/mob/living/simple_animal/hostile/guardian/dextrous/getBeltSlot()
- return SLOT_GENERC_DEXTROUS_STORAGE
+ return ITEM_SLOT_DEX_STORAGE
/mob/living/simple_animal/hostile/guardian/dextrous/proc/update_inv_internal_storage()
if(internal_storage && client && hud_used && hud_used.hud_shown)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
index fa67fd8e3b..6bd55d06ae 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
@@ -191,7 +191,7 @@
continue
visible_message("[src] grabs hold of [L]!")
var/mob/living/carbon/C = L
- var/obj/item/clothing/S = C.get_item_by_slot(SLOT_WEAR_SUIT)
+ var/obj/item/clothing/S = C.get_item_by_slot(ITEM_SLOT_OCLOTHING)
if(S && S.resistance_flags & GOLIATH_RESISTANCE)
L.Stun(25)
else if(S && S.resistance_flags & GOLIATH_WEAKNESS)
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index 7c7a684cf3..4cc66bc4bd 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -655,7 +655,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
item = I
break
if(item)
- if(!AStar(src, get_turf(item), /turf/proc/Distance_cardinal))
+ if(!get_path_to(src, item))
item = null
continue
return item
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 03c5e76e87..4b8fa75aee 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -439,7 +439,11 @@
set category = "IC"
set desc = "View your character's notes memory."
if(mind)
- mind.show_memory(src)
+//ambition start
+ var/datum/browser/popup = new(src, "memory", "Memory and Notes")
+ popup.set_content(mind.show_memory())
+ popup.open()
+//ambition end
else
to_chat(src, "You don't have a mind datum for some reason, so you can't look at your notes, if you had any.")
diff --git a/code/modules/modular_computers/file_system/programs/budgetordering.dm b/code/modules/modular_computers/file_system/programs/budgetordering.dm
index 1f8fd6f7a6..84ddab9e37 100644
--- a/code/modules/modular_computers/file_system/programs/budgetordering.dm
+++ b/code/modules/modular_computers/file_system/programs/budgetordering.dm
@@ -79,7 +79,6 @@
if(id_card?.registered_account)
if((ACCESS_HEADS in id_card.access) || (ACCESS_QM in id_card.access))
requestonly = FALSE
- buyer = SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department)
can_approve_requests = TRUE
else
requestonly = TRUE
@@ -236,8 +235,7 @@
return
if(!self_paid && ishuman(usr) && !account)
- var/obj/item/card/id/id_card = card_slot?.GetID()
- account = SSeconomy.get_dep_account(id_card?.registered_account?.account_job.paycheck_department)
+ account = SSeconomy.get_dep_account(ACCOUNT_CAR)
var/turf/T = get_turf(src)
var/datum/supply_order/SO = new(pack, name, rank, ckey, reason, account)
@@ -263,9 +261,7 @@
var/id = text2num(params["id"])
for(var/datum/supply_order/SO in SSshuttle.requestlist)
if(SO.id == id)
- var/obj/item/card/id/id_card = card_slot?.GetID()
- if(id_card && id_card?.registered_account)
- SO.paying_account = SSeconomy.get_dep_account(id_card?.registered_account?.account_job.paycheck_department)
+ SO.paying_account = SSeconomy.get_dep_account(ACCOUNT_CAR)
SSshuttle.requestlist -= SO
SSshuttle.shoppinglist += SO
. = TRUE
diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm
index cf895924b0..f59a06dc69 100644
--- a/code/modules/ninja/energy_katana.dm
+++ b/code/modules/ninja/energy_katana.dm
@@ -111,7 +111,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_BELT, 0, 1, 1))
+ else if(user.equip_to_slot_if_possible(src, ITEM_SLOT_BELT, 0, 1, 1))
msg = "Your Energy Katana teleports back to you, sheathing itself as it does so!"
else
msg = "Your Energy Katana teleports to your location!"
diff --git a/code/modules/ninja/outfit.dm b/code/modules/ninja/outfit.dm
index ca740d9ad7..f9ce438ed9 100644
--- a/code/modules/ninja/outfit.dm
+++ b/code/modules/ninja/outfit.dm
@@ -11,7 +11,7 @@
l_pocket = /obj/item/grenade/plastic/c4/ninja
r_pocket = /obj/item/hypospray/mkii/CMO/combat
suit_store = /obj/item/tank/internals/oxygen
- internals_slot = SLOT_S_STORE
+ internals_slot = ITEM_SLOT_SUITSTORE
belt = /obj/item/energy_katana
implants = list(/obj/item/implant/explosive)
diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm
index 6fba60a6ef..4f46a1bfc6 100644
--- a/code/modules/ninja/suit/shoes.dm
+++ b/code/modules/ninja/suit/shoes.dm
@@ -22,7 +22,7 @@
/obj/item/clothing/shoes/space_ninja/equipped(mob/user, slot)
. = ..()
- if(slot == SLOT_SHOES)
+ if(slot == ITEM_SLOT_FEET)
ADD_TRAIT(user, TRAIT_SILENT_STEP, SHOES_TRAIT)
/obj/item/clothing/shoes/space_ninja/dropped(mob/user)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 201200a95d..22ce4e7ce5 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -469,15 +469,20 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
//((((some value between 0.5 and 1 * temp - ((273.15 + 40) * some values between 1 and 10)) * some number between 0.25 and knock your socks off / 150) * 0.25
//Heat and mols account for each other, a lot of hot mols are more damaging then a few
//Mols start to have a positive effect on damage after 350
+ var/spaced = 0
+ for(var/turf/open/space/_space_turf in range(2,src))
+ spaced++
damage = max(damage + (max(clamp(removed.total_moles() / 200, 0.5, 1) * removed.return_temperature() - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0)
//Power only starts affecting damage when it is above 5000
damage = max(damage + (max(power - POWER_PENALTY_THRESHOLD, 0)/500) * DAMAGE_INCREASE_MULTIPLIER, 0)
//Molar count only starts affecting damage when it is above 1800
damage = max(damage + (max(combined_gas - MOLE_PENALTY_THRESHOLD, 0)/80) * DAMAGE_INCREASE_MULTIPLIER, 0)
+ damage = max(damage + spaced * 0.1 * DAMAGE_INCREASE_MULTIPLIER, 0)
+
//There might be a way to integrate healing and hurting via heat
//healing damage
- if(combined_gas < MOLE_PENALTY_THRESHOLD)
+ if(combined_gas < MOLE_PENALTY_THRESHOLD && !spaced)
//Only has a net positive effect when the temp is below 313.15, heals up to 2 damage. Psycologists increase this temp min by up to 45
damage = max(damage + (min(removed.return_temperature() - (T0C + HEAT_PENALTY_THRESHOLD), 0) / 150), 0)
diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
index f07ad0bc39..8c26f40d8b 100644
--- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
+++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
@@ -163,7 +163,7 @@
icon = 'icons/obj/ammo.dmi'
icon_state = "shotgunclip"
caliber = "shotgun" // slapped in to allow shell mix n match
- slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKET
+ slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKETS
w_class = WEIGHT_CLASS_NORMAL
w_volume = ITEM_VOLUME_STRIPPER_CLIP
ammo_type = /obj/item/ammo_casing/shotgun
diff --git a/code/modules/projectiles/boxes_magazines/external/rechargable.dm b/code/modules/projectiles/boxes_magazines/external/rechargable.dm
index 5b774b111a..76d8f217ab 100644
--- a/code/modules/projectiles/boxes_magazines/external/rechargable.dm
+++ b/code/modules/projectiles/boxes_magazines/external/rechargable.dm
@@ -54,7 +54,7 @@
desc = "A miniature battery for an energy weapon."
icon = 'icons/obj/ammo.dmi'
icon_state = "mws_batt"
- slot_flags = SLOT_BELT | SLOT_EARS
+ slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_EARS
throwforce = 1
caliber = "mws"
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index bbd77ad665..a1c7c312ab 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -619,7 +619,7 @@
. += knife_overlay
/obj/item/gun/item_action_slot_check(slot, mob/user, datum/action/A)
- if(istype(A, /datum/action/item_action/toggle_scope_zoom) && slot != SLOT_HANDS)
+ if(istype(A, /datum/action/item_action/toggle_scope_zoom) && slot != ITEM_SLOT_HANDS)
return FALSE
return ..()
diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm
index e7f26670d4..1f0601ac77 100644
--- a/code/modules/projectiles/guns/ballistic/toy.dm
+++ b/code/modules/projectiles/guns/ballistic/toy.dm
@@ -140,6 +140,6 @@
recoil = 0.1
inaccuracy_modifier = 0.25
dualwield_spread_mult = 1.4
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_NORMAL
weapon_weight = WEAPON_MEDIUM
diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm
index a0274d76d7..2bb1ece906 100644
--- a/code/modules/projectiles/guns/energy/laser_gatling.dm
+++ b/code/modules/projectiles/guns/energy/laser_gatling.dm
@@ -32,7 +32,7 @@
/obj/item/minigunpack/on_attack_hand(var/mob/living/carbon/user)
if(src.loc == user)
if(!armed)
- if(user.get_item_by_slot(SLOT_BACK) == src)
+ if(user.get_item_by_slot(ITEM_SLOT_BACK) == src)
armed = 1
if(!user.put_in_hands(gun))
armed = 0
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index 2899f0ca11..d233866f80 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -14,6 +14,7 @@
GLOB.chemical_reagents_list[path] = D
/proc/build_chemical_reactions_list()
+ message_admins("STARTY START START!")
//Chemical Reactions - Initialises all /datum/chemical_reaction into a list
// It is filtered into multiple lists within a list.
// For example:
@@ -26,11 +27,20 @@
//Randomized need to go last since they need to check against conflicts with normal recipes
var/paths = subtypesof(/datum/chemical_reaction) - typesof(/datum/chemical_reaction/randomized) + subtypesof(/datum/chemical_reaction/randomized)
GLOB.chemical_reactions_list = list()
+ GLOB.normalized_chemical_reactions_list = list() // chemistry pda
+ GLOB.drink_reactions_list = list() // bartender pda
for(var/path in paths)
var/datum/chemical_reaction/D = new path()
var/list/reaction_ids = list()
+ // store recipes separately for bartender/chemistry cartridges
+ if(D.id && !D.is_secret) // don't show things like secretcatchem or secret sauce
+ var/datum/reagent/r = D.id
+ if(ispath(D.id, /datum/reagent/consumable))
+ GLOB.drink_reactions_list[initial(r.name)] = D
+ if(ispath(D.id, /datum/reagent))
+ GLOB.normalized_chemical_reactions_list[initial(r.name)] = D
if(D.required_reagents && D.required_reagents.len)
for(var/reaction in D.required_reagents)
@@ -43,6 +53,31 @@
GLOB.chemical_reactions_list[id] += D
break // Don't bother adding ourselves to other reagent ids, it is redundant
+/proc/recipe_search(mob/M, list/reaction_list)
+ var/option = input(M, "Enter keyword to return a recipe.")
+ if(option)
+ option = lowertext(option)
+ var/list/reagents_required
+ var/found_reagent_name
+ var/required_temp
+ for(var/reagent_name in reaction_list)
+ if(findtext(lowertext(reagent_name), option))
+ var/datum/chemical_reaction/reaction = reaction_list[reagent_name]
+ found_reagent_name = reagent_name
+ reagents_required = reaction.required_reagents
+ required_temp = reaction.required_temp
+ break
+ if(length(reagents_required))
+ to_chat(M, "Recipe found: [found_reagent_name][required_temp ? " Required Temperature: [required_temp]K" : ""] Required Reagents:")
+ var/reagents_required_string = ""
+ for(var/r in reagents_required)
+ var/datum/reagent/reagent = r
+ reagents_required_string += " [initial(reagent.name)]: [reagents_required[r]]"
+ to_chat(M, reagents_required_string)
+ return
+ else
+ to_chat(M, "Reagent with term: [option] could not be located!")
+
///////////////////////////////////////////////////////////////////////////////////
/datum/reagents
@@ -199,6 +234,7 @@
var/transfer_amount = T.volume * part
if(preserve_data)
trans_data = copy_data(T)
+ post_copy_data(T)
transferred += "[T] - [transfer_amount]"
R.add_reagent(T.type, transfer_amount * multiplier, trans_data, chem_temp, T.purity, pH, no_react = TRUE, ignore_pH = TRUE) //we only handle reaction after every reagent has been transfered.
@@ -239,7 +275,8 @@
var/datum/reagent/T = reagent
var/copy_amount = T.volume * part
if(preserve_data)
- trans_data = T.data
+ trans_data = copy_data(T)
+ post_copy_data(T)
R.add_reagent(T.type, copy_amount * multiplier, trans_data)
src.update_total()
@@ -266,7 +303,8 @@
var/datum/reagent/current_reagent = CR
if(current_reagent.type == reagent)
if(preserve_data)
- trans_data = current_reagent.data
+ trans_data = copy_data(current_reagent)
+ post_copy_data(current_reagent)
R.add_reagent(current_reagent.type, amount, trans_data, chem_temp, current_reagent.purity, pH, no_react = TRUE)
remove_reagent(current_reagent.type, amount, 1)
if(log && amount > 0)
@@ -1117,6 +1155,11 @@
return trans_data
+///
+// Should be ran after using copy_data. Calls the reagent's post_copy_data, which usually does nothing.
+/datum/reagents/proc/post_copy_data(datum/reagent/current_reagent)
+ return current_reagent.post_copy_data()
+
/datum/reagents/proc/get_reagent(type)
var/list/cached_reagents = reagent_list
. = locate(type) in cached_reagents
diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm
index 9845903e21..8d009ffb2e 100644
--- a/code/modules/reagents/chemistry/reagents.dm
+++ b/code/modules/reagents/chemistry/reagents.dm
@@ -199,6 +199,10 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
M.reagents.add_reagent(impure_chem, impureVol, FALSE, other_purity = 1-cached_purity)
log_reagent("MOB ADD: on_merge() (mixed purity): merged [volume - impureVol] of [type] and [volume] of [impure_chem]")
+//Ran by a reagent holder on a specific reagent after copying its data.
+/datum/reagent/proc/post_copy_data()
+ return
+
/datum/reagent/proc/on_update(atom/A)
return
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index df49474992..4d1ded3913 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -997,11 +997,11 @@
if(M.stat == DEAD)
if(M.suiciding || M.hellbound) //they are never coming back
M.visible_message("[M]'s body does not react...")
- return
+ return ..()
if(M.getBruteLoss() >= 100 || M.getFireLoss() >= 100 || HAS_TRAIT(M, TRAIT_HUSK)) //body is too damaged to be revived
M.visible_message("[M]'s body convulses a bit, and then falls still once more.")
M.do_jitter_animation(10)
- return
+ return ..()
else
M.visible_message("[M]'s body starts convulsing!")
M.notify_ghost_cloning(source = M)
@@ -1013,27 +1013,31 @@
if(iscarbon(M))
var/mob/living/carbon/C = M
if(!(C.dna && C.dna.species && (NOBLOOD in C.dna.species.species_traits)))
- C.blood_volume = max(C.blood_volume, BLOOD_VOLUME_NORMAL*C.blood_ratio) //so you don't instantly re-die from a lack of blood
- for(var/organ in C.internal_organs)
- var/obj/item/organ/O = organ
- if(O.damage > O.maxHealth/2)
- O.setOrganDamage(O.maxHealth/2) //so you don't instantly die from organ damage when being revived
+ C.blood_volume = max(C.blood_volume, BLOOD_VOLUME_BAD*C.blood_ratio) //so you don't instantly re-die from a lack of blood. You'll still need help if you had none though.
+ var/obj/item/organ/heart/H = C.getorganslot(ORGAN_SLOT_HEART)
+ if(H && H.organ_flags & ORGAN_FAILING)
+ H.applyOrganDamage(-15)
+ for(var/obj/item/organ/O as anything in C.internal_organs)
+ if(O.organ_flags & ORGAN_FAILING)
+ O.applyOrganDamage(-5)
M.adjustOxyLoss(-20, 0)
M.adjustToxLoss(-20, 0)
M.updatehealth()
+ if(iscarbon(M))
+ var/mob/living/carbon/C = M
+ if(!C.can_revive(ignore_timelimit = TRUE, maximum_brute_dam = 100, maximum_fire_dam = 100, ignore_heart = TRUE))
+ return
var/tplus = world.time - M.timeofdeath
if(M.revive())
M.grab_ghost()
M.emote("gasp")
log_combat(M, M, "revived", src)
var/list/policies = CONFIG_GET(keyed_list/policy)
- var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
- var/late = timelimit && (tplus > timelimit)
- var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
+ var/policy = policies[POLICYCONFIG_ON_DEFIB_LATE] //Always causes memory loss due to the nature of strange reagent.
if(policy)
to_chat(M, policy)
- M.log_message("revived using strange reagent, [tplus] deciseconds from time of death, considered [late? "late" : "memory-intact"] revival under configured policy limits.", LOG_GAME)
+ M.log_message("revived using strange reagent, [tplus] deciseconds from time of death, considered late revival due to usage of strange reagent.", LOG_GAME)
..()
diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm
index 41c0ed717e..aab46bc3e4 100644
--- a/code/modules/reagents/chemistry/recipes.dm
+++ b/code/modules/reagents/chemistry/recipes.dm
@@ -38,6 +38,8 @@
var/clear_conversion //bitflags for clear conversions; REACTION_CLEAR_IMPURE or REACTION_CLEAR_INVERSE
var/PurityMin = 0.15 //If purity is below 0.15, it explodes too. Set to 0 to disable this.
+ var/is_secret = FALSE // If it should show in recipe searchers such as the bartender/chemistry PDA functions
+
/datum/chemical_reaction/proc/on_reaction(datum/reagents/holder, multiplier, specialreact)
set waitfor = FALSE
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index fddff17a9d..03b0e1b715 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -581,7 +581,7 @@
if(istype(extract))
if(extract.Uses > 0)
var/mob/lastheld = get_mob_by_key(holder.my_atom.fingerprintslast)
- if(lastheld && !lastheld.equip_to_slot_if_possible(extract, SLOT_HANDS, disable_warning = TRUE))
+ if(lastheld && !lastheld.equip_to_slot_if_possible(extract, ITEM_SLOT_HANDS, disable_warning = TRUE))
extract.forceMove(get_turf(lastheld))
use_slime_core(holder)
diff --git a/code/modules/reagents/chemistry/recipes/special.dm b/code/modules/reagents/chemistry/recipes/special.dm
index ad277ef4ff..4aab8e4046 100644
--- a/code/modules/reagents/chemistry/recipes/special.dm
+++ b/code/modules/reagents/chemistry/recipes/special.dm
@@ -54,6 +54,8 @@ GLOBAL_LIST_INIT(food_reagents, build_reagents_to_food()) //reagentid = related
var/max_result_reagents = 1
var/list/possible_results = list()
+ is_secret = TRUE
+
/datum/chemical_reaction/randomized/proc/GenerateRecipe()
created = world.time
if(randomize_container)
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index 6e1b753c32..cc7ff43bab 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -300,14 +300,14 @@
resistance_flags = NONE
armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 50) //Weak melee protection, because you can wear it on your head
slot_equipment_priority = list( \
- SLOT_BACK, SLOT_WEAR_ID,\
- SLOT_W_UNIFORM, SLOT_WEAR_SUIT,\
- SLOT_WEAR_MASK, SLOT_HEAD, SLOT_NECK,\
- SLOT_SHOES, SLOT_GLOVES,\
- SLOT_EARS, SLOT_GLASSES,\
- SLOT_BELT, SLOT_S_STORE,\
- SLOT_L_STORE, SLOT_R_STORE,\
- SLOT_GENERC_DEXTROUS_STORAGE
+ ITEM_SLOT_BACK, ITEM_SLOT_ID,\
+ ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\
+ ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_NECK,\
+ ITEM_SLOT_FEET, ITEM_SLOT_GLOVES,\
+ ITEM_SLOT_EARS, ITEM_SLOT_EYES,\
+ ITEM_SLOT_BELT, ITEM_SLOT_SUITSTORE,\
+ ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET,\
+ ITEM_SLOT_DEX_STORAGE
)
container_flags = APTFT_ALTCLICK|APTFT_VERB
container_HP = 1
@@ -330,11 +330,11 @@
/obj/item/reagent_containers/glass/bucket/equipped(mob/user, slot)
..()
- if (slot == SLOT_HEAD)
+ if (slot == ITEM_SLOT_HEAD)
if(reagents.total_volume)
to_chat(user, "[src]'s contents spill all over you!")
var/R = reagents.log_list()
- log_reagent("SPLASH: [user] splashed [src] on their head via bucket/equipped(self, SLOT_HEAD) - [R]")
+ log_reagent("SPLASH: [user] splashed [src] on their head via bucket/equipped(self, ITEM_SLOT_HEAD) - [R]")
reagents.reaction(user, TOUCH)
reagents.clear_reagents()
reagent_flags = NONE
@@ -345,10 +345,10 @@
/obj/item/reagent_containers/glass/bucket/equip_to_best_slot(var/mob/M)
if(reagents.total_volume) //If there is water in a bucket, don't quick equip it to the head
- var/index = slot_equipment_priority.Find(SLOT_HEAD)
- slot_equipment_priority.Remove(SLOT_HEAD)
+ var/index = slot_equipment_priority.Find(ITEM_SLOT_HEAD)
+ slot_equipment_priority.Remove(ITEM_SLOT_HEAD)
. = ..()
- slot_equipment_priority.Insert(index, SLOT_HEAD)
+ slot_equipment_priority.Insert(index, ITEM_SLOT_HEAD)
return
return ..()
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 55f44a505e..a6b6640ead 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -491,7 +491,7 @@
return
var/fp_verb = mode == HYPO_SPRAY ? "spray" : "inject"
- var/method = mode == HYPO_SPRAY ? TOUCH : INJECT
+ var/method = mode == HYPO_SPRAY ? PATCH : INJECT //Medsprays use patch when spraying, feels like an inconsistancy here.
if(L != user)
L.visible_message("[user] is trying to [fp_verb] [L] with [src]!", \
diff --git a/code/modules/reagents/reagent_containers/rags.dm b/code/modules/reagents/reagent_containers/rags.dm
index c26ed4db31..78cb9d43ea 100644
--- a/code/modules/reagents/reagent_containers/rags.dm
+++ b/code/modules/reagents/reagent_containers/rags.dm
@@ -150,11 +150,11 @@
/obj/item/reagent_containers/rag/towel/equipped(mob/living/user, slot)
. = ..()
switch(slot)
- if(SLOT_BELT)
+ if(ITEM_SLOT_BELT)
body_parts_covered = GROIN|LEGS
- if(SLOT_WEAR_SUIT)
+ if(ITEM_SLOT_OCLOTHING)
body_parts_covered = CHEST|GROIN|LEGS
- if(SLOT_HEAD)
+ if(ITEM_SLOT_HEAD)
body_parts_covered = HEAD
flags_inv = HIDEHAIR
diff --git a/code/modules/research/anomaly/explosive_compressor.dm b/code/modules/research/anomaly/explosive_compressor.dm
index 23983e31dc..54236e3763 100644
--- a/code/modules/research/anomaly/explosive_compressor.dm
+++ b/code/modules/research/anomaly/explosive_compressor.dm
@@ -1,4 +1,4 @@
-#define MAX_RADIUS_REQUIRED 8000 //tritbomb
+#define MAX_RADIUS_REQUIRED 175 //tritbomb
#define MIN_RADIUS_REQUIRED 20 //maxcap
/**
* # Explosive compressor machines
diff --git a/code/modules/research/designs/limbgrower_designs.dm b/code/modules/research/designs/limbgrower_designs.dm
index 8da18c453c..e30cdfb5ef 100644
--- a/code/modules/research/designs/limbgrower_designs.dm
+++ b/code/modules/research/designs/limbgrower_designs.dm
@@ -2,6 +2,18 @@
//////////Limb Grower Designs ///////
/////////////////////////////////////
+
+/datum/design/chestmob
+ name = "Synthetic Humanoid Framework Chest"
+ id = "chestmob"
+ // Mobs don't make very good roundstart icons
+ research_icon = 'icons/mob/human_parts.dmi'
+ research_icon_state = "default_human_chest"
+ build_type = LIMBGROWER
+ reagents_list = list(/datum/reagent/medicine/synthflesh = 100, /datum/reagent/blood = BLOOD_VOLUME_SURVIVE)
+ build_path = /mob/living/carbon/human/chestonly
+ category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno")
+
/datum/design/leftarm
name = "Left Arm"
id = "leftarm"
diff --git a/code/modules/research/nanites/nanite_programs/healing.dm b/code/modules/research/nanites/nanite_programs/healing.dm
index e3cc63c3a0..4603b04b1d 100644
--- a/code/modules/research/nanites/nanite_programs/healing.dm
+++ b/code/modules/research/nanites/nanite_programs/healing.dm
@@ -234,7 +234,7 @@
var/mob/living/carbon/C = host_mob
if(C.get_ghost())
return FALSE
- return C.can_defib()
+ return C.can_revive()
/datum/nanite_program/defib/proc/zap()
var/mob/living/carbon/C = host_mob
diff --git a/code/modules/research/xenobiology/crossbreeding/_clothing.dm b/code/modules/research/xenobiology/crossbreeding/_clothing.dm
index 1ac09652b5..b30a53c27d 100644
--- a/code/modules/research/xenobiology/crossbreeding/_clothing.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_clothing.dm
@@ -19,7 +19,7 @@ Slimecrossing Armor
/obj/item/clothing/mask/nobreath/equipped(mob/living/carbon/human/user, slot)
. = ..()
- if(slot == SLOT_WEAR_MASK)
+ if(slot == ITEM_SLOT_MASK)
ADD_TRAIT(user, TRAIT_NOBREATH, "breathmask_[REF(src)]")
user.failed_last_breath = FALSE
user.clear_alert("not_enough_oxy")
@@ -39,7 +39,7 @@ Slimecrossing Armor
var/glasses_color = "#FFFFFF"
/obj/item/clothing/glasses/prism_glasses/item_action_slot_check(slot)
- if(slot == SLOT_GLASSES)
+ if(slot == ITEM_SLOT_EYES)
return TRUE
/obj/structure/light_prism
@@ -111,7 +111,7 @@ Slimecrossing Armor
/obj/item/clothing/head/peaceflower/equipped(mob/living/carbon/human/user, slot)
. = ..()
- if(slot == SLOT_HEAD)
+ if(slot == ITEM_SLOT_HEAD)
ADD_TRAIT(user, TRAIT_PACIFISM, "peaceflower_[REF(src)]")
/obj/item/clothing/head/peaceflower/dropped(mob/living/carbon/human/user)
diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm
index dee7b1cf45..f871cac778 100644
--- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm
+++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm
@@ -127,10 +127,10 @@ Regenerative extracts:
/obj/item/slimecross/regenerative/darkpurple/core_effect(mob/living/target, mob/user)
var/equipped = 0
- equipped += target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/purple(null), SLOT_SHOES)
- equipped += target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(null), SLOT_W_UNIFORM)
- equipped += target.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/purple(null), SLOT_GLOVES)
- equipped += target.equip_to_slot_or_del(new /obj/item/clothing/head/soft/purple(null), SLOT_HEAD)
+ equipped += target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/purple(null), ITEM_SLOT_FEET)
+ equipped += target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(null), ITEM_SLOT_ICLOTHING)
+ equipped += target.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/purple(null), ITEM_SLOT_GLOVES)
+ equipped += target.equip_to_slot_or_del(new /obj/item/clothing/head/soft/purple(null), ITEM_SLOT_HEAD)
if(equipped > 0)
target.visible_message("The milky goo congeals into clothing!")
@@ -142,13 +142,13 @@ Regenerative extracts:
return
var/mob/living/carbon/human/H = target
var/fireproofed = FALSE
- if(H.get_item_by_slot(SLOT_WEAR_SUIT))
+ if(H.get_item_by_slot(ITEM_SLOT_OCLOTHING))
fireproofed = TRUE
- var/obj/item/clothing/C = H.get_item_by_slot(SLOT_WEAR_SUIT)
+ var/obj/item/clothing/C = H.get_item_by_slot(ITEM_SLOT_OCLOTHING)
fireproof(C)
- if(H.get_item_by_slot(SLOT_HEAD))
+ if(H.get_item_by_slot(ITEM_SLOT_HEAD))
fireproofed = TRUE
- var/obj/item/clothing/C = H.get_item_by_slot(SLOT_HEAD)
+ var/obj/item/clothing/C = H.get_item_by_slot(ITEM_SLOT_HEAD)
fireproof(C)
if(fireproofed)
target.visible_message("Some of [target]'s clothing gets coated in the goo, and turns blue!")
diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm
index fbe7a0ea40..bf6051c87c 100644
--- a/code/modules/spells/spell_types/lichdom.dm
+++ b/code/modules/spells/spell_types/lichdom.dm
@@ -63,9 +63,9 @@
H.dropItemToGround(H.w_uniform)
H.dropItemToGround(H.wear_suit)
H.dropItemToGround(H.head)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(H), SLOT_WEAR_SUIT)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(H), SLOT_HEAD)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(H), SLOT_W_UNIFORM)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(H), ITEM_SLOT_OCLOTHING)
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(H), ITEM_SLOT_HEAD)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(H), ITEM_SLOT_ICLOTHING)
// you only get one phylactery.
M.mind.RemoveSpell(src)
@@ -132,10 +132,10 @@
var/mob/old_body = mind.current
var/mob/living/carbon/human/lich = new(item_turf)
- lich.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(lich), SLOT_SHOES)
- lich.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(lich), SLOT_W_UNIFORM)
- lich.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(lich), SLOT_WEAR_SUIT)
- lich.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(lich), SLOT_HEAD)
+ lich.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(lich), ITEM_SLOT_FEET)
+ lich.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(lich), ITEM_SLOT_ICLOTHING)
+ lich.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(lich), ITEM_SLOT_OCLOTHING)
+ lich.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(lich), ITEM_SLOT_HEAD)
lich.real_name = mind.name
mind.transfer_to(lich)
diff --git a/code/modules/surgery/advanced/brainwashing.dm b/code/modules/surgery/advanced/brainwashing.dm
index 28103f7f97..2a09fd2b93 100644
--- a/code/modules/surgery/advanced/brainwashing.dm
+++ b/code/modules/surgery/advanced/brainwashing.dm
@@ -49,6 +49,8 @@
to_chat(target, "A new compulsion fills your mind... you feel forced to obey it!")
brainwash(target, objective)
message_admins("[ADMIN_LOOKUPFLW(user)] surgically brainwashed [ADMIN_LOOKUPFLW(target)] with the objective '[objective]'.")
+ user.log_message("has brainwashed [key_name(target)] with the objective '[objective]' using brainwashing surgery.", LOG_ATTACK)
+ target.log_message("has been brainwashed with the objective '[objective]' by [key_name(user)] using brainwashing surgery.", LOG_VICTIM, log_globally=FALSE)
log_game("[key_name(user)] surgically brainwashed [key_name(target)] with the objective '[objective]'.")
return TRUE
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index a3c6ea06c8..05f3f06b06 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -156,12 +156,14 @@
return FALSE
if(organ_flags & ORGAN_SYNTHETIC_EMP) //Synthetic organ has been emped, is now failing.
applyOrganDamage(maxHealth * decay_factor)
- return
+ return FALSE
+ if(organ_flags & ORGAN_SYNTHETIC)
+ return TRUE
if(!is_cold() && damage)
///Damage decrements by a percent of its maxhealth
var/healing_amount = -(maxHealth * healing_factor)
///Damage decrements again by a percent of its maxhealth, up to a total of 4 extra times depending on the owner's satiety
- healing_amount -= owner.satiety > 0 ? 4 * healing_factor * owner.satiety / MAX_SATIETY : 0
+ healing_amount -= owner.satiety > 0 ? 4 * (maxHealth * healing_factor) * (owner.satiety / MAX_SATIETY) : 0
if(healing_amount)
applyOrganDamage(healing_amount) //to FERMI_TWEAK
return TRUE
diff --git a/code/modules/surgery/organs/stomach.dm b/code/modules/surgery/organs/stomach.dm
index f7b84eab20..3b3aa72749 100644
--- a/code/modules/surgery/organs/stomach.dm
+++ b/code/modules/surgery/organs/stomach.dm
@@ -131,6 +131,13 @@
name = "ipc cell"
icon_state = "stomach-ipc"
+/obj/item/organ/stomach/ipc/on_life()
+ . = ..()
+ if(!.)
+ return
+ if(HAS_TRAIT(owner, TRAIT_ROBOTIC_ORGANISM) && owner.nutrition >= NUTRITION_LEVEL_FED)
+ owner.satiety += 5 //We don't need to cap the value as it's already automatically capped during nutrition level handling. Also effectively only +4 as you lose 1 per life tick. 300 seconds of sufficient charge to reach full satiety.
+
/obj/item/organ/stomach/ipc/emp_act(severity)
. = ..()
if(!owner || . & EMP_PROTECT_SELF)
diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm
index 3e0e71446d..d4a87a0f1e 100644
--- a/code/modules/vehicles/scooter.dm
+++ b/code/modules/vehicles/scooter.dm
@@ -102,7 +102,7 @@
var/atom/throw_target = get_edge_target_turf(H, pick(GLOB.cardinals))
unbuckle_mob(H)
H.throw_at(throw_target, 3, 2)
- var/head_slot = H.get_item_by_slot(SLOT_HEAD)
+ var/head_slot = H.get_item_by_slot(ITEM_SLOT_HEAD)
if(!head_slot || !(istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat)))
H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5)
H.updatehealth()
@@ -281,7 +281,7 @@
H.throw_at(throw_target, 4, 3)
H.DefaultCombatKnockdown(30)
H.adjustStaminaLoss(30)
- var/head_slot = H.get_item_by_slot(SLOT_HEAD)
+ var/head_slot = H.get_item_by_slot(ITEM_SLOT_HEAD)
if(!head_slot || !(istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat)))
H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1)
H.updatehealth()
diff --git a/config/entries/logging.txt b/config/entries/logging.txt
index 31692afccb..6483a371f0 100644
--- a/config/entries/logging.txt
+++ b/config/entries/logging.txt
@@ -34,6 +34,9 @@ LOG_EMOTE
## log attack messages
LOG_ATTACK
+## log victim messages
+LOG_VICTIM
+
## log pda messages
LOG_PDA
diff --git a/dependencies.sh b/dependencies.sh
index 4474cc8736..0a27dd623f 100644
--- a/dependencies.sh
+++ b/dependencies.sh
@@ -18,7 +18,7 @@ export NODE_VERSION_PRECISE=12.22.4
export SPACEMAN_DMM_VERSION=suite-1.7
# Python version for mapmerge and other tools
-export PYTHON_VERSION=3.6.8
+export PYTHON_VERSION=3.7.9
# Auxmos git tag
export AUXMOS_VERSION=v0.3.0
diff --git a/html/changelogs/archive/2022-02.yml b/html/changelogs/archive/2022-02.yml
index ab94ea975b..12ad63274c 100644
--- a/html/changelogs/archive/2022-02.yml
+++ b/html/changelogs/archive/2022-02.yml
@@ -78,3 +78,99 @@
'[Timberpoes](https://github.com/Timberpoes)':
- admin: Re-added the button to the player playtime panel that lets admins toggle
a player's job playtime exemption status.
+2022-02-19:
+ timothyteakettle:
+ - rscadd: polychromic clown outfit and mask
+2022-02-20:
+ jupyterkat:
+ - refactor: switched equalization method to katmos
+2022-02-21:
+ BlueWildrose and tralezab, Wjohnston, Mey Ha Zah, ArcaneDefense, Jack7D1, Papaporo, Sheits & Mqiib from TG and Yog:
+ - rscadd: TG wing port - All species can now use flight potions and grow wings.
+ Your wing sprite will be based off of what wings you have on your character,
+ or otherwise what species you are if you have no wings.
+ - bugfix: Jellypeople did not call the species parent proc on spec_life. Fixed.
+ Putnam3145:
+ - bugfix: Default features on linux auxmos compile now formatted correctly
+ - bugfix: reinforced plasma glass windows are buildable
+ TripleShades:
+ - rscadd: '[Omega] Gateway shutter button'
+ - rscadd: '[Omega] Signs to the airlocks that lead to space that say SPACE'
+ - rscadd: '[Omega] Air Alarm for the Turbine itself'
+ - rscadd: '[Omega] SMES Unit for the Turbine itself'
+ - rscadd: '[Omega] Firelock to Robotics airlock'
+ - rscadd: '[Omega] Captain''s Office now has a hand teleporter and medal box'
+ - rscadd: '[Omega] Screwdriver to Chemistry'
+ - rscadd: '[Omega] Space Cleaner bottle to Medbay'
+ - rscadd: '[Omega] Limb Grower and Spare Limb Crate to Surgery'
+ - rscadd: '[Omega] Kinkmate in Dorms'
+ - rscadd: '[Omega] Lightbulb fixture to Secure Tech Storage'
+ - rscadd: '[Omega] Armsky is now in the Armoury'
+ - rscdel: '[Omega] Extra automated announcement machine'
+ - rscdel: '[Omega] Wall inside of southwest Solar Array window'
+ - rscdel: '[Omega] Wall inside library maint airlock'
+ - rscdel: '[Omega] Duplicate Robotics airlock tweak: [Omega] HoS gun now spawns
+ in HoS locker instead of Captain''s locker tweak: [Omega] Both Solar Arrays
+ now have more windows tweak: [Omega] PACMAN moved out from behind a Command
+ airlock in Engineering tweak: [Omega] A few cameras so that they''re not sitting
+ improperly on windows tweak: [Omega] Medbay Surgery now has a surgical duffel
+ instead of strewn about tools tweak: [Omega] Security Cell 1 is now properly
+ named and has a bed instead of a chair tweak: [Omega] Toxins scrubber piping
+ now goes through a wall tweak: [Omega] Robotics trash can is now moved to the
+ small hallway between Robotics and Toxins tweak: [Omega] Maint Pool drain moved
+ down a tile so it''s easier to retrieve lost items'
+ - bugfix: '[Omega] Lawyer Office access'
+ - bugfix: '[Omega] Both Solar Arrays are now wired up to power the station properly'
+ - bugfix: '[Omega] Wire leading to the single Supermatter Emitter should now be
+ properly connected and not diagonal'
+ - bugfix: '[Omega] Gateway Maint airlock access'
+ - bugfix: '[Omega] Toxins Launch not being connected to the main air supply'
+ - bugfix: '[Omega] Toxins Mix Chamber no longer starts bolted'
+ - bugfix: '[Omega] Missing pipe above Security leading into Perma'
+ - bugfix: '[Omega] Secure Tech Storage now properly has an area'
+2022-02-23:
+ SandPoot:
+ - bugfix: You know the training targets? You can grab them again now with your own
+ hands, instead of using telekinesis.
+ TripleShades:
+ - rscadd: '[Omega] Trash chute to space in Virology'
+ - rscadd: '[Omega] Trash chute to space in Xenobiology'
+ - rscadd: '[Omega] Airlock leading out to Supermatter cooling pipeline'
+ - rscadd: '[Omega] Two more air pumps to Toxins'
+ - rscadd: '[Omega] Robotics circuitry printer'
+ - rscadd: '[Omega] Windoor to Cargo delivery flaps'
+ - rscdel: '[Omega] Backdoor to Gravity Generator'
+ - rscdel: '[Omega] Bunched up cameras tweak: [Omega] Pipes leading to the Incinerator
+ burn chamber are now black tweak: [Omega] Gravity Generator airlocks are now
+ accessible by engineers tweak: [Omega] Chapel mass driver and mass driver bulkhead
+ are now controlled by one button instead of two'
+ - bugfix: '[Omega] Lawyer''s carpet is no longer airless'
+2022-02-25:
+ TripleShades:
+ - rscadd: '[Omega] Additional Solar Panels to both existing arrays'
+ - rscadd: '[Omega] Floor tile underneath library maint airlock'
+ - rscadd: '[Omega] Contraband locker to Armoury'
+ - bugfix: '[Omega] Solar Array SMES Units actually connect to the grid properly
+ now'
+ timothyteakettle:
+ - rscadd: adds snake coiling
+2022-02-26:
+ Putnam3145:
+ - balance: Now slightly easier to get 50,000 points with toxins (50,000 point baseline
+ changed from 200 light range to 175)
+2022-02-28:
+ Arturlang:
+ - rscadd: The limbgrower can make human chest parts that you can build onto into
+ a person.
+ Putnam3145:
+ - rscadd: Configurable weekly high-chaos days
+ SandPoot:
+ - refactor: Kills off SLOT_ in favor of ITEM_SLOT_
+ SandPoot and Crowbar764:
+ - rscadd: TGUI for the player playtimes menu.
+ bunny232:
+ - rscadd: Cold weather gear can now provide insulation against temperatures of up
+ to 57C (330K)
+ timothyteakettle:
+ - rscadd: adds a cartridge for the bartender's PDA that lets them search drink recipes
+ - rscadd: updates chemist cartridge to be able to search all chemical recipes
diff --git a/html/statbrowser.html b/html/statbrowser.html
index 1cb089a189..ecb47c419c 100644
--- a/html/statbrowser.html
+++ b/html/statbrowser.html
@@ -12,16 +12,27 @@
font-size: 12px !important;
margin: 0 !important;
padding: 0 !important;
+ overflow-x: hidden;
+ overflow-y: scroll;
}
+
body.dark {
background-color: #131313;
- color: #abc6ec;
+ color: #b2c4dd;
+ scrollbar-base-color: #1c1c1c;
+ scrollbar-face-color: #3b3b3b;
+ scrollbar-3dlight-color: #252525;
+ scrollbar-highlight-color: #252525;
+ scrollbar-track-color: #1c1c1c;
+ scrollbar-arrow-color: #929292;
+ scrollbar-shadow-color: #3b3b3b;
}
#menu {
background-color: #F0F0F0;
position: fixed;
width: 100%;
+ z-index: 100;
}
.dark #menu {
@@ -38,7 +49,7 @@
}
.dark a {
- color: #abc6ec;
+ color: #b2c4dd;
}
a:hover, .dark a:hover {
@@ -80,73 +91,115 @@
.button {
background-color: #dfdfdf;
- border-color: #cecece;
- border-width: 1px;
- border-style: solid;
+ border: 1px solid #cecece;
+ border-bottom-width: 2px;
color: rgba(0, 0, 0, 0.7);
- padding: 6px 4px;
+ padding: 6px 4px 4px;
text-align: center;
text-decoration: none;
font-size: 12px;
margin: 0;
cursor: pointer;
- transition-duration: 0.25s;
+ transition-duration: 100ms;
order: 3;
min-width: 40px;
}
.dark button {
- background-color: #444444;
+ background-color: #222222;
border-color: #343434;
- color: rgba(255, 255, 255, 0.7);
+ color: rgba(255, 255, 255, 0.5);
}
.button:hover {
background-color: #ececec;
+ transition-duration: 0;
}
.dark button:hover {
- background-color: #4d4d4d;
+ background-color: #2e2e2e;
}
.button:active, .button.active {
background-color: #ffffff;
color: black;
- border-top: 1px solid #cecece;
- border-left: 1px solid #cecece;
- border-right: 1px solid #cecece;
- border-bottom: 1px solid #ffffff;
+ border-top-color: #cecece;
+ border-left-color: #cecece;
+ border-right-color: #cecece;
+ border-bottom-color: #ffffff;
}
.dark .button:active, .dark .button.active {
- background-color: #131313;
+ background-color: #444444;
color: white;
- border-top: 1px solid #343434;
- border-left: 1px solid #343434;
- border-right: 1px solid #343434;
- border-bottom: 1px solid #131313;
+ border-top-color: #343434;
+ border-left-color: #343434;
+ border-right-color: #343434;
+ border-bottom-color: #ffffff;
}
.grid-container {
- display: inline-flex;
- flex-wrap: wrap;
- justify-content: flex-start;
- align-items: flex-start;
- min-width: 0;
- min-height: 0;
- white-space: pre-wrap;
+ margin: -2px;
+ margin-right: -15px;
}
.grid-item {
- color: black;
- width: 150px;
- font-size: 11px;
- line-height: 24px;
- text-align: left;
- min-width: 0;
- min-height: 0;
- white-space: pre-wrap;
- padding-right: 12px; /* A little more than two spaces, to look good in IE8 where flex-justify does nothing */
+ position: relative;
+ display: inline-block;
+ width: 100%;
+ box-sizing: border-box;
+ overflow: visible;
+ padding: 3px 2px;
+ text-decoration: none;
+ }
+
+ @media only screen and (min-width: 300px) {
+ .grid-item {
+ width: 50%;
+ }
+ }
+
+ @media only screen and (min-width: 430px) {
+ .grid-item {
+ width: 33%;
+ }
+ }
+
+ @media only screen and (min-width: 560px) {
+ .grid-item {
+ width: 25%;
+ }
+ }
+
+ @media only screen and (min-width: 770px) {
+ .grid-item {
+ width: 20%;
+ }
+ }
+
+ .grid-item:hover {
+ z-index: 1;
+ }
+
+ .grid-item:hover .grid-item-text {
+ width: auto;
+ text-decoration: underline;
+ }
+
+ .grid-item-text {
+ display: inline-block;
+ width: 100%;
+ background-color: #ffffff;
+ margin: 0 -6px;
+ padding: 0 6px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ pointer-events: none;
+ }
+
+ .dark .grid-item-text {
+ background-color: #131313;
}
.link {
@@ -173,6 +226,10 @@
-ms-interpolation-mode: nearest-neighbor;
image-rendering: pixelated;
}
+
+ .interview_panel_controls, .interview_panel_stats {
+ margin-bottom: 10px;
+ }
@@ -242,53 +299,6 @@ if (!String.prototype.trim) {
}, 0, 'test');
}())
-// Browser passthrough code ---------------------------------------------------
-if (window.location) {
- var anti_spam = []; // wow I wish I could use e.repeat but IE is dumb and doesn't have it.
- document[addEventListenerKey]("keydown", function(e) {
- if(e.target && (e.target.localName == "input" || e.target.localName == "textarea"))
- return;
- if(e.defaultPrevented)
- return; // do e.preventDefault() to prevent this behavior.
- if(e.which) {
- if(!anti_spam[e.which]) {
- anti_spam[e.which] = true;
- var key = String.fromCharCode(e.which);
- var x = event.x || event.clientX;
- var y = event.y || event.clientY;
- if(x || y ) // if either of these exist this is happening after a click
- return;
- window.location.href = "byond://winset?command=keyDown " + e.key;
- }
- }
- });
- document[addEventListenerKey]("keyup", function(e) {
- if(e.target && (e.target.localName == "input" || e.target.localName == "textarea"))
- return;
- if(e.defaultPrevented)
- return;
- if(e.which) {
- anti_spam[e.which] = false;
- var key = String.fromCharCode(e.which);
- var x = event.x || event.clientX;
- var y = event.y || event.clientY;
- if( x || y ) // if either of these exist this is happening after a click
- return;
-
- window.location.href = "byond://winset?command=keyUp " + e.key;
- }
- });
-}
-/* document.addEventListener("mousedown", function(e){
- var shiftPressed=0;
- var evt = e?e:window.event;
- shiftPressed=evt.shiftKey;
- if (shiftPressed) {
- return false;
- }
- return true;
-}); */
-
// Status panel implementation ------------------------------------------------
var status_tab_parts = ["Loading..."];
var current_tab = null;
@@ -300,20 +310,80 @@ var spell_tabs = [];
var verb_tabs = [];
var verbs = [["", ""]]; // list with a list inside
var tickets = [];
+var interviewManager = {status: "", interviews: []};
var sdql2 = [];
var permanent_tabs = []; // tabs that won't be cleared by wipes
var turfcontents = [];
var turfname = "";
var imageRetryDelay = 500;
var imageRetryLimit = 50;
-var menu = document.querySelector('#menu');
-var under_menu = document.querySelector('#under_menu');
-var statcontentdiv = document.querySelector('#statcontent');
+var menu = document.getElementById('menu');
+var under_menu = document.getElementById('under_menu');
+var statcontentdiv = document.getElementById('statcontent');
var storedimages = [];
+var split_admin_tabs = false;
+
+var connected = false;
+var commandQueue = [];
+
+// Any BYOND verb call must go through this, as if a verb is sent during reconnect then
+// it will cause the reconnect to fail.
+// This function will either call immediately, or queue until
+// BYOND confirms we are connected.
+function send_byond_command(command) {
+ var href = "byond://winset?command=" + command;
+
+ if (connected) {
+ window.location.href = href;
+ } else {
+ commandQueue.push(href);
+ }
+}
+
+// Any BYOND commands that could result in the client's focus changing go through this
+// to ensure that when we relinquish our focus, we don't do it after the result of
+// a command has already taken focus for itself.
+function run_after_focus(callback) {
+ setTimeout(callback, 0);
+}
+
+function connected_to_server() {
+ if (connected) {
+ return;
+ }
+
+ connected = true;
+
+ for (var index = 0; index < commandQueue.length; index++) {
+ // This is just setting it a lot, is this not going to cancel?
+ window.location.href = commandQueue[index];
+ }
+
+ commandQueue = [];
+}
+
+function update_split_admin_tabs(status) {
+ status = (status == true);
+
+ if (split_admin_tabs !== status) {
+ if (split_admin_tabs === true) {
+ removeStatusTab("Events");
+ removeStatusTab("Fun");
+ removeStatusTab("Game");
+ }
+ update_verbs();
+ }
+ split_admin_tabs = status;
+}
function createStatusTab(name) {
- if (name.indexOf(".") != -1)
- name = name.split(".")[0];
+ if (name.indexOf(".") != -1) {
+ var splitName = name.split(".");
+ if (split_admin_tabs && splitName[0] === "Admin")
+ name = splitName[1];
+ else
+ name = splitName[0];
+ }
if(document.getElementById(name) || name.trim() == "")
return;
if(!verb_tabs.includes(name) && !permanent_tabs.includes(name))
@@ -386,6 +456,7 @@ function checkStatusTab() {
if(!verb_tabs.includes(menu.children[i].id) && !permanent_tabs.includes(menu.children[i].id))
menu.removeChild(menu.children[i]);
}
+
function remove_verb(v) {
var verb_to_remove = v; // to_remove = [verb:category, verb:name]
for(var i = verbs.length - 1; i >= 0; i--){
@@ -403,7 +474,14 @@ function check_verbs() {
}
function verbs_cat_check(cat) {
- var tabCat = cat.indexOf(".") != -1 ? cat.split(".")[0] : cat;
+ var tabCat = cat;
+ if (cat.indexOf(".") != -1) {
+ var splitName = cat.split(".");
+ if (split_admin_tabs && splitName[0] === "Admin")
+ tabCat = splitName[1];
+ else
+ tabCat = splitName[0];
+ }
var verbs_in_cat = 0;
var verbcat = "";
if(!verb_tabs.includes(tabCat)){
@@ -412,7 +490,14 @@ function verbs_cat_check(cat) {
}
for(var v = 0; v < verbs.length; v++){
var part = verbs[v];
- verbcat = part[0].indexOf(".") != -1 ? part[0].split(".")[0] : part[0];
+ verbcat = part[0];
+ if (verbcat.indexOf(".") != -1) {
+ var splitName = verbcat.split(".");
+ if (split_admin_tabs && splitName[0] === "Admin")
+ verbcat = splitName[1];
+ else
+ verbcat = splitName[0];
+ }
if(verbcat != tabCat || verbcat.trim() == ""){
continue;
}
@@ -441,6 +526,11 @@ function wipe_verbs() {
checkStatusTab(); // remove all empty verb tabs
}
+function update_verbs() {
+ wipe_verbs();
+ send_byond_command("Update-Verbs");
+}
+
function add_verb_list(v) {
var to_add = JSON.parse(v); // list of a list with category and verb inside it
to_add.sort(); // sort what we're adding
@@ -448,7 +538,14 @@ function add_verb_list(v) {
var part = to_add[i];
if(!part[0])
continue;
- var category = part[0].indexOf(".") == -1 ? part[0] : part[0].split(".")[0];
+ var category = part[0];
+ if (category.indexOf(".") != -1) {
+ var splitName = category.split(".");
+ if (split_admin_tabs && splitName[0] === "Admin")
+ category = splitName[1];
+ else
+ category = splitName[0];
+ }
if(findVerbindex(part[1], verbs))
continue;
if(verb_tabs.includes(category)){
@@ -478,6 +575,7 @@ function remove_verb_list(v) {
// passes a 2D list of (verbcategory, verbname) creates tabs and adds verbs to respective list
// example (IC, Say)
function init_verbs(c, v) {
+ connected_to_server();
wipe_verbs(); // remove all verb categories so we can replace them
checkStatusTab(); // remove all status tabs
verb_tabs = JSON.parse(c);
@@ -510,12 +608,12 @@ function SendTabsToByond(){
}
function SendTabToByond(tab) {
- window.location.href = "byond://winset?command=Send-Tabs " + tab;
+ send_byond_command("Send-Tabs " + tab);
}
//Byond can't have this tab anymore since we're removing it
function TakeTabFromByond(tab) {
- window.location.href = "byond://winset?command=Remove-Tabs " + tab;
+ send_byond_command("Remove-Tabs " + tab);
}
function update(global_data, ping_entry, other_entries) {
@@ -625,6 +723,7 @@ function tab_change(tab) {
draw_debug();
} else if(tab == "Tickets") {
draw_tickets();
+// draw_interviews();
} else if(tab == "SDQL2") {
draw_sdql2();
}else if(tab == turfname) {
@@ -636,8 +735,9 @@ function tab_change(tab) {
}
function set_byond_tab(tab){
- window.location.href = "byond://winset?command=Set-Tab " + tab;
+ send_byond_command("Set-Tab " + tab);
}
+
function draw_debug() {
statcontentdiv[textContentKey] = "";
var wipeverbstabs = document.createElement("div");
@@ -646,12 +746,26 @@ function draw_debug() {
link[textContentKey] = "Wipe All Verbs";
wipeverbstabs.appendChild(link);
document.getElementById("statcontent").appendChild(wipeverbstabs);
+ var wipeUpdateVerbsTabs = document.createElement("div");
+ var updateLink = document.createElement("a");
+ updateLink.onclick = function() {update_verbs()};
+ updateLink[textContentKey] = "Wipe and Update All Verbs";
+ wipeUpdateVerbsTabs.appendChild(updateLink);
+ document.getElementById("statcontent").appendChild(wipeUpdateVerbsTabs);
var text = document.createElement("div");
text[textContentKey] = "Verb Tabs:";
document.getElementById("statcontent").appendChild(text);
var table1 = document.createElement("table");
for(var i=0; i < verb_tabs.length ; i++) {
var part = verb_tabs[i];
+ // Hide subgroups except admin subgroups if they are split
+ if (verb_tabs[i].lastIndexOf(".") != -1) {
+ var splitName = verb_tabs[i].split(".");
+ if (split_admin_tabs && splitName[0] === "Admin")
+ part = splitName[1];
+ else
+ continue;
+ }
var tr = document.createElement("tr");
var td1 = document.createElement("td");
td1[textContentKey] = part;
@@ -740,7 +854,7 @@ function draw_status() {
}
if(verb_tabs.length == 0 || !verbs)
{
- window.location.href = "byond://winset?command=Fix-Stat-Panel";
+ send_byond_command("Fix-Stat-Panel");
}
}
@@ -776,6 +890,11 @@ function update_tickets(T){
if(current_tab == "Tickets")
draw_tickets();
}
+function update_interviews(I){
+ interviewManager = JSON.parse(I);
+ if(current_tab == "Tickets")
+ draw_interviews();
+}
function update_sdql2(S) {
sdql2 = JSON.parse(S);
if(sdql2.length > 0 && !verb_tabs.includes("SDQL2")) {
@@ -805,12 +924,21 @@ function remove_tickets() {
}
checkStatusTab();
}
+
+function remove_interviews() {
+ if(tickets) {
+ tickets = [];
+ }
+ checkStatusTab();
+}
+
// removes MC, Tickets and MC tabs.
function remove_admin_tabs() {
href_token = null;
remove_mc();
remove_tickets();
remove_sdql2();
+// remove_interviews();
}
function add_admin_tabs(ht) {
@@ -875,7 +1003,17 @@ function draw_listedturf() {
// rather than every onmousedown getting the "part" of the last entry.
return function(e) {
e.preventDefault();
- clickcatcher = "?src=_statpanel_;statpanel_item_target=" + part[1] + ";statpanel_item_click=1";
+ clickcatcher = "?src=_statpanel_;statpanel_item_target=" + part[1];
+ switch(e.button){
+ case 1:
+ clickcatcher += ";statpanel_item_click=middle"
+ break;
+ case 2:
+ clickcatcher += ";statpanel_item_click=right"
+ break;
+ default:
+ clickcatcher += ";statpanel_item_click=left"
+ }
if(e.shiftKey){
clickcatcher += ";statpanel_item_shiftclick=1";
}
@@ -912,7 +1050,7 @@ function draw_sdql2(){
var td2 = document.createElement("td");
if(part[2]) {
var a = document.createElement("a");
- a.href = "?src=" + "_statpanel_" + ";statpanel_item_target=" + part[2] + ";statpanel_item_click=1";
+ a.href = "?src=" + "_statpanel_" + ";statpanel_item_target=" + part[2] + ";statpanel_item_click=left";
a[textContentKey] = part[1];
td2.appendChild(a);
} else {
@@ -938,12 +1076,12 @@ function draw_tickets() {
var td2 = document.createElement("td");
if(part[2]) {
var a = document.createElement("a");
- a.href = "?_src_=holder;admin_token=" + href_token + ";ahelp=" + part[2] + ";ahelp_action=ticket;statpanel_item_click=1;action=ticket" ;
+ a.href = "?_src_=holder;admin_token=" + href_token + ";ahelp=" + part[2] + ";ahelp_action=ticket;statpanel_item_click=left;action=ticket" ;
a[textContentKey] = part[1];
td2.appendChild(a);
} else if(part[3]){
var a = document.createElement("a");
- a.href = "?src=_statpanel_" + ";statpanel_item_target=" + part[3] + ";statpanel_item_click=1";
+ a.href = "?src=_statpanel_" + ";statpanel_item_target=" + part[3] + ";statpanel_item_click=left";
a[textContentKey] = part[1];
td2.appendChild(a);
} else {
@@ -956,6 +1094,55 @@ function draw_tickets() {
document.getElementById("statcontent").appendChild(table);
}
+function draw_interviews() {
+ var body = document.createElement("div");
+ var header = document.createElement("h3");
+ header[textContentKey] = "Interviews";
+ body.appendChild(header);
+ var manDiv = document.createElement("div");
+ manDiv.className = "interview_panel_controls"
+ var manLink = document.createElement("a");
+ manLink[textContentKey] = "Open Interview Manager Panel";
+ manLink.href = "?_src_=holder;admin_token=" + href_token + ";interview_man=1;statpanel_item_click=left";
+ manDiv.appendChild(manLink);
+ body.appendChild(manDiv);
+
+ // List interview stats
+ var statsDiv = document.createElement("table");
+ statsDiv.className="interview_panel_stats";
+ for (var key in interviewManager.status) {
+ var d = document.createElement("div");
+ var tr = document.createElement("tr");
+ var stat_name = document.createElement("td");
+ var stat_text = document.createElement("td");
+ stat_name[textContentKey] = key;
+ stat_text[textContentKey] = interviewManager.status[key];
+ tr.appendChild(stat_name);
+ tr.appendChild(stat_text);
+ statsDiv.appendChild(tr);
+ }
+ body.appendChild(statsDiv);
+ document.getElementById("statcontent").appendChild(body);
+
+ // List interviews if any are open
+ var table = document.createElement("table");
+ table.className = "interview_panel_table";
+ if(!interviewManager)
+ return;
+ for(var i = 0; i < interviewManager.interviews.length; i++) {
+ var part = interviewManager.interviews[i];
+ var tr = document.createElement("tr");
+ var td = document.createElement("td");
+ var a = document.createElement("a");
+ a[textContentKey] = part["status"];
+ a.href = "?_src_=holder;admin_token=" + href_token + ";interview=" + part["ref"] + ";statpanel_item_click=left";
+ td.appendChild(a);
+ tr.appendChild(td);
+ table.appendChild(tr);
+ }
+ document.getElementById("statcontent").appendChild(table);
+}
+
function draw_spells(cat) {
statcontentdiv[textContentKey] = "";
var table = document.createElement("table");
@@ -968,7 +1155,7 @@ function draw_spells(cat) {
var td2 = document.createElement("td");
if(part[3]) {
var a = document.createElement("a");
- a.href = "?src=" + part[3] + ";statpanel_item_click=1";
+ a.href = "?src=" + part[3] + ";statpanel_item_click=left";
a[textContentKey] = part[2];
td2.appendChild(a);
} else {
@@ -981,16 +1168,34 @@ function draw_spells(cat) {
document.getElementById("statcontent").appendChild(table);
}
+function make_verb_onclick(command) {
+ return function() {
+ run_after_focus(function() {
+ send_byond_command(command);
+ });
+ };
+}
+
function draw_verbs(cat){
statcontentdiv[textContentKey] = "";
var table = document.createElement("div");
var additions = {}; // additional sub-categories to be rendered
table.className = "grid-container";
sortVerbs();
+ if (split_admin_tabs && cat.lastIndexOf(".") != -1) {
+ var splitName = cat.split(".");
+ if (splitName[0] === "Admin")
+ cat = splitName[1];
+ }
verbs.reverse(); // sort verbs backwards before we draw
for (var i = 0; i < verbs.length; ++i) {
var part = verbs[i];
var name = part[0];
+ if (split_admin_tabs && name.lastIndexOf(".") != -1) {
+ var splitName = name.split(".");
+ if (splitName[0] === "Admin")
+ name = splitName[1];
+ }
var command = part[1];
if (command && name.lastIndexOf(cat, 0) != -1 && (name.length == cat.length || name.charAt(cat.length) == ".")) {
@@ -1002,9 +1207,13 @@ function draw_verbs(cat){
}
var a = document.createElement("a");
- a.href = "byond://winset?command=" + command.replace(/\s/g, "-");
- a[textContentKey] = command;
+ a.href = "#"
+ a.onclick = make_verb_onclick(command.replace(/\s/g, "-"));
a.className = "grid-item";
+ var t = document.createElement("span");
+ t[textContentKey] = command;
+ t.className = "grid-item-text";
+ a.appendChild(t);
(subCat ? additions[subCat] : table).appendChild(a);
}
}
@@ -1029,7 +1238,7 @@ function set_theme(which) {
if (which == "light") {
document.body.className = "";
set_style_sheet("browserOutput_white");
- } else if (which == "dark" || which == "default") {
+ } else if (which == "dark") {
document.body.className = "dark";
set_style_sheet("browserOutput");
}
@@ -1040,7 +1249,7 @@ function set_style_sheet(sheet) {
var currentSheet = document.getElementById("goonStyle");
currentSheet.parentElement.removeChild(currentSheet);
}
- var head = document.getElementsByTagName('head')[0];
+ var head = document.getElementsByTagName('head')[0];
var sheetElement = document.createElement("link");
sheetElement.id = "goonStyle";
sheetElement.rel = "stylesheet";
@@ -1050,9 +1259,14 @@ function set_style_sheet(sheet) {
head.appendChild(sheetElement);
}
-document[addEventListenerKey]("click", function(e) {
- window.location.href = "byond://winset?map.focus=true";
-});
+function restoreFocus() {
+ run_after_focus(function() {
+ window.location.href = "byond://winset?map.focus=true";
+ });
+}
+
+document[addEventListenerKey]("mouseup", restoreFocus);
+document[addEventListenerKey]("keyup", restoreFocus);
if(!current_tab) {
addPermanentTab("Status");
@@ -1061,7 +1275,7 @@ if(!current_tab) {
window.onload = function() {
NotifyByondOnload();
- };
+};
function NotifyByondOnload() {
window.location.href = "byond://winset?command=Panel-Ready";
diff --git a/icons/mob/actions/actions_snake.dmi b/icons/mob/actions/actions_snake.dmi
new file mode 100644
index 0000000000..6856171b0d
Binary files /dev/null and b/icons/mob/actions/actions_snake.dmi differ
diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi
index b0cbc3b623..2413b52d71 100644
Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ
diff --git a/icons/mob/clothing/uniform.dmi b/icons/mob/clothing/uniform.dmi
index 7f1717b8ca..04d9b20a75 100644
Binary files a/icons/mob/clothing/uniform.dmi and b/icons/mob/clothing/uniform.dmi differ
diff --git a/icons/mob/wings.dmi b/icons/mob/wings.dmi
index 92de5c150c..49d9e4d4a8 100644
Binary files a/icons/mob/wings.dmi and b/icons/mob/wings.dmi differ
diff --git a/icons/mob/wings_functional.dmi b/icons/mob/wings_functional.dmi
new file mode 100644
index 0000000000..5d1a82a245
Binary files /dev/null and b/icons/mob/wings_functional.dmi differ
diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi
index ebc7140dae..f5bc9e7046 100644
Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 3a5dfb97a9..c16b416cd8 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/pda.dmi b/icons/obj/pda.dmi
index 8992f4a4a1..f968d15860 100644
Binary files a/icons/obj/pda.dmi and b/icons/obj/pda.dmi differ
diff --git a/interface/skin.dmf b/interface/skin.dmf
index ccfcd76571..82a35160e6 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -2,21 +2,21 @@ macro "default"
menu "menu"
- elem
+ elem
name = "&File"
command = ""
saved-params = "is-checked"
- elem
+ elem
name = "&Quick screenshot\tF2"
command = ".screenshot auto"
category = "&File"
saved-params = "is-checked"
- elem
+ elem
name = "&Save screenshot as...\tShift+F2"
command = ".screenshot"
category = "&File"
saved-params = "is-checked"
- elem
+ elem
name = ""
command = ""
category = "&File"
@@ -26,21 +26,21 @@ menu "menu"
command = ".reconnect"
category = "&File"
saved-params = "is-checked"
- elem
+ elem
name = "&Quit\tAlt-F4"
command = ".quit"
category = "&File"
saved-params = "is-checked"
- elem
+ elem
name = "&Help"
command = ""
saved-params = "is-checked"
- elem
+ elem
name = "&Admin Help\tF1"
command = "adminhelp"
category = "&Help"
saved-params = "is-checked"
- elem
+ elem
name = "&Hotkeys"
command = "hotkeys-help"
category = "&Help"
@@ -56,6 +56,7 @@ window "mainwindow"
anchor2 = none
is-default = true
saved-params = "pos;size;is-minimized;is-maximized"
+ statusbar = false
icon = 'icons\\ss13_64.png'
macro = "default"
menu = "menu"
@@ -95,6 +96,7 @@ window "mapwindow"
anchor2 = none
saved-params = "pos;size;is-minimized;is-maximized"
is-pane = true
+ on-status = ".winset \"status_bar.text=[[*]]\" "
elem "map"
type = MAP
pos = 0,0
@@ -107,6 +109,16 @@ window "mapwindow"
is-default = true
saved-params = "zoom;letterbox;zoom-mode"
style = ".center { text-align: center; } .maptext { font-family: 'Small Fonts'; font-size: 7px; -dm-text-outline: 1px black; color: white; line-height: 1.1; } .command_headset { font-weight: bold;\tfont-size: 8px; } .small { font-size: 6px; } .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .greentext { color: #00FF00; font-size: 7px; } .redtext { color: #FF0000; font-size: 7px; } .clown { color: #FF69Bf; font-size: 7px; font-weight: bold; } .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; } .italics { font-size: 6px; }"
+ elem "status_bar"
+ type = LABEL
+ pos = 0,1008
+ size = 280x16
+ anchor1 = 0,100
+ text = ""
+ align = left
+ background-color = #222222
+ text-color = #ffffff
+ border = line
window "infowindow"
elem "infowindow"
diff --git a/modular_citadel/code/datums/components/souldeath.dm b/modular_citadel/code/datums/components/souldeath.dm
index ab45210a46..01e6acb795 100644
--- a/modular_citadel/code/datums/components/souldeath.dm
+++ b/modular_citadel/code/datums/components/souldeath.dm
@@ -32,4 +32,4 @@
playsound(wearer, 'sound/misc/souldeath.ogg', 100, FALSE)
/datum/component/souldeath/neck
- equip_slot = SLOT_NECK
+ equip_slot = ITEM_SLOT_NECK
diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm
index f2c7b398cf..fe53574470 100644
--- a/modular_citadel/code/modules/client/loadout/__donator.dm
+++ b/modular_citadel/code/modules/client/loadout/__donator.dm
@@ -2,289 +2,289 @@
/datum/gear/donator
name = "IF YOU SEE THIS, PING A CODER RIGHT NOW!"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/bikehorn/golden
category = LOADOUT_CATEGORY_DONATOR
ckeywhitelist = list("This entry should never appear with this variable set.") //If it does, then that means somebody fucked up the whitelist system pretty hard
/datum/gear/donator/pet
name = "Pet Beacon"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/choice_beacon/pet
ckeywhitelist = list()
donator_group_id = DONATOR_GROUP_TIER_1 // can be accessed by all donators
/datum/gear/donator/carpet
name = "Carpet Beacon"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/choice_beacon/box/carpet
ckeywhitelist = list()
donator_group_id = DONATOR_GROUP_TIER_1
/datum/gear/donator/chameleon_bedsheet
name = "Chameleon Bedsheet"
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
path = /obj/item/bedsheet/chameleon
ckeywhitelist = list()
donator_group_id = DONATOR_GROUP_TIER_1
/datum/gear/donator/donortestingbikehorn
name = "Donor item testing bikehorn"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/bikehorn
geargroupID = list("DONORTEST") //This is a list mainly for the sake of testing, but geargroupID works just fine with ordinary strings
/datum/gear/donator/kevhorn
name = "Airhorn"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/bikehorn/airhorn
ckeywhitelist = list("kevinz000")
/datum/gear/donator/kiaracloak
name = "Kiara's cloak"
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
path = /obj/item/clothing/neck/cloak/inferno
ckeywhitelist = list("inferno707")
/datum/gear/donator/kiaracollar
name = "Kiara's collar"
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
path = /obj/item/clothing/neck/petcollar/inferno
ckeywhitelist = list("inferno707")
/datum/gear/donator/kiaramedal
name = "Insignia of Steele"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/clothing/accessory/medal/steele
ckeywhitelist = list("inferno707")
/datum/gear/donator/hheart
name = "The Hollow Heart"
- slot = SLOT_WEAR_MASK
+ slot = ITEM_SLOT_MASK
path = /obj/item/clothing/mask/hheart
ckeywhitelist = list("inferno707")
/datum/gear/donator/engravedzippo
name = "Engraved zippo"
- slot = SLOT_HANDS
+ slot = ITEM_SLOT_HANDS
path = /obj/item/lighter/gold
ckeywhitelist = list("dirtyoldharry")
/datum/gear/donator/geisha
name = "Geisha suit"
- slot = SLOT_W_UNIFORM
+ slot = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/costume/geisha
ckeywhitelist = list("atiefling")
/datum/gear/donator/specialscarf
name = "Special scarf"
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
path = /obj/item/clothing/neck/scarf/zomb
ckeywhitelist = list("zombierobin")
/datum/gear/donator/redmadcoat
name = "The Mad's labcoat"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/suit/toggle/labcoat/mad/red
ckeywhitelist = list("zombierobin")
/datum/gear/donator/santahat
name = "Santa hat"
- slot = SLOT_HEAD
+ slot = ITEM_SLOT_HEAD
path = /obj/item/clothing/head/santa/fluff
ckeywhitelist = list("illotafv")
/datum/gear/donator/reindeerhat
name = "Reindeer hat"
- slot = SLOT_HEAD
+ slot = ITEM_SLOT_HEAD
path = /obj/item/clothing/head/hardhat/reindeer/fluff
ckeywhitelist = list("illotafv")
/datum/gear/donator/treeplushie
name = "Christmas tree plushie"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/toy/plush/tree
ckeywhitelist = list("illotafv")
/datum/gear/donator/santaoutfit
name = "Santa costume"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/suit/space/santa/fluff
ckeywhitelist = list("illotafv")
/datum/gear/donator/treecloak
name = "Christmas tree cloak"
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
path = /obj/item/clothing/neck/cloak/festive
ckeywhitelist = list("illotafv")
/datum/gear/donator/carrotplush
name = "Carrot plushie"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/toy/plush/carrot
ckeywhitelist = list("improvedname")
/datum/gear/donator/carrotcloak
name = "Carrot cloak"
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
path = /obj/item/clothing/neck/cloak/carrot
ckeywhitelist = list("improvedname")
/datum/gear/donator/albortorosamask
name = "Alborto Rosa mask"
- slot = SLOT_WEAR_MASK
+ slot = ITEM_SLOT_MASK
path = /obj/item/clothing/mask/luchador/zigfie
ckeywhitelist = list("zigfie")
/datum/gear/donator/mankini
name = "Mankini"
- slot = SLOT_W_UNIFORM
+ slot = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/misc/stripper/mankini
ckeywhitelist = list("zigfie")
/datum/gear/donator/pinkshoes
name = "Pink shoes"
- slot = SLOT_SHOES
+ slot = ITEM_SLOT_FEET
path = /obj/item/clothing/shoes/sneakers/pink
ckeywhitelist = list("zigfie")
/datum/gear/donator/reecesgreatcoat
name = "Reece's Great Coat"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/suit/trenchcoat/green
ckeywhitelist = list("geemiesif")
/datum/gear/donator/russianflask
name = "Russian flask"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/reagent_containers/food/drinks/flask/russian
cost = 2
ckeywhitelist = list("slomka")
/datum/gear/donator/stalkermask
name = "S.T.A.L.K.E.R. mask"
- slot = SLOT_WEAR_MASK
+ slot = ITEM_SLOT_MASK
path = /obj/item/clothing/mask/gas/stalker
ckeywhitelist = list("slomka")
/datum/gear/donator/stripedcollar
name = "Striped collar"
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
path = /obj/item/clothing/neck/petcollar/stripe
ckeywhitelist = list("jademanique")
/datum/gear/donator/performersoutfit
name = "Bluish performer's outfit"
- slot = SLOT_W_UNIFORM
+ slot = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/costume/singer/yellow/custom
ckeywhitelist = list("killer402402")
/datum/gear/donator/vermillion
name = "Vermillion clothing"
- slot = SLOT_W_UNIFORM
+ slot = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/suit/vermillion
ckeywhitelist = list("fractious")
/datum/gear/donator/AM4B
name = "Foam Force AM4-B"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/gun/ballistic/automatic/AM4B
ckeywhitelist = list("zeronetalpha")
/datum/gear/donator/carrotsatchel
name = "Carrot Satchel"
- slot = SLOT_HANDS
+ slot = ITEM_SLOT_HANDS
path = /obj/item/storage/backpack/satchel/carrot
ckeywhitelist = list("improvedname")
/datum/gear/donator/naomisweater
name = "worn black sweater"
- slot = SLOT_W_UNIFORM
+ slot = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/sweater/black/naomi
ckeywhitelist = list("technicalmagi")
/datum/gear/donator/naomicollar
name = "worn pet collar"
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
path = /obj/item/clothing/neck/petcollar/naomi
ckeywhitelist = list("technicalmagi")
/datum/gear/donator/gladiator
name = "Gladiator Armor"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/under/costume/gladiator
ckeywhitelist = list("aroche")
/datum/gear/donator/bloodredtie
name = "Blood Red Tie"
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
path = /obj/item/clothing/neck/tie/bloodred
ckeywhitelist = list("kyutness")
/datum/gear/donator/puffydress
name = "Puffy Dress"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/suit/puffydress
ckeywhitelist = list("stallingratt")
/datum/gear/donator/labredblack
name = "Black and Red Coat"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/suit/toggle/labcoat/labredblack
ckeywhitelist = list("blakeryan", "durandalphor")
/datum/gear/donator/torisword
name = "Rainbow Zweihander"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/dualsaber/hypereutactic/toy/rainbow
ckeywhitelist = list("annoymous35")
/datum/gear/donator/darksabre
name = "Dark Sabre"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/toy/darksabre
ckeywhitelist = list("inferno707")
/datum/gear/donator/darksabresheath
name = "Dark Sabre Sheath"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/storage/belt/sabre/darksabre
ckeywhitelist = list("inferno707")
/datum/gear/donator/toriball
name = "Rainbow Tennis Ball"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/toy/fluff/tennis_poly/tri/squeak/rainbow
ckeywhitelist = list("annoymous35")
/datum/gear/donator/izzyball
name = "Katlin's Ball"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/toy/fluff/tennis_poly/tri/squeak/izzy
ckeywhitelist = list("izzyinbox")
/datum/gear/donator/cloak
name = "Green Cloak"
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
path = /obj/item/clothing/neck/cloak/green
ckeywhitelist = list("killer402402")
/datum/gear/donator/steelflask
name = "Steel Flask"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/reagent_containers/food/drinks/flask/steel
cost = 2
ckeywhitelist = list("nik707")
/datum/gear/donator/paperhat
name = "Paper Hat"
- slot = SLOT_HEAD
+ slot = ITEM_SLOT_HEAD
path = /obj/item/clothing/head/paperhat
ckeywhitelist = list("kered2")
/datum/gear/donator/cloakce
name = "Polychromic CE Cloak"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/clothing/neck/cloak/polychromic/polyce
ckeywhitelist = list("worksbythesea", "blakeryan")
loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC
@@ -292,290 +292,290 @@
/datum/gear/donator/ssk
name = "Stun Sword Kit"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/ssword_kit
ckeywhitelist = list("phillip458")
/datum/gear/donator/techcoat
name = "Techomancers Labcoat"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/clothing/suit/toggle/labcoat/mad/techcoat
ckeywhitelist = list("wilchen")
/datum/gear/donator/leechjar
name = "Jar of Leeches"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/custom/leechjar
ckeywhitelist = list("sgtryder")
/datum/gear/donator/darkarmor
name = "Dark Armor"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/clothing/suit/armor/vest/darkcarapace
ckeywhitelist = list("inferno707")
/datum/gear/donator/devilwings
name = "Strange Wings"
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
path = /obj/item/clothing/neck/devilwings
ckeywhitelist = list("kitsun")
/datum/gear/donator/flagcape
name = "US Flag Cape"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/clothing/neck/flagcape
ckeywhitelist = list("darnchacha")
/datum/gear/donator/luckyjack
name = "Lucky Jackboots"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/clothing/shoes/lucky
ckeywhitelist = list("donaldtrumpthecommunist")
/datum/gear/donator/raiqbawks
name = "Miami Boombox"
- slot = SLOT_HANDS
+ slot = ITEM_SLOT_HANDS
cost = 2
path = /obj/item/boombox/raiq
ckeywhitelist = list("chefferz")
/datum/gear/donator/m41
name = "Toy M41"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/toy/gun/m41
ckeywhitelist = list("thalverscholen")
/datum/gear/donator/Divine_robes
name = "Divine robes"
- slot = SLOT_W_UNIFORM
+ slot = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/custom/lunasune
ckeywhitelist = list("invader4352")
/datum/gear/donator/gothcoat
name = "Goth Coat"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/suit/gothcoat
ckeywhitelist = list("norko")
/datum/gear/donator/corgisuit
name = "Corgi Suit"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/suit/hooded/ian_costume
ckeywhitelist = list("cathodetherobot")
/datum/gear/donator/sharkcloth
name = "Leon's Skimpy Outfit"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/under/custom/leoskimpy
ckeywhitelist = list("spectrosis")
/datum/gear/donator/mimemask
name = "Mime Mask"
- slot = SLOT_WEAR_MASK
+ slot = ITEM_SLOT_MASK
path = /obj/item/clothing/mask/gas/mime
ckeywhitelist = list("pireamaineach")
/datum/gear/donator/mimeoveralls
name = "Mime's Overalls"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/under/custom/mimeoveralls
ckeywhitelist = list("pireamaineach")
/datum/gear/donator/soulneck
name = "Soul Necklace"
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
path = /obj/item/clothing/neck/undertale
ckeywhitelist = list("twilightic")
/datum/gear/donator/frenchberet
name = "French Beret"
- slot = SLOT_HEAD
+ slot = ITEM_SLOT_HEAD
path = /obj/item/clothing/head/frenchberet
ckeywhitelist = list("notazoltan")
/datum/gear/donator/zuliecloak
name = "Project: Zul-E"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/suit/hooded/cloak/zuliecloak
ckeywhitelist = list("asky")
/datum/gear/donator/blackredgold
name = "Black, Red, and Gold Coat"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/suit/blackredgold
ckeywhitelist = list("ttbnc")
/datum/gear/donator/fritzplush
name = "Fritz Plushie"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/toy/plush/mammal/dog/fritz
ckeywhitelist = list("analwerewolf")
/datum/gear/donator/kimono
name = "Kimono"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/suit/kimono
ckeywhitelist = list("sfox63")
/datum/gear/donator/commjacket
name = "Dusty Commisar's Cloak"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/suit/commjacket
ckeywhitelist = list("sadisticbatter")
/datum/gear/donator/mw2_russian_para
name = "Russian Paratrooper Jumper"
- slot = SLOT_W_UNIFORM
+ slot = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/custom/mw2_russian_para
ckeywhitelist = list("investigator77")
/datum/gear/donator/longblackgloves
name = "Luna's Gauntlets"
- slot = SLOT_GLOVES
+ slot = ITEM_SLOT_GLOVES
path = /obj/item/clothing/gloves/longblackgloves
ckeywhitelist = list("bigmanclancy")
/datum/gear/donator/trendy_fit
name = "Trendy Fit"
- slot = SLOT_W_UNIFORM
+ slot = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/custom/trendy_fit
ckeywhitelist = list("midgetdragon")
/datum/gear/donator/singery
name = "Yellow Performer Outfit"
- slot = SLOT_W_UNIFORM
+ slot = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/costume/singer/yellow
ckeywhitelist = list("maxlynchy")
/datum/gear/donator/csheet
name = "NT Bedsheet"
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
path = /obj/item/bedsheet/captain
ckeywhitelist = list("tikibomb")
/datum/gear/donator/borgplush
name = "Robot Plush"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/toy/plush/borgplushie
ckeywhitelist = list("nicholaiavenicci")
/datum/gear/donator/donorberet
name = "Atmos Beret"
- slot = SLOT_HEAD
+ slot = ITEM_SLOT_HEAD
path = /obj/item/clothing/head/blueberet
ckeywhitelist = list("foxystalin")
/datum/gear/donator/donorgoggles
name = "Flight Goggles"
- slot = SLOT_HEAD
+ slot = ITEM_SLOT_HEAD
path = /obj/item/clothing/head/flight
ckeywhitelist = list("maxlynchy")
/datum/gear/donator/onionneck
name = "Onion Necklace"
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
path = /obj/item/clothing/neck/necklace/onion
ckeywhitelist = list("cdrcross")
/datum/gear/donator/mikubikini
name = "starlight singer bikini"
- slot = SLOT_W_UNIFORM
+ slot = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/custom/mikubikini
ckeywhitelist = list("grandvegeta")
/datum/gear/donator/mikujacket
name = "starlight singer jacket"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/suit/mikujacket
ckeywhitelist = list("grandvegeta")
/datum/gear/donator/mikuhair
name = "starlight singer hair"
- slot = SLOT_W_UNIFORM
+ slot = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/head/mikuhair
ckeywhitelist = list("grandvegeta")
/datum/gear/donator/mikugloves
name = "starlight singer gloves"
- slot = SLOT_GLOVES
+ slot = ITEM_SLOT_GLOVES
path = /obj/item/clothing/gloves/mikugloves
ckeywhitelist = list("grandvegeta")
/datum/gear/donator/mikuleggings
name = "starlight singer leggings"
- slot = SLOT_SHOES
+ slot = ITEM_SLOT_FEET
path = /obj/item/clothing/shoes/sneakers/mikuleggings
ckeywhitelist = list("grandvegeta")
/datum/gear/donator/cosmos
name = "cosmic space bedsheet"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/bedsheet/cosmos
ckeywhitelist = list("grunnyyy")
/datum/gear/donator/customskirt
name = "custom atmos skirt"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/clothing/under/custom/customskirt
ckeywhitelist = list("thakyz")
/datum/gear/donator/hisakaki
name = "halo"
- slot = SLOT_HEAD
+ slot = ITEM_SLOT_HEAD
path = /obj/item/clothing/head/halo
ckeywhitelist = list("hisakaki")
/datum/gear/donator/vest
name = "vest and shirt"
- slot = SLOT_W_UNIFORM
+ slot = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/custom/vest
ckeywhitelist = list("maylowfox")
/datum/gear/donator/exo
name = "exo frame"
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/suit/custom/exo
ckeywhitelist = list("jesterz7")
/datum/gear/donator/choker
name = "NT Choker"
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
path = /obj/item/clothing/neck/petcollar/donorchoker
ckeywhitelist = list("trigillass")
/datum/gear/donator/strangemask
name = "Strange Metal Mask"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/clothing/mask/breath/mmask
ckeywhitelist = list("sneka")
/datum/gear/donator/smaiden
name = "shrine maiden outfit"
- slot = SLOT_W_UNIFORM
+ slot = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/smaiden
ckeywhitelist = list("ultimarifox")
/datum/gear/donator/mgasmask
name = "Military Gas Mask"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/clothing/mask/gas/military
ckeywhitelist = list("unclebourbon")
/datum/gear/donator/clownmask
name = "Clown Mask"
- path = SLOT_WEAR_MASK
+ path = ITEM_SLOT_MASK
path = /obj/item/clothing/mask/gas/clown_hat
ckeywhitelist = list("djkouta")
/datum/gear/donator/spacehoodie
name = "Space Hoodie"
- path = SLOT_WEAR_SUIT
+ path = ITEM_SLOT_OCLOTHING
path = /obj/item/clothing/suit/spacehoodie
ckeywhitelist = list("bidlink2")
/datum/gear/donator/pokerchips
name = "pokerchip set"
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
path = /obj/item/storage/box/pockerchips
ckeywhitelist = list("greed2323")
diff --git a/modular_citadel/code/modules/client/loadout/backpack.dm b/modular_citadel/code/modules/client/loadout/backpack.dm
index 466ee50474..3824993009 100644
--- a/modular_citadel/code/modules/client/loadout/backpack.dm
+++ b/modular_citadel/code/modules/client/loadout/backpack.dm
@@ -1,7 +1,7 @@
/datum/gear/backpack
category = LOADOUT_CATEGORY_BACKPACK
subcategory = LOADOUT_SUBCATEGORY_BACKPACK_GENERAL
- slot = SLOT_IN_BACKPACK
+ slot = ITEM_SLOT_BACKPACK
/datum/gear/backpack/plushbox
name = "Plushie Choice Box"
diff --git a/modular_citadel/code/modules/client/loadout/glasses.dm b/modular_citadel/code/modules/client/loadout/glasses.dm
index f3b07657f4..fe44abc3de 100644
--- a/modular_citadel/code/modules/client/loadout/glasses.dm
+++ b/modular_citadel/code/modules/client/loadout/glasses.dm
@@ -1,6 +1,6 @@
/datum/gear/glasses
category = LOADOUT_CATEGORY_GLASSES
- slot = SLOT_GLASSES
+ slot = ITEM_SLOT_EYES
/datum/gear/glasses/blindfold
name = "Blindfold"
diff --git a/modular_citadel/code/modules/client/loadout/gloves.dm b/modular_citadel/code/modules/client/loadout/gloves.dm
index 09694ddec7..2a80d43bb1 100644
--- a/modular_citadel/code/modules/client/loadout/gloves.dm
+++ b/modular_citadel/code/modules/client/loadout/gloves.dm
@@ -1,6 +1,6 @@
/datum/gear/gloves
category = LOADOUT_CATEGORY_GLOVES
- slot = SLOT_GLOVES
+ slot = ITEM_SLOT_GLOVES
/datum/gear/gloves/fingerless
name = "Fingerless Gloves"
@@ -9,7 +9,7 @@
/datum/gear/gloves/evening
name = "Evening gloves"
path = /obj/item/clothing/gloves/evening
-
+
/datum/gear/gloves/midnight
name = "Midnight gloves"
path = /obj/item/clothing/gloves/evening/black
diff --git a/modular_citadel/code/modules/client/loadout/hands.dm b/modular_citadel/code/modules/client/loadout/hands.dm
index eb496ed78c..5dbe8b33dd 100644
--- a/modular_citadel/code/modules/client/loadout/hands.dm
+++ b/modular_citadel/code/modules/client/loadout/hands.dm
@@ -1,6 +1,6 @@
/datum/gear/hands
category = LOADOUT_CATEGORY_HANDS
- slot = SLOT_HANDS
+ slot = ITEM_SLOT_HANDS
/datum/gear/hands/cane
name = "Cane"
diff --git a/modular_citadel/code/modules/client/loadout/head.dm b/modular_citadel/code/modules/client/loadout/head.dm
index 6d6c803ef1..f2a7ead5be 100644
--- a/modular_citadel/code/modules/client/loadout/head.dm
+++ b/modular_citadel/code/modules/client/loadout/head.dm
@@ -1,7 +1,7 @@
/datum/gear/head
category = LOADOUT_CATEGORY_HEAD
subcategory = LOADOUT_SUBCATEGORY_HEAD_GENERAL
- slot = SLOT_HEAD
+ slot = ITEM_SLOT_HEAD
/datum/gear/head/baseball
name = "Ballcap"
@@ -156,12 +156,12 @@
/*Commenting out Until next Christmas or made automatic
/datum/gear/santahatr
name = "Red Santa Hat"
- category = SLOT_HEAD
+ category = ITEM_SLOT_HEAD
path = /obj/item/clothing/head/christmashat
/datum/gear/santahatg
name = "Green Santa Hat"
- category = SLOT_HEAD
+ category = ITEM_SLOT_HEAD
path = /obj/item/clothing/head/christmashatg
*/
diff --git a/modular_citadel/code/modules/client/loadout/mask.dm b/modular_citadel/code/modules/client/loadout/mask.dm
index 576b29cddc..16b47e60e7 100644
--- a/modular_citadel/code/modules/client/loadout/mask.dm
+++ b/modular_citadel/code/modules/client/loadout/mask.dm
@@ -1,6 +1,6 @@
/datum/gear/mask
category = LOADOUT_CATEGORY_MASK
- slot = SLOT_WEAR_MASK
+ slot = ITEM_SLOT_MASK
/datum/gear/mask/balaclava
name = "Balaclava"
@@ -30,4 +30,8 @@
name = "Paper mask"
path = /obj/item/clothing/mask/paper
cost = 2
-
+
+/datum/gear/mask/polychromic_clown
+ name = "polychromic clown wig and mask"
+ path = /obj/item/clothing/mask/gas/clown_hat_polychromic
+ restricted_roles = list("Clown")
diff --git a/modular_citadel/code/modules/client/loadout/neck.dm b/modular_citadel/code/modules/client/loadout/neck.dm
index 128285628a..b07ddf98db 100644
--- a/modular_citadel/code/modules/client/loadout/neck.dm
+++ b/modular_citadel/code/modules/client/loadout/neck.dm
@@ -1,7 +1,7 @@
/datum/gear/neck
category = LOADOUT_CATEGORY_NECK
subcategory = LOADOUT_SUBCATEGORY_NECK_GENERAL
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
/datum/gear/neck/bluetie
name = "Blue tie"
diff --git a/modular_citadel/code/modules/client/loadout/shoes.dm b/modular_citadel/code/modules/client/loadout/shoes.dm
index e2b3916ae0..394c957f36 100644
--- a/modular_citadel/code/modules/client/loadout/shoes.dm
+++ b/modular_citadel/code/modules/client/loadout/shoes.dm
@@ -1,6 +1,6 @@
/datum/gear/shoes
category = LOADOUT_CATEGORY_SHOES
- slot = SLOT_SHOES
+ slot = ITEM_SLOT_FEET
/datum/gear/shoes/laceup
name = "Laceup shoes"
diff --git a/modular_citadel/code/modules/client/loadout/suit.dm b/modular_citadel/code/modules/client/loadout/suit.dm
index 066bcf14c7..1d4a29ef3e 100644
--- a/modular_citadel/code/modules/client/loadout/suit.dm
+++ b/modular_citadel/code/modules/client/loadout/suit.dm
@@ -1,7 +1,7 @@
/datum/gear/suit
category = LOADOUT_CATEGORY_SUIT
subcategory = LOADOUT_SUBCATEGORY_SUIT_GENERAL
- slot = SLOT_WEAR_SUIT
+ slot = ITEM_SLOT_OCLOTHING
/datum/gear/suit/poncho
name = "Poncho"
diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/uniform.dm
index 86fcc867a3..2b2f3b53e4 100644
--- a/modular_citadel/code/modules/client/loadout/uniform.dm
+++ b/modular_citadel/code/modules/client/loadout/uniform.dm
@@ -1,7 +1,7 @@
/datum/gear/uniform
category = LOADOUT_CATEGORY_UNIFORM
subcategory = LOADOUT_SUBCATEGORY_UNIFORM_GENERAL
- slot = SLOT_W_UNIFORM
+ slot = ITEM_SLOT_ICLOTHING
/datum/gear/uniform/suit
name = "Black suit"
@@ -636,27 +636,27 @@
/*Commenting out Until next Christmas or made automatic
/datum/gear/uniform/christmasmaler
name = "Red Masculine Christmas Suit"
- category = SLOT_W_UNIFORM
+ category = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/costume/christmas
/datum/gear/uniform/christmasmaleg
name = "Green Masculine Christmas Suit"
- category = SLOT_W_UNIFORM
+ category = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/costume/christmas/green
/datum/gear/uniform/christmasfemaler
name = "Red Feminine Christmas Suit"
- category = SLOT_W_UNIFORM
+ category = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/costume/christmas/croptop
/datum/gear/uniform/christmasfemaleg
name = "Green Feminine Christmas Suit"
- category = SLOT_W_UNIFORM
+ category = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/costume/christmas/croptop/green
/datum/gear/uniform/pinkstripper
name = "Pink stripper outfit"
- category = SLOT_W_UNIFORM
+ category = ITEM_SLOT_ICLOTHING
path = /obj/item/clothing/under/misc/stripper
cost = 3
*/
@@ -739,3 +739,9 @@
path = /obj/item/clothing/under/rank/cargo/tech/long
subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
restricted_roles = list("Cargo Technician")
+
+/datum/gear/uniform/clown_polychromic
+ name = "polychromic clown suit"
+ path = /obj/item/clothing/under/rank/civilian/polychromic_clown
+ subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
+ restricted_roles = list("Clown")
diff --git a/modular_citadel/code/modules/client/loadout/unlockable.dm b/modular_citadel/code/modules/client/loadout/unlockable.dm
index 67e0c06d8c..9db05a66e9 100644
--- a/modular_citadel/code/modules/client/loadout/unlockable.dm
+++ b/modular_citadel/code/modules/client/loadout/unlockable.dm
@@ -1,6 +1,6 @@
/datum/gear/unlockable
category = LOADOUT_CATEGORY_UNLOCKABLE
- slot = SLOT_NECK
+ slot = ITEM_SLOT_NECK
var/progress_required //what does our progress need to be to unlock it
var/progress_key //what is the key used to retrieve existing progress for this unlockable
diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm
index cb1b9728af..b8ee221e73 100644
--- a/modular_citadel/code/modules/custom_loadout/custom_items.dm
+++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm
@@ -77,7 +77,7 @@
item_state = "gold_zippo"
w_class = WEIGHT_CLASS_TINY
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
heat = 1500
resistance_flags = FIRE_PROOF
light_color = LIGHT_COLOR_FIRE
@@ -404,7 +404,7 @@
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
hoodtype = /obj/item/clothing/head/hooded/cloakhood/zuliecloak
body_parts_covered = CHEST|GROIN|ARMS
- slot_flags = SLOT_WEAR_SUIT | ITEM_SLOT_NECK //it's a cloak. it's cosmetic. so why the hell not? what could possibly go wrong?
+ slot_flags = ITEM_SLOT_OCLOTHING | ITEM_SLOT_NECK //it's a cloak. it's cosmetic. so why the hell not? what could possibly go wrong?
mutantrace_variation = NONE
/obj/item/clothing/head/hooded/cloakhood/zuliecloak
diff --git a/modular_citadel/code/modules/custom_loadout/load_to_mob.dm b/modular_citadel/code/modules/custom_loadout/load_to_mob.dm
index 79f17afc74..1d28c7320c 100644
--- a/modular_citadel/code/modules/custom_loadout/load_to_mob.dm
+++ b/modular_citadel/code/modules/custom_loadout/load_to_mob.dm
@@ -52,7 +52,7 @@
loaded_atom.forceMove(T)
continue
var/obj/item/loaded = loaded_atom
- var/obj/item/storage/S = H.get_item_by_slot(SLOT_BACK)
+ var/obj/item/storage/S = H.get_item_by_slot(ITEM_SLOT_BACK)
if(istype(S))
SEND_SIGNAL(S, COMSIG_TRY_STORAGE_INSERT,loaded, TRUE, H) //Force it into their backpack
continue
diff --git a/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm b/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
index dbf5ad0648..85bbf109bf 100644
--- a/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
+++ b/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
@@ -1024,7 +1024,7 @@ GLOBAL_LIST_EMPTY(rain_sounds)
lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
righthand_file = 'icons/mob/inhands/items_righthand.dmi'
icon_state = "umbrella_closed"
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 5
throwforce = 5
w_class = WEIGHT_CLASS_SMALL
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
index 537eb76a66..bc598e81e3 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
@@ -48,7 +48,7 @@
var/obj/item/W = M.head
M.dropItemToGround(W, TRUE)
var/hat = new /obj/item/clothing/head/hattip()
- M.equip_to_slot(hat, SLOT_HEAD, 1, 1)
+ M.equip_to_slot(hat, ITEM_SLOT_HEAD, 1, 1)
/datum/reagent/fermi/hatmium/on_mob_life(mob/living/carbon/human/M)
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm
index bb255a4194..6695194008 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm
@@ -98,8 +98,8 @@
description = "Synthetic tissue used for grafting onto damaged organs during surgery, or for treating limb damage. Has a very tight growth window between 305-320, any higher and the temperature will cause the cells to die. Additionally, growth time is considerably long, so chemists are encouraged to leave beakers with said reaction ongoing, while they tend to their other duties."
pH = 7.6
metabolization_rate = 0.05 //Give them time to graft
- data = list("grown_volume" = 0, "injected_vol" = 0)
- var/borrowed_health
+ data = list("grown_volume" = 0, "injected_vol" = 0, "borrowed_health" = 0)
+ var/borrowed_health = 0
color = "#FFDADA"
value = REAGENT_VALUE_COMMON
@@ -107,31 +107,51 @@
if(iscarbon(M))
var/mob/living/carbon/C = M
var/healing_factor = (((data["grown_volume"] / 100) + 1)*reac_volume)
- if(method in list(PATCH, TOUCH))
- if (M.stat == DEAD)
- M.visible_message("The synthetic tissue rapidly grafts into [M]'s wounds, attemping to repair the damage as quickly as possible.")
- borrowed_health += healing_factor
- M.adjustBruteLoss(-healing_factor*2)
- M.adjustFireLoss(-healing_factor*2)
- M.adjustToxLoss(-healing_factor)
- M.adjustCloneLoss(-healing_factor)
- M.updatehealth()
+ if(method == PATCH) //Needs to actually be applied via patch / hypo / medspray and not just beakersplashed.
+ if (C.stat == DEAD)
+ C.visible_message("The synthetic tissue rapidly grafts into [M]'s wounds, attempting to repair the damage as quickly as possible.")
+ var/preheal_brute = C.getBruteLoss()
+ var/preheal_burn = C.getFireLoss()
+ var/preheal_tox = C.getToxLoss()
+ var/preheal_oxy = C.getOxyLoss()
+ C.adjustBruteLoss(-healing_factor*2)
+ C.adjustFireLoss(-healing_factor*2)
+ C.adjustToxLoss(-healing_factor)
+ C.adjustCloneLoss(-healing_factor)
+ borrowed_health += (preheal_brute - C.getBruteLoss()) + (preheal_burn - C.getFireLoss()) + (preheal_tox - C.getToxLoss()) + ((preheal_oxy - C.getOxyLoss()) / 2) //Ironically this means that while slimes get damaged by the toxheal, it will reduce borrowed health and longterm effects. Funky!
+ C.updatehealth()
if(data["grown_volume"] > 135 && ((C.health + C.oxyloss)>=80))
- if(M.revive())
- M.emote("gasp")
+ var/tplus = world.time - M.timeofdeath
+ if(C.can_revive(ignore_timelimit = TRUE, maximum_brute_dam = MAX_REVIVE_BRUTE_DAMAGE / 2, maximum_fire_dam = MAX_REVIVE_FIRE_DAMAGE / 2, ignore_heart = TRUE) && C.revive())
+ C.grab_ghost()
+ C.emote("gasp")
borrowed_health *= 2
if(borrowed_health < 100)
borrowed_health = 100
- log_combat(M, M, "revived", src)
+ log_combat(C, C, "revived", src)
+ var/list/policies = CONFIG_GET(keyed_list/policy)
+ var/policy = policies[POLICYCONFIG_ON_DEFIB_LATE] //Always causes memory loss due to the nature of synthtissue
+ if(policy)
+ to_chat(C, policy)
+ C.log_message("revived using synthtissue, [tplus] deciseconds from time of death, considered late revival due to usage of synthtissue.", LOG_GAME)
else
+ var/preheal_brute = C.getBruteLoss()
+ var/preheal_burn = C.getFireLoss()
M.adjustBruteLoss(-healing_factor)
M.adjustFireLoss(-healing_factor)
- to_chat(M, "You feel your flesh merge with the synthetic tissue! It stings like hell!")
+ var/datum/reagent/synthtissue/active_tissue = M.reagents.has_reagent(/datum/reagent/synthtissue)
+ var/imperfect = FALSE //Merging with synthtissue that has borrowed health
+ if(active_tissue && active_tissue.borrowed_health)
+ borrowed_health += (preheal_brute - C.getBruteLoss()) + (preheal_burn - C.getFireLoss())
+ imperfect = TRUE
+ to_chat(M, "You feel your flesh [imperfect ? "partially and painfully" : ""] merge with the synthetic tissue! It stings like hell[imperfect ? " and is making you feel terribly sick" : ""]!")
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "painful_medicine", /datum/mood_event/painful_medicine)
+ data["borrowed_health"] += borrowed_health //Preserve health offset
+ borrowed_health = 0 //We are applying this to someone else, so this info will be transferred via data.
if(method==INJECT)
data["injected_vol"] = reac_volume
var/obj/item/organ/heart/H = C.getorganslot(ORGAN_SLOT_HEART)
- if(data["grown_volume"] > 50 && H.organ_flags & ORGAN_FAILING)
+ if(H && data["grown_volume"] > 50 && H.organ_flags & ORGAN_FAILING)
H.applyOrganDamage(-20)
..()
@@ -145,16 +165,19 @@
C.reagents.remove_reagent(type, 15)
to_chat(C, "You feel something reform inside of you!")
- data["injected_vol"] -= metabolization_rate
+ data["injected_vol"] = max(0, data["injected_vol"] - metabolization_rate * C.metabolism_efficiency) //No negatives.
if(borrowed_health)
- C.adjustToxLoss(1)
- C.adjustCloneLoss(1)
- borrowed_health -= 1
+ var/ratio = (current_cycle > SYNTHTISSUE_DAMAGE_FLIP_CYCLES) ? 0 : (1 - (current_cycle / SYNTHTISSUE_DAMAGE_FLIP_CYCLES))
+ var/payback = 2 * C.metabolism_efficiency //How much borrowed health we are paying back. Starts as cloneloss, slowly flips over to toxloss.
+ C.adjustToxLoss((1 - ratio) * payback * REAGENTS_EFFECT_MULTIPLIER, forced = TRUE, toxins_type = TOX_OMNI)
+ C.adjustCloneLoss(ratio * payback * REAGENTS_EFFECT_MULTIPLIER)
+ borrowed_health = max(borrowed_health - payback, 0)
..()
/datum/reagent/synthtissue/on_merge(passed_data)
if(!passed_data)
return ..()
+ borrowed_health += max(0, passed_data["borrowed_health"])
if(passed_data["grown_volume"] > data["grown_volume"])
data["grown_volume"] = passed_data["grown_volume"]
if(iscarbon(holder.my_atom))
@@ -166,11 +189,16 @@
/datum/reagent/synthtissue/on_new(passed_data)
if(!passed_data)
return ..()
+ borrowed_health = min(passed_data["borrowed_health"] + borrowed_health, SYNTHTISSUE_BORROW_CAP)
if(passed_data["grown_volume"] > data["grown_volume"])
data["grown_volume"] = passed_data["grown_volume"]
update_name()
..()
+/datum/reagent/synthtissue/post_copy_data()
+ data["borrowed_health"] = 0 //We passed this along to something that needed it, set it back to 0 so we don't do it twice.
+ return ..()
+
/datum/reagent/synthtissue/proc/update_name() //They are but babes on creation and have to grow unto godhood
switch(data["grown_volume"])
if(-INFINITY to 50)
@@ -193,9 +221,9 @@
C.adjustCloneLoss(borrowed_health*1.25)
C.adjustAllOrganLoss(borrowed_health*0.25)
M.updatehealth()
- if(borrowed_health && C.health < -20)
- M.stat = DEAD
+ if(C.stat != DEAD && borrowed_health && C.health < -20)
M.visible_message("The synthetic tissue degrades off [M]'s wounds as they collapse to the floor.")
+ M.death()
//NEEDS ON_MOB_DEAD()
/datum/reagent/fermi/zeolites
diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
index a78092988e..ce27433c07 100644
--- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
@@ -548,6 +548,8 @@
FermiExplode = FALSE
PurityMin = 0.2
+ is_secret = TRUE
+
/datum/chemical_reaction/fermi/secretcatchem/New()
//rand doesn't seem to work with n^-e
OptimalTempMin += rand(-100, 100)
diff --git a/modular_citadel/code/modules/reagents/objects/clothes.dm b/modular_citadel/code/modules/reagents/objects/clothes.dm
index ab4d49c56f..b6391ba82d 100644
--- a/modular_citadel/code/modules/reagents/objects/clothes.dm
+++ b/modular_citadel/code/modules/reagents/objects/clothes.dm
@@ -37,7 +37,7 @@
/obj/item/clothing/head/hattip/equipped(mob/M, slot)
. = ..()
- if (slot == SLOT_HEAD)
+ if (slot == ITEM_SLOT_HEAD)
RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech)
else
UnregisterSignal(M, COMSIG_MOB_SAY)
diff --git a/modular_citadel/icons/mob/mam_taur.dmi b/modular_citadel/icons/mob/mam_taur.dmi
index cf332019af..cc4bc0446c 100644
Binary files a/modular_citadel/icons/mob/mam_taur.dmi and b/modular_citadel/icons/mob/mam_taur.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 4328158bfc..de8e9ccddc 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -171,7 +171,6 @@
#include "code\__HELPERS\_string_lists.dm"
#include "code\__HELPERS\angles.dm"
#include "code\__HELPERS\areas.dm"
-#include "code\__HELPERS\AStar.dm"
#include "code\__HELPERS\chat.dm"
#include "code\__HELPERS\cmp.dm"
#include "code\__HELPERS\config.dm"
@@ -193,6 +192,7 @@
#include "code\__HELPERS\mobs.dm"
#include "code\__HELPERS\mouse_control.dm"
#include "code\__HELPERS\names.dm"
+#include "code\__HELPERS\path.dm"
#include "code\__HELPERS\priority_announce.dm"
#include "code\__HELPERS\pronouns.dm"
#include "code\__HELPERS\qdel.dm"
@@ -288,6 +288,7 @@
#include "code\_onclick\hud\revenanthud.dm"
#include "code\_onclick\hud\robot.dm"
#include "code\_onclick\hud\screen_objects.dm"
+#include "code\_onclick\hud\screentip.dm"
#include "code\_onclick\hud\simple_animal.dm"
#include "code\_onclick\hud\swarmer.dm"
#include "code\_onclick\hud\screen_objects\clickdelay.dm"
@@ -1472,6 +1473,7 @@
#include "code\modules\admin\outfits.dm"
#include "code\modules\admin\permissionedit.dm"
#include "code\modules\admin\player_panel.dm"
+#include "code\modules\admin\playtimes.dm"
#include "code\modules\admin\sound_emitter.dm"
#include "code\modules\admin\sql_message_system.dm"
#include "code\modules\admin\stickyban.dm"
@@ -2263,6 +2265,7 @@
#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_spaghetti.dm"
#include "code\modules\games\cas.dm"
#include "code\modules\games\unum.dm"
+#include "code\modules\holiday\dynamic.dm"
#include "code\modules\holiday\easter.dm"
#include "code\modules\holiday\holidays.dm"
#include "code\modules\holiday\halloween\bartholomew.dm"
@@ -2699,11 +2702,11 @@
#include "code\modules\mob\living\carbon\human\typing_indicator.dm"
#include "code\modules\mob\living\carbon\human\update_icons.dm"
#include "code\modules\mob\living\carbon\human\innate_abilities\blobform.dm"
+#include "code\modules\mob\living\carbon\human\innate_abilities\coiling.dm"
#include "code\modules\mob\living\carbon\human\innate_abilities\customization.dm"
#include "code\modules\mob\living\carbon\human\innate_abilities\limb_regeneration.dm"
#include "code\modules\mob\living\carbon\human\species_types\abductor.dm"
#include "code\modules\mob\living\carbon\human\species_types\android.dm"
-#include "code\modules\mob\living\carbon\human\species_types\angel.dm"
#include "code\modules\mob\living\carbon\human\species_types\anthropomorph.dm"
#include "code\modules\mob\living\carbon\human\species_types\arachnid.dm"
#include "code\modules\mob\living\carbon\human\species_types\bugmen.dm"
diff --git a/tgui/packages/tgui/interfaces/Limbgrower.js b/tgui/packages/tgui/interfaces/Limbgrower.js
index b91c7e4b45..e7e04d4f51 100644
--- a/tgui/packages/tgui/interfaces/Limbgrower.js
+++ b/tgui/packages/tgui/interfaces/Limbgrower.js
@@ -1,5 +1,5 @@
import { useBackend, useSharedState } from '../backend';
-import { Box, Button, Dimmer, Icon, LabeledList, Section, Tabs } from '../components';
+import { Box, Button, Dimmer, Icon, LabeledList, Section, Tabs, ProgressBar } from '../components';
import { Window } from '../layouts';
export const Limbgrower = (props, context) => {
@@ -22,7 +22,7 @@ export const Limbgrower = (props, context) => {
+ height={760}>
{!!busy && (
@@ -42,12 +42,19 @@ export const Limbgrower = (props, context) => {
Containing data for {disk['name']},
Attempting to create genitalia will use the disk's data.
+ Any Synthetic Frameworks created will
+ overwrite the race category selected.