diff --git a/code/controllers/configuration/entries/connections.dm b/code/controllers/configuration/entries/connections.dm
index 92bb4adefe..afbe94840a 100644
--- a/code/controllers/configuration/entries/connections.dm
+++ b/code/controllers/configuration/entries/connections.dm
@@ -32,7 +32,6 @@
min_val = 0
/datum/config_entry/flag/age_verification //are we using the automated age verification which asks users if they're 18+?
- default = TRUE
/datum/config_entry/flag/irc_first_connection_alert // do we notify the irc channel when somebody is connecting for the first time?
diff --git a/code/datums/elements/object_reskinning.dm b/code/datums/elements/object_reskinning.dm
index a75a818fc3..87f5f13385 100644
--- a/code/datums/elements/object_reskinning.dm
+++ b/code/datums/elements/object_reskinning.dm
@@ -110,10 +110,9 @@
)
SIGNAL_HANDLER
- if(isnull(held_item))
- switch(source.reskin_binding)
- if(COMSIG_CLICK_CTRL_SHIFT)
- LAZYSET(context[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB], INTENT_ANY, "Reskin PDA")
- else
- LAZYSET(context[SCREENTIP_CONTEXT_ALT_LMB], INTENT_ANY, "Reskin [source]")
- return CONTEXTUAL_SCREENTIP_SET
+ switch(source.reskin_binding)
+ if(COMSIG_CLICK_CTRL_SHIFT)
+ LAZYSET(context[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB], INTENT_ANY, "Reskin PDA")
+ else
+ LAZYSET(context[SCREENTIP_CONTEXT_ALT_LMB], INTENT_ANY, "Reskin [source]")
+ return CONTEXTUAL_SCREENTIP_SET
diff --git a/code/game/objects/items/miscellaneous.dm b/code/game/objects/items/miscellaneous.dm
index 80466832a6..590bd37d8c 100644
--- a/code/game/objects/items/miscellaneous.dm
+++ b/code/game/objects/items/miscellaneous.dm
@@ -240,18 +240,31 @@
item_state = "box"
/obj/item/choice_beacon/box/plushie/generate_display_names()
- var/list/plushie_list = list()
- //plushie set 1: just subtypes of /obj/item/toy/plush
- var/list/plushies_set_one = subtypesof(/obj/item/toy/plush) - list(/obj/item/toy/plush/narplush, /obj/item/toy/plush/awakenedplushie, /obj/item/toy/plush/random_snowflake, /obj/item/toy/plush/plushling, /obj/item/toy/plush/random) //don't allow these special ones (you can still get narplush/hugbox)
- for(var/V in plushies_set_one)
- var/atom/A = V
- plushie_list[initial(A.name)] = A
- //plushie set 2: snowflake plushies
- var/list/plushies_set_two = CONFIG_GET(keyed_list/snowflake_plushies)
- for(var/V in plushies_set_two)
- plushie_list[V] = V //easiest way to do this which works with how selecting options works, despite being snowflakey to have the key equal the value
+ var/static/list/plushie_list = list()
+ if(!length(plushie_list))
+ //plushie set 1: just subtypes of /obj/item/toy/plush
+ var/list/plushies_set_one = subtypesof(/obj/item/toy/plush)
+ plushies_set_one = remove_bad_plushies(plushies_set_one)
+ for(var/V in plushies_set_one)
+ var/atom/A = V
+ plushie_list[initial(A.name)] = A
+ //plushie set 2: snowflake plushies
+ var/list/plushies_set_two = CONFIG_GET(keyed_list/snowflake_plushies)
+ for(var/V in plushies_set_two)
+ plushie_list[V] = V //easiest way to do this which works with how selecting options works, despite being snowflakey to have the key equal the value
return plushie_list
+/// Don't allow these special ones (you can still get narplush/hugbox)
+/obj/item/choice_beacon/box/plushie/proc/remove_bad_plushies(list/plushies)
+ plushies -= list(
+ /obj/item/toy/plush/narplush,
+ /obj/item/toy/plush/awakenedplushie,
+ /obj/item/toy/plush/random_snowflake,
+ /obj/item/toy/plush/plushling,
+ /obj/item/toy/plush/random
+ )
+ return plushies
+
/obj/item/skub
desc = "It's skub."
name = "skub"
diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm
index e60871dec7..64b2362edc 100644
--- a/code/game/objects/items/plushes.dm
+++ b/code/game/objects/items/plushes.dm
@@ -6,6 +6,8 @@
attack_verb = list("thumped", "whomped", "bumped")
w_class = WEIGHT_CLASS_SMALL
resistance_flags = FLAMMABLE
+ lefthand_file = 'icons/mob/inhands/misc/plushes_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/misc/plushes_righthand.dmi'
var/list/squeak_override //Weighted list; If you want your plush to have different squeak sounds use this
var/stuffed = TRUE //If the plushie has stuffing in it
var/unstuffable = FALSE //for plushies that can't be stuffed
@@ -484,7 +486,6 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "space carp plushie"
desc = "An adorable stuffed toy that resembles a space carp."
icon_state = "carpplush"
- item_state = "carp_plushie"
attack_verb = list("bitten", "eaten", "fin slapped")
squeak_override = list('sound/weapons/bite.ogg'=1)
@@ -603,7 +604,6 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "lizard plushie"
desc = "An adorable stuffed toy that resembles a lizardperson."
icon_state = "plushie_lizard"
- item_state = "plushie_lizard"
attack_verb = list("clawed", "hissed", "tail slapped")
squeak_override = list('sound/weapons/slash.ogg' = 1)
@@ -611,19 +611,16 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "kobold plushie"
desc = "An adorable stuffed toy that resembles a kobold."
icon_state = "kobold"
- item_state = "kobold"
/obj/item/toy/plush/lizardplushie/kobold
name = "spacelizard plushie"
desc = "An adorable stuffed toy that resembles a lizard in a suit."
icon_state = "plushie_spacelizard"
- item_state = "plushie_spacelizard"
/obj/item/toy/plush/nukeplushie
name = "operative plushie"
desc = "A stuffed toy that resembles a syndicate nuclear operative. The tag claims operatives to be purely fictitious."
icon_state = "plushie_nuke"
- item_state = "plushie_nuke"
attack_verb = list("shot", "nuked", "detonated")
squeak_override = list('sound/effects/hit_punch.ogg' = 1)
@@ -631,7 +628,6 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "slime plushie"
desc = "An adorable stuffed toy that resembles a slime. It is practically just a hacky sack."
icon_state = "plushie_slime"
- item_state = "plushie_slime"
attack_verb = list("blorbled", "slimed", "absorbed", "glomped")
squeak_override = list('sound/effects/blobattack.ogg' = 1)
gender = FEMALE //given all the jokes and drawings, I'm not sure the xenobiologists would make a slimeboy
@@ -640,7 +636,6 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "awakened plushie"
desc = "An ancient plushie that has grown enlightened to the true nature of reality."
icon_state = "plushie_awake"
- item_state = "plushie_awake"
can_random_spawn = FALSE
/obj/item/toy/plush/awakenedplushie/ComponentInitialize()
@@ -651,7 +646,6 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "bee plushie"
desc = "A cute toy that resembles an even cuter bee."
icon_state = "plushie_bee"
- item_state = "plushie_bee"
attack_verb = list("stung")
gender = FEMALE
squeak_override = list('modular_citadel/sound/voice/scream_moth.ogg' = 1)
@@ -660,7 +654,6 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "moth plushie"
desc = "An adorable stuffed toy that resembles some kind of insect."
icon_state = "moff"
- item_state = "moff"
squeak_override = list('modular_citadel/sound/voice/mothsqueak.ogg' = 1)
can_random_spawn = FALSE
@@ -668,7 +661,6 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "lamp plushie"
desc = "A toy lamp plushie, doesn't actually make light, but it still toggles on and off. Click clack!"
icon_state = "plushie_lamp"
- item_state = "plushie_lamp"
attack_verb = list("lit", "flickered", "flashed")
squeak_override = list('sound/weapons/magout.ogg' = 1)
@@ -676,72 +668,61 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "drake plushie"
desc = "A large beast from lavaland turned into a marketable plushie!"
icon_state = "drake"
- item_state = "drake"
attack_verb = list("bit", "devoured", "burned")
/obj/item/toy/plush/deer
name = "deer plushie"
desc = "Oh deer, a plushie!"
icon_state = "deer"
- item_state = "deer"
attack_verb = list("bleated", "rammed", "kicked")
/obj/item/toy/plush/box
name = "cardboard plushie"
desc = "A toy box plushie, it holds cotten. Only a baddie would place a bomb through the postal system..."
icon_state = "box"
- item_state = "box"
attack_verb = list("open", "closed", "packed", "hidden", "rigged", "bombed", "sent", "gave")
/obj/item/toy/plush/slaggy
name = "slag plushie"
desc = "A piece of slag with some googly eyes and a drawn on mouth."
icon_state = "slaggy"
- item_state = "slaggy"
attack_verb = list("melted", "refined", "stared")
/obj/item/toy/plush/mr_buckety
name = "bucket plushie"
desc = "A bucket that is missing its handle with some googly eyes and a drawn on mouth."
icon_state = "mr_buckety"
- item_state = "mr_buckety"
attack_verb = list("filled", "dumped", "stared")
/obj/item/toy/plush/dr_scanny
name = "scanner plushie"
desc = "A old outdated scanner that has been modified to have googly eyes, a dawn on mouth and, heart."
icon_state = "dr_scanny"
- item_state = "dr_scanny"
attack_verb = list("scanned", "beeped", "stared")
/obj/item/toy/plush/borgplushie
name = "K9 plushie"
desc = "An adorable stuffed toy of a robot."
icon_state = "securityk9"
- item_state = "securityk9"
attack_verb = list("beeped", "booped", "pinged")
squeak_override = list('sound/machines/beep.ogg' = 1)
/obj/item/toy/plush/borgplushie/medihound
name = "medihound plushie"
icon_state = "medihound"
- item_state = "medihound"
/obj/item/toy/plush/borgplushie/scrubpuppy
name = "scrubpuppy plushie"
icon_state = "scrubpuppy"
- item_state = "scrubpuppy"
/obj/item/toy/plush/borgplushie/pupdozer
name = "pupdozer plushie"
icon_state = "pupdozer"
- item_state = "pupdozer"
/obj/item/toy/plush/aiplush
name = "AI plushie"
desc = "A little stuffed toy AI core... it appears to be malfunctioning."
icon_state = "malfai"
- item_state = "malfai"
attack_verb = list("hacked", "detonated", "overloaded")
squeak_override = list('sound/machines/beep.ogg' = 9, 'sound/machines/buzz-two.ogg' = 1)
@@ -749,7 +730,6 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "snake plushie"
desc = "An adorable stuffed toy that resembles a snake. Not to be mistaken for the real thing."
icon_state = "plushie_snake"
- item_state = "plushie_snake"
attack_verb = list("bitten", "hissed", "tail slapped")
squeak_override = list('modular_citadel/sound/voice/hiss.ogg' = 1)
@@ -757,20 +737,17 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "mammal plushie"
desc = "An adorable stuffed toy resembling some sort of crew member."
icon_state = "ych"
- item_state = "ych"
can_random_spawn = FALSE
/obj/item/toy/plush/mammal/fox
name = "fox plushie"
desc = "An adorable stuffed toy resembling a fox."
icon_state = "fox"
- item_state = "fox"
attack_verb = list("yipped", "geckered", "yapped")
/obj/item/toy/plush/mammal/dog
name = "dog plushie"
icon_state = "corgi"
- item_state = "corgi"
desc = "An adorable stuffed toy that resembles a dog."
attack_verb = list("barked", "boofed", "borked")
squeak_override = list(
@@ -781,20 +758,17 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
/obj/item/toy/plush/mammal/dog/fcorgi
name = "corgi plushie"
icon_state = "girlycorgi"
- item_state = "girlycorgi"
desc = "An adorable stuffed toy that resembles a dog. This one dons a pink ribbon."
/obj/item/toy/plush/mammal/dog/borgi
name = "borgi plushie"
icon_state = "borgi"
- item_state = "borgi"
desc = "An adorable stuffed toy that resembles a robot dog."
/obj/item/toy/plush/xeno
name = "xenohybrid plushie"
desc = "An adorable stuffed toy that resembles a xenomorphic crewmember."
icon_state = "xeno"
- item_state = "xeno"
squeak_override = list('sound/voice/hiss2.ogg' = 1)
can_random_spawn = FALSE
@@ -802,7 +776,6 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "bird plushie"
desc = "An adorable stuffed plushie that resembles an avian."
icon_state = "bird"
- item_state = "bird"
attack_verb = list("peeped", "beeped", "poofed")
squeak_override = list('modular_citadel/sound/voice/peep.ogg' = 1)
can_random_spawn = FALSE
@@ -811,7 +784,6 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "sergal plushie"
desc = "An adorable stuffed plushie that resembles a sagaru."
icon_state = "sergal"
- item_state = "sergal"
squeak_override = list('modular_citadel/sound/voice/merp.ogg' = 1)
can_random_spawn = FALSE
@@ -819,7 +791,6 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "feline plushie"
desc = "An adorable stuffed toy that resembles a feline."
icon_state = "cat"
- item_state = "cat"
attack_verb = list("headbutt", "scritched", "bit")
squeak_override = list('modular_citadel/sound/voice/nya.ogg' = 1)
can_random_spawn = FALSE
@@ -828,7 +799,6 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "medcat plushie"
desc = "An affectionate stuffed toy that resembles a certain medcat, comes complete with battery operated wagging tail!! You get the impression she's cheering you on to to find happiness and be kind to people."
icon_state = "fermis"
- item_state = "fermis"
attack_verb = list("cuddled", "petpatted", "wigglepurred")
squeak_override = list('modular_citadel/sound/voice/merowr.ogg' = 1)
@@ -836,20 +806,17 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
name = "teddy"
desc = "It's a teddy bear!"
icon_state = "teddy"
- item_state = "teddy"
/obj/item/toy/plush/crab
name = "crab plushie"
desc = "Fewer pinches than a real one, but it still clicks."
icon_state = "crab"
- item_state = "crab"
attack_verb = list("clicked", "clacked", "pinched")
/obj/item/toy/plush/gondola
name = "gondola plushie"
desc = "Just looking at it seems to calm you down. Please do not eat it though."
icon_state = "gondola"
- item_state = "gondola"
attack_verb = list("calmed", "smiled", "peaced")
/obj/item/toy/plush/hairball
diff --git a/code/game/objects/structures/beds_chairs/alien_nest.dm b/code/game/objects/structures/beds_chairs/alien_nest.dm
index 77b3279517..eff87d3955 100644
--- a/code/game/objects/structures/beds_chairs/alien_nest.dm
+++ b/code/game/objects/structures/beds_chairs/alien_nest.dm
@@ -34,7 +34,7 @@
"[M.name] struggles to break free from the gelatinous resin!",\
"You struggle to break free from the gelatinous resin... (Stay still for two minutes.)",\
"You hear squelching...")
- if(!do_after(M, 1200, target = src))
+ if(!do_after(M, 2 MINUTES, target = src, timed_action_flags = (IGNORE_HELD_ITEM | IGNORE_INCAPACITATED), extra_checks = CALLBACK(M, TYPE_PROC_REF(/mob/living/carbon, cuff_resist_check))))
if(M && M.buckled)
to_chat(M, "You fail to unbuckle yourself!")
return
@@ -48,8 +48,8 @@
unbuckle_mob(M)
add_fingerprint(user)
-/obj/structure/bed/nest/user_buckle_mob(mob/living/M, mob/living/user)
- if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.incapacitated() || M.buckled )
+/obj/structure/bed/nest/user_buckle_mob(mob/living/M, mob/living/carbon/user)
+ if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || !user.cuff_resist_check() || M.buckled )
return
if(M.getorgan(/obj/item/organ/alien/plasmavessel))
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 404ca1df8d..419a75eff2 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -267,7 +267,7 @@
MarkResistTime()
visible_message("[src] attempts to unbuckle [p_them()]self!", \
"You attempt to unbuckle yourself... (This will take around [round(buckle_cd/600,1)] minute\s, and you need to stay still.)")
- if(do_after(src, buckle_cd, src, timed_action_flags = IGNORE_HELD_ITEM))
+ if(do_after(src, buckle_cd, src, timed_action_flags = IGNORE_HELD_ITEM | IGNORE_INCAPACITATED, extra_checks = CALLBACK(src, .proc/cuff_resist_check)))
if(!buckled)
return
buckled.user_unbuckle_mob(src, src)
diff --git a/icons/mob/inhands/misc/plushes_lefthand.dmi b/icons/mob/inhands/misc/plushes_lefthand.dmi
new file mode 100644
index 0000000000..1a12cece7d
Binary files /dev/null and b/icons/mob/inhands/misc/plushes_lefthand.dmi differ
diff --git a/icons/mob/inhands/misc/plushes_righthand.dmi b/icons/mob/inhands/misc/plushes_righthand.dmi
new file mode 100644
index 0000000000..fab9101eb6
Binary files /dev/null and b/icons/mob/inhands/misc/plushes_righthand.dmi differ
diff --git a/icons/obj/plushes.dmi b/icons/obj/plushes.dmi
index 69cec1a6fd..aea6a40e86 100644
Binary files a/icons/obj/plushes.dmi and b/icons/obj/plushes.dmi differ
diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm
index ec97d0659f..906da43448 100644
--- a/modular_citadel/code/modules/custom_loadout/custom_items.dm
+++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm
@@ -113,7 +113,6 @@
desc = "While a normal carrot would be good for your eyes, this one seems a bit more for hugging then eating."
icon = 'icons/obj/hydroponics/harvest.dmi'
icon_state = "carrot"
- item_state = "carrot"
w_class = WEIGHT_CLASS_SMALL
attack_verb = list("slapped")
resistance_flags = FLAMMABLE
@@ -146,7 +145,6 @@
desc = "A festive plush that squeeks when you squeeze it!"
icon = 'icons/obj/custom.dmi'
icon_state = "pine_c"
- item_state = "pine_c"
w_class = WEIGHT_CLASS_SMALL
attack_verb = list("slapped")
resistance_flags = FLAMMABLE
@@ -547,7 +545,6 @@
/obj/item/toy/plush/mammal/dog/fritz
icon = 'icons/obj/custom.dmi'
icon_state = "fritz"
- item_state = "fritz"
attack_verb = list("barked", "boofed", "shotgun'd")
obj_flags = UNIQUE_RENAME
unique_reskin = list(