diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index 3b31e34b2f4..87b9094b47e 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -158,6 +158,8 @@ // /obj signals #define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" //from base of obj/deconstruct(): (disassembled) #define COMSIG_OBJ_SETANCHORED "obj_setanchored" //called in /obj/structure/setAnchored(): (value) +#define COMSIG_OBJ_UPDATE_ICON "obj_update_icon" //called in /obj/update_icon() + // /obj/item signals #define COMSIG_ITEM_ATTACK "item_attack" //from base of obj/item/attack(): (/mob/living/target, /mob/living/user) diff --git a/code/datums/action.dm b/code/datums/action.dm index a9c895f3482..aba3e5aa82f 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -44,12 +44,14 @@ M.update_action_buttons() /datum/action/proc/Remove(mob/M) + owner = null + if(!M) + return if(M.client) M.client.screen -= button button.moved = FALSE //so the button appears in its normal position when given to another owner. M.actions -= src M.update_action_buttons() - owner = null /datum/action/proc/Trigger() if(!IsAvailable()) @@ -112,10 +114,10 @@ I.actions -= src return ..() -/datum/action/item_action/Trigger() +/datum/action/item_action/Trigger(attack_self = TRUE) //Maybe we don't want to click the thing itself if(!..()) return 0 - if(target) + if(target && attack_self) var/obj/item/I = target I.ui_action_click(owner, type) return 1 @@ -313,6 +315,14 @@ /datum/action/item_action/toggle_helmet name = "Toggle Helmet" +/datum/action/item_action/remove_tape + name = "Remove Duct Tape" + +/datum/action/item_action/remove_tape/Trigger(attack_self = FALSE) + if(..()) + GET_COMPONENT_FROM(DT, /datum/component/ducttape, target) + DT.remove_tape(target, usr) + /datum/action/item_action/toggle_jetpack name = "Toggle Jetpack" diff --git a/code/datums/components/ducttape.dm b/code/datums/components/ducttape.dm new file mode 100644 index 00000000000..5bbf99198fd --- /dev/null +++ b/code/datums/components/ducttape.dm @@ -0,0 +1,70 @@ +/datum/component/ducttape + var/x_offset = 0 + var/y_offset = 0 + var/icon/tape_overlay = null + +/datum/component/ducttape/Initialize(obj/item/I, mob/user, x, y) + if(!istype(I)) //Something went wrong + return + x_offset = x + y_offset = y + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/add_tape_text) + RegisterSignal(parent, COMSIG_OBJ_UPDATE_ICON, .proc/add_tape_overlay) + RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, .proc/afterattack) + RegisterSignal(parent, COMSIG_ITEM_PICKUP, .proc/pick_up) + I.update_icon() //Do this first so the action button properly shows the icon + var/datum/action/item_action/remove_tape/RT = new(I) + if(I.loc == user) + RT.Grant(user) + +/datum/component/proc/add_tape_text(datum/source, mob/user) + to_chat(user, "There's some sticky tape attached to [source].") + +/datum/component/ducttape/proc/add_tape_overlay(obj/item/O) + tape_overlay = new('icons/obj/bureaucracy.dmi', "tape") + tape_overlay.Shift(EAST, x_offset - 2) + tape_overlay.Shift(NORTH, y_offset - 2) + O.overlays += tape_overlay + +/datum/component/ducttape/proc/remove_tape(obj/item/I, mob/user) + to_chat(user, "You tear the tape off [I]!") + playsound(I, 'sound/items/poster_ripped.ogg', 50, 1) + new /obj/item/trash/tapetrash(user.loc) + I.update_icon() + I.anchored = initial(I.anchored) + for(var/datum/action/item_action/remove_tape/RT in I.actions) + RT.Remove(user) + RT.Destroy() + I.overlays.Cut(tape_overlay) + user.transfer_fingerprints_to(I) + Destroy() + +/datum/component/ducttape/proc/afterattack(obj/item/I, atom/target, mob/user, proximity, params) + if(!proximity) + return + if(!isturf(target)) + return + if(!user.unEquip(I)) + return + var/turf/source_turf = get_turf(I) + var/turf/target_turf = target + var/list/clickparams = params2list(params) + var/x_offset = text2num(clickparams["icon-x"]) - 16 + var/y_offset = text2num(clickparams["icon-y"]) - 16 + if(target_turf != get_turf(I)) //Trying to stick it on a wall, don't move it to the actual wall or you can move the item through it. Instead set the pixels as appropriate + var/target_direction = get_dir(source_turf, target_turf)//The direction we clicked + if(target_direction & EAST) + x_offset += 32 + else if(target_direction & WEST) + x_offset -= 32 + if(target_direction & NORTH) + y_offset += 32 + else if(target_direction & SOUTH) + y_offset -= 32 + to_chat(user, "You stick [I] to [target_turf].") + I.pixel_x = x_offset + I.pixel_y = y_offset + +/datum/component/ducttape/proc/pick_up(obj/item/I, mob/user) + I.pixel_x = initial(I.pixel_x) + I.pixel_y = initial(I.pixel_y) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 89108071b09..a485e447f89 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -934,7 +934,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /datum/supply_packs/science/oil name = "Oil Tank Crate" - contains = list(/obj/structure/reagent_dispensers/oil, + contains = list(/obj/structure/reagent_dispensers/oil, /obj/item/reagent_containers/food/drinks/oilcan) cost = 10 containertype = /obj/structure/largecrate @@ -1341,6 +1341,15 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine cost = 15 containername = "bureaucracy crate" +/datum/supply_packs/misc/tape + name = "Sticky Tape Crate" + contains = list(/obj/item/stack/tape_roll, + /obj/item/stack/tape_roll, + /obj/item/stack/tape_roll) + cost = 10 + containername = "sticky tape crate" + containertype = /obj/structure/closet/crate/tape + /datum/supply_packs/misc/toner name = "Toner Cartridges Crate" contains = list(/obj/item/toner, diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index f8798d77c5d..ba36bc0b199 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -206,6 +206,9 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d msg += "*--------*" to_chat(user, msg) +/obj/item/afterattack(atom/target, mob/user, proximity, params) + SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target, user, proximity, params) + ..() /obj/item/attack_hand(mob/user as mob, pickupfireoverride = FALSE) if(!user) return 0 @@ -252,6 +255,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d return 0 pickup(user) + add_fingerprint(user) user.put_in_active_hand(src) return 1 @@ -306,6 +310,25 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d else if(S.can_be_inserted(src)) S.handle_item_insertion(src) + else if(istype(I, /obj/item/stack/tape_roll)) + if(istype(src, /obj/item/storage)) //Don't tape the bag if we can put the duct tape inside it instead + var/obj/item/storage/bag = src + if(bag.can_be_inserted(I)) + return ..() + var/obj/item/stack/tape_roll/TR = I + var/list/clickparams = params2list(params) + var/x_offset = text2num(clickparams["icon-x"]) + var/y_offset = text2num(clickparams["icon-y"]) + if(GetComponent(/datum/component/ducttape)) + to_chat(user, "[src] already has some tape attached!") + return + if(TR.use(1)) + to_chat(user, "You apply some tape to [src].") + AddComponent(/datum/component/ducttape, src, user, x_offset, y_offset) + anchored = TRUE + user.transfer_fingerprints_to(src) + else + to_chat(user, "You don't have enough tape to do that!") else return ..() @@ -329,7 +352,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d // called just as an item is picked up (loc is not yet changed) /obj/item/proc/pickup(mob/user) - return + SEND_SIGNAL(src, COMSIG_ITEM_PICKUP, user) // called when this item is removed from a storage item, which is passed on as S. The loc variable is already set to the new destination before this is called. /obj/item/proc/on_exit_storage(obj/item/storage/S as obj) diff --git a/code/game/objects/items/weapons/RCL.dm b/code/game/objects/items/weapons/RCL.dm index 86b4cc843ab..befe979078c 100644 --- a/code/game/objects/items/weapons/RCL.dm +++ b/code/game/objects/items/weapons/RCL.dm @@ -85,6 +85,7 @@ else icon_state = "rcl-0" item_state = "rcl-0" + ..() /obj/item/twohanded/rcl/proc/is_empty(mob/user, loud = 1) update_icon() diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index b8437f3b7ed..7084fdbc163 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -5,59 +5,42 @@ icon_state = "taperoll" singular_name = "tape roll" w_class = WEIGHT_CLASS_TINY - amount = 10 - max_amount = 10 + amount = 25 + max_amount = 25 /obj/item/stack/tape_roll/New(var/loc, var/amount=null) ..() update_icon() -/obj/item/stack/tape_roll/attack(mob/living/carbon/human/M as mob, mob/living/user as mob) +/obj/item/stack/tape_roll/attack(mob/living/carbon/human/M, mob/living/user) + if(!istype(M)) //What good is a duct tape mask if you are unable to speak? + return if(M.wear_mask) to_chat(user, "Remove [M.p_their()] mask first!") - else if(amount < 2) - to_chat(user, "You'll need more tape for this!") - else if(!M.check_has_mouth()) - to_chat(user, "[M.p_they(TRUE)] [M.p_have()] no mouth to tape over!") - else - if(M == user) - to_chat(user, "You try to tape your own mouth shut.") - else - to_chat(user, "You try to tape [M]'s mouth shut.") - M.visible_message("[user] tries to tape [M]'s mouth closed!") - if(do_after(user, 50, target = M)) - if(M == user) - to_chat(user, "You cover your own mouth with a piece of duct tape.") - else - to_chat(user, "You cover [M]'s mouth with a piece of duct tape. That will shut [M.p_them()] up!") - M.visible_message("[user] tapes [M]'s mouth shut!") - var/obj/item/clothing/mask/muzzle/G = new /obj/item/clothing/mask/muzzle/tapegag - M.equip_to_slot(G, slot_wear_mask) - G.add_fingerprint(user) - amount = amount - 2 - if(amount <= 0) - user.unEquip(src, 1) - qdel(src) - - - -/* -- Disabled for now until it has a use -- -/obj/item/stack/tape_roll/attack_self(mob/user as mob) - to_chat(user, "You remove a length of tape from [src].") - - var/obj/item/ducttape/tape = new() - user.put_in_hands(tape) -*/ - -/obj/item/stack/tape_roll/proc/stick(var/obj/item/W, mob/user) - if(!istype(W, /obj/item/paper)) return - - user.unEquip(W) - var/obj/item/ducttape/tape = new(get_turf(src)) - tape.attach(W) - user.put_in_hands(tape) + if(amount < 2) + to_chat(user, "You'll need more tape for this!") + return + if(!M.check_has_mouth()) + to_chat(user, "[M.p_they(TRUE)] [M.p_have()] no mouth to tape over!") + return + user.visible_message("[user] is taping [M]'s mouth closed!", + "You try to tape [M == user ? "your own" : "[M]'s"] mouth shut!", + "You hear tape ripping.") + if(!do_after(user, 50, target = M)) + return + if(!use(2)) + to_chat(user, "You don't have enough tape!") + return + if(M.wear_mask) + to_chat(user, "[M == user ? user : M]'s mouth is already covered!") + return + user.visible_message("[user] tapes [M]'s mouth shut!", + "You cover [M == user ? "your own" : "[M]'s"] mouth with a piece of duct tape.[M == user ? null : " That will shut them up."]") + var/obj/item/clothing/mask/muzzle/G = new /obj/item/clothing/mask/muzzle/tapegag + M.equip_to_slot(G, slot_wear_mask) + G.add_fingerprint(user) /obj/item/stack/tape_roll/update_icon() var/amount = get_amount() @@ -71,73 +54,4 @@ icon_state = "taperoll-4" else icon_state = "taperoll-4" - -/obj/item/ducttape - name = "tape" - desc = "A piece of sticky tape." - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "tape" - w_class = WEIGHT_CLASS_TINY - layer = 4 - anchored = 1 //it's sticky, no you cant move it - - var/obj/item/stuck = null - -/obj/item/ducttape/New() ..() - flags |= NOBLUDGEON - -/obj/item/ducttape/examine(mob/user) - return stuck.examine(user) - -/obj/item/ducttape/proc/attach(var/obj/item/W) - stuck = W - W.forceMove(src) - icon_state = W.icon_state + "_taped" - name = W.name + " (taped)" - overlays = W.overlays - -/obj/item/ducttape/attack_self(mob/user) - if(!stuck) - return - - to_chat(user, "You remove \the [initial(name)] from [stuck].") - - user.unEquip(src) - stuck.forceMove(get_turf(src)) - user.put_in_hands(stuck) - stuck = null - overlays = null - qdel(src) - -/obj/item/ducttape/afterattack(var/A, mob/user, flag, params) - if(!in_range(user, A) || istype(A, /obj/machinery/door) || !stuck) - return - - var/turf/target_turf = get_turf(A) - var/turf/source_turf = get_turf(user) - - var/dir_offset = 0 - if(target_turf != source_turf) - dir_offset = get_dir(source_turf, target_turf) - if(!(dir_offset in cardinal)) - to_chat(user, "You cannot reach that from here.")// can only place stuck papers in cardinal directions, to - return // reduce papers around corners issue. - - user.unEquip(src) - forceMove(source_turf) - - if(params) - var/list/mouse_control = params2list(params) - if(mouse_control["icon-x"]) - pixel_x = text2num(mouse_control["icon-x"]) - 16 - if(dir_offset & EAST) - pixel_x += 32 - else if(dir_offset & WEST) - pixel_x -= 32 - if(mouse_control["icon-y"]) - pixel_y = text2num(mouse_control["icon-y"]) - 16 - if(dir_offset & NORTH) - pixel_y += 32 - else if(dir_offset & SOUTH) - pixel_y -= 32 diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index cbaa4cff554..22c4390110e 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -368,6 +368,7 @@ else icon_state = "[initial(icon_state)][ratio]" update_torch() + ..() /obj/item/weldingtool/process() switch(welding) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 9418df86368..1ffcc13207f 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -91,9 +91,6 @@ O.unwield(user) return unwield(user) -/obj/item/twohanded/update_icon() - return - /obj/item/twohanded/attack_self(mob/user) ..() if(wielded) //Trying to unwield it @@ -182,6 +179,7 @@ /obj/item/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons. icon_state = "fireaxe[wielded]" + ..() /obj/item/twohanded/fireaxe/afterattack(atom/A, mob/user, proximity) if(!proximity) @@ -232,6 +230,7 @@ else icon_state = "dualsaber0" set_light(0) + ..() /obj/item/twohanded/dualsaber/attack(mob/target, mob/living/user) if(HULK in user.mutations) @@ -327,6 +326,7 @@ icon_state = "spearbomb[wielded]" else icon_state = "spearglass[wielded]" + ..() /obj/item/twohanded/spear/afterattack(atom/movable/AM, mob/user, proximity) if(!proximity) @@ -509,6 +509,7 @@ icon_state = "chainsaw[wielded]" else icon_state = "chainsaw0" + ..() /obj/item/twohanded/chainsaw/attack(mob/target, mob/living/user) if(wielded) @@ -565,6 +566,7 @@ /obj/item/twohanded/singularityhammer/update_icon() //Currently only here to fuck with the on-mob icons. icon_state = "mjollnir[wielded]" + ..() /obj/item/twohanded/singularityhammer/proc/vortex(turf/pull, mob/wielder) for(var/atom/movable/X in orange(5, pull)) @@ -640,6 +642,7 @@ /obj/item/twohanded/mjollnir/update_icon() //Currently only here to fuck with the on-mob icons. icon_state = "mjollnir[wielded]" + ..() /obj/item/twohanded/knighthammer name = "singuloth knight's hammer" @@ -670,6 +673,7 @@ /obj/item/twohanded/knighthammer/update_icon() //Currently only here to fuck with the on-mob icons. icon_state = "knighthammer[wielded]" + ..() /obj/item/twohanded/knighthammer/afterattack(atom/A, mob/user, proximity) if(!proximity) @@ -725,6 +729,7 @@ icon_state = "fireaxe2" else icon_state = "fireaxe0" + ..() /obj/item/twohanded/energizedfireaxe/afterattack(atom/A, mob/user, proximity) if(!proximity) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index f13806b90f1..d9358c3a694 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -146,7 +146,7 @@ return /obj/proc/update_icon() - return + SEND_SIGNAL(src, COMSIG_OBJ_UPDATE_ICON) /mob/proc/unset_machine() if(machine) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 87cae2fb993..c98fe24aa57 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -637,3 +637,8 @@ icon_state = "electricalcrate" icon_opened = "electricalcrateopen" icon_closed = "electricalcrate" + +/obj/structure/closet/crate/tape/New() + if(prob(10)) + new /obj/item/bikehorn/rubberducky(src) + ..() diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 789215a0f19..f0b9d0e455b 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -98,14 +98,13 @@ "Grey" = 'icons/mob/species/grey/mask.dmi' ) -/obj/item/clothing/mask/muzzle/tapegag/dropped(mob/living/carbon/human/user) - var/atom/movable/R = new /obj/item/trash/tapetrash - var/turf/T = get_turf(src) - R.loc = T - transfer_fingerprints_to(R) - playsound(src,'sound/items/poster_ripped.ogg',40,1) +/obj/item/clothing/mask/muzzle/tapegag/dropped(mob/user) + var/obj/item/trash/tapetrash/TT = new(drop_location(src)) + transfer_fingerprints_to(TT) + user.transfer_fingerprints_to(TT) + playsound(src, 'sound/items/poster_ripped.ogg', 40, 1) + ..() user.emote("scream") - . = ..() /obj/item/clothing/mask/muzzle/safety name = "safety muzzle" diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 304a7332bf6..607b67ccfb4 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -79,7 +79,6 @@ slowdown = SHOES_SLOWDOWN+1 item_color = "clown" var/footstep = 1 //used for squeeks whilst walking - silence_steps = 1 shoe_sound = "clownstep" /obj/item/clothing/shoes/jackboots @@ -93,7 +92,6 @@ put_on_delay = 50 burn_state = FIRE_PROOF var/footstep = 1 - silence_steps = 1 shoe_sound = "jackboot" /obj/item/clothing/shoes/jackboots/jacksandals @@ -182,10 +180,10 @@ item_state = "noble_boot" /obj/item/clothing/shoes/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/stack/tape_roll)) + if(istype(I, /obj/item/stack/tape_roll) && !silence_steps) var/obj/item/stack/tape_roll/TR = I if((!silence_steps || shoe_sound) && TR.use(4)) - silence_steps = 1 + silence_steps = TRUE shoe_sound = null to_chat(user, "You tape the soles of [src] to silence your footsteps.") else diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index b72ddea8be1..3ab7fb61bab 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -114,6 +114,8 @@ reagents.chem_temp += 15 to_chat(user, "You heat [src] with [I].") reagents.handle_reactions() + else + return ..() /obj/item/reagent_containers/food/drinks/examine(mob/user) if(!..(user, 1)) diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index 60642cab847..64a585e9051 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -26,9 +26,6 @@ "sugar" = list("emptycondiment", "sugar bottle", "Tasty spacey sugar!")) var/originalname = "condiment" //Can't use initial(name) for this. This stores the name set by condimasters. -/obj/item/reagent_containers/food/condiment/attackby(obj/item/W, mob/user, params) - return - /obj/item/reagent_containers/food/condiment/attack_self(mob/user) return @@ -55,9 +52,6 @@ playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) return 1 -/obj/item/reagent_containers/food/condiment/attackby(obj/item/I, mob/user, params) - return - /obj/item/reagent_containers/food/condiment/afterattack(obj/target, mob/user , proximity) if(!proximity) return diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index d9b6c6694a7..bb857969d5c 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -79,7 +79,7 @@ if(istype(W,/obj/item/storage)) ..() // -> item/attackby(, params) - if(istype(W,/obj/item/kitchen/utensil)) + else if(istype(W,/obj/item/kitchen/utensil)) var/obj/item/kitchen/utensil/U = W @@ -116,6 +116,8 @@ TrashItem.forceMove(loc) qdel(src) return TRUE + else + return ..() /obj/item/reagent_containers/food/snacks/proc/generate_trash(atom/location) if(trash) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 71a5f0396a1..33e855ab4d1 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -85,6 +85,13 @@ if(!(step_count % 2)) //every other turf makes a sound return 0 + if(istype(shoes, /obj/item/clothing/shoes)) + var/obj/item/clothing/shoes/shooess = shoes + if(shooess.silence_steps) + return 0 //silent + if(shooess.shoe_sound) + return //Handle it on the shoe + var/range = -(world.view - 2) if(m_intent == MOVE_INTENT_WALK) range -= 0.333 @@ -104,11 +111,6 @@ if(!shoes) volume -= 4 - if(istype(shoes, /obj/item/clothing/shoes)) - var/obj/item/clothing/shoes/shooess = shoes - if(shooess.silence_steps) - return 0 //silent - if(!has_organ("l_foot") && !has_organ("r_foot")) return 0 //no feet no footsteps diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 177379deb78..e1ae7da26f5 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -83,7 +83,7 @@ obj/item/clipboard/proc/penPlacement(mob/user, obj/item/pen/P, placing) if(containedpen) overlays += "clipboard_pen" overlays += "clipboard_over" - return + ..() /obj/item/clipboard/attackby(obj/item/W, mob/user) if(isPaperwork(W)) //If it's a photo, paper bundle, or piece of paper, place it on the clipboard. @@ -114,6 +114,8 @@ obj/item/clipboard/proc/penPlacement(mob/user, obj/item/pen/P, placing) else if(istype(W, /obj/item/stamp) && toppaper) //We can stamp the topmost piece of paper toppaper.attackby(W, user) update_icon() + else + return ..() /obj/item/clipboard/attack_self(mob/user) showClipboard(user) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 44eb3555a25..8c188952406 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -27,7 +27,7 @@ overlays.Cut() if(contents.len) overlays += "folder_paper" - return + ..() /obj/item/folder/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo) || istype(W, /obj/item/paper_bundle) || istype(W, /obj/item/documents)) @@ -43,7 +43,8 @@ if((loc == usr || Adjacent(usr)) && usr.stat == 0) name = "folder[(n_name ? text("- '[n_name]'") : null)]" - return + else + return ..() /obj/item/folder/attack_self(mob/user as mob) var/dat = "[name]" diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 40cc2bcc534..aa639e78f3f 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -53,6 +53,7 @@ updateinfolinks() /obj/item/paper/update_icon() + ..() if(icon_state == "paper_talisman") return if(info) @@ -303,12 +304,6 @@ if(user.mind && (user.mind.assigned_role == "Clown")) clown = 1 - if(istype(P, /obj/item/stack/tape_roll)) - var/obj/item/stack/tape_roll/tape = P - tape.stick(src, user) - tape.use(1) - return - if(istype(P, /obj/item/paper) || istype(P, /obj/item/photo)) if(istype(P, /obj/item/paper/carbon)) var/obj/item/paper/carbon/C = P diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 900d3d4bdb8..da241a9c007 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -62,8 +62,6 @@ to_chat(user, "You add \the [W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name].") qdel(W) else - if(istype(W, /obj/item/stack/tape_roll)) - return 0 if(istype(W, /obj/item/pen) || istype(W, /obj/item/toy/crayon)) usr << browse("", "window=[name]") //Closes the dialog P = src[page] @@ -217,6 +215,7 @@ /obj/item/paper_bundle/update_icon() + ..() if(contents.len) var/obj/item/paper/P = src[1] icon_state = P.icon_state diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 586138f1845..9f8d2335a9e 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -87,14 +87,14 @@ /obj/item/paper_bin/attackby(obj/item/paper/i as obj, mob/user as mob, params) - if(!istype(i)) - return - - user.drop_item() - i.loc = src - to_chat(user, "You put [i] in [src].") - papers.Add(i) - amount++ + if(istype(i)) + user.drop_item() + i.loc = src + to_chat(user, "You put [i] in [src].") + papers.Add(i) + amount++ + else + return ..() /obj/item/paper_bin/examine(mob/user) @@ -110,7 +110,7 @@ icon_state = "paper_bin0" else icon_state = "paper_bin1" - + ..() /obj/item/paper_bin/carbon name = "carbonless paper bin" diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 048cbf65500..d2720e28bd8 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -589,6 +589,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( else icon_state = "coil" name = "cable coil" + ..() /obj/item/stack/cable_coil/proc/update_wclass() if(amount == 1) diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index db70bf255e6..20687a6b98c 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -148,8 +148,8 @@ to_chat(user, "You set the label to \"[tmp_label]\".") label_text = tmp_label update_name_label() - if(istype(I,/obj/item/storage/bag)) - ..() + else + return ..() /obj/item/reagent_containers/glass/proc/update_name_label() if(label_text == "") @@ -201,6 +201,7 @@ overlays += lid if(assembly) overlays += "assembly" + ..() /obj/item/reagent_containers/glass/beaker/verb/remove_assembly() set name = "Remove Assembly" diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 5829e3bb7f5..529417a2b6c 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ diff --git a/paradise.dme b/paradise.dme index 6a09fb215f2..711a157e457 100644 --- a/paradise.dme +++ b/paradise.dme @@ -260,6 +260,7 @@ #include "code\datums\cache\crew.dm" #include "code\datums\cache\powermonitor.dm" #include "code\datums\components\_component.dm" +#include "code\datums\components\ducttape.dm" #include "code\datums\components\material_container.dm" #include "code\datums\components\squeak.dm" #include "code\datums\diseases\_disease.dm"