diff --git a/code/__DEFINES/misc_defines.dm b/code/__DEFINES/misc_defines.dm index 1c29b183f14..9b96625c553 100644 --- a/code/__DEFINES/misc_defines.dm +++ b/code/__DEFINES/misc_defines.dm @@ -760,3 +760,5 @@ do { \ #define DIRECT_EXPLOSIVE_TRAP_DEFUSE 1 #define DIRECT_EXPLOSIVE_TRAP_IGNORE 2 + +#define NODROP_TOGGLE "toggle" diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index b681bff4925..ff3ac8eccad 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -460,22 +460,30 @@ . = ..() if(!handcuff_overlay) var/state = (slot_id == ITEM_SLOT_RIGHT_HAND) ? "markus" : "gabrielle" - handcuff_overlay = image("icon"='icons/mob/screen_gen.dmi', "icon_state"=state) + handcuff_overlay = image(icon = 'icons/mob/screen_gen.dmi', icon_state = state) - if(hud && hud.mymob) - if(iscarbon(hud.mymob)) - var/mob/living/carbon/C = hud.mymob - if(C.handcuffed) - . += handcuff_overlay + if(!hud || !hud.mymob) + return - var/obj/item/organ/external/hand = C.get_organ("[slot_id == ITEM_SLOT_LEFT_HAND ? "l" : "r"]_hand") - if(!isalien(C) && (!hand || !hand.is_usable())) - . += blocked_overlay + if(iscarbon(hud.mymob)) + var/mob/living/carbon/C = hud.mymob + if(C.handcuffed) + . += handcuff_overlay - if(slot_id == ITEM_SLOT_LEFT_HAND && hud.mymob.hand) + var/obj/item/organ/external/hand = C.get_organ("[slot_id == ITEM_SLOT_LEFT_HAND ? "l" : "r"]_hand") + if(!isalien(C) && (!hand || !hand.is_usable())) + . += blocked_overlay + + if(slot_id == ITEM_SLOT_LEFT_HAND) + if(hud.mymob.hand) . += "hand_active" - else if(slot_id == ITEM_SLOT_RIGHT_HAND && !hud.mymob.hand) + if(hud.mymob.l_hand && (hud.mymob.l_hand.flags & NODROP) && !(hud.mymob.l_hand.flags & ABSTRACT)) + . += "locked_l" + else if(slot_id == ITEM_SLOT_RIGHT_HAND) + if(!hud.mymob.hand) . += "hand_active" + if(hud.mymob.r_hand && (hud.mymob.r_hand?.flags & NODROP) && !(hud.mymob.r_hand.flags & ABSTRACT)) + . += "locked" /atom/movable/screen/inventory/hand/Click() // At this point in client Click() code we have passed the 1/10 sec check and little else diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index c4a1e86f7e6..402c344775a 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -1414,7 +1414,7 @@ B.desc = "Sometimes, someone's just gotta die." var/obj/item/radio/headset/R = H.l_ear if(istype(R)) - R.flags |= NODROP + R.set_nodrop(TRUE, H) /datum/outfit/admin/honksquad name = "Honksquad" diff --git a/code/datums/spells/horsemask.dm b/code/datums/spells/horsemask.dm index 4e5e5e26ca1..495072f25fd 100644 --- a/code/datums/spells/horsemask.dm +++ b/code/datums/spells/horsemask.dm @@ -35,7 +35,8 @@ return FALSE var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead - magichead.flags |= NODROP | DROPDEL //curses! + magichead.flags |= DROPDEL //curses! + magichead.set_nodrop(TRUE) magichead.flags_inv = null //so you can still see their face magichead.voicechange = TRUE //NEEEEIIGHH target.visible_message( "[target]'s face lights up in fire, and after the event a horse's head takes its place!", \ diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 69b2ea4c582..390b06419a7 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -85,7 +85,7 @@ CONTENTS: combat_armor = getArmor(arglist(combat_armor)) /obj/item/clothing/suit/armor/abductor/vest/proc/toggle_nodrop() - flags ^= NODROP + set_nodrop(NODROP_TOGGLE, loc) if(ismob(loc)) to_chat(loc, "Your vest is now [flags & NODROP ? "locked" : "unlocked"].") diff --git a/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm b/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm index e4c4a7bed44..3bd60abf240 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm @@ -23,7 +23,7 @@ var/obj/item/clothing/suit/armor/abductor/vest/V = locate() in H if(V) console.vest = V - V.flags |= NODROP + V.set_nodrop(TRUE, H) var/obj/item/abductor/gizmo/G = locate() in H.get_item_by_slot(ITEM_SLOT_BACK) if(G) diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 9851f7f41af..d3de73df9bf 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -1109,7 +1109,8 @@ if(ishuman(user)) to_chat(user, "HOR-SIE HAS RISEN") var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead - magichead.flags |= NODROP | DROPDEL //curses! + magichead.flags |= DROPDEL //curses! + magichead.set_nodrop(TRUE, magichead.loc) magichead.flags_inv = null //so you can still see their face magichead.voicechange = TRUE //NEEEEIIGHH if(!user.drop_item_to_ground(user.wear_mask)) diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 01c71c99980..328f2781ab3 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -144,7 +144,8 @@ new /obj/effect/hallucination/delusion(get_turf(victim), victim, 'icons/mob/mob.dmi', "daemon") var/obj/item/chainsaw/doomslayer/chainsaw = new(victim.loc) - chainsaw.flags |= NODROP | DROPDEL + chainsaw.flags |= DROPDEL + chainsaw.set_nodrop(TRUE, victim) victim.drop_l_hand() victim.drop_r_hand() victim.put_in_hands(chainsaw) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 7b420407f2c..3161a02f1ea 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1068,3 +1068,15 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons /// Changes the speech verb when wearing this item if a value is returned /obj/item/proc/change_speech_verb() return + +/obj/item/proc/set_nodrop(set_value, user) + switch(set_value) + if(TRUE) + flags |= NODROP + if(FALSE) + flags &= ~NODROP + if(NODROP_TOGGLE) + flags ^= NODROP + if(iscarbon(user)) + var/mob/living/carbon/C = user + C.update_hands_hud() diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index d8ba0c62e12..201800e75b4 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -63,7 +63,7 @@ user.put_in_hands(A) A.add_fingerprint(user) if(src.flags & NODROP) - A.flags |= NODROP + A.set_nodrop(TRUE) /obj/item/electropack/proc/handle_shock() diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm index d96bed6ad47..1b6ec5fce8f 100644 --- a/code/game/objects/items/his_grace.dm +++ b/code/game/objects/items/his_grace.dm @@ -144,7 +144,7 @@ do_attack_animation(master, used_item = src) master.emote("scream") master.remove_status_effect(STATUS_EFFECT_HISGRACE) - flags &= ~NODROP + set_nodrop(FALSE, master) master.Weaken(6 SECONDS) master.adjustBruteLoss(1000) playsound(master, 'sound/effects/splat.ogg', 100, FALSE) @@ -251,25 +251,25 @@ update_stats() /obj/item/his_grace/proc/update_stats() + var/mob/living/master = get_atom_on_turf(src, /mob/living) if(ascended) // Ascended is set to a specific bloodthirst anyways force = initial(force) + force_bonus - flags |= NODROP + set_nodrop(TRUE, master) return - flags &= ~NODROP - var/mob/living/master = get_atom_on_turf(src, /mob/living) + set_nodrop(FALSE, master) switch(bloodthirst) if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP) if(HIS_GRACE_CONSUME_OWNER > prev_bloodthirst) master.visible_message("[src] enters a frenzy!") if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER) - flags |= NODROP + set_nodrop(TRUE, master) if(HIS_GRACE_STARVING > prev_bloodthirst) master.visible_message("[src] is starving!", "[src]'s bloodlust overcomes you. [src] must be fed, or you will become His meal.\ [force_bonus < 15 ? " And still, His power grows.":""]") force_bonus = max(force_bonus, 15) if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING) - flags |= NODROP + set_nodrop(TRUE, master) if(HIS_GRACE_FAMISHED > prev_bloodthirst) master.visible_message("[src] is very hungry!", "Spines sink into your hand. [src] must feed immediately.\ [force_bonus < 10 ? " His power grows.":""]") diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index ec2cedef256..4d2a3a50c62 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -349,26 +349,26 @@ /obj/item/rcd/suicide_act(mob/living/user) user.Immobilize(10 SECONDS) // You cannot move. - flags |= NODROP // You cannot drop. You commit to die. + set_nodrop(TRUE, user) if(mode == MODE_DECON) user.visible_message("[user] points [src] at [user.p_their()] chest and pulls the trigger. It looks like [user.p_theyre()] trying to commit suicide!") var/datum/rcd_act/remove_user/act = new() if(!act.try_act(user, src, user)) - flags &= ~NODROP + set_nodrop(FALSE, user) return SHAME user.visible_message("[user] deconstructs [user.p_themselves()] with [src]!") for(var/obj/item/W in user) // Do not delete all their stuff. user.drop_item_to_ground(W) // Dump everything on the floor instead. - flags &= ~NODROP // NODROP must be removed so the RCD doesn't get dusted along with them. Having this come after the unequipping puts the RCD on top of the pile of stuff. + set_nodrop(FALSE, user) user.dust() // (held items fall to the floor when dusting). return OBLITERATION user.visible_message("[user] puts the barrel of [src] into [user.p_their()] mouth and pulls the trigger. It looks like [user.p_theyre()] trying to commit suicide!") if(!interact_with_atom(get_turf(src), user, TRUE)) - flags &= ~NODROP + set_nodrop(FALSE, user) return SHAME user.visible_message("[user] explodes as [src] builds a structure inside [user.p_them()]!") - flags &= ~NODROP + set_nodrop(FALSE, user) user.gib() return OBLITERATION diff --git a/code/game/objects/items/weapons/grenades/syndieminibomb.dm b/code/game/objects/items/weapons/grenades/syndieminibomb.dm index 642463b50c0..a98842e30ca 100644 --- a/code/game/objects/items/weapons/grenades/syndieminibomb.dm +++ b/code/game/objects/items/weapons/grenades/syndieminibomb.dm @@ -23,7 +23,7 @@ /obj/item/grenade/syndieminibomb/fake/attack_self__legacy__attackchain(mob/user) if(!active) - flags |= NODROP + set_nodrop(TRUE, user) to_chat(user, "As you activate the bomb, it emits a substance that sticks to your hand! It won't come off!") to_chat(user, "Uh oh.") . = ..() diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index a1247748398..f6e550203dc 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -114,7 +114,7 @@ icon_state = "disintegrate" item_state = "disintegrate" desc = "This hand of yours glows with an awesome power!" - flags = ABSTRACT | NODROP| DROPDEL + flags = ABSTRACT | NODROP | DROPDEL w_class = WEIGHT_CLASS_HUGE hitsound = 'sound/weapons/sear.ogg' damtype = BURN diff --git a/code/game/objects/items/weapons/knuckledusters.dm b/code/game/objects/items/weapons/knuckledusters.dm index 7d2d6d57ed1..c5a0c744662 100644 --- a/code/game/objects/items/weapons/knuckledusters.dm +++ b/code/game/objects/items/weapons/knuckledusters.dm @@ -23,18 +23,18 @@ if(!gripped) gripped = TRUE to_chat(user, "You tighten your grip on [src], ensuring you won't drop it.") - flags |= NODROP + set_nodrop(TRUE, user) ADD_TRAIT(src, TRAIT_SKIP_EXAMINE, "knuckledusters") else gripped = FALSE to_chat(user, "You relax your grip on [src].") - flags &= ~NODROP + set_nodrop(FALSE, user) REMOVE_TRAIT(src, TRAIT_SKIP_EXAMINE, "knuckledusters") /obj/item/melee/knuckleduster/dropped(mob/user, silent) . = ..() gripped = FALSE - flags &= ~NODROP + set_nodrop(FALSE, user) REMOVE_TRAIT(src, TRAIT_SKIP_EXAMINE, "knuckledusters") /obj/item/melee/knuckleduster/attack__legacy__attackchain(mob/living/target, mob/living/user) diff --git a/code/game/objects/items/weapons/powerfist.dm b/code/game/objects/items/weapons/powerfist.dm index 14367dd26ef..ccded486268 100644 --- a/code/game/objects/items/weapons/powerfist.dm +++ b/code/game/objects/items/weapons/powerfist.dm @@ -71,7 +71,7 @@ to_chat(user, "[src] currently has no tank attached to it.") return to_chat(user, "As you detach [thetank] from [src], the fist unlocks.") - flags &= ~NODROP + set_nodrop(FALSE, user) tank.forceMove(get_turf(user)) user.put_in_hands(tank) tank = null @@ -84,8 +84,7 @@ to_chat(user, "As you hook [thetank] up to [src], the fist locks into place around your arm.") tank = thetank thetank.forceMove(src) - flags |= NODROP - + set_nodrop(TRUE, user) /obj/item/melee/powerfist/attack__legacy__attackchain(mob/living/target, mob/living/user) if(HAS_TRAIT(user, TRAIT_PACIFISM)) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index fbc328822b8..49c04c97b5e 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -430,7 +430,7 @@ if(zip_time) slowdown = 1 if(antidrop_on_zip) - flags ^= NODROP + set_nodrop(NODROP_TOGGLE, user) update_icon(UPDATE_ICON_STATE) return @@ -439,7 +439,7 @@ for(var/obj/item/storage/container in src) container.hide_from_all() // Hide everything inside the bag too if(antidrop_on_zip) - flags |= NODROP + set_nodrop(TRUE, user) update_icon(UPDATE_ICON_STATE) /obj/item/storage/backpack/duffel/update_icon_state() diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 0007f12082c..84041150bca 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -571,10 +571,10 @@ return ..() /obj/item/butcher_chainsaw/proc/wield() //you can't disarm an active chainsaw, you crazy person. - flags |= NODROP + set_nodrop(TRUE, loc) /obj/item/butcher_chainsaw/proc/unwield() - flags &= ~NODROP + set_nodrop(FALSE, loc) // SINGULOHAMMER /obj/item/singularityhammer @@ -878,7 +878,7 @@ user.visible_message("[user] deploys [W] from [user.p_their()] wrists in a shower of sparks!", "You deploy [W] from your wrists!", "You hear the shower of sparks!") user.put_in_hands(W) on_cooldown = TRUE - flags |= NODROP + set_nodrop(TRUE, user) addtimer(CALLBACK(src, PROC_REF(reboot)), 2 MINUTES) if(world.time > next_spark_time) do_sparks(rand(1,6), 1, loc) @@ -900,7 +900,7 @@ /obj/item/clothing/gloves/color/black/pyro_claws/proc/reboot() on_cooldown = FALSE - flags &= ~NODROP + set_nodrop(FALSE, loc) atom_say("Internal plasma canisters recharged. Gloves sufficiently cooled") /// Max number of atoms a broom can sweep at once diff --git a/code/modules/antagonists/mind_flayer/powers/flayer_weapon_powers.dm b/code/modules/antagonists/mind_flayer/powers/flayer_weapon_powers.dm index 30042c25a7b..d209c4d6b9a 100644 --- a/code/modules/antagonists/mind_flayer/powers/flayer_weapon_powers.dm +++ b/code/modules/antagonists/mind_flayer/powers/flayer_weapon_powers.dm @@ -36,7 +36,9 @@ if(!weapon_ref) create_new_weapon() - weapon_ref.flags |= (ABSTRACT | NODROP) // Just in case the item doesn't start with both of these, or somehow loses them. + // Just in case the item doesn't start with both of these, or somehow loses them. + weapon_ref.flags |= ABSTRACT + weapon_ref.set_nodrop(TRUE, user) if(HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || (user.get_active_hand() && !user.drop_item())) flayer.send_swarm_message("We cannot manifest [weapon_ref] into our active hand...") diff --git a/code/modules/clothing/masks/misc_masks.dm b/code/modules/clothing/masks/misc_masks.dm index e21e2be4e3d..dfc4024e7ea 100644 --- a/code/modules/clothing/masks/misc_masks.dm +++ b/code/modules/clothing/masks/misc_masks.dm @@ -32,7 +32,7 @@ if(security_lock) security_lock = FALSE locked = FALSE - flags &= ~NODROP + set_nodrop(FALSE, loc) desc += " This one appears to be broken." return TRUE else @@ -46,7 +46,7 @@ else if(ACCESS_BRIG in user.get_access()) to_chat(user, "The muzzle unlocks with a click.") locked = FALSE - flags &= ~NODROP + set_nodrop(FALSE, loc) return TRUE to_chat(user, "You must be wearing a security ID card or have one in your inactive hand to remove the muzzle.") @@ -55,7 +55,7 @@ /obj/item/clothing/mask/muzzle/proc/do_lock(mob/living/carbon/human/user) if(security_lock) locked = TRUE - flags |= NODROP + set_nodrop(TRUE, loc) return TRUE return FALSE diff --git a/code/modules/clothing/spacesuits/alien_suits.dm b/code/modules/clothing/spacesuits/alien_suits.dm index 972b98a5b3a..e8f7eda45e7 100644 --- a/code/modules/clothing/spacesuits/alien_suits.dm +++ b/code/modules/clothing/spacesuits/alien_suits.dm @@ -216,7 +216,7 @@ /obj/item/clothing/shoes/magboots/vox/attack_self__legacy__attackchain(mob/user) if(magpulse) - flags &= ~NODROP + set_nodrop(FALSE, loc) to_chat(user, "You relax your deathgrip on the flooring.") else //make sure these can only be used when equipped. @@ -226,7 +226,7 @@ if(H.shoes != src) to_chat(user, "You will have to put on [src] before you can do that.") return - flags |= NODROP //kinda hard to take off magclaws when you are gripping them tightly. + set_nodrop(TRUE, loc) //kinda hard to take off magclaws when you are gripping them tightly. to_chat(user, "You dig your claws deeply into the flooring, bracing yourself.") to_chat(user, "It would be hard to take off [src] without relaxing your grip first.") return ..() @@ -238,7 +238,7 @@ user.visible_message("[src] go limp as they are removed from [usr]'s feet.", "[src] go limp as they are removed from your feet.") magpulse = FALSE no_slip = FALSE - flags &= ~NODROP + set_nodrop(FALSE, loc) /obj/item/clothing/shoes/magboots/vox/examine(mob/user) . = ..() diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index 5cf6a5446c5..4eade0ff155 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -138,9 +138,9 @@ if(user.head && istype(user.head, /obj/item/clothing/head/helmet/space/chronos)) to_chat(user, "\[ ok \] Mounting /dev/helmet") helmet = user.head - helmet.flags |= NODROP + helmet.set_nodrop(TRUE, loc) helmet.suit = src - flags |= NODROP + set_nodrop(TRUE, loc) to_chat(user, "\[ ok \] Starting brainwave scanner") to_chat(user, "\[ ok \] Starting ui display driver") to_chat(user, "\[ ok \] Initializing chronowalk4-view") @@ -169,11 +169,11 @@ to_chat(user, "\[ ok \] Stopping ui display driver") to_chat(user, "\[ ok \] Stopping brainwave scanner") to_chat(user, "\[ ok \] Unmounting /dev/helmet") - helmet.flags &= ~NODROP + helmet.set_nodrop(FALSE, loc) helmet.suit = null helmet = null to_chat(user, "logout") - flags &= ~NODROP + set_nodrop(FALSE, loc) cooldown = world.time + cooldowntime * 1.5 activated = FALSE activating = FALSE diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 60c558837e2..d0e15704a1f 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -269,7 +269,7 @@ C.name = "Sax" C.real_name = "Sax" var/obj/item/clothing/head/det_hat/D = new - D.flags |= NODROP + D.set_nodrop(TRUE, loc) C.place_on_head(D) C.visible_message("[C] suddenly winks into existence at [user]'s feet!") to_chat(user, "[src] crumbles to dust in your hands!") diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 2539e98ed35..aa7d9b32143 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -264,8 +264,8 @@ user.next_move_modifier *= BERSERK_ATTACK_SPEED_MODIFIER user.add_atom_colour(BERSERK_COLOUR, TEMPORARY_COLOUR_PRIORITY) ADD_TRAIT(user, TRAIT_CHUNKYFINGERS, BERSERK_TRAIT) - flags |= NODROP - suit.flags |= NODROP + set_nodrop(TRUE) + suit.set_nodrop(TRUE, loc) berserk_active = TRUE START_PROCESSING(SSobj, src) @@ -284,8 +284,8 @@ user.next_move_modifier /= BERSERK_ATTACK_SPEED_MODIFIER user.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, BERSERK_COLOUR) REMOVE_TRAIT(user, TRAIT_CHUNKYFINGERS, BERSERK_TRAIT) - flags &= ~NODROP - suit.flags &= ~NODROP + set_nodrop(FALSE) + suit.set_nodrop(FALSE) STOP_PROCESSING(SSobj, src) /datum/action/item_action/berserk_mode @@ -396,7 +396,7 @@ qdel(src) // Oh no! Oh well a new rod will be made from the STATUS_EFFECT_HIPPOCRATIC_OATH return - flags |= NODROP // Readd the nodrop + set_nodrop(TRUE, loc) var/mob/living/carbon/human/H = owner var/limb_regrown = FALSE diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 886d2cc1c0c..1ceba7a3ee4 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -139,7 +139,7 @@ target.equip_to_slot_if_possible(src, ITEM_SLOT_MASK, FALSE, TRUE) if(!sterile) M.KnockDown(impregnation_time + 2 SECONDS) - flags |= NODROP //You can't take it off until it dies... or figures out you're an IPC. + set_nodrop(TRUE, loc) //You can't take it off until it dies... or figures out you're an IPC. GoIdle() //so it doesn't jump the people that tear it off var/obj/structure/bed/nest/our_nest = M.buckled @@ -149,7 +149,7 @@ return TRUE /obj/item/clothing/mask/facehugger/proc/Impregnate(mob/living/target) - flags &= ~NODROP + set_nodrop(FALSE, loc) if(!target || target.stat == DEAD || loc != target) //was taken off or something return diff --git a/code/modules/mob/living/carbon/human/human_inventory.dm b/code/modules/mob/living/carbon/human/human_inventory.dm index 1825b2b79de..3151948540b 100644 --- a/code/modules/mob/living/carbon/human/human_inventory.dm +++ b/code/modules/mob/living/carbon/human/human_inventory.dm @@ -244,9 +244,11 @@ if(ITEM_SLOT_LEFT_HAND) l_hand = I update_inv_l_hand() + update_hands_hud() if(ITEM_SLOT_RIGHT_HAND) r_hand = I update_inv_r_hand() + update_hands_hud() if(ITEM_SLOT_BELT) belt = I update_inv_belt() diff --git a/code/modules/mob/living/carbon/superheroes.dm b/code/modules/mob/living/carbon/superheroes.dm index 62488b8113e..a4c5d79aeff 100644 --- a/code/modules/mob/living/carbon/superheroes.dm +++ b/code/modules/mob/living/carbon/superheroes.dm @@ -20,7 +20,7 @@ /datum/superheroes/proc/fixflags(mob/living/carbon/human/H) for(var/obj/item/W in H.get_all_slots()) - W.flags |= NODROP + W.set_nodrop(TRUE, H) /datum/superheroes/proc/assign_mutations(mob/living/carbon/human/H) var/list/default_mutations = list(GLOB.regenerateblock, GLOB.breathlessblock, GLOB.coldblock) @@ -51,7 +51,7 @@ W.icon_state = "lifetimeid" W.SetOwnerInfo(H) W.UpdateName() - W.flags |= NODROP + W.set_nodrop(TRUE, H) H.equip_to_slot_or_del(W, ITEM_SLOT_ID) H.regenerate_icons() @@ -233,7 +233,7 @@ W.access = list(ACCESS_MAINT_TUNNELS) W.assignment = "Greyshirt" W.rank = "Greyshirt" - W.flags |= NODROP + W.set_nodrop(TRUE, W.loc) W.SetOwnerInfo(target) W.UpdateName() target.equip_to_slot_or_del(W, ITEM_SLOT_ID) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index eccf45bb928..430020ae3b3 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -138,7 +138,7 @@ /obj/item/robot_module/proc/fix_modules() for(var/item in modules) var/obj/item/I = item - I.flags |= NODROP + I.set_nodrop(TRUE) I.mouse_opacity = MOUSE_OPACITY_OPAQUE /** @@ -184,7 +184,7 @@ I.forceMove(src) modules += I - I.flags |= NODROP + I.set_nodrop(TRUE) I.mouse_opacity = MOUSE_OPACITY_OPAQUE if(requires_rebuild) diff --git a/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm b/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm index 4a98a04f254..b34931c644d 100644 --- a/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm +++ b/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm @@ -49,7 +49,7 @@ remove_from_all_data_huds() var/obj/item/card/id/access_card = new (src) access_card.access = get_all_accesses()//THERE IS NO ESCAPE - access_card.flags |= NODROP + access_card.set_nodrop(TRUE) invalid_area_typecache = typecacheof(invalid_area_typecache) Manifest() if(!current_victim) diff --git a/code/modules/mod/mod_activation.dm b/code/modules/mod/mod_activation.dm index 5a6c859b50e..9c79a976548 100644 --- a/code/modules/mod/mod_activation.dm +++ b/code/modules/mod/mod_activation.dm @@ -81,7 +81,7 @@ overslot.forceMove(part) RegisterSignal(part, COMSIG_ATOM_EXITED, PROC_REF(on_overslot_exit)) if(wearer.equip_to_slot_if_possible(part, part.slot_flags, disable_warning = TRUE)) - part.flags |= NODROP + part.set_nodrop(TRUE) if(mass) return TRUE wearer.visible_message("[wearer]'s [part.name] deploy[part.p_s()] with a mechanical hiss.", @@ -103,7 +103,7 @@ return FALSE to_chat(user, "You already have retracted there!") playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) - part.flags &= ~NODROP + part.set_nodrop(FALSE) wearer.transfer_item_to(part, src, force = TRUE) if(overslotting_parts[part]) UnregisterSignal(part, COMSIG_ATOM_EXITED) diff --git a/code/modules/ninja/suit/ninja_suit.dm b/code/modules/ninja/suit/ninja_suit.dm index b5ee1aedda7..b9cd1dbdff3 100644 --- a/code/modules/ninja/suit/ninja_suit.dm +++ b/code/modules/ninja/suit/ninja_suit.dm @@ -55,12 +55,12 @@ Contents: suitShoes = user.shoes suitOccupant = user - flags |= NODROP - suitHood.flags |= NODROP - suitMask.flags |= NODROP - suitGloves.flags |= NODROP + set_nodrop(TRUE) + suitHood.set_nodrop(TRUE) + suitMask.set_nodrop(TRUE) + suitGloves.set_nodrop(TRUE) suitGloves.pickpocket = 1 - suitShoes.flags |= NODROP + suitShoes.set_nodrop(TRUE) suitShoes.slowdown = -2 icon_state = (user.gender == MALE ? "s-ninjan" : "s-ninjanf") @@ -70,12 +70,12 @@ Contents: return 1 else - flags &= ~NODROP - suitHood.flags &= ~NODROP - suitMask.flags &= ~NODROP - suitGloves.flags &= ~NODROP + set_nodrop(FALSE) + suitHood.set_nodrop(FALSE) + suitMask.set_nodrop(FALSE) + suitGloves.set_nodrop(FALSE) suitGloves.pickpocket = 0 - suitShoes.flags &= ~NODROP + suitShoes.set_nodrop(FALSE) suitShoes.slowdown = -1 icon_state = "s-ninja" suitGloves.icon_state = "s-ninja" diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 3f285725ee2..64aa4c7691e 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -107,7 +107,7 @@ holder = item - holder.flags |= NODROP + holder.set_nodrop(TRUE, owner) holder.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF holder.slot_flags = null holder.w_class = WEIGHT_CLASS_HUGE diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 7af4cdbc63b..4b14d50ae79 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -62,14 +62,14 @@ if(owner.l_hand.flags & NODROP) l_hand_ignore = TRUE else - owner.l_hand.flags |= NODROP + owner.l_hand.set_nodrop(TRUE, owner) l_hand_ignore = FALSE if(r_hand_obj) if(owner.r_hand.flags & NODROP) r_hand_ignore = TRUE else - owner.r_hand.flags |= NODROP + owner.r_hand.set_nodrop(TRUE, owner) r_hand_ignore = FALSE if(!l_hand_obj && !r_hand_obj) @@ -116,9 +116,9 @@ /obj/item/organ/internal/cyberimp/brain/anti_drop/proc/release_items() active = FALSE if(!l_hand_ignore && l_hand_obj) - l_hand_obj.flags &= ~NODROP + l_hand_obj.set_nodrop(FALSE, owner) if(!r_hand_ignore && r_hand_obj) - r_hand_obj.flags &= ~NODROP + r_hand_obj.set_nodrop(FALSE, owner) /obj/item/organ/internal/cyberimp/brain/anti_drop/remove(mob/living/carbon/M, special = 0) if(active) diff --git a/code/modules/surgery/organs/subtypes/standard_organs.dm b/code/modules/surgery/organs/subtypes/standard_organs.dm index 83073b689fc..91a1ae4424c 100644 --- a/code/modules/surgery/organs/subtypes/standard_organs.dm +++ b/code/modules/surgery/organs/subtypes/standard_organs.dm @@ -210,7 +210,7 @@ /obj/item/organ/external/hand/proc/update_hand_missing() // we need to come back to this once the hand is actually removed/dead - if(!owner) // Rather not have this trigger on already remove limbs + if(!owner) // Rather not have this trigger on already removed limbs return addtimer(CALLBACK(owner, TYPE_PROC_REF(/mob/living/carbon/human, update_hands_hud), 0)) diff --git a/icons/mob/screen_midnight.dmi b/icons/mob/screen_midnight.dmi index 1278f026352..b22e6afe042 100644 Binary files a/icons/mob/screen_midnight.dmi and b/icons/mob/screen_midnight.dmi differ