Magboot and glove fix (#19415)

* Magboot and glove fix

* Update armblade.dm

* Update leash.dm
This commit is contained in:
Cameron Lennox
2026-04-16 10:40:31 -04:00
committed by GitHub
parent bdffa69343
commit 51b00a200c
86 changed files with 278 additions and 360 deletions
@@ -36,7 +36,7 @@
setUniqueSpeciesSprite()
..(S, user)
/obj/item/clothing/accessory/choker/dropped(mob/user)
/obj/item/clothing/accessory/choker/dropped(mob/user, equipping, slot)
..()
icon_override = icon_previous_override
@@ -74,7 +74,7 @@
setUniqueSpeciesSprite()
..(S, user)
/obj/item/clothing/accessory/collar/dropped(mob/user)
/obj/item/clothing/accessory/collar/dropped(mob/user, equipping, slot)
..()
icon_override = icon_previous_override
@@ -202,7 +202,7 @@
icon_override = 'icons/inventory/accessory/mob.dmi'
update_clothing_icon()
/obj/item/clothing/accessory/poncho/dropped(mob/user) //Resets the override to prevent the wrong .dmi from being used because equipped only triggers when wearing ponchos as suits.
/obj/item/clothing/accessory/poncho/dropped(mob/user, equipping, slot) //Resets the override to prevent the wrong .dmi from being used because equipped only triggers when wearing ponchos as suits.
..()
icon_override = null
+46 -31
View File
@@ -62,7 +62,7 @@
for(var/trait in clothing_traits)
ADD_CLOTHING_TRAIT(user, trait)
/obj/item/clothing/dropped(mob/user)
/obj/item/clothing/dropped(mob/user, equipping, slot)
..()
if(enables_planes)
user.recalculate_vis()
@@ -70,7 +70,7 @@
REMOVE_CLOTHING_TRAIT(user, trait)
//BS12: Species-restricted clothing check.
/obj/item/clothing/mob_can_equip(M as mob, slot, disable_warning = FALSE)
/obj/item/clothing/mob_can_equip(mob/M, slot, disable_warning = FALSE, ignore_obstruction, go_over_slot)
//if we can't equip the item anyway, don't bother with species_restricted (cuts down on spam)
if (!..())
@@ -375,55 +375,70 @@
transfer_blood = 0
update_icon()
/obj/item/clothing/gloves/mob_can_equip(mob/user, slot, disable_warning = FALSE)
/obj/item/clothing/gloves/mob_can_equip(mob/user, slot, disable_warning = FALSE, ignore_obstruction, go_over_slot = TRUE)
var/mob/living/carbon/human/H = user
if(slot && slot == slot_gloves)
var/obj/item/clothing/G = H.gloves
if(istype(G))
ring = H.gloves
//Check glove_level, which both accessories and gloves share.
if(istype(G, /obj/item/clothing/accessory) || istype(G, /obj/item/clothing/gloves))
ring = H.gloves //Ring or gloves both work here. They both have the glove_level var.
if(ring.glove_level >= src.glove_level)
to_chat(user, "You are unable to wear \the [src] as \the [H.gloves] are in the way.")
ring = null
return 0
else
H.drop_from_inventory(ring) //Remove the ring (or other under-glove item in the hand slot?) so you can put on the gloves.
ring.forceMove(src)
to_chat(user, "You slip \the [src] on over \the [src.ring].")
if(!(flags & THICKMATERIAL))
punch_force += ring.punch_force
else
return FALSE
ring = null
if(!..())
if(ring) //Put the ring back on if the check fails.
if(H.equip_to_slot_if_possible(ring, slot_gloves))
src.ring = null
punch_force = initial(punch_force)
return 0
//Check overgloves, which only gloves have.
if(istype(G, /obj/item/clothing/gloves))
gloves = H.gloves
if(gloves.overgloves)
gloves = null
return FALSE
gloves = null
wearer = WEAKREF(H)
return 1
return ..()
/obj/item/clothing/gloves/dropped(mob/user)
/obj/item/clothing/gloves/equipped(mob/user, slot)
wearer = WEAKREF(user)
return ..()
/obj/item/clothing/gloves/dropped(mob/user, equipping, slot)
..()
punch_force = initial(punch_force)
wearer = null
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
if(gloves) //We have nested gloves! Gloves under our gloves!
//Equipping to our glove slot? Cover our former gloves, if applicable.
if(equipping && slot && slot == slot_gloves)
var/obj/item/clothing/G = H.gloves
if(istype(G))
if(istype(G, /obj/item/clothing/gloves))
gloves = H.gloves
H.unEquip(gloves, TRUE, src)
to_chat(user, "You slip \the [src] on over \the [gloves].")
else if(istype(G, /obj/item/clothing/accessory))
ring = H.gloves
H.unEquip(ring, TRUE, src)
to_chat(user, "You slip \the [src] on over \the [ring].")
if(!(flags & THICKMATERIAL))
punch_force += gloves.punch_force
return
//Taking our gloves off? Put our former gloves / ring on.
if(gloves)
if(!H.equip_to_slot_if_possible(gloves, slot_gloves))
gloves.forceMove(get_turf(src))
if(ring)
gloves.ring = ring
src.gloves = null
else if(ring && istype(H)) //We do NOT have gloves under our gloves but have a ring under our glove instead!
gloves = null
return
if(ring) //We do NOT have gloves under our gloves but have a ring under our glove instead!
if(!H.equip_to_slot_if_possible(ring, slot_gloves))
ring.forceMove(get_turf(src))
src.ring = null
ring = null
return
/obj/item/clothing/gloves
var/datum/unarmed_attack/special_attack = null //do the gloves have a special unarmed attack?
@@ -972,7 +987,7 @@
RemoveHood()
..()
/obj/item/clothing/suit/dropped(mob/user)
/obj/item/clothing/suit/dropped(mob/user, equipping, slot)
RemoveHood()
..()
+1 -1
View File
@@ -85,7 +85,7 @@
QDEL_NULL(tgarscreen)
. = ..()
/obj/item/clothing/glasses/omnihud/dropped(mob/user)
/obj/item/clothing/glasses/omnihud/dropped(mob/user, equipping, slot)
if(tgarscreen)
SStgui.close_uis(src)
..()
+1 -1
View File
@@ -9,7 +9,7 @@
pickup_sound = 'sound/items/pickup/axe.ogg'
resistance_flags = FIRE_PROOF
/obj/item/clothing/gloves/arm_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = FALSE)
/obj/item/clothing/gloves/arm_guard/mob_can_equip(mob/living/carbon/human/H, slot, disable_warning = FALSE, ignore_obstruction, go_over_slot = TRUE)
if(..()) //This will only run if no other problems occured when equiping.
if(H.wear_suit)
if(H.wear_suit.body_parts_covered & ARMS)
-25
View File
@@ -13,28 +13,3 @@
overgloves = 1
punch_force = 5
resistance_flags = FIRE_PROOF
/obj/item/clothing/gloves/gauntlets/mob_can_equip(mob/user, slot, disable_warning = FALSE)
var/mob/living/carbon/human/H = user
if(H.gloves)
gloves = H.gloves
if(!istype(gloves))
to_chat(user, "You are unable to wear \the [src] as \the [H.gloves] are in the way.")
gloves = null
return 0
if(gloves.overgloves)
to_chat(user, "You are unable to wear \the [src] as \the [H.gloves] are in the way.")
gloves = null
return 0
H.drop_from_inventory(gloves)
gloves.forceMove(src)
if(!..())
if(gloves)
if(H.equip_to_slot_if_possible(gloves, slot_gloves))
gloves = null
return 0
if(gloves)
to_chat(user, "You slip \the [src] on over \the [gloves].")
wearer = WEAKREF(H)
return 1
+10 -8
View File
@@ -279,23 +279,25 @@
to_chat(wearer, span_danger("The inside of your head hurts..."))
wearer.adjustBrainLoss(brainloss_cost)
/obj/item/clothing/head/psy_crown/equipped(var/mob/living/carbon/human/H)
/obj/item/clothing/head/psy_crown/equipped(mob/living/carbon/human/user)
..()
if(istype(H) && H.head == src && H.is_sentient())
if(istype(user) && user.head == src && user.is_sentient())
START_PROCESSING(SSobj, src)
if(flavor_equip)
to_chat(H, flavor_equip)
to_chat(user, flavor_equip)
/obj/item/clothing/head/psy_crown/dropped(var/mob/living/carbon/human/H)
/obj/item/clothing/head/psy_crown/dropped(mob/living/carbon/human/user, equipping, slot)
if(equipping || loc == user)
return ..()
..()
STOP_PROCESSING(SSobj, src)
if(H.is_sentient())
if(loc == H) // Still inhand.
if(user.is_sentient())
if(loc == user) // Still inhand.
if(flavor_unequip)
to_chat(H, flavor_unequip)
to_chat(user, flavor_unequip)
return
if(flavor_drop)
to_chat(H, flavor_drop)
to_chat(user, flavor_drop)
/obj/item/clothing/head/psy_crown/Destroy()
STOP_PROCESSING(SSobj, src)
+1 -1
View File
@@ -177,7 +177,7 @@
user.client.screen |= pilot_hud
user.client.images |= raw_images
/obj/item/clothing/head/pilot/dropped(mob/user)
/obj/item/clothing/head/pilot/dropped(mob/user, equipping, slot)
. = ..()
if(user.client)
user.client.screen -= pilot_hud
+3 -1
View File
@@ -8,7 +8,9 @@
body_parts_covered = 0
special_handling = TRUE
/obj/item/clothing/head/soft/dropped(mob/user)
/obj/item/clothing/head/soft/dropped(mob/user, equipping, slot)
if(equipping)
return ..()
icon_state = initial(icon_state)
flipped = FALSE
..()
+1 -1
View File
@@ -246,7 +246,7 @@
c.remove(eye)
eye.setLoc(user)
/obj/item/clothing/mask/ai/dropped(mob/user)
/obj/item/clothing/mask/ai/dropped(mob/user, equipping, slot)
..()
if(eye.owner == user)
for(var/datum/chunk/c in eye.visibleChunks)
+1 -1
View File
@@ -30,7 +30,7 @@
icon_state = GLOB.monitor_states[monitor_state_index]
to_chat(H, span_notice("\The [src] connects to your display output."))
/obj/item/clothing/mask/monitor/dropped(mob/user)
/obj/item/clothing/mask/monitor/dropped(mob/user, equipping, slot)
canremove = TRUE
return ..()
@@ -16,22 +16,22 @@
..()
var/mob/living/carbon/human/H = loc
if(istype(H) && H.wear_mask == src)
canremove = 0
canremove = FALSE
maskmaster = H
START_PROCESSING(SSprocessing, src)
/obj/item/clothing/mask/synthfacemask/dropped(mob/user)
canremove = 1
/obj/item/clothing/mask/synthfacemask/dropped(mob/user, equipping, slot)
canremove = TRUE
maskmaster = null
STOP_PROCESSING(SSprocessing, src)
return ..()
..()
/obj/item/clothing/mask/synthfacemask/Destroy()
maskmaster = null
. = ..()
STOP_PROCESSING(SSprocessing, src)
/obj/item/clothing/mask/synthfacemask/mob_can_equip(var/mob/living/carbon/human/user, var/slot, var/disable_warning = FALSE)
/obj/item/clothing/mask/synthfacemask/mob_can_equip(mob/living/carbon/human/user, slot, disable_warning = FALSE, ignore_obstruction, go_over_slot = FALSE)
if (!..())
return 0
if(istype(user))
+4 -4
View File
@@ -11,17 +11,17 @@
pickup_sound = 'sound/items/pickup/boots.ogg'
resistance_flags = FIRE_PROOF
/obj/item/clothing/shoes/leg_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = FALSE)
/obj/item/clothing/shoes/leg_guard/mob_can_equip(mob/living/carbon/human/H, slot, disable_warning = FALSE, ignore_obstruction, go_over_slot = TRUE)
if(..()) //This will only run if no other problems occured when equiping.
if(H.wear_suit)
if(H.wear_suit.body_parts_covered & LEGS)
to_chat(H, span_warning("You can't wear \the [src] with \the [H.wear_suit], it's in the way."))
return 0
return FALSE
for(var/obj/item/clothing/accessory/A in H.wear_suit)
if(A.body_parts_covered & LEGS)
to_chat(H, span_warning("You can't wear \the [src] with \the [H.wear_suit]'s [A], it's in the way."))
return 0
return 1
return FALSE
return TRUE
/obj/item/clothing/shoes/leg_guard/laserproof
name = "ablative leg guards"
+28 -23
View File
@@ -64,44 +64,49 @@
user.update_inv_shoes() //so our mob-overlays update
user.update_mob_action_buttons()
/obj/item/clothing/shoes/magboots/mob_can_equip(mob/user, slot, disable_warning = FALSE)
/obj/item/clothing/shoes/magboots/mob_can_equip(mob/user, slot, disable_warning = FALSE, ignore_obstruction, go_over_slot = TRUE)
var/mob/living/carbon/human/H = user
if(H.shoes)
shoes = H.shoes
if(istype(shoes, /obj/item/clothing/shoes) && shoes.overshoes)
if(slot && slot == slot_shoes)
if(slot && slot == slot_shoes && !disable_warning)
to_chat(user, "You are unable to wear \the [src] as \the [H.shoes] are in the way.")
shoes = null
return 0
H.drop_from_inventory(shoes) //Remove the old shoes so you can put on the magboots.
shoes.forceMove(src)
return FALSE
shoes = null
return ..()
if(!..())
if(shoes) //Put the old shoes back on if the check fails.
if(H.equip_to_slot_if_possible(shoes, slot_shoes))
src.shoes = null
return 0
/obj/item/clothing/shoes/magboots/equipped(mob/user, slot)
if (shoes)
if(slot && slot == slot_shoes)
to_chat(user, "You slip \the [src] on over \the [shoes].")
var/mob/living/carbon/human/H = user
if(slot && slot != slot_shoes)
return ..()
set_slowdown()
wearer = WEAKREF(H)
return 1
..()
/obj/item/clothing/shoes/magboots/dropped(mob/user)
/obj/item/clothing/shoes/magboots/dropped(mob/user, equipping, slot)
..()
wearer = null
var/mob/living/carbon/human/H = user
if(!ishuman(H) || !shoes)
if(!ishuman(H))
return
if(!H.equip_to_slot_if_possible(shoes, slot_shoes))
shoes.forceMove(get_turf(src))
shoes = null
//Equipping shoes. If you put it so you can put your shoes somewhere BUT your shoe slot, make sure this shit works.
if(equipping && (slot == slot_shoes))
if(H.shoes && H.shoes != src)
shoes = H.shoes
H.unEquip(shoes, TRUE, src)
to_chat(user, "You slip \the [src] on over \the [shoes].")
return
if(shoes)
if(!H.equip_to_slot_if_possible(shoes, slot_shoes, FALSE, TRUE, TRUE, TRUE))
shoes.forceMove(get_turf(src))
shoes = null
/obj/item/clothing/shoes/magboots/examine(mob/user)
. = ..()
@@ -125,12 +130,12 @@
return //voxboots suffer no slowdown penalties!
//In case they somehow come off while enabled.
/obj/item/clothing/shoes/magboots/vox/dropped(mob/user)
..(user)
if(src.magpulse)
/obj/item/clothing/shoes/magboots/vox/dropped(mob/user, equipping, slot)
..()
if(magpulse)
user.visible_message("The [src] go limp as they are removed from [user]'s feet.", "The [src] go limp as they are removed from your feet.")
item_flags &= ~NOSLIP
magpulse = 0
magpulse = FALSE
canremove = TRUE
/obj/item/clothing/shoes/magboots/vox/examine(mob/user)
+1 -1
View File
@@ -802,7 +802,7 @@
for(var/piece in list("helmet","gauntlets","chest","boots"))
toggle_piece(piece, H, ONLY_DEPLOY)
/obj/item/rig/dropped(mob/user)
/obj/item/rig/dropped(mob/user, equipping, slot)
. = ..(user)
// So the next user will see the boot animation
tgui_shared_states?.Cut()
@@ -104,7 +104,7 @@
check_limb_support(M)
..()
/obj/item/clothing/suit/space/dropped(mob/user)
/obj/item/clothing/suit/space/dropped(mob/user, equipping, slot)
check_limb_support(user)
..()
@@ -103,7 +103,7 @@
to_chat(M, "Your suit's cooling unit deploys.")
cooler.canremove = FALSE
/obj/item/clothing/suit/space/void/dropped(mob/user)
/obj/item/clothing/suit/space/void/dropped(mob/user, equipping, slot)
..()
var/mob/living/carbon/human/H
+2 -2
View File
@@ -11,7 +11,7 @@
siemens_coefficient = 0.6
resistance_flags = FIRE_PROOF
/obj/item/clothing/suit/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = FALSE)
/obj/item/clothing/suit/mob_can_equip(mob/living/carbon/human/H, slot, disable_warning = FALSE, ignore_obstruction, go_over_slot = FALSE)
if(..()) //This will only run if no other problems occured when equiping.
for(var/obj/item/clothing/I in list(H.gloves, H.shoes))
if(I && (src.body_parts_covered & ARMS && I.body_parts_covered & ARMS) )
@@ -538,7 +538,7 @@
|ACCESSORY_SLOT_ARMOR_M)
blood_overlay_type = "armor"
/obj/item/clothing/suit/armor/pcarrier/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = FALSE)
/obj/item/clothing/suit/armor/pcarrier/mob_can_equip(mob/living/carbon/human/H, slot, disable_warning = FALSE, ignore_obstruction, go_over_slot = FALSE)
if(..()) //This will only run if no other problems occured when equiping.
if(H.gloves)
if(H.gloves.body_parts_covered & ARMS)
+1 -1
View File
@@ -19,7 +19,7 @@
icon_state = "wolf_item"
item_state = "heavy_wolf_armor"
/obj/item/clothing/suit/armor/vest/wolftaur/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
/obj/item/clothing/suit/armor/vest/wolftaur/mob_can_equip(mob/living/carbon/human/H, slot, disable_warning = FALSE, ignore_obstruction, go_over_slot = FALSE)
if(..())
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
return ..()
+1 -1
View File
@@ -89,7 +89,7 @@
else
user.visible_message(span_notice("[src]'s healing function has been turned off!"))
/obj/item/clothing/suit/lasertag/dropped()
/obj/item/clothing/suit/lasertag/dropped(mob/user, equipping, slot)
..()
STOP_PROCESSING(SSobj, src)
visible_message(span_notice("[src] is unequipped, its health going back to full!"))
@@ -30,7 +30,7 @@
body_parts_covered = UPPER_TORSO|ARMS
pixel_x = -16
/obj/item/clothing/suit/drake_cloak/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
/obj/item/clothing/suit/drake_cloak/mob_can_equip(mob/living/carbon/human/H, slot, disable_warning = FALSE, ignore_obstruction, go_over_slot = FALSE)
if(..())
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/drake))
return ..()
@@ -47,7 +47,7 @@
pixel_x = -16
armor = list(melee = 5, bullet = 5, laser = 5, energy = 5, bomb = 5, bio = 0, rad = 0)//Minor armor for fluff.
/obj/item/clothing/suit/barding/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
/obj/item/clothing/suit/barding/mob_can_equip(mob/living/carbon/human/H, slot, disable_warning = FALSE, ignore_obstruction, go_over_slot = FALSE)
if(..())
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
return ..()
+1 -1
View File
@@ -58,7 +58,7 @@
if(user.hud_used && user.hud_used.move_intent)
user.hud_used.move_intent.icon_state = "walking"
/obj/item/clothing/suit/shibari/dropped(var/mob/living/user)
/obj/item/clothing/suit/shibari/dropped(mob/user, equipping, slot)
..()
if(ishuman(user))
var/mob/living/carbon/human/H = user