From 2f4d4cab4bbc75ddbf0771daf7d8529fb0a278ad Mon Sep 17 00:00:00 2001 From: Critawakets Date: Tue, 14 Jul 2026 03:11:56 -0400 Subject: [PATCH 1/3] First cherry-pick, #90080 --- .../signals_atom/signals_atom_attack.dm | 6 +- .../signals/signals_mob/signals_mob_living.dm | 2 +- .../signals/signals_mob/signals_mob_main.dm | 2 +- code/__DEFINES/dcs/signals/signals_object.dm | 16 ++-- code/_onclick/click.dm | 4 +- code/_onclick/cyborg.dm | 4 +- code/_onclick/item_attack.dm | 83 +++++++++---------- code/_onclick/telekinesis.dm | 2 +- code/datums/components/combo_attacks.dm | 3 +- code/datums/components/dart_insert.dm | 2 +- code/datums/components/focused_attacker.dm | 2 +- code/datums/components/food/golem_food.dm | 4 +- code/datums/components/igniter.dm | 2 +- code/datums/components/scope.dm | 2 +- code/datums/components/seclight_attachable.dm | 2 +- code/datums/components/soul_stealer.dm | 4 +- code/datums/components/style/style.dm | 2 +- code/datums/components/summoning.dm | 2 +- code/datums/components/swabbing.dm | 2 +- code/datums/components/trapdoor.dm | 2 +- code/datums/elements/cuffsnapping.dm | 2 +- code/datums/elements/disarm_attack.dm | 2 +- code/datums/elements/easily_fragmented.dm | 2 +- code/datums/elements/envenomable_casing.dm | 4 +- code/datums/elements/kneecapping.dm | 2 +- code/datums/elements/kneejerk.dm | 4 +- code/datums/elements/knockback.dm | 2 +- code/datums/elements/pet_bonus.dm | 2 +- code/datums/elements/relay_attackers.dm | 4 +- code/datums/holocall.dm | 6 +- code/datums/martial/cqc.dm | 2 +- code/datums/martial/sleeping_carp.dm | 5 +- code/datums/memory/tattoo_kit.dm | 4 +- code/datums/storage/storage.dm | 2 +- code/game/machinery/PDApainter.dm | 2 +- code/game/machinery/_machinery.dm | 4 +- code/game/machinery/bank_machine.dm | 2 +- .../machinery/camera/camera_construction.dm | 2 +- code/game/machinery/cell_charger.dm | 2 +- code/game/machinery/civilian_bounties.dm | 2 +- .../game/machinery/computer/communications.dm | 2 +- code/game/machinery/computer/dna_console.dm | 2 +- code/game/machinery/computer/law.dm | 2 +- .../orders/order_computer/mining_order.dm | 2 +- .../machinery/computer/prisoner/_prisoner.dm | 2 +- code/game/machinery/defibrillator_mount.dm | 2 +- code/game/machinery/deployable.dm | 2 +- code/game/machinery/dish_drive.dm | 2 +- .../game/machinery/dna_infuser/dna_infuser.dm | 2 +- .../dna_infuser/organ_sets/goliath_organs.dm | 2 +- code/game/machinery/dna_scanner.dm | 8 +- code/game/machinery/doors/airlock.dm | 2 +- code/game/machinery/doors/door.dm | 2 +- code/game/machinery/firealarm.dm | 2 +- code/game/machinery/flasher.dm | 4 +- code/game/machinery/hologram.dm | 16 ++-- code/game/machinery/hypnochair.dm | 8 +- code/game/machinery/iv_drip.dm | 12 +-- code/game/machinery/launch_pad.dm | 14 ++-- code/game/machinery/mass_driver.dm | 10 +-- code/game/machinery/medical_kiosk.dm | 2 +- code/game/machinery/modular_shield.dm | 2 +- code/game/machinery/navbeacon.dm | 2 +- code/game/machinery/nebula_shielding.dm | 2 +- .../newscaster/newscaster_machine.dm | 2 +- code/game/machinery/pipe/pipe_dispenser.dm | 2 +- .../machinery/porta_turret/portable_turret.dm | 4 +- .../porta_turret/portable_turret_construct.dm | 2 +- .../porta_turret/portable_turret_cover.dm | 2 +- code/game/machinery/prisonlabor.dm | 2 +- code/game/machinery/quantum_pad.dm | 2 +- code/game/machinery/recharger.dm | 2 +- code/game/machinery/rechargestation.dm | 2 +- code/game/machinery/requests_console.dm | 2 +- code/game/machinery/roulette_machine.dm | 2 +- code/game/machinery/scanner_gate.dm | 2 +- code/game/machinery/shieldgen.dm | 4 +- code/game/machinery/spaceheater.dm | 4 +- code/game/machinery/suit_storage_unit.dm | 2 +- code/game/machinery/syndicatebomb.dm | 4 +- .../telecomms/machine_interactions.dm | 2 +- .../machinery/telecomms/machines/allinone.dm | 2 +- .../telecomms/machines/message_server.dm | 2 +- code/game/machinery/teleporter.dm | 4 +- code/game/objects/effects/decals/cleanable.dm | 2 +- .../objects/effects/decals/cleanable/misc.dm | 2 +- .../fluid_spread/effects_foam.dm | 2 +- code/game/objects/effects/effects.dm | 4 +- code/game/objects/effects/portals.dm | 2 +- .../objects/effects/poster_demotivational.dm | 2 +- .../objects/effects/poster_motivational.dm | 2 +- code/game/objects/effects/posters/poster.dm | 4 +- .../temporary_visuals/miscellaneous.dm | 2 +- code/game/objects/items/cardboard_cutouts.dm | 2 +- code/game/objects/items/cigs_lighters.dm | 4 +- code/game/objects/items/cosmetics.dm | 2 +- code/game/objects/items/courtroom.dm | 2 +- code/game/objects/items/crab17.dm | 2 +- code/game/objects/items/credit_holochip.dm | 2 +- code/game/objects/items/defib.dm | 3 +- .../game/objects/items/devices/aicard_evil.dm | 8 +- .../objects/items/devices/laserpointer.dm | 2 +- .../objects/items/devices/lightreplacer.dm | 2 +- .../items/devices/radio/electropack.dm | 2 +- .../objects/items/devices/radio/headset.dm | 2 +- code/game/objects/items/devices/swapper.dm | 2 +- .../game/objects/items/devices/table_clock.dm | 2 +- .../objects/items/devices/taperecorder.dm | 2 +- .../objects/items/devices/traitordevices.dm | 2 +- code/game/objects/items/dualsaber.dm | 2 +- code/game/objects/items/dyespray.dm | 2 +- code/game/objects/items/extinguisher.dm | 4 +- code/game/objects/items/fireaxe.dm | 2 +- code/game/objects/items/flamethrower.dm | 2 +- code/game/objects/items/food/egg.dm | 4 +- code/game/objects/items/food/misc.dm | 2 +- code/game/objects/items/food/pancakes.dm | 6 +- code/game/objects/items/grenades/festive.dm | 4 +- .../game/objects/items/grenades/ghettobomb.dm | 12 +-- code/game/objects/items/grenades/plastic.dm | 2 +- code/game/objects/items/hand_items.dm | 12 +-- code/game/objects/items/hot_potato.dm | 2 +- .../objects/items/implants/implantcase.dm | 2 +- code/game/objects/items/implants/implanter.dm | 2 +- .../game/objects/items/implants/implantpad.dm | 2 +- .../items/implants/security/implant_chem.dm | 4 +- code/game/objects/items/inspector.dm | 6 +- .../objects/items/kirby_plants/kirbyplants.dm | 2 +- code/game/objects/items/kitchen.dm | 6 +- code/game/objects/items/knives.dm | 2 +- code/game/objects/items/latexballoon.dm | 2 +- code/game/objects/items/mail.dm | 2 +- code/game/objects/items/melee/baton.dm | 7 +- code/game/objects/items/melee/misc.dm | 12 +-- code/game/objects/items/piggy_bank.dm | 2 +- code/game/objects/items/pillow.dm | 4 +- code/game/objects/items/plushes.dm | 4 +- code/game/objects/items/pneumaticCannon.dm | 2 +- code/game/objects/items/powerfist.dm | 2 +- code/game/objects/items/puzzle_pieces.dm | 4 +- code/game/objects/items/rcd/RSF.dm | 2 +- code/game/objects/items/robot/ai_upgrades.dm | 8 +- .../game/objects/items/robot/items/generic.dm | 3 +- .../game/objects/items/robot/items/storage.dm | 8 +- code/game/objects/items/robot/robot_parts.dm | 2 +- .../objects/items/robot/robot_upgrades.dm | 2 +- code/game/objects/items/secret_documents.dm | 2 +- code/game/objects/items/sharpener.dm | 2 +- code/game/objects/items/shields.dm | 2 +- code/game/objects/items/signs.dm | 2 +- code/game/objects/items/spear.dm | 4 +- .../game/objects/items/stacks/sheets/glass.dm | 10 +-- .../objects/items/stacks/sheets/leather.dm | 2 +- .../game/objects/items/stacks/sheets/light.dm | 2 +- .../objects/items/stacks/sheets/mineral.dm | 4 +- .../items/stacks/sheets/sheet_types.dm | 2 +- code/game/objects/items/stacks/stack.dm | 2 +- code/game/objects/items/stacks/tiles/light.dm | 2 +- .../items/stacks/tiles/tile_mineral.dm | 2 +- code/game/objects/items/storage/toolbox.dm | 2 +- code/game/objects/items/tanks/tank_types.dm | 2 +- code/game/objects/items/tanks/tanks.dm | 2 +- code/game/objects/items/tanks/watertank.dm | 2 +- code/game/objects/items/tcg/tcg.dm | 4 +- code/game/objects/items/theft_tools.dm | 2 +- code/game/objects/items/tongs.dm | 2 +- code/game/objects/items/tools/weldingtool.dm | 4 +- code/game/objects/items/toys.dm | 10 +-- code/game/objects/items/v8_engine.dm | 2 +- code/game/objects/items/weaponry.dm | 16 ++-- code/game/objects/items/wizard_weapons.dm | 2 +- code/game/objects/structures/ai_core.dm | 4 +- .../objects/structures/beds_chairs/bed.dm | 4 +- .../objects/structures/beds_chairs/chair.dm | 4 +- code/game/objects/structures/bonfire.dm | 3 +- .../game/objects/structures/cannons/cannon.dm | 2 +- .../construction_console.dm | 4 +- .../structures/crates_lockers/closets.dm | 2 +- .../crates_lockers/closets/secure/security.dm | 4 +- .../structures/crates_lockers/crates/bins.dm | 2 +- .../structures/crates_lockers/crates/large.dm | 2 +- .../crates_lockers/crates/syndicrate.dm | 4 +- .../objects/structures/deployable_turret.dm | 2 +- .../game/objects/structures/detectiveboard.dm | 2 +- code/game/objects/structures/displaycase.dm | 8 +- code/game/objects/structures/door_assembly.dm | 2 +- code/game/objects/structures/dresser.dm | 2 +- code/game/objects/structures/electricchair.dm | 2 +- code/game/objects/structures/extinguisher.dm | 2 +- code/game/objects/structures/false_walls.dm | 4 +- code/game/objects/structures/fireaxe.dm | 2 +- code/game/objects/structures/flora.dm | 2 +- code/game/objects/structures/fluff.dm | 2 +- code/game/objects/structures/girders.dm | 6 +- code/game/objects/structures/grille.dm | 2 +- code/game/objects/structures/guillotine.dm | 2 +- code/game/objects/structures/guncase.dm | 2 +- code/game/objects/structures/janitor.dm | 8 +- code/game/objects/structures/kitchen_spike.dm | 2 +- code/game/objects/structures/ladders.dm | 4 +- code/game/objects/structures/lattice.dm | 4 +- .../objects/structures/lavaland/geyser.dm | 4 +- code/game/objects/structures/maintenance.dm | 4 +- code/game/objects/structures/morgue.dm | 2 +- code/game/objects/structures/noticeboard.dm | 2 +- .../objects/structures/plaques/_plaques.dm | 4 +- code/game/objects/structures/railings.dm | 2 +- code/game/objects/structures/reflector.dm | 2 +- code/game/objects/structures/safe.dm | 2 +- code/game/objects/structures/shower.dm | 4 +- code/game/objects/structures/signs/_signs.dm | 4 +- code/game/objects/structures/spawner.dm | 2 +- code/game/objects/structures/stairs.dm | 2 +- .../game/objects/structures/tank_dispenser.dm | 2 +- code/game/objects/structures/tank_holder.dm | 2 +- code/game/objects/structures/toiletbong.dm | 2 +- .../objects/structures/training_machine.dm | 8 +- .../structures/transit_tubes/station.dm | 2 +- .../structures/transit_tubes/transit_tube.dm | 2 +- .../transit_tubes/transit_tube_pod.dm | 2 +- code/game/objects/structures/votingbox.dm | 2 +- .../structures/water_structures/sink.dm | 4 +- .../structures/water_structures/toilet.dm | 2 +- .../structures/water_structures/urinal.dm | 2 +- .../water_structures/water_source.dm | 4 +- .../objects/structures/windoor_assembly.dm | 2 +- code/game/objects/structures/window.dm | 4 +- code/game/turfs/closed/indestructible.dm | 2 +- code/game/turfs/closed/minerals.dm | 6 +- code/game/turfs/closed/wall/mineral_walls.dm | 2 +- code/game/turfs/open/asteroid.dm | 2 +- code/game/turfs/open/floor.dm | 10 +-- code/game/turfs/open/floor/fancy_floor.dm | 6 +- code/game/turfs/open/floor/light_floor.dm | 2 +- code/game/turfs/open/floor/mineral_floor.dm | 4 +- code/game/turfs/open/floor/plating.dm | 6 +- .../turfs/open/floor/plating/misc_plating.dm | 2 +- .../game/turfs/open/floor/reinforced_floor.dm | 2 +- code/game/turfs/open/lava.dm | 4 +- code/game/turfs/open/misc.dm | 2 +- code/game/turfs/open/openspace.dm | 2 +- code/game/turfs/open/space/space.dm | 2 +- code/game/turfs/turf.dm | 2 +- .../antagonists/abductor/machinery/console.dm | 2 +- .../abductor/machinery/dispenser.dm | 2 +- .../antagonists/blob/structures/_blob.dm | 2 +- .../changeling/powers/mutations.dm | 2 +- .../antagonists/clown_ops/clown_weapons.dm | 2 +- .../antagonists/heretic/heretic_antag.dm | 2 +- .../modules/antagonists/heretic/influences.dm | 2 +- .../heretic/items/heretic_necks.dm | 2 +- .../nightmare/nightmare_equipment.dm | 2 +- .../equipment/nuclear_authentication_disk.dm | 2 +- .../equipment/nuclear_bomb/_nuclear_bomb.dm | 2 +- .../equipment/nuclear_bomb/beer_nuke.dm | 2 +- .../antagonists/wizard/equipment/artefact.dm | 2 +- .../antagonists/wizard/equipment/soulstone.dm | 2 +- .../wizard/equipment/wizard_spellbook.dm | 2 +- code/modules/art/paintings.dm | 6 +- code/modules/art/statues.dm | 2 +- code/modules/assembly/assembly.dm | 2 +- code/modules/assembly/flash.dm | 2 +- code/modules/assembly/holder.dm | 2 +- code/modules/assembly/signaler.dm | 6 +- .../machinery/air_alarm/air_alarm_interact.dm | 2 +- .../atmospherics/machinery/atmosmachinery.dm | 2 +- .../components/electrolyzer/electrolyzer.dm | 2 +- .../machinery/components/fusion/hfr_parts.dm | 4 +- .../gas_recipe_machines/crystallizer.dm | 2 +- .../atmospherics/machinery/components/tank.dm | 2 +- .../atmospherics/machinery/pipes/pipes.dm | 2 +- .../machinery/portable/canister.dm | 2 +- .../portable/portable_atmospherics.dm | 2 +- .../awaymissions/mission_code/Cabin.dm | 2 +- code/modules/awaymissions/signpost.dm | 2 +- .../modules/awaymissions/super_secret_room.dm | 2 +- code/modules/basketball/basketball.dm | 2 +- code/modules/basketball/hoop.dm | 2 +- code/modules/capture_the_flag/ctf_game.dm | 6 +- code/modules/cards/cardhand.dm | 4 +- code/modules/cards/deck/deck.dm | 2 +- code/modules/cards/singlecard.dm | 2 +- code/modules/cargo/coupon.dm | 2 +- code/modules/cargo/materials_market.dm | 2 +- code/modules/cargo/universal_scanner.dm | 2 +- code/modules/clothing/belts/polymorph_belt.dm | 2 +- code/modules/clothing/clothing.dm | 4 +- code/modules/clothing/gloves/_gloves.dm | 2 +- code/modules/clothing/head/helmet.dm | 2 +- code/modules/clothing/head/jobs.dm | 2 +- code/modules/clothing/head/tophat.dm | 2 +- code/modules/clothing/masks/muzzle.dm | 2 +- code/modules/clothing/neck/collar_bomb.dm | 2 +- code/modules/clothing/shoes/sneakers.dm | 4 +- .../clothing/spacesuits/_spacesuits.dm | 2 +- code/modules/clothing/spacesuits/softsuit.dm | 2 +- code/modules/clothing/under/_under.dm | 2 +- code/modules/economy/holopay.dm | 4 +- code/modules/events/wizard/rpgloot.dm | 2 +- code/modules/experisci/destructive_scanner.dm | 2 +- .../experiment/handlers/experiment_handler.dm | 4 +- code/modules/explorer_drone/exodrone.dm | 2 +- code/modules/explorer_drone/loot.dm | 2 +- code/modules/fishing/fish/_fish.dm | 2 +- code/modules/fishing/fishing_rod.dm | 2 +- .../food_and_drinks/machinery/coffeemaker.dm | 4 +- .../food_and_drinks/machinery/deep_fryer.dm | 2 +- .../food_and_drinks/machinery/gibber.dm | 2 +- .../food_and_drinks/machinery/griddle.dm | 3 +- .../food_and_drinks/machinery/icecream_vat.dm | 4 +- .../machinery/monkeyrecycler.dm | 2 +- .../modules/food_and_drinks/machinery/oven.dm | 2 +- .../food_and_drinks/machinery/processor.dm | 2 +- .../food_and_drinks/machinery/smartfridge.dm | 2 +- .../food_and_drinks/machinery/stove.dm | 2 +- code/modules/food_and_drinks/plate.dm | 9 +- code/modules/holodeck/items.dm | 4 +- code/modules/hydroponics/beekeeping/beebox.dm | 2 +- code/modules/hydroponics/biogenerator.dm | 2 +- code/modules/hydroponics/fermenting_barrel.dm | 2 +- code/modules/hydroponics/grown/corn.dm | 2 +- code/modules/hydroponics/grown/potato.dm | 2 +- code/modules/hydroponics/grown/pumpkin.dm | 2 +- code/modules/hydroponics/grown/root.dm | 2 +- code/modules/hydroponics/grown/towercap.dm | 2 +- code/modules/hydroponics/hydroitemdefines.dm | 2 +- code/modules/hydroponics/hydroponics.dm | 8 +- code/modules/hydroponics/seed_extractor.dm | 4 +- code/modules/hydroponics/seeds.dm | 2 +- .../modules/hydroponics/unique_plant_genes.dm | 4 +- code/modules/instruments/items.dm | 6 +- .../job_types/chaplain/chaplain_nullrod.dm | 4 +- .../chaplain/chaplain_vorpal_scythe.dm | 2 +- code/modules/library/book.dm | 6 +- code/modules/library/bookcase.dm | 2 +- code/modules/library/lib_machines.dm | 6 +- .../library/skill_learning/skill_station.dm | 2 +- .../mapfluff/ruins/lavaland_ruin_code.dm | 2 +- .../lavalandruin_code/elephantgraveyard.dm | 2 +- .../ruins/lavalandruin_code/syndicate_base.dm | 2 +- .../ruins/objects_and_mobs/sin_ruins.dm | 2 +- .../mapfluff/ruins/spaceruin_code/meateor.dm | 2 +- code/modules/meteors/meteor_types.dm | 2 +- .../mining/equipment/marker_beacons.dm | 2 +- code/modules/mining/equipment/resonator.dm | 2 +- code/modules/mining/laborcamp/laborstacker.dm | 2 +- .../mining/lavaland/necropolis_chests.dm | 2 +- code/modules/mining/ores_coins.dm | 4 +- code/modules/mob/living/basic/bots/_bots.dm | 2 +- code/modules/mob/living/basic/cult/shade.dm | 2 +- .../living/basic/lavaland/goliath/goliath.dm | 2 +- .../basic/lavaland/legion/legion_tumour.dm | 2 +- .../mob/living/basic/minebots/minebot.dm | 4 +- .../modules/mob/living/basic/pets/dog/_dog.dm | 2 +- .../mob/living/basic/pets/dog/corgi.dm | 2 +- .../mob/living/basic/pets/parrot/_parrot.dm | 2 +- .../basic/ruin_defender/living_floor.dm | 2 +- .../mob/living/basic/vermin/mothroach.dm | 2 +- code/modules/mob/living/basic/vermin/mouse.dm | 2 +- code/modules/mob/living/brain/MMI.dm | 2 +- code/modules/mob/living/brain/brain_item.dm | 2 +- code/modules/mob/living/brain/posibrain.dm | 2 +- .../living/carbon/alien/special/facehugger.dm | 4 +- code/modules/mob/living/inhand_holder.dm | 12 +++ .../mob/living/silicon/ai/ai_defense.dm | 2 +- .../mob/living/simple_animal/bot/bot.dm | 2 +- .../living/simple_animal/bot/construction.dm | 20 ++--- .../mob/living/simple_animal/bot/mulebot.dm | 2 +- .../mob/living/simple_animal/bot/secbot.dm | 2 +- .../hostile/megafauna/bubblegum.dm | 2 +- .../hostile/megafauna/hierophant.dm | 2 +- code/modules/mod/mod_construction.dm | 4 +- code/modules/mod/mod_link.dm | 2 +- code/modules/mod/modules/_module.dm | 2 +- code/modules/mod/modules/module_pathfinder.dm | 2 +- .../computers/item/disks/virus_disk.dm | 2 +- .../modular_computers/computers/item/pda.dm | 2 +- code/modules/pai/card.dm | 4 +- code/modules/paperwork/clipboard.dm | 2 +- code/modules/paperwork/desk_bell.dm | 2 +- code/modules/paperwork/fax.dm | 2 +- code/modules/paperwork/filingcabinet.dm | 3 +- code/modules/paperwork/folders.dm | 2 +- code/modules/paperwork/paper.dm | 2 +- code/modules/paperwork/paper_biscuit.dm | 2 +- code/modules/paperwork/paper_cutter.dm | 2 +- code/modules/paperwork/paperbin.dm | 2 +- code/modules/paperwork/paperplane.dm | 2 +- code/modules/paperwork/paperwork.dm | 4 +- code/modules/paperwork/pen.dm | 4 +- code/modules/paperwork/ticketmachine.dm | 2 +- code/modules/photography/photos/frame.dm | 2 +- code/modules/photography/photos/photo.dm | 2 +- .../plumbing/plumbers/plumbing_buffer.dm | 2 +- code/modules/plumbing/plumbers/teleporter.dm | 2 +- code/modules/power/cable.dm | 6 +- code/modules/power/floodlight.dm | 2 +- code/modules/power/gravitygenerator.dm | 4 +- code/modules/power/lighting/light.dm | 2 +- .../modules/power/lighting/light_construct.dm | 2 +- code/modules/power/lighting/light_items.dm | 4 +- code/modules/power/pipecleaners.dm | 4 +- code/modules/power/port_gen.dm | 2 +- code/modules/power/power.dm | 2 +- code/modules/power/rtg.dm | 4 +- .../power/singularity/containment_field.dm | 2 +- code/modules/power/singularity/emitter.dm | 2 +- code/modules/power/solar.dm | 4 +- .../supermatter/supermatter_hit_procs.dm | 2 +- code/modules/power/tesla/coil.dm | 4 +- .../projectiles/ammunition/_ammunition.dm | 2 +- .../projectiles/ammunition/ballistic/foam.dm | 2 +- .../projectiles/guns/ballistic/automatic.dm | 2 +- .../projectiles/guns/ballistic/launchers.dm | 2 +- .../projectiles/guns/ballistic/pistol.dm | 2 +- .../projectiles/guns/energy/dueling.dm | 2 +- .../projectiles/guns/energy/laser_gatling.dm | 2 +- .../projectiles/guns/energy/recharge.dm | 2 +- .../guns/special/grenade_launcher.dm | 2 +- .../projectiles/guns/special/hand_of_midas.dm | 2 +- code/modules/projectiles/pins.dm | 2 +- code/modules/reagents/chemistry/items.dm | 2 +- .../reagents/chemistry/machinery/pandemic.dm | 3 +- code/modules/reagents/reagent_containers.dm | 4 +- .../reagents/reagent_containers/blood_pack.dm | 2 +- .../reagents/reagent_containers/cups/_cup.dm | 4 +- .../reagent_containers/cups/bottle.dm | 2 +- .../reagent_containers/cups/glassbottle.dm | 4 +- .../reagents/reagent_containers/misc.dm | 2 +- .../reagents/reagent_containers/spray.dm | 2 +- .../reagents/reagent_containers/syringes.dm | 2 +- code/modules/reagents/reagent_dispenser.dm | 2 +- code/modules/recycling/conveyor.dm | 8 +- code/modules/recycling/disposal/bin.dm | 4 +- .../recycling/disposal/pipe_sorting.dm | 2 +- code/modules/recycling/sortingmachinery.dm | 4 +- code/modules/religion/burdened/psyker.dm | 2 +- .../religion/sparring/ceremonial_gear.dm | 2 +- code/modules/research/anomaly/anomaly_core.dm | 2 +- .../research/anomaly/anomaly_refinery.dm | 2 +- code/modules/research/experimentor.dm | 2 +- .../research/ordnance/doppler_array.dm | 2 +- code/modules/research/rdconsole.dm | 2 +- code/modules/research/server.dm | 2 +- .../xenobiology/crossbreeding/_weapons.dm | 2 +- .../xenobiology/vatgrowing/petri_dish.dm | 2 +- .../research/xenobiology/xenobio_camera.dm | 2 +- code/modules/shuttle/special.dm | 4 +- .../spell_types/self/sanguine_strike.dm | 2 +- .../spell_types/self/spacetime_distortion.dm | 2 +- .../spells/spell_types/touch/_touch.dm | 4 +- code/modules/surgery/bodyparts/_bodyparts.dm | 2 +- .../surgery/bodyparts/robot_bodyparts.dm | 4 +- code/modules/surgery/organs/autosurgeon.dm | 4 +- .../modules/transport/tram/tram_controller.dm | 2 +- code/modules/transport/tram/tram_floors.dm | 8 +- code/modules/transport/tram/tram_signals.dm | 6 +- .../modules/transport/tram/tram_structures.dm | 6 +- code/modules/transport/transport_module.dm | 2 +- code/modules/tutorials/tutorials/drop.dm | 4 +- .../tutorials/tutorials/switch_hands.dm | 4 +- code/modules/vehicles/mecha/combat/durand.dm | 4 +- .../mecha/equipment/tools/other_tools.dm | 2 +- code/modules/vehicles/mecha/mech_bay.dm | 2 +- code/modules/vehicles/mecha/mecha_defense.dm | 4 +- code/modules/vehicles/mecha/mecha_parts.dm | 2 +- code/modules/vehicles/motorized_wheelchair.dm | 2 +- code/modules/vehicles/pimpin_ride.dm | 2 +- code/modules/vehicles/ridden.dm | 2 +- code/modules/vehicles/scooter.dm | 4 +- code/modules/vehicles/sealed.dm | 2 +- code/modules/vehicles/secway.dm | 2 +- code/modules/vending/_vending.dm | 4 +- .../wiremod/components/abstract/module.dm | 4 +- .../modules/wiremod/core/component_printer.dm | 4 +- .../wiremod/core/integrated_circuit.dm | 2 +- code/modules/wiremod/core/marker.dm | 4 +- code/modules/wiremod/core/usb_cable.dm | 2 +- .../wiremod/shell/brain_computer_interface.dm | 4 +- code/modules/wiremod/shell/dispenser.dm | 2 +- code/modules/zombie/items.dm | 2 +- 481 files changed, 766 insertions(+), 775 deletions(-) diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm index 5c5c2aefa6c2..3ac9c0886051 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_attack.dm @@ -2,11 +2,11 @@ // When the signal is called: (signal arguments) // All signals send the source datum of the signal as the first argument -///from base of atom/attackby(): (/obj/item, /mob/living, params) +///from base of atom/attackby(): (/obj/item, /mob/living, list/modifiers) #define COMSIG_ATOM_ATTACKBY "atom_attackby" -/// From base of [atom/proc/attacby_secondary()]: (/obj/item/weapon, /mob/user, params) +/// From base of [atom/proc/attacby_secondary()]: (/obj/item/weapon, /mob/user, list/modifiers) #define COMSIG_ATOM_ATTACKBY_SECONDARY "atom_attackby_secondary" -/// From [/item/attack()], sent by an atom which was just attacked by an item: (/obj/item/weapon, /mob/user, proximity_flag, click_parameters) +/// From [/item/attack()], sent by an atom which was just attacked by an item: (/obj/item/weapon, /mob/user, list/modifiers) #define COMSIG_ATOM_AFTER_ATTACKEDBY "atom_after_attackby" /// From base of [/atom/proc/attack_hand_secondary]: (mob/user, list/modifiers) - Called when the atom receives a secondary unarmed attack. #define COMSIG_ATOM_ATTACK_HAND_SECONDARY "atom_attack_hand_secondary" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm index e8dbddc50827..8de0872a7ea9 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -295,7 +295,7 @@ /// Sent to the mob when their mind is slaved #define COMSIG_MOB_ENSLAVED_TO "mob_enslaved_to" -/// From /obj/item/proc/attack_atom: (mob/living/attacker, atom/attacked) +/// From /obj/item/proc/attack_atom: (mob/living/attacker, atom/attacked, list/modifiers) #define COMSIG_LIVING_ATTACK_ATOM "living_attack_atom" /// From /mob/living/proc/stop_leaning() #define COMSIG_LIVING_STOPPED_LEANING "living_stopped_leaning" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm index 4623a3d0dc66..e4d4af56214c 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -187,7 +187,7 @@ #define COMSIG_TABLE_SLAMMED "table_slammed" ///from base of atom/attack_hand(): (mob/user, modifiers) #define COMSIG_MOB_ATTACK_HAND "mob_attack_hand" -///from base of /obj/item/attack(): (mob/M, mob/user) +///from base of /obj/item/attack(): (mob/M, mob/user, list/modifiers) #define COMSIG_MOB_ITEM_ATTACK "mob_item_attack" ///from base of mob/RangedAttack(): (atom/A, modifiers) #define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm index ed3ba0553bf9..41cae9a68202 100644 --- a/code/__DEFINES/dcs/signals/signals_object.dm +++ b/code/__DEFINES/dcs/signals/signals_object.dm @@ -136,7 +136,7 @@ #define COMSIG_ITEM_ON_GRIND "on_grind" ///from base of obj/item/on_juice(): () #define COMSIG_ITEM_ON_JUICE "on_juice" -///from /obj/machinery/hydroponics/attackby(obj/item/O, mob/user, params) when an object is used as compost: (mob/user) +///from /obj/machinery/hydroponics/attackby(obj/item/O, mob/user, list/modifiers) when an object is used as compost: (mob/user) #define COMSIG_ITEM_ON_COMPOSTED "on_composted" ///Called when an item is dried by a drying rack #define COMSIG_ITEM_DRIED "item_dried" @@ -190,7 +190,7 @@ #define COMSIG_ITEM_OFFER_TAKEN "item_offer_taken" ///Interrupts the offer acceptance #define COMPONENT_OFFER_TAKE_INTERRUPT (1<<0) -/// sent from obj/effect/attackby(): (/obj/effect/hit_effect, /mob/living/attacker, params) +/// sent from obj/effect/attackby(): (/obj/effect/hit_effect, /mob/living/attacker, list/modifiers) #define COMSIG_ITEM_ATTACK_EFFECT "item_effect_attacked" /// Called by /obj/item/proc/worn_overlays(list/overlays, mutable_appearance/standing, isinhands, icon_file) #define COMSIG_ITEM_GET_WORN_OVERLAYS "item_get_worn_overlays" @@ -452,24 +452,24 @@ /// Prevents click from happening. #define COMPONENT_CANCEL_EQUIPMENT_CLICK (1<<0) -///from base of /obj/item/attack(): (mob/living, mob/living, params) +///from base of /obj/item/attack(): (mob/living, mob/living, list/modifiers) #define COMSIG_ITEM_ATTACK "item_attack" ///from base of obj/item/attack_self(): (/mob) #define COMSIG_ITEM_ATTACK_SELF "item_attack_self" //from base of obj/item/attack_self_secondary(): (/mob) #define COMSIG_ITEM_ATTACK_SELF_SECONDARY "item_attack_self_secondary" -///from base of obj/item/attack_atom(): (/atom, /mob) +///from base of obj/item/attack_atom(): (/atom, /mob, list/modifiers) #define COMSIG_ITEM_ATTACK_ATOM "item_attack_atom" -///from base of obj/item/pre_attack(): (atom/target, mob/user, params) +///from base of obj/item/pre_attack(): (atom/target, mob/user, list/modifiers) #define COMSIG_ITEM_PRE_ATTACK "item_pre_attack" -/// From base of [/obj/item/proc/pre_attack_secondary()]: (atom/target, mob/user, params) +/// From base of [/obj/item/proc/pre_attack_secondary()]: (atom/target, mob/user, list/modifiers) #define COMSIG_ITEM_PRE_ATTACK_SECONDARY "item_pre_attack_secondary" #define COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN (1<<0) #define COMPONENT_SECONDARY_CONTINUE_ATTACK_CHAIN (1<<1) #define COMPONENT_SECONDARY_CALL_NORMAL_ATTACK_CHAIN (1<<2) -/// From base of [/obj/item/proc/attack_secondary()]: (atom/target, mob/user, params) +/// From base of [/obj/item/proc/attack_secondary()]: (atom/target, mob/user, list/modifiers) #define COMSIG_ITEM_ATTACK_SECONDARY "item_attack_secondary" -///from base of [obj/item/attack()]: (atom/target, mob/user, proximity_flag, click_parameters) +///from base of [obj/item/attack()]: (atom/target, mob/user, proximity_flag, list/modifiers) #define COMSIG_ITEM_AFTERATTACK "item_afterattack" ///from base of obj/item/embedded(): (atom/target, obj/item/bodypart/part) #define COMSIG_ITEM_EMBEDDED "item_embedded" diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 152255634bc5..deeb3f4b1d77 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -141,7 +141,7 @@ //User itself, current loc, and user inventory if(A in DirectAccess()) if(W) - W.melee_attack_chain(src, A, params) + W.melee_attack_chain(src, A, modifiers) else if(ismob(A)) changeNext_move(CLICK_CD_MELEE) @@ -162,7 +162,7 @@ //Standard reach turf to turf or reaching inside storage if(CanReach(A,W)) if(W) - W.melee_attack_chain(src, A, params) + W.melee_attack_chain(src, A, modifiers) else if(ismob(A)) changeNext_move(CLICK_CD_MELEE) diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 8c7809c24e92..333cb89439c0 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -78,7 +78,7 @@ // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents) if(A == loc || (A in loc) || (A in contents)) - W.melee_attack_chain(src, A, params) + W.melee_attack_chain(src, A, modifiers) return if(!isturf(loc)) @@ -86,7 +86,7 @@ // cyborg rightclick code, allowing borgos to use weapons at range if(CanReach(A,W)) - W.melee_attack_chain(src, A, params) + W.melee_attack_chain(src, A, modifiers) return else if(isturf(A) || isturf(A.loc)) A.base_ranged_item_interaction(src, W, modifiers) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index a8b6acd42935..7e18629202e0 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -7,13 +7,12 @@ * * [/atom/proc/attackby] on the target. If it returns TRUE, the chain will be stopped. * * [/obj/item/proc/afterattack]. The return value does not matter. */ -/obj/item/proc/melee_attack_chain(mob/user, atom/target, params) +/obj/item/proc/melee_attack_chain(mob/user, atom/target, list/modifiers) //Proxy replaces src cause it returns an atom that will attack the target on our behalf var/obj/item/source_atom = get_proxy_attacker_for(target, user) if(source_atom != src) //if we are someone else then call that attack chain else we can proceed with the usual stuff - return source_atom.melee_attack_chain(user, target, params) + return source_atom.melee_attack_chain(user, target, modifiers) - var/list/modifiers = params2list(params) var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK) var/item_interact_result = target.base_item_interaction(user, src, modifiers) @@ -26,9 +25,9 @@ var/pre_attack_result if (is_right_clicking) - switch (pre_attack_secondary(target, user, params)) + switch (pre_attack_secondary(target, user, modifiers)) if (SECONDARY_ATTACK_CALL_NORMAL) - pre_attack_result = pre_attack(target, user, params) + pre_attack_result = pre_attack(target, user, modifiers) if (SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return TRUE if (SECONDARY_ATTACK_CONTINUE_CHAIN) @@ -36,7 +35,7 @@ else CRASH("pre_attack_secondary must return an SECONDARY_ATTACK_* define, please consult code/__DEFINES/combat.dm") else - pre_attack_result = pre_attack(target, user, params) + pre_attack_result = pre_attack(target, user, modifiers) if(pre_attack_result) return TRUE @@ -45,9 +44,9 @@ var/attackby_result if (is_right_clicking) - switch (target.attackby_secondary(src, user, params)) + switch (target.attackby_secondary(src, user, modifiers)) if (SECONDARY_ATTACK_CALL_NORMAL) - attackby_result = target.attackby(src, user, params) + attackby_result = target.attackby(src, user, modifiers) if (SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return TRUE if (SECONDARY_ATTACK_CONTINUE_CHAIN) @@ -55,7 +54,7 @@ else CRASH("attackby_secondary must return an SECONDARY_ATTACK_* define, please consult code/__DEFINES/combat.dm") else - attackby_result = target.attackby(src, user, params) + attackby_result = target.attackby(src, user, modifiers) if (attackby_result) // This means the attack failed or was handled for whatever reason @@ -66,9 +65,9 @@ if(user.client && isitem(target)) if(isnull(user.get_inactive_held_item())) - SStutorials.suggest_tutorial(user, /datum/tutorial/switch_hands, params2list(params)) + SStutorials.suggest_tutorial(user, /datum/tutorial/switch_hands, modifiers) else - SStutorials.suggest_tutorial(user, /datum/tutorial/drop, params2list(params)) + SStutorials.suggest_tutorial(user, /datum/tutorial/drop, modifiers) return TRUE @@ -87,14 +86,14 @@ * Called on the item before it hits something * * Arguments: - * * atom/A - The atom about to be hit + * * atom/target - The atom about to be hit * * mob/living/user - The mob doing the htting - * * params - click params such as alt/shift etc + * * list/modifiers - click params such as alt/shift etc * * See: [/obj/item/proc/melee_attack_chain] */ -/obj/item/proc/pre_attack(atom/A, mob/living/user, params) //do stuff before attackby! - if(SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK, A, user, params) & COMPONENT_CANCEL_ATTACK_CHAIN) +/obj/item/proc/pre_attack(atom/target, mob/living/user, list/modifiers) //do stuff before attackby! + if(SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK, target, user, modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN) return TRUE return FALSE //return TRUE to avoid calling attackby after this proc does stuff @@ -104,12 +103,12 @@ * Arguments: * * atom/target - The atom about to be hit * * mob/living/user - The mob doing the htting - * * params - click params such as alt/shift etc + * * list/modifiers - click params such as alt/shift etc * * See: [/obj/item/proc/melee_attack_chain] */ -/obj/item/proc/pre_attack_secondary(atom/target, mob/living/user, params) - var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK_SECONDARY, target, user, params) +/obj/item/proc/pre_attack_secondary(atom/target, mob/living/user, list/modifiers) + var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK_SECONDARY, target, user, modifiers) if(signal_result & COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN @@ -129,8 +128,8 @@ * * See: [/obj/item/proc/melee_attack_chain] */ -/atom/proc/attackby(obj/item/attacking_item, mob/user, params) - if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY, attacking_item, user, params) & COMPONENT_NO_AFTERATTACK) +/atom/proc/attackby(obj/item/attacking_item, mob/user, list/modifiers) + if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY, attacking_item, user, modifiers) & COMPONENT_NO_AFTERATTACK) return TRUE return FALSE @@ -144,8 +143,8 @@ * * See: [/obj/item/proc/melee_attack_chain] */ -/atom/proc/attackby_secondary(obj/item/weapon, mob/user, params) - var/signal_result = SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY_SECONDARY, weapon, user, params) +/atom/proc/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) + var/signal_result = SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY_SECONDARY, weapon, user, modifiers) if(signal_result & COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN @@ -155,12 +154,12 @@ return SECONDARY_ATTACK_CALL_NORMAL -/obj/attackby(obj/item/attacking_item, mob/user, params) +/obj/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(..()) return TRUE if(!(obj_flags & CAN_BE_HIT)) return FALSE - return attacking_item.attack_atom(src, user, params) + return attacking_item.attack_atom(src, user, modifiers) /mob/living/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(user.combat_mode) @@ -178,14 +177,14 @@ return NONE -/mob/living/attackby(obj/item/attacking_item, mob/living/user, params) +/mob/living/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(..()) return TRUE user.changeNext_move(attacking_item.attack_speed) - return attacking_item.attack(src, user, params) + return attacking_item.attack(src, user, modifiers) -/mob/living/attackby_secondary(obj/item/weapon, mob/living/user, params) - var/result = weapon.attack_secondary(src, user, params) +/mob/living/attackby_secondary(obj/item/weapon, mob/living/user, list/modifiers) + var/result = weapon.attack_secondary(src, user, modifiers) // Normal attackby updates click cooldown, so we have to make up for it if (result != SECONDARY_ATTACK_CALL_NORMAL) @@ -204,14 +203,14 @@ * * mob/living/user - The mob hitting with this item * * params - Click params of this attack */ -/obj/item/proc/attack(mob/living/target_mob, mob/living/user, params) - var/signal_return = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, target_mob, user, params) +/obj/item/proc/attack(mob/living/target_mob, mob/living/user, list/modifiers) + var/signal_return = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, target_mob, user, modifiers) if(signal_return & COMPONENT_CANCEL_ATTACK_CHAIN) return TRUE if(signal_return & COMPONENT_SKIP_ATTACK) return FALSE - SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK, target_mob, user, params) + SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK, target_mob, user, modifiers) if(item_flags & NOBLUDGEON) return FALSE @@ -236,17 +235,17 @@ if(!target_mob.attacked_by(src, user)) return TRUE - SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target_mob, user, params) - SEND_SIGNAL(target_mob, COMSIG_ATOM_AFTER_ATTACKEDBY, src, user, params) - afterattack(target_mob, user, params) + SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target_mob, user, modifiers) + SEND_SIGNAL(target_mob, COMSIG_ATOM_AFTER_ATTACKEDBY, src, user, modifiers) + afterattack(target_mob, user, modifiers) log_combat(user, target_mob, "attacked", src.name, "(COMBAT MODE: [uppertext(user.combat_mode)]) (DAMTYPE: [uppertext(damtype)])") add_fingerprint(user) return FALSE // unhandled /// The equivalent of [/obj/item/proc/attack] but for alternate attacks, AKA right clicking -/obj/item/proc/attack_secondary(mob/living/victim, mob/living/user, params) - var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_SECONDARY, victim, user, params) +/obj/item/proc/attack_secondary(mob/living/victim, mob/living/user, list/modifiers) + var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_SECONDARY, victim, user, modifiers) if(signal_result & COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN @@ -257,8 +256,8 @@ return SECONDARY_ATTACK_CALL_NORMAL /// The equivalent of the standard version of [/obj/item/proc/attack] but for non mob targets. -/obj/item/proc/attack_atom(atom/attacked_atom, mob/living/user, params) - var/signal_return = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_ATOM, attacked_atom, user) +/obj/item/proc/attack_atom(atom/attacked_atom, mob/living/user, list/modifiers) + var/signal_return = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_ATOM, attacked_atom, user) | SEND_SIGNAL(user, COMSIG_LIVING_ATTACK_ATOM, attacked_atom) if(signal_return & COMPONENT_SKIP_ATTACK) return TRUE if(signal_return & COMPONENT_CANCEL_ATTACK_CHAIN) @@ -269,9 +268,9 @@ if(get(src, /mob/living) == user) // telekinesis. user.do_attack_animation(attacked_atom) attacked_atom.attacked_by(src, user) - SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, attacked_atom, user, params) - SEND_SIGNAL(attacked_atom, COMSIG_ATOM_AFTER_ATTACKEDBY, src, user, params) - afterattack(attacked_atom, user, params) + SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, attacked_atom, user, modifiers) + SEND_SIGNAL(attacked_atom, COMSIG_ATOM_AFTER_ATTACKEDBY, src, user, modifiers) + afterattack(attacked_atom, user, modifiers) return FALSE // unhandled /// Called from [/obj/item/proc/attack_atom] and [/obj/item/proc/attack] if the attack succeeds @@ -460,7 +459,7 @@ * * proximity_flag - is 1 if this afterattack was called on something adjacent, in your square, or on your person. * * click_parameters - is the params string from byond [/atom/proc/Click] code, see that documentation. */ -/obj/item/proc/afterattack(atom/target, mob/user, click_parameters) +/obj/item/proc/afterattack(atom/target, mob/user, list/modifiers) PROTECTED_PROC(TRUE) return diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index bdbf6ab0a024..7cc9813e3a5d 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -171,7 +171,7 @@ var/obj/item/focused_item = focus apply_focus_overlay() if(interacting_with.Adjacent(focus)) - . = focused_item.melee_attack_chain(user, interacting_with, list2params(modifiers)) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING + . = focused_item.melee_attack_chain(user, interacting_with, modifiers) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING if(check_if_focusable(focus)) focus.do_attack_animation(interacting_with, null, focus) diff --git a/code/datums/components/combo_attacks.dm b/code/datums/components/combo_attacks.dm index a8dbe423780e..84d022ae4b70 100644 --- a/code/datums/components/combo_attacks.dm +++ b/code/datums/components/combo_attacks.dm @@ -84,14 +84,13 @@ if(deltimer && timerid) deltimer(timerid) -/datum/component/combo_attacks/proc/on_attack(datum/source, mob/living/target, mob/user, click_parameters) +/datum/component/combo_attacks/proc/on_attack(datum/source, mob/living/target, mob/user, list/modifiers) SIGNAL_HANDLER if(can_attack_callback && !can_attack_callback.Invoke(user, target)) return NONE if(HAS_TRAIT(user, TRAIT_PACIFISM)) return NONE - var/list/modifiers = params2list(click_parameters) if(LAZYACCESS(modifiers, RIGHT_CLICK)) input_list += RIGHT_ATTACK if(LAZYACCESS(modifiers, LEFT_CLICK)) diff --git a/code/datums/components/dart_insert.dm b/code/datums/components/dart_insert.dm index ad869903051d..b404008f0f49 100644 --- a/code/datums/components/dart_insert.dm +++ b/code/datums/components/dart_insert.dm @@ -46,7 +46,7 @@ remove_from_dart(holder_casing, holder_projectile) UnregisterSignal(parent, COMSIG_ITEM_PRE_ATTACK) -/datum/component/dart_insert/proc/on_preattack(datum/source, atom/target, mob/user, params) +/datum/component/dart_insert/proc/on_preattack(datum/source, atom/target, mob/user, list/modifiers) SIGNAL_HANDLER var/obj/item/ammo_casing/foam_dart/dart = target if(!istype(dart)) diff --git a/code/datums/components/focused_attacker.dm b/code/datums/components/focused_attacker.dm index c927aab8822f..12432414f775 100644 --- a/code/datums/components/focused_attacker.dm +++ b/code/datums/components/focused_attacker.dm @@ -48,7 +48,7 @@ register_new_target(target) /// Before an item attacks, try increasing its attack power -/datum/component/focused_attacker/proc/pre_item_attack(obj/item/weapon, atom/target, mob/user, params) +/datum/component/focused_attacker/proc/pre_item_attack(obj/item/weapon, atom/target, mob/user, list/modifiers) SIGNAL_HANDLER if (target == last_target) if (weapon.force - initial(weapon.force) < maximum_gain) diff --git a/code/datums/components/food/golem_food.dm b/code/datums/components/food/golem_food.dm index 136d495b59e3..16efd4d4ba26 100644 --- a/code/datums/components/food/golem_food.dm +++ b/code/datums/components/food/golem_food.dm @@ -36,7 +36,7 @@ return ..() /// Attempt to feed this item to golem -/datum/component/golem_food/proc/on_attack(atom/source, mob/living/target, mob/living/user, click_parameters) +/datum/component/golem_food/proc/on_attack(atom/source, mob/living/target, mob/living/user, list/modifiers) SIGNAL_HANDLER if (user.combat_mode || !HAS_TRAIT(target, TRAIT_ROCK_EATER)) return @@ -48,7 +48,7 @@ return COMPONENT_CANCEL_ATTACK_CHAIN if (isnull(golem_snack)) create_golem_snack(source) - golem_snack.attack(target, user, click_parameters) + golem_snack.attack(target, user, modifiers) return COMPONENT_CANCEL_ATTACK_CHAIN /// Creates our golem snack atom instance diff --git a/code/datums/components/igniter.dm b/code/datums/components/igniter.dm index ad9351b34e9b..f8abd0116dad 100644 --- a/code/datums/components/igniter.dm +++ b/code/datums/components/igniter.dm @@ -20,7 +20,7 @@ /datum/component/igniter/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_POST_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT)) -/datum/component/igniter/proc/item_afterattack(obj/item/source, atom/target, mob/user, click_parameters) +/datum/component/igniter/proc/item_afterattack(obj/item/source, atom/target, mob/user, list/modifiers) SIGNAL_HANDLER do_igniter(target) diff --git a/code/datums/components/scope.dm b/code/datums/components/scope.dm index 087eb0c06d24..9e49679f0231 100644 --- a/code/datums/components/scope.dm +++ b/code/datums/components/scope.dm @@ -74,7 +74,7 @@ return stop_zooming(tracker.owner) -/datum/component/scope/proc/do_secondary_zoom(datum/source, mob/user, atom/target, click_parameters) +/datum/component/scope/proc/do_secondary_zoom(datum/source, mob/user, atom/target, list/modifiers) SIGNAL_HANDLER if(tracker) diff --git a/code/datums/components/seclight_attachable.dm b/code/datums/components/seclight_attachable.dm index b75723bb1f8b..ba6f603a9f30 100644 --- a/code/datums/components/seclight_attachable.dm +++ b/code/datums/components/seclight_attachable.dm @@ -212,7 +212,7 @@ return COMPONENT_ACTION_HANDLED /// Signal proc for [COMSIG_ATOM_ATTACKBY] that allows a user to attach a seclite by hitting our parent with it. -/datum/component/seclite_attachable/proc/on_attackby(obj/item/source, obj/item/attacking_item, mob/attacker, params) +/datum/component/seclite_attachable/proc/on_attackby(obj/item/source, obj/item/attacking_item, mob/attacker, list/modifiers) SIGNAL_HANDLER if(!is_type_in_typecache(attacking_item, valid_lights)) diff --git a/code/datums/components/soul_stealer.dm b/code/datums/components/soul_stealer.dm index e725792bffe3..5be54a45be14 100644 --- a/code/datums/components/soul_stealer.dm +++ b/code/datums/components/soul_stealer.dm @@ -42,13 +42,13 @@ if(10 to INFINITY) examine_list += span_notice("A staggering [num_souls] souls have been claimed by it! And it hungers for more!") -/datum/component/soul_stealer/proc/on_afterattack(obj/item/source, atom/target, mob/living/user, click_parameters) +/datum/component/soul_stealer/proc/on_afterattack(obj/item/source, atom/target, mob/living/user, list/modifiers) SIGNAL_HANDLER if(ishuman(target)) INVOKE_ASYNC(src, PROC_REF(try_capture), target, user) -/datum/component/soul_stealer/proc/try_transfer_soul(obj/item/source, mob/user, atom/target, click_parameters) +/datum/component/soul_stealer/proc/try_transfer_soul(obj/item/source, mob/user, atom/target, list/modifiers) SIGNAL_HANDLER if(istype(target, /obj/structure/constructshell) && length(soulstones)) diff --git a/code/datums/components/style/style.dm b/code/datums/components/style/style.dm index f39379d63678..28aa0fd745f1 100644 --- a/code/datums/components/style/style.dm +++ b/code/datums/components/style/style.dm @@ -319,7 +319,7 @@ return "#364866" /// A proc that lets a user, when their rank >= `hotswap_rank`, swap items in storage with what's in their hands, simply by clicking on the stored item with a held item -/datum/component/style/proc/hotswap(mob/living/source, atom/target, obj/item/weapon, click_parameters) +/datum/component/style/proc/hotswap(mob/living/source, atom/target, obj/item/weapon, list/modifiers) SIGNAL_HANDLER if((rank < hotswap_rank) || !isitem(target) || !(target in source.get_all_contents())) diff --git a/code/datums/components/summoning.dm b/code/datums/components/summoning.dm index 69ade1e2f1b5..3406aed7b38c 100644 --- a/code/datums/components/summoning.dm +++ b/code/datums/components/summoning.dm @@ -49,7 +49,7 @@ /datum/component/summoning/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_ITEM_AFTERATTACK, COMSIG_HOSTILE_POST_ATTACKINGTARGET, COMSIG_PROJECTILE_ON_HIT)) -/datum/component/summoning/proc/item_afterattack(obj/item/source, atom/target, mob/user, click_parameters) +/datum/component/summoning/proc/item_afterattack(obj/item/source, atom/target, mob/user, list/modifiers) SIGNAL_HANDLER do_spawn_mob(get_turf(target), user) diff --git a/code/datums/components/swabbing.dm b/code/datums/components/swabbing.dm index 12d851afe39f..69d3688ebc20 100644 --- a/code/datums/components/swabbing.dm +++ b/code/datums/components/swabbing.dm @@ -53,7 +53,7 @@ This component is used in vat growing to swab for microbiological samples which examine_list += MO.get_details() ///Ran when you attack an object, tries to get a swab of the object. if a swabbable surface is found it will run behavior and hopefully -/datum/component/swabbing/proc/try_to_swab(datum/source, atom/target, mob/user, params) +/datum/component/swabbing/proc/try_to_swab(datum/source, atom/target, mob/user, list/modifiers) SIGNAL_HANDLER if(istype(target, /obj/structure/table))//help how do i do this less shitty diff --git a/code/datums/components/trapdoor.dm b/code/datums/components/trapdoor.dm index 6fb7267a0824..614f9ffb53d8 100644 --- a/code/datums/components/trapdoor.dm +++ b/code/datums/components/trapdoor.dm @@ -288,7 +288,7 @@ internals.forceMove(get_turf(src)) internals = null -/obj/item/trapdoor_remote/attackby(obj/item/assembly/trapdoor/assembly, mob/living/user, params) +/obj/item/trapdoor_remote/attackby(obj/item/assembly/trapdoor/assembly, mob/living/user, list/modifiers) . = ..() if(. || !istype(assembly)) return diff --git a/code/datums/elements/cuffsnapping.dm b/code/datums/elements/cuffsnapping.dm index 1abdc4a7a6bd..3640b0a5bd8d 100644 --- a/code/datums/elements/cuffsnapping.dm +++ b/code/datums/elements/cuffsnapping.dm @@ -72,7 +72,7 @@ examine_list += span_notice(examine_string) -/datum/element/cuffsnapping/proc/try_cuffsnap_target(obj/item/cutter, mob/living/carbon/target, mob/living/cutter_user, params) +/datum/element/cuffsnapping/proc/try_cuffsnap_target(obj/item/cutter, mob/living/carbon/target, mob/living/cutter_user, list/modifiers) SIGNAL_HANDLER if(!istype(target)) //we aren't the kind of mob that can even have cuffs, so we skip. diff --git a/code/datums/elements/disarm_attack.dm b/code/datums/elements/disarm_attack.dm index a788cd9f35ed..c51a789a035d 100644 --- a/code/datums/elements/disarm_attack.dm +++ b/code/datums/elements/disarm_attack.dm @@ -13,7 +13,7 @@ UnregisterSignal(source, list(COMSIG_ATOM_EXAMINE, COMSIG_ITEM_ATTACK_SECONDARY)) return ..() -/datum/element/disarm_attack/proc/secondary_attack(obj/item/source, mob/living/victim, mob/living/user, params) +/datum/element/disarm_attack/proc/secondary_attack(obj/item/source, mob/living/victim, mob/living/user, list/modifiers) SIGNAL_HANDLER if(!user.can_disarm(victim) || !can_disarm_attack(source, victim, user)) return COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN diff --git a/code/datums/elements/easily_fragmented.dm b/code/datums/elements/easily_fragmented.dm index aa8b07a866ec..f54f84547ae1 100644 --- a/code/datums/elements/easily_fragmented.dm +++ b/code/datums/elements/easily_fragmented.dm @@ -23,7 +23,7 @@ . = ..() UnregisterSignal(target, list(COMSIG_ITEM_AFTERATTACK, COMSIG_ITEM_TOOL_ACTED)) -/datum/element/easily_fragmented/proc/on_afterattack(datum/source, atom/target, mob/user, click_parameters) +/datum/element/easily_fragmented/proc/on_afterattack(datum/source, atom/target, mob/user, list/modifiers) SIGNAL_HANDLER try_break(source, user) diff --git a/code/datums/elements/envenomable_casing.dm b/code/datums/elements/envenomable_casing.dm index 5e080adaf000..a334a6618014 100644 --- a/code/datums/elements/envenomable_casing.dm +++ b/code/datums/elements/envenomable_casing.dm @@ -20,10 +20,10 @@ /datum/element/envenomable_casing/Detach(datum/target) . = ..() - UnregisterSignal(target, list(COMSIG_ITEM_AFTERATTACK, COMSIG_ATOM_EXAMINE)) + UnregisterSignal(target, list(COMSIG_ITEM_INTERACTING_WITH_ATOM, COMSIG_ATOM_EXAMINE)) ///signal called on the parent attacking an item -/datum/element/envenomable_casing/proc/handle_interaction(obj/item/ammo_casing/casing, mob/user, atom/target, click_parameters) +/datum/element/envenomable_casing/proc/handle_interaction(obj/item/ammo_casing/casing, mob/user, atom/target, list/modifiers) SIGNAL_HANDLER if(!is_reagent_container(target)) return NONE diff --git a/code/datums/elements/kneecapping.dm b/code/datums/elements/kneecapping.dm index 6858843132b1..d371cba79a58 100644 --- a/code/datums/elements/kneecapping.dm +++ b/code/datums/elements/kneecapping.dm @@ -44,7 +44,7 @@ * if the special attack could not be attempted, performing the ordinary attack procs instead - Or cancelling the attack chain if * the attack can be started. */ -/datum/element/kneecapping/proc/try_kneecap_target(obj/item/source, mob/living/carbon/target, mob/attacker, params) +/datum/element/kneecapping/proc/try_kneecap_target(obj/item/source, mob/living/carbon/target, mob/attacker, list/modifiers) SIGNAL_HANDLER if((attacker.zone_selected != BODY_ZONE_L_LEG) && (attacker.zone_selected != BODY_ZONE_R_LEG)) diff --git a/code/datums/elements/kneejerk.dm b/code/datums/elements/kneejerk.dm index 53c6c7b58efa..5f0ff8e580bb 100644 --- a/code/datums/elements/kneejerk.dm +++ b/code/datums/elements/kneejerk.dm @@ -14,11 +14,9 @@ UnregisterSignal(source, COMSIG_ITEM_ATTACK) -/datum/element/kneejerk/proc/on_item_attack(datum/source, mob/living/target, mob/living/user, params) +/datum/element/kneejerk/proc/on_item_attack(datum/source, mob/living/target, mob/living/user, list/modifiers) SIGNAL_HANDLER - var/list/modifiers = params2list(params) - if((user.zone_selected == BODY_ZONE_L_LEG || user.zone_selected == BODY_ZONE_R_LEG) && LAZYACCESS(modifiers, RIGHT_CLICK) && target.buckled) tap_knee(source, target, user) diff --git a/code/datums/elements/knockback.dm b/code/datums/elements/knockback.dm index c8f06efa430e..077fc1fb299d 100644 --- a/code/datums/elements/knockback.dm +++ b/code/datums/elements/knockback.dm @@ -30,7 +30,7 @@ return ..() /// triggered after an item attacks something -/datum/element/knockback/proc/item_afterattack(obj/item/source, atom/target, mob/user, click_parameters) +/datum/element/knockback/proc/item_afterattack(obj/item/source, atom/target, mob/user, list/modifiers) SIGNAL_HANDLER do_knockback(target, user, get_dir(source, target)) diff --git a/code/datums/elements/pet_bonus.dm b/code/datums/elements/pet_bonus.dm index 5ef8b515077a..e0d3c3387b67 100644 --- a/code/datums/elements/pet_bonus.dm +++ b/code/datums/elements/pet_bonus.dm @@ -32,7 +32,7 @@ if(pet.stat != CONSCIOUS || petter.combat_mode || LAZYACCESS(modifiers, RIGHT_CLICK)) return - new /obj/effect/temp_visual/heart(pet.loc) + new /obj/effect/temp_visual/heart(get_turf(pet)) SEND_SIGNAL(pet, COMSIG_ANIMAL_PET, petter, modifiers) if(emote_message && prob(33)) pet.manual_emote(emote_message) diff --git a/code/datums/elements/relay_attackers.dm b/code/datums/elements/relay_attackers.dm index a6c319d7bc9b..ae63e2b86d53 100644 --- a/code/datums/elements/relay_attackers.dm +++ b/code/datums/elements/relay_attackers.dm @@ -33,10 +33,8 @@ )) REMOVE_TRAIT(source, TRAIT_RELAYING_ATTACKER, REF(src)) -/datum/element/relay_attackers/proc/after_attackby(atom/target, obj/item/weapon, mob/attacker, proximity_flag, click_parameters) +/datum/element/relay_attackers/proc/after_attackby(atom/target, obj/item/weapon, mob/attacker, list/modifiers) SIGNAL_HANDLER - if(!proximity_flag) // we don't care about someone clicking us with a piece of metal from across the room - return if(weapon.force) relay_attacker(target, attacker, weapon.damtype == STAMINA ? ATTACKER_STAMINA_ATTACK : ATTACKER_DAMAGING_ATTACK) diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm index 004724c4e66a..a399a03e56f7 100644 --- a/code/datums/holocall.dm +++ b/code/datums/holocall.dm @@ -238,9 +238,9 @@ QDEL_NULL(record) return ..() -/obj/item/disk/holodisk/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/disk/holodisk)) - var/obj/item/disk/holodisk/holodiskOriginal = W +/obj/item/disk/holodisk/attackby(obj/item/item, mob/user, list/modifiers) + if(istype(item, /obj/item/disk/holodisk)) + var/obj/item/disk/holodisk/holodiskOriginal = item if (holodiskOriginal.record) if (!record) record = new diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm index 8a449bbf6932..1728182c579c 100644 --- a/code/datums/martial/cqc.dm +++ b/code/datums/martial/cqc.dm @@ -25,7 +25,7 @@ return ..() ///Signal from getting attacked with an item, for a special interaction with touch spells -/datum/martial_art/cqc/proc/on_attackby(mob/living/cqc_user, obj/item/attack_weapon, mob/attacker, params) +/datum/martial_art/cqc/proc/on_attackby(mob/living/cqc_user, obj/item/attack_weapon, mob/attacker, list/modifiers) SIGNAL_HANDLER if(!istype(attack_weapon, /obj/item/melee/touch_attack)) diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 3ba2b55bdd42..e20a8e7050ef 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -211,7 +211,7 @@ return COMPONENT_BULLET_PIERCED ///Signal from getting attacked with an item, for a special interaction with touch spells -/datum/martial_art/the_sleeping_carp/proc/on_attackby(mob/living/carp_user, obj/item/attack_weapon, mob/attacker, params) +/datum/martial_art/the_sleeping_carp/proc/on_attackby(mob/living/carp_user, obj/item/attack_weapon, mob/attacker, list/modifiers) SIGNAL_HANDLER if(!istype(attack_weapon, /obj/item/melee/touch_attack)) @@ -273,7 +273,7 @@ icon_state = "[base_icon_state]0" return ..() -/obj/item/staff/bostaff/attack(mob/target, mob/living/user, params) +/obj/item/staff/bostaff/attack(mob/target, mob/living/user, list/modifiers) add_fingerprint(user) if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50)) to_chat(user, span_warning("You club yourself over the head with [src].")) @@ -292,7 +292,6 @@ if(C.stat) to_chat(user, span_warning("It would be dishonorable to attack a foe while they cannot retaliate.")) return - var/list/modifiers = params2list(params) if(LAZYACCESS(modifiers, RIGHT_CLICK)) if(!HAS_TRAIT(src, TRAIT_WIELDED)) return ..() diff --git a/code/datums/memory/tattoo_kit.dm b/code/datums/memory/tattoo_kit.dm index 98d47eaa285d..415a61996133 100644 --- a/code/datums/memory/tattoo_kit.dm +++ b/code/datums/memory/tattoo_kit.dm @@ -17,7 +17,7 @@ . += span_notice("This kit has enough ink for [uses] use\s.") . += span_boldnotice("You can use a toner cartridge to refill this.") -/obj/item/tattoo_kit/attackby(obj/item/toner/ink_cart, mob/living/tattoo_artist, params) +/obj/item/tattoo_kit/attackby(obj/item/toner/ink_cart, mob/living/tattoo_artist, list/modifiers) . = ..() if(!istype(ink_cart)) return @@ -29,7 +29,7 @@ qdel(ink_cart) balloon_alert(tattoo_artist, "added tattoo ink") -/obj/item/tattoo_kit/attack(mob/living/tattoo_holder, mob/living/tattoo_artist, params) +/obj/item/tattoo_kit/attack(mob/living/tattoo_holder, mob/living/tattoo_artist, list/modifiers) . = ..() if(.) return TRUE diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm index b4bb2c6445d3..3daa5c6368a1 100644 --- a/code/datums/storage/storage.dm +++ b/code/datums/storage/storage.dm @@ -674,7 +674,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) thing.emp_act(severity) /// Signal handler for preattack from an object. -/datum/storage/proc/on_preattack(datum/source, obj/item/thing, mob/user, params) +/datum/storage/proc/on_preattack(datum/source, obj/item/thing, mob/user, list/modifiers) SIGNAL_HANDLER if(!istype(thing) || !allow_quick_gather || thing.atom_storage) diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index 679a3182a57c..82e6c5da2cc3 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -109,7 +109,7 @@ power_change() return ITEM_INTERACT_SUCCESS -/obj/machinery/pdapainter/attackby(obj/item/O, mob/living/user, params) +/obj/machinery/pdapainter/attackby(obj/item/O, mob/living/user, list/modifiers) if(machine_stat & BROKEN) if(O.tool_behaviour == TOOL_WELDER && !user.combat_mode) if(!O.tool_start_check(user, amount=1)) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 5dbf4296cf79..9fca4aea378d 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -796,13 +796,13 @@ return attack_robot(user) return _try_interact(user) -/obj/machinery/attackby(obj/item/weapon, mob/user, params) +/obj/machinery/attackby(obj/item/weapon, mob/user, list/modifiers) . = ..() if(.) return update_last_used(user) -/obj/machinery/attackby_secondary(obj/item/weapon, mob/user, params) +/obj/machinery/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) . = ..() if(.) return diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm index 40670a22f44c..f3868aeb24c1 100644 --- a/code/game/machinery/bank_machine.dm +++ b/code/game/machinery/bank_machine.dm @@ -43,7 +43,7 @@ synced_bank_account = null return ..() -/obj/machinery/computer/bank_machine/attackby(obj/item/weapon, mob/user, params) +/obj/machinery/computer/bank_machine/attackby(obj/item/weapon, mob/user, list/modifiers) var/value = 0 if(istype(weapon, /obj/item/stack/spacecash)) var/obj/item/stack/spacecash/inserted_cash = weapon diff --git a/code/game/machinery/camera/camera_construction.dm b/code/game/machinery/camera/camera_construction.dm index 3c3e400f7ed5..9f7403283f9a 100644 --- a/code/game/machinery/camera/camera_construction.dm +++ b/code/game/machinery/camera/camera_construction.dm @@ -119,7 +119,7 @@ return ITEM_INTERACT_SUCCESS return ..() -/obj/machinery/camera/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/machinery/camera/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(camera_construction_state != CAMERA_STATE_FINISHED || panel_open) if(attacking_item.tool_behaviour == TOOL_ANALYZER) if(!isXRay(TRUE)) //don't reveal it was already upgraded if was done via MALF AI Upgrade Camera Network ability diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 412c929420f6..296c6cc900d7 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -41,7 +41,7 @@ update_appearance() return ITEM_INTERACT_SUCCESS -/obj/machinery/cell_charger/attackby(obj/item/W, mob/user, params) +/obj/machinery/cell_charger/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/stock_parts/power_store/cell) && !panel_open) if(machine_stat & BROKEN) to_chat(user, span_warning("[src] is broken!")) diff --git a/code/game/machinery/civilian_bounties.dm b/code/game/machinery/civilian_bounties.dm index d502ed3e8c6c..a56b00e9a51d 100644 --- a/code/game/machinery/civilian_bounties.dm +++ b/code/game/machinery/civilian_bounties.dm @@ -47,7 +47,7 @@ ///Typecast of an inserted, scanned ID card inside the console, as bounties are held within the ID card. var/obj/item/card/id/inserted_scan_id -/obj/machinery/computer/piratepad_control/civilian/attackby(obj/item/I, mob/living/user, params) +/obj/machinery/computer/piratepad_control/civilian/attackby(obj/item/I, mob/living/user, list/modifiers) if(isidcard(I)) if(id_insert(user, I, inserted_scan_id)) inserted_scan_id = I diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index e8673cc8bf7b..37ca7af73f9f 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -113,7 +113,7 @@ return TRUE return authenticated -/obj/machinery/computer/communications/attackby(obj/I, mob/user, params) +/obj/machinery/computer/communications/attackby(obj/I, mob/user, list/modifiers) if(isidcard(I)) attack_hand(user) else diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index c28e915c6cab..545de429de21 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -172,7 +172,7 @@ genetic_damage_pulse() return -/obj/machinery/computer/scan_consolenew/attackby(obj/item/item, mob/user, params) +/obj/machinery/computer/scan_consolenew/attackby(obj/item/item, mob/user, list/modifiers) // Store chromosomes in the console if there's room if (istype(item, /obj/item/chromosome)) item.forceMove(src) diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index 423633d31ac3..37d05870c520 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -12,7 +12,7 @@ log_silicon("\A [name] was created at [loc_name(src)].") message_admins("\A [name] was created at [ADMIN_VERBOSEJMP(src)].") -/obj/machinery/computer/upload/attackby(obj/item/O, mob/user, params) +/obj/machinery/computer/upload/attackby(obj/item/O, mob/user, list/modifiers) if(istype(O, /obj/item/ai_module)) var/obj/item/ai_module/M = O if(machine_stat & (NOPOWER|BROKEN|MAINT)) diff --git a/code/game/machinery/computer/orders/order_computer/mining_order.dm b/code/game/machinery/computer/orders/order_computer/mining_order.dm index cc9b189d79f2..a0f8b96ff407 100644 --- a/code/game/machinery/computer/orders/order_computer/mining_order.dm +++ b/code/game/machinery/computer/orders/order_computer/mining_order.dm @@ -155,7 +155,7 @@ . = ..() . += span_notice("There's [points] point\s on the card.") -/obj/item/card/mining_point_card/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/card/mining_point_card/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(!isidcard(attacking_item)) return ..() var/obj/item/card/id/attacking_id = attacking_item diff --git a/code/game/machinery/computer/prisoner/_prisoner.dm b/code/game/machinery/computer/prisoner/_prisoner.dm index 9777c1b209cd..37bc1ce69c69 100644 --- a/code/game/machinery/computer/prisoner/_prisoner.dm +++ b/code/game/machinery/computer/prisoner/_prisoner.dm @@ -50,7 +50,7 @@ balloon_alert_to_viewers("id ejected") playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) -/obj/machinery/computer/prisoner/attackby(obj/item/weapon, mob/user, params) +/obj/machinery/computer/prisoner/attackby(obj/item/weapon, mob/user, list/modifiers) if(istype(weapon, /obj/item/card/id/advanced/prisoner)) id_insert(user, weapon) return TRUE diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm index 53d824fdc77f..39866b74ac35 100644 --- a/code/game/machinery/defibrillator_mount.dm +++ b/code/game/machinery/defibrillator_mount.dm @@ -83,7 +83,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/defibrillator_mount, 28) return user.put_in_hands(defib.paddles) -/obj/machinery/defibrillator_mount/attackby(obj/item/I, mob/living/user, params) +/obj/machinery/defibrillator_mount/attackby(obj/item/I, mob/living/user, list/modifiers) if(istype(I, /obj/item/defibrillator)) if(defib) to_chat(user, span_warning("There's already a defibrillator in [src]!")) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 55940a02f19d..788b7ba4fd4d 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -26,7 +26,7 @@ return -/obj/structure/barricade/attackby(obj/item/I, mob/living/user, params) +/obj/structure/barricade/attackby(obj/item/I, mob/living/user, list/modifiers) if(I.tool_behaviour == TOOL_WELDER && !user.combat_mode && bar_material == METAL) if(atom_integrity < max_integrity) if(!I.tool_start_check(user, amount=1)) diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm index 74ca492657b6..06dea01b66c7 100644 --- a/code/game/machinery/dish_drive.dm +++ b/code/game/machinery/dish_drive.dm @@ -83,7 +83,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/dish_drive/attackby(obj/item/dish, mob/living/user, params) +/obj/machinery/dish_drive/attackby(obj/item/dish, mob/living/user, list/modifiers) if(is_type_in_list(dish, collectable_items) && !user.combat_mode) if(!user.transferItemToLoc(dish, src)) return diff --git a/code/game/machinery/dna_infuser/dna_infuser.dm b/code/game/machinery/dna_infuser/dna_infuser.dm index 9fac4aac9ede..306b3034c664 100644 --- a/code/game/machinery/dna_infuser/dna_infuser.dm +++ b/code/game/machinery/dna_infuser/dna_infuser.dm @@ -210,7 +210,7 @@ //we set drop to false to manually call it with an allowlist dump_inventory_contents(list(occupant)) -/obj/machinery/dna_infuser/attackby(obj/item/used, mob/user, params) +/obj/machinery/dna_infuser/attackby(obj/item/used, mob/user, list/modifiers) if(infusing) return if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, used))//sent icon_state is irrelevant... diff --git a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm index 42ec94c34bef..f854b6686a0a 100644 --- a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm @@ -128,7 +128,7 @@ . = ..() . += "You can use your tendril hammer arm to deliver a devastating blow against mining fauna, but only once every two seconds." -/obj/item/goliath_infuser_hammer/attack(mob/living/target, mob/living/carbon/human/user, click_parameters) +/obj/item/goliath_infuser_hammer/attack(mob/living/target, mob/living/carbon/human/user, list/modifiers) . = ..() //If we're on cooldown, we'll do a normal attack. diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index 0ed9bd4a0103..1ea07dd09f60 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -125,16 +125,16 @@ return open_machine() -/obj/machinery/dna_scannernew/attackby(obj/item/I, mob/user, params) +/obj/machinery/dna_scannernew/attackby(obj/item/item, mob/user, list/modifiers) - if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, I))//sent icon_state is irrelevant... + if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, item))//sent icon_state is irrelevant... update_appearance()//..since we're updating the icon here, since the scanner can be unpowered when opened/closed return - if(default_pry_open(I, close_after_pry = FALSE, open_density = FALSE, closed_density = TRUE)) + if(default_pry_open(item, close_after_pry = FALSE, open_density = FALSE, closed_density = TRUE)) return - if(default_deconstruction_crowbar(I)) + if(default_deconstruction_crowbar(item)) return return ..() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index a83454b681e4..c5b0ab15efe2 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1004,7 +1004,7 @@ update_appearance() return TRUE -/obj/machinery/door/airlock/attackby(obj/item/C, mob/user, params) +/obj/machinery/door/airlock/attackby(obj/item/C, mob/user, list/modifiers) if(!issilicon(user) && !isAdminGhostAI(user)) if(isElectrified() && (C.obj_flags & CONDUCTS_ELECTRICITY) && shock(user, 75)) return diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 7d066f5006d7..4d0a55bc1758 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -363,7 +363,7 @@ try_to_crowbar(tool, user, forced_open) return ITEM_INTERACT_SUCCESS -/obj/machinery/door/attackby(obj/item/weapon, mob/living/user, params) +/obj/machinery/door/attackby(obj/item/weapon, mob/living/user, list/modifiers) if(istype(weapon, /obj/item/access_key)) var/obj/item/access_key/key = weapon return key.attempt_open_door(user, src) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index f2c84e2341a9..566041c62ccb 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -302,7 +302,7 @@ /obj/machinery/firealarm/attack_robot_secondary(mob/user) return attack_hand_secondary(user) -/obj/machinery/firealarm/attackby(obj/item/tool, mob/living/user, params) +/obj/machinery/firealarm/attackby(obj/item/tool, mob/living/user, list/modifiers) add_fingerprint(user) if(tool.tool_behaviour == TOOL_SCREWDRIVER && buildstage == FIRE_ALARM_BUILD_SECURED) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 5800e452721a..53070b6aa0f7 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -62,7 +62,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/flasher, 26) return ..() //Don't want to render prison breaks impossible -/obj/machinery/flasher/attackby(obj/item/attacking_item, mob/user, params) +/obj/machinery/flasher/attackby(obj/item/attacking_item, mob/user, list/modifiers) add_fingerprint(user) if (attacking_item.tool_behaviour == TOOL_WIRECUTTER) if (bulb) @@ -185,7 +185,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/flasher, 26) if(vname == NAMEOF(src, flash_range)) proximity_monitor?.set_range(flash_range) -/obj/machinery/flasher/portable/attackby(obj/item/attacking_item, mob/user, params) +/obj/machinery/flasher/portable/attackby(obj/item/attacking_item, mob/user, list/modifiers) if (attacking_item.tool_behaviour == TOOL_WRENCH) attacking_item.play_tool_sound(src, 100) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index fc1cacae8f81..c0619a2dbbfc 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -254,24 +254,24 @@ Possible to do for anyone motivated enough: if(record_mode) record_stop() -/obj/machinery/holopad/attackby(obj/item/P, mob/user, params) - if(default_deconstruction_screwdriver(user, "holopad_open", "holopad0", P)) +/obj/machinery/holopad/attackby(obj/item/item, mob/user, list/modifiers) + if(default_deconstruction_screwdriver(user, "holopad_open", "holopad0", item)) return - if(default_pry_open(P, close_after_pry = TRUE, closed_density = FALSE)) + if(default_pry_open(item, close_after_pry = TRUE, closed_density = FALSE)) return - if(default_deconstruction_crowbar(P)) + if(default_deconstruction_crowbar(item)) return - if(istype(P,/obj/item/disk/holodisk)) + if(istype(item, /obj/item/disk/holodisk)) if(disk) to_chat(user,span_warning("There's already a disk inside [src]!")) return - if (!user.transferItemToLoc(P,src)) + if (!user.transferItemToLoc(item, src)) return - to_chat(user,span_notice("You insert [P] into [src].")) - disk = P + to_chat(user,span_notice("You insert [item] into [src].")) + disk = item return return ..() diff --git a/code/game/machinery/hypnochair.dm b/code/game/machinery/hypnochair.dm index f8f3ed49be59..492e7d8430b4 100644 --- a/code/game/machinery/hypnochair.dm +++ b/code/game/machinery/hypnochair.dm @@ -27,13 +27,13 @@ open_machine() update_appearance() -/obj/machinery/hypnochair/attackby(obj/item/I, mob/user, params) - if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, I)) +/obj/machinery/hypnochair/attackby(obj/item/item, mob/user, list/modifiers) + if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, item)) update_appearance() return - if(default_pry_open(I)) + if(default_pry_open(item)) return - if(default_deconstruction_crowbar(I)) + if(default_deconstruction_crowbar(item)) return return ..() diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 99b4fbdb0f0e..1df0936efbc1 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -179,7 +179,7 @@ user.visible_message(span_warning("[user] attaches [src] to [target]."), span_notice("You attach [src] to [target].")) attach_iv(target, user) -/obj/machinery/iv_drip/attackby(obj/item/W, mob/user, params) +/obj/machinery/iv_drip/attackby(obj/item/item, mob/user, list/modifiers) if(use_internal_storage) return ..() @@ -190,15 +190,15 @@ /obj/item/reagent_containers/chem_pack, )) - if(is_type_in_typecache(W, drip_containers) || IS_EDIBLE(W)) + if(is_type_in_typecache(item, drip_containers) || IS_EDIBLE(item)) if(reagent_container) to_chat(user, span_warning("[reagent_container] is already loaded on [src]!")) return - if(!user.transferItemToLoc(W, src)) + if(!user.transferItemToLoc(item, src)) return - reagent_container = W - to_chat(user, span_notice("You attach [W] to [src].")) - user.log_message("attached a [W] to [src] at [AREACOORD(src)] containing ([reagent_container.reagents.get_reagent_log_string()])", LOG_ATTACK) + reagent_container = item + to_chat(user, span_notice("You attach [item] to [src].")) + user.log_message("attached a [item] to [src] at [AREACOORD(src)] containing ([reagent_container.reagents.get_reagent_log_string()])", LOG_ATTACK) add_fingerprint(user) update_appearance(UPDATE_ICON) return diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index 0f469a766d41..77d5c1b0eb48 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -75,7 +75,7 @@ balloon_alert(user, "saved to buffer") return ITEM_INTERACT_SUCCESS -/obj/machinery/launchpad/attackby(obj/item/weapon, mob/user, params) +/obj/machinery/launchpad/attackby(obj/item/weapon, mob/user, list/modifiers) if(!stationary) return ..() @@ -312,13 +312,13 @@ closed = TRUE update_indicator() -/obj/machinery/launchpad/briefcase/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/launchpad_remote)) - var/obj/item/launchpad_remote/L = I - if(L.pad == WEAKREF(src)) //do not attempt to link when already linked +/obj/machinery/launchpad/briefcase/attackby(obj/item/item, mob/user, list/modifiers) + if(istype(item, /obj/item/launchpad_remote)) + var/obj/item/launchpad_remote/launch = item + if(launch.pad == WEAKREF(src)) //do not attempt to link when already linked return ..() - L.pad = WEAKREF(src) - to_chat(user, span_notice("You link [src] to [L].")) + launch.pad = WEAKREF(src) + to_chat(user, span_notice("You link [src] to [launch].")) else return ..() diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index 401245613e1b..57727a43068f 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -54,16 +54,16 @@ O.throw_at(target, drive_range * power, power) flick("mass_driver1", src) -/obj/machinery/mass_driver/attackby(obj/item/I, mob/living/user, params) +/obj/machinery/mass_driver/attackby(obj/item/item, mob/living/user, list/modifiers) - if(is_wire_tool(I) && panel_open) + if(is_wire_tool(item) && panel_open) wires.interact(user) return - if(default_deconstruction_screwdriver(user, "mass_driver_o", "mass_driver", I)) + if(default_deconstruction_screwdriver(user, "mass_driver_o", "mass_driver", item)) return - if(default_change_direction_wrench(user, I)) + if(default_change_direction_wrench(user, item)) return - if(default_deconstruction_crowbar(I)) + if(default_deconstruction_crowbar(item)) return return ..() diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm index 56dec7a3e2bb..bddf742b5622 100644 --- a/code/game/machinery/medical_kiosk.dm +++ b/code/game/machinery/medical_kiosk.dm @@ -117,7 +117,7 @@ active_price = board.custom_cost return -/obj/machinery/medical_kiosk/attackby(obj/item/O, mob/user, params) +/obj/machinery/medical_kiosk/attackby(obj/item/O, mob/user, list/modifiers) if(default_deconstruction_screwdriver(user, "[base_icon_state]_open", "[base_icon_state]_off", O)) return else if(default_deconstruction_crowbar(O)) diff --git a/code/game/machinery/modular_shield.dm b/code/game/machinery/modular_shield.dm index 19aa7c3c8b34..8c4cd22ced7c 100644 --- a/code/game/machinery/modular_shield.dm +++ b/code/game/machinery/modular_shield.dm @@ -143,7 +143,7 @@ if(default_deconstruction_crowbar(tool)) return TRUE -/obj/machinery/modular_shield_generator/attackby(obj/item/W, mob/user, params) +/obj/machinery/modular_shield_generator/attackby(obj/item/W, mob/user, list/modifiers) if(is_wire_tool(W) && panel_open) wires.interact(user) diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 5caa41d90890..7b48d21c711d 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -115,7 +115,7 @@ return TRUE return default_deconstruction_screwdriver(user, "navbeacon1","navbeacon0",tool) -/obj/machinery/navbeacon/attackby(obj/item/attacking_item, mob/user, params) +/obj/machinery/navbeacon/attackby(obj/item/attacking_item, mob/user, list/modifiers) var/turf/our_turf = loc if(our_turf.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) return // prevent intraction when T-scanner revealed diff --git a/code/game/machinery/nebula_shielding.dm b/code/game/machinery/nebula_shielding.dm index cd10a23150c8..fc423cc6d764 100644 --- a/code/game/machinery/nebula_shielding.dm +++ b/code/game/machinery/nebula_shielding.dm @@ -109,7 +109,7 @@ if(isopenturf(turf)) turf.atmos_spawn_air("[GAS_TRITIUM]=1;[TURF_TEMPERATURE(T20C)]") -/obj/machinery/nebula_shielding/radiation/attackby(obj/item/item, mob/user, params) +/obj/machinery/nebula_shielding/radiation/attackby(obj/item/item, mob/user, list/modifiers) if(default_deconstruction_screwdriver(user, initial(icon_state) + "_open", initial(icon_state), item)) return diff --git a/code/game/machinery/newscaster/newscaster_machine.dm b/code/game/machinery/newscaster/newscaster_machine.dm index 8205b4781cdc..c74ff1948272 100644 --- a/code/game/machinery/newscaster/newscaster_machine.dm +++ b/code/game/machinery/newscaster/newscaster_machine.dm @@ -490,7 +490,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) . = ..() update_appearance() -/obj/machinery/newscaster/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/machinery/newscaster/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(istype(attacking_item, /obj/item/paper)) if(!user.temporarilyRemoveItemFromInventory(attacking_item)) return diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index eb5b499bce79..c421f90bbe5b 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -151,7 +151,7 @@ ui = new(user, src, "PipeDispenser", name) ui.open() -/obj/machinery/pipedispenser/attackby(obj/item/W, mob/user, params) +/obj/machinery/pipedispenser/attackby(obj/item/W, mob/user, list/modifiers) add_fingerprint(user) if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter)) to_chat(usr, span_notice("You put [W] back into [src].")) diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index e51059657126..93ef14f0cce2 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -324,7 +324,7 @@ DEFINE_BITFIELD(turret_flags, list( balloon_alert(user, "saved to multitool buffer") return ITEM_INTERACT_SUCCESS -/obj/machinery/porta_turret/attackby(obj/item/I, mob/user, params) +/obj/machinery/porta_turret/attackby(obj/item/I, mob/user, list/modifiers) if(machine_stat & BROKEN) if(I.tool_behaviour == TOOL_CROWBAR) //If the turret is destroyed, you can remove it with a crowbar to @@ -979,7 +979,7 @@ DEFINE_BITFIELD(turret_flags, list( to_chat(user, span_notice("You link \the [multi_tool.buffer] with \the [src].")) return ITEM_INTERACT_SUCCESS -/obj/machinery/turretid/attackby(obj/item/attacking_item, mob/user, params) +/obj/machinery/turretid/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(machine_stat & BROKEN) return diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm index a8fa4e67b2bf..2711923259b0 100644 --- a/code/game/machinery/porta_turret/portable_turret_construct.dm +++ b/code/game/machinery/porta_turret/portable_turret_construct.dm @@ -40,7 +40,7 @@ if(PTURRET_START_EXTERNAL_ARMOUR) . += span_notice("The turret's armor needs to be welded in place, the armor looks like it could be pried off.") -/obj/machinery/porta_turret_construct/attackby(obj/item/used, mob/user, params) +/obj/machinery/porta_turret_construct/attackby(obj/item/used, mob/user, list/modifiers) //this is a bit unwieldy but self-explanatory switch(build_step) if(PTURRET_UNSECURED) //first step diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm index ad3111b330bd..dd950a00a4a2 100644 --- a/code/game/machinery/porta_turret/portable_turret_cover.dm +++ b/code/game/machinery/porta_turret/portable_turret_cover.dm @@ -45,7 +45,7 @@ balloon_alert(user, "saved to multitool buffer") return ITEM_INTERACT_SUCCESS -/obj/machinery/porta_turret_cover/attackby(obj/item/I, mob/user, params) +/obj/machinery/porta_turret_cover/attackby(obj/item/I, mob/user, list/modifiers) if(I.tool_behaviour == TOOL_WRENCH && !parent_turret.on) if(parent_turret.raised) return diff --git a/code/game/machinery/prisonlabor.dm b/code/game/machinery/prisonlabor.dm index aaf1e6a342ea..e226adcbbc5e 100644 --- a/code/game/machinery/prisonlabor.dm +++ b/code/game/machinery/prisonlabor.dm @@ -26,7 +26,7 @@ QDEL_NULL(current_plate) . = ..() -/obj/machinery/plate_press/attackby(obj/item/I, mob/living/user, params) +/obj/machinery/plate_press/attackby(obj/item/I, mob/living/user, list/modifiers) if(!is_operational) to_chat(user, span_warning("[src] has to be on to do this!")) return FALSE diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index f5f5851b7586..b42fcc45f764 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -71,7 +71,7 @@ balloon_alert(user, "no quantum pad data found!") return NONE -/obj/machinery/quantumpad/attackby(obj/item/weapon, mob/user, params) +/obj/machinery/quantumpad/attackby(obj/item/weapon, mob/user, list/modifiers) if(default_deconstruction_screwdriver(user, "qpad-idle-open", "qpad-idle", weapon)) return diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 21de0b4c3e34..7a71e248b7e5 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -77,7 +77,7 @@ update_appearance() return ..() -/obj/machinery/recharger/attackby(obj/item/attacking_item, mob/user, params) +/obj/machinery/recharger/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(!is_type_in_typecache(attacking_item, allowed_devices)) return ..() diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 6408f99a2af7..c5d6d083a000 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -106,7 +106,7 @@ if (!(. & EMP_PROTECT_SELF)) open_machine() -/obj/machinery/recharge_station/attackby(obj/item/P, mob/user, params) +/obj/machinery/recharge_station/attackby(obj/item/P, mob/user, list/modifiers) if(state_open) if(default_deconstruction_screwdriver(user, "borgdecon2", "borgcharger0", P)) return diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 809f23bf4820..9ce3b5796d4c 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -385,7 +385,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) to_chat(user, span_warning("You must open the maintenance panel first!")) return TRUE -/obj/machinery/requests_console/attackby(obj/item/attacking_item, mob/user, params) +/obj/machinery/requests_console/attackby(obj/item/attacking_item, mob/user, list/modifiers) var/obj/item/card/id/ID = attacking_item.GetID() if(ID) message_verified_by = "[ID.registered_name] ([ID.assignment])" diff --git a/code/game/machinery/roulette_machine.dm b/code/game/machinery/roulette_machine.dm index 88d2b2136b1f..fa01c07e12bf 100644 --- a/code/game/machinery/roulette_machine.dm +++ b/code/game/machinery/roulette_machine.dm @@ -117,7 +117,7 @@ update_appearance() // Not applicable to all objects. ///Handles setting ownership and the betting itself. -/obj/machinery/roulette/attackby(obj/item/W, mob/user, params) +/obj/machinery/roulette/attackby(obj/item/W, mob/user, list/modifiers) if(machine_stat & MAINT && is_wire_tool(W)) wires.interact(user) return diff --git a/code/game/machinery/scanner_gate.dm b/code/game/machinery/scanner_gate.dm index c56093a295ae..0b041152b284 100644 --- a/code/game/machinery/scanner_gate.dm +++ b/code/game/machinery/scanner_gate.dm @@ -155,7 +155,7 @@ return ITEM_INTERACT_SUCCESS return NONE -/obj/machinery/scanner_gate/attackby(obj/item/attacking_item, mob/user, params) +/obj/machinery/scanner_gate/attackby(obj/item/attacking_item, mob/user, list/modifiers) var/obj/item/card/id/card = attacking_item.GetID() if(card) if(locked) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 6c8cad235663..d2e941bb4141 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -236,7 +236,7 @@ set_anchored(FALSE) -/obj/machinery/shieldgen/attackby(obj/item/W, mob/user, params) +/obj/machinery/shieldgen/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/stack/cable_coil) && (machine_stat & BROKEN) && panel_open) var/obj/item/stack/cable_coil/coil = W if (coil.get_amount() < 1) @@ -460,7 +460,7 @@ return return default_deconstruction_crowbar(tool) -/obj/machinery/power/shieldwallgen/attackby(obj/item/W, mob/user, params) +/obj/machinery/power/shieldwallgen/attackby(obj/item/W, mob/user, list/modifiers) . = ..() if(W.GetID()) if(allowed(user) && !(obj_flags & EMAGGED)) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index d57977c77c6c..0f2948664ce9 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -197,7 +197,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/space_heater/attackby(obj/item/I, mob/user, params) +/obj/machinery/space_heater/attackby(obj/item/I, mob/user, list/modifiers) add_fingerprint(user) if(default_deconstruction_screwdriver(user, icon_state, icon_state, I)) @@ -398,7 +398,7 @@ . = TRUE ///Slightly modified to ignore the open_hatch - it's always open, we hacked it. -/obj/machinery/space_heater/improvised_chem_heater/attackby(obj/item/item, mob/user, params) +/obj/machinery/space_heater/improvised_chem_heater/attackby(obj/item/item, mob/user, list/modifiers) add_fingerprint(user) if(default_deconstruction_crowbar(item)) return diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 39e62f873199..62b92671d4ca 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -630,7 +630,7 @@ return TRUE -/obj/machinery/suit_storage_unit/attackby(obj/item/weapon, mob/user, params) +/obj/machinery/suit_storage_unit/attackby(obj/item/weapon, mob/user, list/modifiers) . = TRUE var/obj/item/card/id/id = null if(istype(weapon, /obj/item/stock_parts/card_reader) && can_install_card_reader(user)) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index e887a70509cb..3a64a23f36ac 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -193,7 +193,7 @@ return TRUE -/obj/machinery/syndicatebomb/attackby(obj/item/I, mob/user, params) +/obj/machinery/syndicatebomb/attackby(obj/item/I, mob/user, list/modifiers) if(is_wire_tool(I) && open_panel) wires.interact(user) @@ -511,7 +511,7 @@ playsound(loc, 'sound/effects/bamf.ogg', 75, TRUE, 5) -/obj/item/bombcore/chemical/attackby(obj/item/I, mob/user, params) +/obj/item/bombcore/chemical/attackby(obj/item/I, mob/user, list/modifiers) if(I.tool_behaviour == TOOL_CROWBAR && beakers.len > 0) I.play_tool_sound(src) for (var/obj/item/B in beakers) diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 6694bee1db24..85f8f53e8a4b 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -16,7 +16,7 @@ FREQ_CTF_BLUE, ) -/obj/machinery/telecomms/attackby(obj/item/attacking_item, mob/user, params) +/obj/machinery/telecomms/attackby(obj/item/attacking_item, mob/user, list/modifiers) var/icon_closed = initial(icon_state) var/icon_open = "[initial(icon_state)]_o" diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm index f4e0f4def527..ab849dd69232 100644 --- a/code/game/machinery/telecomms/machines/allinone.dm +++ b/code/game/machinery/telecomms/machines/allinone.dm @@ -45,6 +45,6 @@ sleep(signal.data["slow"]) // simulate the network lag if necessary signal.broadcast() -/obj/machinery/telecomms/allinone/attackby(obj/item/attacking_item, mob/user, params) +/obj/machinery/telecomms/allinone/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(attacking_item.tool_behaviour == TOOL_MULTITOOL) return attack_hand(user) diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index 78ccf9f45256..099445833939 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -34,7 +34,7 @@ to_chat(user, span_warning("It seems that the blackbox is missing...")) return -/obj/machinery/blackbox_recorder/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/machinery/blackbox_recorder/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(istype(attacking_item, /obj/item/blackbox)) if(HAS_TRAIT(attacking_item, TRAIT_NODROP) || !user.transferItemToLoc(attacking_item, src)) to_chat(user, span_warning("[attacking_item] is stuck to your hand!")) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index c46f6b351543..af4f4a685aab 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -52,7 +52,7 @@ if(is_ready()) teleport(AM) -/obj/machinery/teleport/hub/attackby(obj/item/W, mob/user, params) +/obj/machinery/teleport/hub/attackby(obj/item/W, mob/user, list/modifiers) if(default_deconstruction_screwdriver(user, "tele-o", "tele0", W)) if(power_station?.engaged) power_station.engaged = 0 //hub with panel open is off, so the station must be informed. @@ -179,7 +179,7 @@ balloon_alert(user, "data uploaded from buffer") return ITEM_INTERACT_SUCCESS -/obj/machinery/teleport/station/attackby(obj/item/W, mob/user, params) +/obj/machinery/teleport/station/attackby(obj/item/W, mob/user, list/modifiers) if(default_deconstruction_screwdriver(user, "controller-o", "controller", W)) update_appearance() return diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index 4e7f5123af4b..2306308c01a7 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -95,7 +95,7 @@ /obj/effect/decal/cleanable/proc/lazy_init_reagents() return -/obj/effect/decal/cleanable/attackby(obj/item/W, mob/user, params) +/obj/effect/decal/cleanable/attackby(obj/item/W, mob/user, list/modifiers) if((istype(W, /obj/item/reagent_containers/cup) && !istype(W, /obj/item/reagent_containers/cup/rag)) || istype(W, /obj/item/reagent_containers/cup/glass)) if(src.reagents && W.reagents) lazy_init_reagents() diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index 5781ffde3fa6..4da8b79bd336 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -500,7 +500,7 @@ . = ..() ignite() -/obj/effect/decal/cleanable/fuel_pool/attackby(obj/item/item, mob/user, params) +/obj/effect/decal/cleanable/fuel_pool/attackby(obj/item/item, mob/user, list/modifiers) if(item.ignition_effect(src, user)) ignite() return ..() diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm index 462f1e3d0189..715aa5e0f72f 100644 --- a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm +++ b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm @@ -335,7 +335,7 @@ to_chat(user, span_warning("You hit [src] but bounce off it!")) playsound(src.loc, 'sound/weapons/tap.ogg', 100, TRUE) -/obj/structure/foamedmetal/attackby(obj/item/W, mob/user, params) +/obj/structure/foamedmetal/attackby(obj/item/W, mob/user, list/modifiers) ///A speed modifier for how fast the wall is build var/platingmodifier = 1 if(HAS_TRAIT(user, TRAIT_QUICK_BUILD)) diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index 8e005e3d00ea..e2f7b952f1e3 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -10,8 +10,8 @@ blocks_emissive = EMISSIVE_BLOCK_GENERIC uses_integrity = FALSE -/obj/effect/attackby(obj/item/weapon, mob/user, params) - if(SEND_SIGNAL(weapon, COMSIG_ITEM_ATTACK_EFFECT, src, user, params) & COMPONENT_NO_AFTERATTACK) +/obj/effect/attackby(obj/item/weapon, mob/user, list/modifiers) + if(SEND_SIGNAL(weapon, COMSIG_ITEM_ATTACK_EFFECT, src, user, modifiers) & COMPONENT_NO_AFTERATTACK) return TRUE // I'm not sure why these are snowflaked to early return but they are diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 85907a906636..7a6524b92855 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -69,7 +69,7 @@ /obj/effect/portal/newtonian_move(direction, instant = FALSE, start_delay = 0) return TRUE -/obj/effect/portal/attackby(obj/item/W, mob/user, params) +/obj/effect/portal/attackby(obj/item/W, mob/user, list/modifiers) if(user && Adjacent(user)) teleport(user) return TRUE diff --git a/code/game/objects/effects/poster_demotivational.dm b/code/game/objects/effects/poster_demotivational.dm index 08e46b6af63b..0a92d53ea1d1 100644 --- a/code/game/objects/effects/poster_demotivational.dm +++ b/code/game/objects/effects/poster_demotivational.dm @@ -23,7 +23,7 @@ demoraliser = new(src, 7, TRUE, mood_category) return ..() -/obj/structure/sign/poster/traitor/attackby(obj/item/tool, mob/user, params) +/obj/structure/sign/poster/traitor/attackby(obj/item/tool, mob/user, list/modifiers) if (tool.tool_behaviour == TOOL_WIRECUTTER) QDEL_NULL(demoraliser) return ..() diff --git a/code/game/objects/effects/poster_motivational.dm b/code/game/objects/effects/poster_motivational.dm index 0e9444190af2..feafff150ba6 100644 --- a/code/game/objects/effects/poster_motivational.dm +++ b/code/game/objects/effects/poster_motivational.dm @@ -50,7 +50,7 @@ mood_buff = new(_host = src, range = 7, _ignore_if_not_on_turf = TRUE, department = quirk_poster_department) return ..() -/obj/structure/sign/poster/quirk/attackby(obj/item/I, mob/user, params) +/obj/structure/sign/poster/quirk/attackby(obj/item/I, mob/user, list/modifiers) if (I.tool_behaviour == TOOL_WIRECUTTER) QDEL_NULL(mood_buff) return ..() diff --git a/code/game/objects/effects/posters/poster.dm b/code/game/objects/effects/posters/poster.dm index 52533c04771e..4e1d0e39476f 100644 --- a/code/game/objects/effects/posters/poster.dm +++ b/code/game/objects/effects/posters/poster.dm @@ -55,7 +55,7 @@ name = "[name] - [poster_structure.original_name]" -/obj/item/poster/attackby(obj/item/I, mob/user, params) +/obj/item/poster/attackby(obj/item/I, mob/user, list/modifiers) if(!istype(I, /obj/item/shard)) return ..() @@ -175,7 +175,7 @@ desc = holi_data.poster_desc icon_state = holi_data.poster_icon -/obj/structure/sign/poster/attackby(obj/item/tool, mob/user, params) +/obj/structure/sign/poster/attackby(obj/item/tool, mob/user, list/modifiers) if(tool.tool_behaviour == TOOL_WIRECUTTER) tool.play_tool_sound(src, 100) if(ruined) diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 0fc190173e29..549c6253a7f5 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -555,7 +555,7 @@ playsound(loc, 'sound/weapons/egloves.ogg', vol = 80, vary = TRUE) end() -/obj/effect/constructing_effect/attackby(obj/item/weapon, mob/user, params) +/obj/effect/constructing_effect/attackby(obj/item/weapon, mob/user, list/modifiers) attacked(user) /obj/effect/constructing_effect/attack_hand(mob/living/user, list/modifiers) diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index 1e6c2b35ede2..bbf6e6576a68 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -79,7 +79,7 @@ pushed_over = FALSE tacticool = AddComponent(/datum/component/tactical) -/obj/item/cardboard_cutout/attackby(obj/item/I, mob/living/user, params) +/obj/item/cardboard_cutout/attackby(obj/item/I, mob/living/user, list/modifiers) if(istype(I, /obj/item/toy/crayon)) change_appearance(I, user) return TRUE diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index b19258a64da3..0aec740cac8a 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -324,7 +324,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM user.visible_message(span_suicide("[user] is huffing [src] as quickly as [user.p_they()] can! It looks like [user.p_theyre()] trying to give [user.p_them()]self cancer.")) return (TOXLOSS|OXYLOSS) -/obj/item/cigarette/attackby(obj/item/W, mob/user, params) +/obj/item/cigarette/attackby(obj/item/W, mob/user, list/modifiers) if(lit) return ..() @@ -844,7 +844,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM STOP_PROCESSING(SSobj, src) QDEL_NULL(cig_smoke) -/obj/item/cigarette/pipe/attackby(obj/item/thing, mob/user, params) +/obj/item/cigarette/pipe/attackby(obj/item/thing, mob/user, list/modifiers) if(!istype(thing, /obj/item/food/grown)) return ..() diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index cc98f5f52b0d..11281e2b20fa 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -201,7 +201,7 @@ skinhead.set_hairstyle("Skinhead", update = TRUE) playsound(loc, shave_sound, 33, TRUE) -/obj/item/razor/attack(mob/target_mob, mob/living/user, params) +/obj/item/razor/attack(mob/target_mob, mob/living/user, list/modifiers) if(!ishuman(target_mob)) return ..() var/mob/living/carbon/human/human_target = target_mob diff --git a/code/game/objects/items/courtroom.dm b/code/game/objects/items/courtroom.dm index 8baba2843143..9a68d4934bc8 100644 --- a/code/game/objects/items/courtroom.dm +++ b/code/game/objects/items/courtroom.dm @@ -33,7 +33,7 @@ w_class = WEIGHT_CLASS_TINY resistance_flags = FLAMMABLE -/obj/item/gavelblock/attackby(obj/item/I, mob/user, params) +/obj/item/gavelblock/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/gavelhammer)) playsound(loc, 'sound/items/gavel.ogg', 100, TRUE) user.visible_message(span_warning("[user] strikes [src] with [I].")) diff --git a/code/game/objects/items/crab17.dm b/code/game/objects/items/crab17.dm index 86edac48b72c..89d2c147fe50 100644 --- a/code/game/objects/items/crab17.dm +++ b/code/game/objects/items/crab17.dm @@ -64,7 +64,7 @@ return FALSE return TRUE -/obj/structure/checkoutmachine/attackby(obj/item/attacking_item, mob/user, params) +/obj/structure/checkoutmachine/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(!canwalk) balloon_alert(user, "not ready to accept transactions!") return diff --git a/code/game/objects/items/credit_holochip.dm b/code/game/objects/items/credit_holochip.dm index c7c56ec65d4a..c1fe7ef09f60 100644 --- a/code/game/objects/items/credit_holochip.dm +++ b/code/game/objects/items/credit_holochip.dm @@ -91,7 +91,7 @@ else return 0 -/obj/item/holochip/attackby(obj/item/I, mob/user, params) +/obj/item/holochip/attackby(obj/item/I, mob/user, list/modifiers) ..() if(istype(I, /obj/item/holochip)) var/obj/item/holochip/H = I diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 6f4fa3945144..06a90788569e 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -434,7 +434,7 @@ forceMove(defib) defib.update_power() -/obj/item/shockpaddles/attack(mob/M, mob/living/user, params) +/obj/item/shockpaddles/attack(mob/M, mob/living/user, list/modifiers) if(busy) return defib?.update_power() @@ -455,7 +455,6 @@ to_chat(user, span_warning("[src] are recharging!")) return - var/list/modifiers = params2list(params) if(LAZYACCESS(modifiers, RIGHT_CLICK)) do_disarm(M, user) return diff --git a/code/game/objects/items/devices/aicard_evil.dm b/code/game/objects/items/devices/aicard_evil.dm index 5bfff8bfcf61..9ccf95e70476 100644 --- a/code/game/objects/items/devices/aicard_evil.dm +++ b/code/game/objects/items/devices/aicard_evil.dm @@ -88,12 +88,12 @@ max_capacity = 1000 w_class = WEIGHT_CLASS_NORMAL -/obj/item/computer_disk/syndie_ai_upgrade/pre_attack(atom/A, mob/living/user, params) +/obj/item/computer_disk/syndie_ai_upgrade/pre_attack(atom/target, mob/living/user, list/modifiers) var/mob/living/silicon/ai/AI - if(isAI(A)) - AI = A + if(isAI(target)) + AI = target else - AI = locate() in A + AI = locate() in target if(!AI || AI.interaction_range == INFINITY) playsound(src,'sound/machines/buzz-sigh.ogg',50,FALSE) to_chat(user, span_notice("Error! Incompatible object!")) diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index 67576eba5617..a203cad87dcc 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -82,7 +82,7 @@ crystal_lens = null return ITEM_INTERACT_SUCCESS -/obj/item/laser_pointer/attackby(obj/item/attack_item, mob/user, params) +/obj/item/laser_pointer/attackby(obj/item/attack_item, mob/user, list/modifiers) if(istype(attack_item, /obj/item/stock_parts/micro_laser)) if(diode) balloon_alert(user, "already has a diode!") diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 2ee41dfdc184..b24086f6733a 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -82,7 +82,7 @@ //replace lights & stuff return do_action(interacting_with, user) ? ITEM_INTERACT_SUCCESS : NONE -/obj/item/lightreplacer/attackby(obj/item/insert, mob/user, params) +/obj/item/lightreplacer/attackby(obj/item/insert, mob/user, list/modifiers) . = ..() if(uses >= max_uses) user.balloon_alert(user, "already full!") diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 11dc85df34bc..c0154ee0b070 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -38,7 +38,7 @@ return return ..() -/obj/item/electropack/attackby(obj/item/W, mob/user, params) +/obj/item/electropack/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/clothing/head/helmet)) var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit(user) A.icon = 'icons/obj/devices/assemblies.dmi' diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 1c6097687067..120402da3bed 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -418,7 +418,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( tool.play_tool_sound(src, 10) return TRUE -/obj/item/radio/headset/attackby(obj/item/W, mob/user, params) +/obj/item/radio/headset/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/encryptionkey)) if(keyslot && keyslot2) to_chat(user, span_warning("The headset can't hold another key!")) diff --git a/code/game/objects/items/devices/swapper.dm b/code/game/objects/items/devices/swapper.dm index c4b0fd604dd4..72e957ec5721 100644 --- a/code/game/objects/items/devices/swapper.dm +++ b/code/game/objects/items/devices/swapper.dm @@ -29,7 +29,7 @@ icon_state = "swapper[linked_swapper ? "-linked" : null]" return ..() -/obj/item/swapper/attackby(obj/item/I, mob/user, params) +/obj/item/swapper/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/swapper)) var/obj/item/swapper/other_swapper = I if(other_swapper.linked_swapper) diff --git a/code/game/objects/items/devices/table_clock.dm b/code/game/objects/items/devices/table_clock.dm index 37c1098759e9..bf7625899346 100644 --- a/code/game/objects/items/devices/table_clock.dm +++ b/code/game/objects/items/devices/table_clock.dm @@ -33,7 +33,7 @@ . += span_info("The current CST (local) time is: [station_time_timestamp()].") . += span_info("The current TCT (galactic) time is: [time2text(world.realtime, "hh:mm:ss")].") -/obj/item/table_clock/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/table_clock/attackby(obj/item/attacking_item, mob/user, list/modifiers) . = ..() if(attacking_item.force < 5 || broken) return diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 0f1d76e35dca..4952a54cffe9 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -85,7 +85,7 @@ else soundloop.start() -/obj/item/taperecorder/attackby(obj/item/I, mob/user, params) +/obj/item/taperecorder/attackby(obj/item/I, mob/user, list/modifiers) if(!mytape && istype(I, /obj/item/tape)) if(!user.transferItemToLoc(I,src)) return diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 231ebc28e085..327fe285f1eb 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -380,7 +380,7 @@ effective or pretty fucking useless. return TRUE -/obj/machinery/porta_turret/syndicate/toolbox/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/machinery/porta_turret/syndicate/toolbox/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(!istype(attacking_item, /obj/item/wrench/combat)) return ..() diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm index 5c4366246ee5..efea199af6ea 100644 --- a/code/game/objects/items/dualsaber.dm +++ b/code/game/objects/items/dualsaber.dm @@ -208,7 +208,7 @@ /obj/item/dualsaber/purple possible_colors = list("purple") -/obj/item/dualsaber/attackby(obj/item/W, mob/user, params) +/obj/item/dualsaber/attackby(obj/item/W, mob/user, list/modifiers) if(W.tool_behaviour == TOOL_MULTITOOL) if(!hacked) hacked = TRUE diff --git a/code/game/objects/items/dyespray.dm b/code/game/objects/items/dyespray.dm index fc6685aaf6b2..4eeb916c14c1 100644 --- a/code/game/objects/items/dyespray.dm +++ b/code/game/objects/items/dyespray.dm @@ -8,7 +8,7 @@ /obj/item/dyespray/attack_self(mob/user) dye(user, user) -/obj/item/dyespray/pre_attack(atom/target, mob/living/user, params) +/obj/item/dyespray/pre_attack(atom/target, mob/living/user, list/modifiers) dye(target, user) return ..() diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index ce283a1426a7..ad681e0467df 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -169,7 +169,7 @@ else return ..() -/obj/item/extinguisher/attack_atom(obj/O, mob/living/user, params) +/obj/item/extinguisher/attack_atom(obj/O, mob/living/user, list/modifiers) if(AttemptRefill(O, user)) refilling = TRUE return FALSE @@ -300,7 +300,7 @@ user.visible_message(span_notice("[user] empties out \the [src] onto the floor using the release valve."), span_info("You quietly empty out \the [src] using its release valve.")) //firebot assembly -/obj/item/extinguisher/attackby(obj/O, mob/user, params) +/obj/item/extinguisher/attackby(obj/O, mob/user, list/modifiers) if(istype(O, /obj/item/bodypart/arm/left/robot) || istype(O, /obj/item/bodypart/arm/right/robot)) to_chat(user, span_notice("You add [O] to [src].")) qdel(O) diff --git a/code/game/objects/items/fireaxe.dm b/code/game/objects/items/fireaxe.dm index e9804096a82a..83b1118483c2 100644 --- a/code/game/objects/items/fireaxe.dm +++ b/code/game/objects/items/fireaxe.dm @@ -57,7 +57,7 @@ user.visible_message(span_suicide("[user] axes [user.p_them()]self from head to toe! It looks like [user.p_theyre()] trying to commit suicide!")) return BRUTELOSS -/obj/item/fireaxe/afterattack(atom/target, mob/user, click_parameters) +/obj/item/fireaxe/afterattack(atom/target, mob/user, list/modifiers) if(!HAS_TRAIT(src, TRAIT_WIELDED)) //destroys windows and grilles in one hit return if(target.resistance_flags & INDESTRUCTIBLE) diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index 80ec054aca08..b786cc6b3f19 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -117,7 +117,7 @@ update_appearance() return TRUE -/obj/item/flamethrower/attackby(obj/item/W, mob/user, params) +/obj/item/flamethrower/attackby(obj/item/W, mob/user, list/modifiers) if(isigniter(W)) var/obj/item/assembly/igniter/I = W if(I.secured) diff --git a/code/game/objects/items/food/egg.dm b/code/game/objects/items/food/egg.dm index df92f79b57e5..18206832b5ba 100644 --- a/code/game/objects/items/food/egg.dm +++ b/code/game/objects/items/food/egg.dm @@ -88,7 +88,7 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) new /mob/living/basic/chick(spawn_turf) GLOB.chicks_from_eggs++ -/obj/item/food/egg/attackby(obj/item/item, mob/user, params) +/obj/item/food/egg/attackby(obj/item/item, mob/user, list/modifiers) if(istype(item, /obj/item/toy/crayon)) var/obj/item/toy/crayon/crayon = item var/clr = crayon.crayon_color @@ -278,7 +278,7 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) venue_value = FOOD_PRICE_CHEAP crafting_complexity = FOOD_COMPLEXITY_2 -/obj/item/food/omelette/attackby(obj/item/item, mob/user, params) +/obj/item/food/omelette/attackby(obj/item/item, mob/user, list/modifiers) if(istype(item, /obj/item/kitchen/fork)) var/obj/item/kitchen/fork/fork = item if(fork.forkload) diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm index 43b60634914f..8f68fa028587 100644 --- a/code/game/objects/items/food/misc.dm +++ b/code/game/objects/items/food/misc.dm @@ -296,7 +296,7 @@ . = ..() . += span_notice("If you had a rod you could make butter on a stick.") -/obj/item/food/butter/attackby(obj/item/item, mob/user, params) +/obj/item/food/butter/attackby(obj/item/item, mob/user, list/modifiers) if(istype(item, /obj/item/stack/rods)) var/obj/item/stack/rods/rods = item if(!rods.use(1))//borgs can still fail this if they have no metal diff --git a/code/game/objects/items/food/pancakes.dm b/code/game/objects/items/food/pancakes.dm index b9578b2d5701..3e89427478eb 100644 --- a/code/game/objects/items/food/pancakes.dm +++ b/code/game/objects/items/food/pancakes.dm @@ -30,7 +30,7 @@ positive_result = TRUE,\ use_large_steam_sprite = TRUE) -/obj/item/food/pancakes/raw/attackby(obj/item/garnish, mob/living/user, params) +/obj/item/food/pancakes/raw/attackby(obj/item/garnish, mob/living/user, list/modifiers) var/newresult if(istype(garnish, /obj/item/food/grown/berries)) newresult = /obj/item/food/pancakes/blueberry @@ -117,7 +117,7 @@ ingredients_listed += "[ING.name], " . += "It contains [contents.len?"[ingredients_listed]":"no ingredient, "]on top of a [initial(name)]." -/obj/item/food/pancakes/attackby(obj/item/item, mob/living/user, params) +/obj/item/food/pancakes/attackby(obj/item/item, mob/living/user, list/modifiers) if(istype(item, /obj/item/food/pancakes)) var/obj/item/food/pancakes/pancake = item if((contents.len >= PANCAKE_MAX_STACK) || ((pancake.contents.len + contents.len) > PANCAKE_MAX_STACK)) @@ -140,7 +140,7 @@ return else if(contents.len) var/obj/O = contents[contents.len] - return O.attackby(item, user, params) + return O.attackby(item, user, modifiers) ..() /obj/item/food/pancakes/proc/update_snack_overlays(obj/item/food/pancakes/pancake) diff --git a/code/game/objects/items/grenades/festive.dm b/code/game/objects/items/grenades/festive.dm index e9acdd6cfd63..afb1eccb7024 100644 --- a/code/game/objects/items/grenades/festive.dm +++ b/code/game/objects/items/grenades/festive.dm @@ -14,7 +14,7 @@ /obj/item/sparkler/fire_act(exposed_temperature, exposed_volume) light() -/obj/item/sparkler/attackby(obj/item/item, mob/user, params) +/obj/item/sparkler/attackby(obj/item/item, mob/user, list/modifiers) var/ignition_msg = item.ignition_effect(src, user) if(ignition_msg) light(user, ignition_msg) @@ -75,7 +75,7 @@ /obj/item/grenade/firecracker/attack_self(mob/user) // You need to light it manually. return -/obj/item/grenade/firecracker/attackby(obj/item/item, mob/user, params) +/obj/item/grenade/firecracker/attackby(obj/item/item, mob/user, list/modifiers) var/ignition_msg = item.ignition_effect(src, user) if(ignition_msg && !active) visible_message(ignition_msg) diff --git a/code/game/objects/items/grenades/ghettobomb.dm b/code/game/objects/items/grenades/ghettobomb.dm index 9bc8c1c515f9..26f8ecdfab8e 100644 --- a/code/game/objects/items/grenades/ghettobomb.dm +++ b/code/game/objects/items/grenades/ghettobomb.dm @@ -48,7 +48,7 @@ effects[effect_type] += as_stack.amount else effects[effect_type]++ - break + break /obj/item/grenade/iedcasing/examine(mob/user) . = ..() @@ -131,7 +131,7 @@ update_icon(UPDATE_ICON_STATE) user.balloon_alert_to_viewers("arming!") COOLDOWN_START(src, spam_cd, 1 SECONDS) - + /obj/item/grenade/iedcasing/detonate(mob/living/lanced_by) //Blowing that can up if(effects[/obj/item/shard]) //this has to be before so it initializes us a pellet cloud or something shrapnel_radius = effects[/obj/item/shard] @@ -217,7 +217,7 @@ else . += span_notice("The wires are just dangling from it, you need some sort of activating assembly.") -/obj/item/sliced_pipe/attackby(obj/item/item, mob/user, params) +/obj/item/sliced_pipe/attackby(obj/item/item, mob/user, list/modifiers) if(!wires_are_in) // here we can stuff in additional objects for a cooler effect if(is_type_in_typecache(item, allowed) && contents.len < MAX_STUFFINGS) @@ -229,7 +229,7 @@ as_stack.merge_type = null //prevent them from merging inside for contents.len to_put.forceMove(src) return - + //if the item has reagents lets allow it to transfer if(item.reagents) return ..() @@ -268,11 +268,11 @@ if(!user.transferItemToLoc(assembly, src)) return user.balloon_alert(user, "attached") - + var/obj/item/grenade/iedcasing/pipebomb = new(drop_location()) for(var/atom/movable/item_inside as anything in contents) item_inside.forceMove(pipebomb) - + pipebomb.power = power pipebomb.attach_activator(assembly) pipebomb.setup_effects_from_contents() diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index d5d6053380cb..5852be33c810 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -53,7 +53,7 @@ to_chat(user, span_notice("The wire panel can be accessed without a screwdriver.")) return TRUE -/obj/item/grenade/c4/attackby(obj/item/item, mob/user, params) +/obj/item/grenade/c4/attackby(obj/item/item, mob/user, list/modifiers) if(is_wire_tool(item)) wires.interact(user) else diff --git a/code/game/objects/items/hand_items.dm b/code/game/objects/items/hand_items.dm index 9486e042e434..fb98f9e1a343 100644 --- a/code/game/objects/items/hand_items.dm +++ b/code/game/objects/items/hand_items.dm @@ -282,14 +282,14 @@ playsound(slapped, 'sound/weapons/slap.ogg', slap_volume, TRUE, -1) return -/obj/item/hand_item/slapper/pre_attack_secondary(atom/target, mob/living/user, params) +/obj/item/hand_item/slapper/pre_attack_secondary(atom/target, mob/living/user, list/modifiers) if(!loc.Adjacent(target) || !istype(target, /obj/structure/table)) return ..() slam_table(target, user) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/item/hand_item/slapper/pre_attack(atom/target, mob/living/user, params) +/obj/item/hand_item/slapper/pre_attack(atom/target, mob/living/user, list/modifiers) if(!loc.Adjacent(target) || !istype(target, /obj/structure/table)) return ..() @@ -338,7 +338,7 @@ desc = "Sometimes, you just want to act gentlemanly." inhand_icon_state = "nothing" -/obj/item/hand_item/hand/pre_attack(mob/living/carbon/help_target, mob/living/carbon/helper, params) +/obj/item/hand_item/hand/pre_attack(mob/living/carbon/help_target, mob/living/carbon/helper, list/modifiers) if(!loc.Adjacent(help_target) || !istype(helper) || !istype(help_target)) return ..() @@ -347,7 +347,7 @@ return TRUE -/obj/item/hand_item/hand/pre_attack_secondary(mob/living/carbon/help_target, mob/living/carbon/helper, params) +/obj/item/hand_item/hand/pre_attack_secondary(mob/living/carbon/help_target, mob/living/carbon/helper, list/modifiers) if(!loc.Adjacent(help_target) || !istype(helper) || !istype(help_target)) return ..() @@ -358,7 +358,7 @@ return SECONDARY_ATTACK_CALL_NORMAL -/obj/item/hand_item/hand/attack(mob/living/carbon/target_mob, mob/living/carbon/user, params) +/obj/item/hand_item/hand/attack(mob/living/carbon/target_mob, mob/living/carbon/user, list/modifiers) if(!loc.Adjacent(target_mob) || !istype(user) || !istype(target_mob)) return TRUE @@ -445,7 +445,7 @@ attack_verb_continuous = list("steals") attack_verb_simple = list("steal") -/obj/item/hand_item/stealer/attack(mob/living/target_mob, mob/living/user, params) +/obj/item/hand_item/stealer/attack(mob/living/target_mob, mob/living/user, list/modifiers) . = ..() if (!ishuman(target_mob)) return diff --git a/code/game/objects/items/hot_potato.dm b/code/game/objects/items/hot_potato.dm index 20233db522b3..563d70e1f153 100644 --- a/code/game/objects/items/hot_potato.dm +++ b/code/game/objects/items/hot_potato.dm @@ -95,7 +95,7 @@ if(active) to_chat(user, span_userdanger("You have a really bad feeling about [src]!")) -/obj/item/hot_potato/attack(mob/living/target_mob, mob/living/user, params) +/obj/item/hot_potato/attack(mob/living/target_mob, mob/living/user, list/modifiers) . = ..() if(.) return . diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm index 1a3ec50eba25..e081248f8ada 100644 --- a/code/game/objects/items/implants/implantcase.dm +++ b/code/game/objects/items/implants/implantcase.dm @@ -35,7 +35,7 @@ icon_state = "implantcase-[imp ? imp.implant_color : 0]" return ..() -/obj/item/implantcase/attackby(obj/item/used_item, mob/living/user, params) +/obj/item/implantcase/attackby(obj/item/used_item, mob/living/user, list/modifiers) if(IS_WRITING_UTENSIL(used_item)) if(!user.can_write(used_item)) return diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm index b4208fd93f05..26e13ae9a65a 100644 --- a/code/game/objects/items/implants/implanter.dm +++ b/code/game/objects/items/implants/implanter.dm @@ -50,7 +50,7 @@ else to_chat(user, span_warning("[src] fails to implant [target].")) -/obj/item/implanter/attackby(obj/item/I, mob/living/user, params) +/obj/item/implanter/attackby(obj/item/I, mob/living/user, list/modifiers) if(IS_WRITING_UTENSIL(I)) return ..() if(!user.can_write(I)) diff --git a/code/game/objects/items/implants/implantpad.dm b/code/game/objects/items/implants/implantpad.dm index 92f015b01a91..d3a6affea154 100644 --- a/code/game/objects/items/implants/implantpad.dm +++ b/code/game/objects/items/implants/implantpad.dm @@ -37,7 +37,7 @@ inserted_case = null update_appearance(UPDATE_ICON) -/obj/item/implantpad/attackby(obj/item/implantcase/attacking_item, mob/user, params) +/obj/item/implantpad/attackby(obj/item/implantcase/attacking_item, mob/user, list/modifiers) if(inserted_case || !istype(attacking_item)) return ..() if(!user.transferItemToLoc(attacking_item, src)) diff --git a/code/game/objects/items/implants/security/implant_chem.dm b/code/game/objects/items/implants/security/implant_chem.dm index c25496c634bb..e20da8ab7b95 100644 --- a/code/game/objects/items/implants/security/implant_chem.dm +++ b/code/game/objects/items/implants/security/implant_chem.dm @@ -95,9 +95,9 @@ desc = "A glass case containing a remote chemical implant." imp_type = /obj/item/implant/chem -/obj/item/implantcase/chem/attackby(obj/item/W, mob/user, params) +/obj/item/implantcase/chem/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/reagent_containers/syringe) && imp) - W.interact_with_atom(imp, user, params) + W.interact_with_atom(imp, user, modifiers) return TRUE else return ..() diff --git a/code/game/objects/items/inspector.dm b/code/game/objects/items/inspector.dm index 0b8cf8d9c8a3..a4874eae9899 100644 --- a/code/game/objects/items/inspector.dm +++ b/code/game/objects/items/inspector.dm @@ -65,7 +65,7 @@ balloon_alert(user, "[cell_cover_open ? "opened" : "closed"] cell cover") return TRUE -/obj/item/inspector/attackby(obj/item/I, mob/user, params) +/obj/item/inspector/attackby(obj/item/I, mob/user, list/modifiers) if(cell_cover_open && istype(I, /obj/item/stock_parts/power_store/cell)) if(cell) to_chat(user, span_warning("[src] already has a cell installed.")) @@ -223,7 +223,7 @@ cycle_print_time(user) return TRUE -/obj/item/inspector/clown/attackby(obj/item/I, mob/user, params) +/obj/item/inspector/clown/attackby(obj/item/I, mob/user, list/modifiers) if(cell_cover_open && istype(I, /obj/item/kitchen/fork)) cycle_sound(user) return @@ -302,7 +302,7 @@ check_settings_legality() return TRUE -/obj/item/inspector/clown/bananium/attackby(obj/item/I, mob/user, params) +/obj/item/inspector/clown/bananium/attackby(obj/item/I, mob/user, list/modifiers) . = ..() if(cell_cover_open) check_settings_legality() diff --git a/code/game/objects/items/kirby_plants/kirbyplants.dm b/code/game/objects/items/kirby_plants/kirbyplants.dm index bc1be30f578d..100691d44b64 100644 --- a/code/game/objects/items/kirby_plants/kirbyplants.dm +++ b/code/game/objects/items/kirby_plants/kirbyplants.dm @@ -50,7 +50,7 @@ . = ..() icon_state = dead ? "plant-25" : base_icon_state -/obj/item/kirbyplants/attackby(obj/item/I, mob/living/user, params) +/obj/item/kirbyplants/attackby(obj/item/I, mob/living/user, list/modifiers) . = ..() if(!dead && trimmable && HAS_TRAIT(user,TRAIT_BONSAI) && isturf(loc) && I.get_sharpness()) to_chat(user,span_notice("You start trimming [src].")) diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index 0d7a53e2c357..7481c51c0a71 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -252,7 +252,7 @@ filled_overlay.color = mix_color_from_reagents(reagents.reagent_list) . += filled_overlay -/obj/item/kitchen/spoon/attack(mob/living/target_mob, mob/living/user, params) +/obj/item/kitchen/spoon/attack(mob/living/target_mob, mob/living/user, list/modifiers) if(!target_mob.reagents || reagents.total_volume <= 0) return ..() @@ -279,7 +279,7 @@ reagents.trans_to(target_mob, spoon_sip_size, methods = INGEST) return TRUE -/obj/item/kitchen/spoon/pre_attack(atom/attacked_atom, mob/living/user, params) +/obj/item/kitchen/spoon/pre_attack(atom/attacked_atom, mob/living/user, list/modifiers) . = ..() if(.) return @@ -299,7 +299,7 @@ attacked_atom.balloon_alert(user, "it's full!") return TRUE -/obj/item/kitchen/spoon/pre_attack_secondary(atom/attacked_atom, mob/living/user, params) +/obj/item/kitchen/spoon/pre_attack_secondary(atom/attacked_atom, mob/living/user, list/modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return diff --git a/code/game/objects/items/knives.dm b/code/game/objects/items/knives.dm index 627602f44e22..62f48e2d3124 100644 --- a/code/game/objects/items/knives.dm +++ b/code/game/objects/items/knives.dm @@ -89,7 +89,7 @@ /// Bleed stacks applied when an organic mob target is hit var/bleed_stacks_per_hit = 3 -/obj/item/knife/bloodletter/afterattack(atom/target, mob/user, click_parameters) +/obj/item/knife/bloodletter/afterattack(atom/target, mob/user, list/modifiers) if(!isliving(target)) return var/mob/living/M = target diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index 062f474307be..7dd3493e6b30 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -101,7 +101,7 @@ return ..() -/obj/item/latexballoon/attackby(obj/item/item, mob/user, params) +/obj/item/latexballoon/attackby(obj/item/item, mob/user, list/modifiers) if(istype(item, /obj/item/tank)) var/obj/item/tank/air_tank = item blow(air_tank, user) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index b7e2a7707d67..b853104d7211 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -98,7 +98,7 @@ postmark_image.appearance_flags |= RESET_COLOR|KEEP_APART|KEEP_APART . += postmark_image -/obj/item/mail/attackby(obj/item/W, mob/user, params) +/obj/item/mail/attackby(obj/item/W, mob/user, list/modifiers) // Destination tagging if(istype(W, /obj/item/dest_tagger)) var/obj/item/dest_tagger/destination_tag = W diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm index bd28c2d0eabe..ac7027f43f50 100644 --- a/code/game/objects/items/melee/baton.dm +++ b/code/game/objects/items/melee/baton.dm @@ -111,9 +111,8 @@ * * TL;DR: [/baton_attack()] -> [/finalize_baton_attack()] -> [/baton_effect()] -> [/set_batoned()] */ -/obj/item/melee/baton/attack(mob/living/target, mob/living/user, params) +/obj/item/melee/baton/attack(mob/living/target, mob/living/user, list/modifiers) add_fingerprint(user) - var/list/modifiers = params2list(params) switch(baton_attack(target, user, modifiers)) if(BATON_DO_NORMAL_ATTACK) return ..() @@ -594,7 +593,7 @@ tool.play_tool_sound(src) return TRUE -/obj/item/melee/baton/security/attackby(obj/item/item, mob/user, params) +/obj/item/melee/baton/security/attackby(obj/item/item, mob/user, list/modifiers) if(istype(item, /obj/item/stock_parts/power_store/cell)) var/obj/item/stock_parts/power_store/cell/active_cell = item if(cell) @@ -809,7 +808,7 @@ . = ..() sparkler = new (src) -/obj/item/melee/baton/security/cattleprod/attackby(obj/item/item, mob/user, params)//handles sticking a crystal onto a stunprod to make an improved cattleprod +/obj/item/melee/baton/security/cattleprod/attackby(obj/item/item, mob/user, list/modifiers)//handles sticking a crystal onto a stunprod to make an improved cattleprod if(!istype(item, /obj/item/stack)) return ..() diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index c6c7743fc8b8..f0bc7c3cea24 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -201,7 +201,7 @@ final_block_chance = 0 //Don't bring a sword to a gunfight, and also you aren't going to really block someone full body tackling you with a sword return ..() -/obj/item/melee/beesword/afterattack(atom/target, mob/user, click_parameters) +/obj/item/melee/beesword/afterattack(atom/target, mob/user, list/modifiers) if(iscarbon(target)) var/mob/living/carbon/carbon_target = target carbon_target.reagents.add_reagent(/datum/reagent/toxin, 4) @@ -249,16 +249,16 @@ if(!isspaceturf(turf)) consume_turf(turf) -/obj/item/melee/supermatter_sword/pre_attack(atom/A, mob/living/user, params) +/obj/item/melee/supermatter_sword/pre_attack(atom/target, mob/living/user, list/modifiers) . = ..() if(.) return . - if(A == user) + if(target == user) user.dropItemToGround(src, TRUE) else - user.do_attack_animation(A) - consume_everything(A) + user.do_attack_animation(target) + consume_everything(target) return TRUE /obj/item/melee/supermatter_sword/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) @@ -341,7 +341,7 @@ attack_verb_simple = list("flog", "whip", "lash", "discipline") hitsound = 'sound/weapons/whip.ogg' -/obj/item/melee/curator_whip/afterattack(atom/target, mob/user, click_parameters) +/obj/item/melee/curator_whip/afterattack(atom/target, mob/user, list/modifiers) if(ishuman(target)) var/mob/living/carbon/human/human_target = target human_target.drop_all_held_items() diff --git a/code/game/objects/items/piggy_bank.dm b/code/game/objects/items/piggy_bank.dm index bdfda215966d..51a18dfea564 100644 --- a/code/game/objects/items/piggy_bank.dm +++ b/code/game/objects/items/piggy_bank.dm @@ -92,7 +92,7 @@ if(95 to INFINITY) balloon_alert(user, "brimming with cash") -/obj/item/piggy_bank/attackby(obj/item/item, mob/user, params) +/obj/item/piggy_bank/attackby(obj/item/item, mob/user, list/modifiers) var/creds_value = item.get_item_credit_value() if(isnull(creds_value)) return ..() diff --git a/code/game/objects/items/pillow.dm b/code/game/objects/items/pillow.dm index eb8cef7a11ae..b39ae15b31fb 100644 --- a/code/game/objects/items/pillow.dm +++ b/code/game/objects/items/pillow.dm @@ -46,7 +46,7 @@ . = ..() QDEL_NULL(pillow_trophy) -/obj/item/pillow/attack(mob/living/carbon/target_mob, mob/living/user, params) +/obj/item/pillow/attack(mob/living/carbon/target_mob, mob/living/user, list/modifiers) . = ..() if(!iscarbon(target_mob)) return @@ -71,7 +71,7 @@ user.visible_message("[user] starts to smother [victim]", span_notice("You begin smothering [victim]"), vision_distance = COMBAT_MESSAGE_RANGE) INVOKE_ASYNC(src, PROC_REF(smothering), user, victim) -/obj/item/pillow/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/pillow/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(!bricked && istype(attacking_item, /obj/item/stack/sheet/mineral/sandstone)) var/obj/item/stack/sheet/mineral/sandstone/brick = attacking_item balloon_alert(user, "inserting brick...") diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 6c4b0bb5b06c..5eeb2135961e 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -124,7 +124,7 @@ else to_chat(user, span_notice("You try to pet [src], but it has no stuffing. Aww...")) -/obj/item/toy/plush/attackby(obj/item/I, mob/living/user, params) +/obj/item/toy/plush/attackby(obj/item/I, mob/living/user, list/modifiers) if(I.get_sharpness()) if(!grenade) if(!stuffed) @@ -691,7 +691,7 @@ ) AddElement(/datum/element/connect_loc, loc_connections) -/obj/item/toy/plush/goatplushie/attackby(obj/item/cigarette/rollie/fat_dart, mob/user, params) +/obj/item/toy/plush/goatplushie/attackby(obj/item/cigarette/rollie/fat_dart, mob/user, list/modifiers) if(!istype(fat_dart)) return ..() if(splat) diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index d49f097707ec..4c0f07f0cfc2 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -110,7 +110,7 @@ balloon_alert(user, "output level set to [pressure_setting_to_text(pressure_setting)]") return TRUE -/obj/item/pneumatic_cannon/attackby(obj/item/W, mob/living/user, params) +/obj/item/pneumatic_cannon/attackby(obj/item/W, mob/living/user, list/modifiers) if(user.combat_mode) return ..() if(istype(W, /obj/item/tank/internals)) diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm index e4af94168246..4cff847acfbd 100644 --- a/code/game/objects/items/powerfist.dm +++ b/code/game/objects/items/powerfist.dm @@ -71,7 +71,7 @@ update_tank(tank, TANK_REMOVING, user) return TRUE -/obj/item/melee/powerfist/attackby(obj/item/item_to_insert, mob/user, params) +/obj/item/melee/powerfist/attackby(obj/item/item_to_insert, mob/user, list/modifiers) if(!istype(item_to_insert, /obj/item/tank/internals)) return ..() if(tank) diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm index 9a555bd8ead3..de427ade39ae 100644 --- a/code/game/objects/items/puzzle_pieces.dm +++ b/code/game/objects/items/puzzle_pieces.dm @@ -126,7 +126,7 @@ desc = "This door only opens when a keycard is swiped. It looks virtually indestructible." uses_queuelinks = FALSE -/obj/machinery/door/puzzle/keycard/attackby(obj/item/attacking_item, mob/user, params) +/obj/machinery/door/puzzle/keycard/attackby(obj/item/attacking_item, mob/user, list/modifiers) . = ..() if(!istype(attacking_item, /obj/item/keycard)) return @@ -376,7 +376,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle/button, 32) icon_state = "keycardpad0" base_icon_state = "keycardpad" -/obj/machinery/puzzle/keycardpad/attackby(obj/item/attacking_item, mob/user, params) +/obj/machinery/puzzle/keycardpad/attackby(obj/item/attacking_item, mob/user, list/modifiers) . = ..() if(!istype(attacking_item, /obj/item/keycard) || used) return diff --git a/code/game/objects/items/rcd/RSF.dm b/code/game/objects/items/rcd/RSF.dm index ef0be22acc47..10332b831292 100644 --- a/code/game/objects/items/rcd/RSF.dm +++ b/code/game/objects/items/rcd/RSF.dm @@ -72,7 +72,7 @@ RSF /obj/item/rsf/cyborg matter = 30 -/obj/item/rsf/attackby(obj/item/W, mob/user, params) +/obj/item/rsf/attackby(obj/item/W, mob/user, list/modifiers) if(is_type_in_list(W,matter_by_item))//If the thing we got hit by is in our matter list var/tempMatter = matter_by_item[W.type] + matter if(tempMatter > max_matter) diff --git a/code/game/objects/items/robot/ai_upgrades.dm b/code/game/objects/items/robot/ai_upgrades.dm index 7a597087a2d1..06611b720fd6 100644 --- a/code/game/objects/items/robot/ai_upgrades.dm +++ b/code/game/objects/items/robot/ai_upgrades.dm @@ -7,9 +7,7 @@ ///The upgrade that will be applied to the AI when installed var/datum/ai_module/to_gift = /datum/ai_module -/obj/item/aiupgrade/pre_attack(atom/target, mob/living/user, proximity) - if(!proximity) - return ..() +/obj/item/aiupgrade/pre_attack(atom/target, mob/living/user, list/modifiers) if(!isAI(target)) return ..() var/mob/living/silicon/ai/AI = target @@ -50,9 +48,7 @@ icon_state = "datadisk3" -/obj/item/malf_upgrade/pre_attack(atom/A, mob/living/user, proximity) - if(!proximity) - return ..() +/obj/item/malf_upgrade/pre_attack(atom/A, mob/living/user, list/modifiers) if(!isAI(A)) return ..() var/mob/living/silicon/ai/AI = A diff --git a/code/game/objects/items/robot/items/generic.dm b/code/game/objects/items/robot/items/generic.dm index 21a7e80ba807..3d2346ff8a90 100644 --- a/code/game/objects/items/robot/items/generic.dm +++ b/code/game/objects/items/robot/items/generic.dm @@ -97,7 +97,7 @@ if(HUG_MODE_CRUSH) to_chat(user, "ERROR: ARM ACTUATORS OVERLOADED.") -/obj/item/borg/cyborghug/attack(mob/living/attacked_mob, mob/living/silicon/robot/user, params) +/obj/item/borg/cyborghug/attack(mob/living/attacked_mob, mob/living/silicon/robot/user, list/modifiers) if(attacked_mob == user) return if(attacked_mob.health < 0) @@ -105,7 +105,6 @@ switch(mode) if(HUG_MODE_NICE) if(isanimal_or_basicmob(attacked_mob)) - var/list/modifiers = params2list(params) if (!user.combat_mode && !LAZYACCESS(modifiers, RIGHT_CLICK)) attacked_mob.attack_hand(user, modifiers) //This enables borgs to get the floating heart icon and mob emote from simple_animal's that have petbonus == true. return diff --git a/code/game/objects/items/robot/items/storage.dm b/code/game/objects/items/robot/items/storage.dm index 08c777cab00b..4fa9486dc3a9 100644 --- a/code/game/objects/items/robot/items/storage.dm +++ b/code/game/objects/items/robot/items/storage.dm @@ -61,7 +61,7 @@ stored.forceMove(user.drop_location()) return CLICK_ACTION_SUCCESS -/obj/item/borg/apparatus/pre_attack(atom/atom, mob/living/user, params) +/obj/item/borg/apparatus/pre_attack(atom/atom, mob/living/user, list/modifiers) if(istype(atom.loc, /mob/living/silicon/robot) || istype(atom.loc, /obj/item/robot_model) || HAS_TRAIT(atom, TRAIT_NODROP)) return ..() // Borgs should not be grabbing their own modules @@ -90,9 +90,9 @@ update_appearance() return NONE -/obj/item/borg/apparatus/attackby(obj/item/item, mob/user, params) +/obj/item/borg/apparatus/attackby(obj/item/item, mob/user, list/modifiers) if(stored) - item.melee_attack_chain(user, stored, params) + item.melee_attack_chain(user, stored, modifiers) return return ..() @@ -314,7 +314,7 @@ . += "The apparatus currently has [stored] secured." . += span_notice(" Alt-click will drop the currently stored circuit. ") -/obj/item/borg/apparatus/circuit/pre_attack(atom/atom, mob/living/user, params) +/obj/item/borg/apparatus/circuit/pre_attack(atom/atom, mob/living/user, list/modifiers) if(istype(atom, /obj/item/ai_module) && !stored) //If an admin wants a borg to upload laws, who am I to stop them? Otherwise, we can hint that it fails to_chat(user, span_warning("This circuit board doesn't seem to have standard robot apparatus pin holes. You're unable to pick it up.")) return ..() diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index be5d494e39a4..7a569c8620cc 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -166,7 +166,7 @@ return TRUE //ADD -/obj/item/robot_suit/attackby(obj/item/W, mob/user, params) +/obj/item/robot_suit/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/stack/sheet/iron)) var/obj/item/stack/sheet/iron/M = W if(!l_arm && !r_arm && !l_leg && !r_leg && !chest && !head) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 2f2d89037907..28ca79012075 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -780,7 +780,7 @@ icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "cyborg_upgrade1" -/obj/item/borg_restart_board/pre_attack(mob/living/silicon/robot/borgo, mob/living/user, params) +/obj/item/borg_restart_board/pre_attack(mob/living/silicon/robot/borgo, mob/living/user, list/modifiers) if(!istype(borgo)) return ..() if(!borgo.opened) diff --git a/code/game/objects/items/secret_documents.dm b/code/game/objects/items/secret_documents.dm index 92ad097aa8b7..ef6b12444f9b 100644 --- a/code/game/objects/items/secret_documents.dm +++ b/code/game/objects/items/secret_documents.dm @@ -66,7 +66,7 @@ var/obj/item/documents/photocopy/C = copy copy_type = C.copy_type -/obj/item/documents/photocopy/attackby(obj/item/O, mob/user, params) +/obj/item/documents/photocopy/attackby(obj/item/O, mob/user, list/modifiers) if(istype(O, /obj/item/toy/crayon/red) || istype(O, /obj/item/toy/crayon/blue)) if (forgedseal) to_chat(user, span_warning("You have already forged a seal on [src]!")) diff --git a/code/game/objects/items/sharpener.dm b/code/game/objects/items/sharpener.dm index a0f41574e4b4..741a75090c6d 100644 --- a/code/game/objects/items/sharpener.dm +++ b/code/game/objects/items/sharpener.dm @@ -23,7 +23,7 @@ ///If TRUE, the whetstone will only sharpen already sharp items var/requires_sharpness = TRUE -/obj/item/sharpener/attackby(obj/item/I, mob/user, params) +/obj/item/sharpener/attackby(obj/item/I, mob/user, list/modifiers) if(uses == 0) to_chat(user, span_warning("The sharpening block is too worn to use again!")) return diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 498af80f4cb0..c3ce61d5733b 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -147,7 +147,7 @@ slapcraft_recipes = slapcraft_recipe_list,\ ) -/obj/item/shield/riot/attackby(obj/item/attackby_item, mob/user, params) +/obj/item/shield/riot/attackby(obj/item/attackby_item, mob/user, list/modifiers) if(istype(attackby_item, /obj/item/melee/baton)) if(!COOLDOWN_FINISHED(src, baton_bash)) return diff --git a/code/game/objects/items/signs.dm b/code/game/objects/items/signs.dm index 1a74a8b164a3..c7767a7af31e 100644 --- a/code/game/objects/items/signs.dm +++ b/code/game/objects/items/signs.dm @@ -30,7 +30,7 @@ name = "[label] sign" desc = "It reads: [label]" -/obj/item/picket_sign/attackby(obj/item/W, mob/user, params) +/obj/item/picket_sign/attackby(obj/item/W, mob/user, list/modifiers) if(IS_WRITING_UTENSIL(W)) retext(user, W) else diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm index 69e2f8ec5f58..b219cd69d9c7 100644 --- a/code/game/objects/items/spear.dm +++ b/code/game/objects/items/spear.dm @@ -177,7 +177,7 @@ return CLICK_ACTION_SUCCESS -/obj/item/spear/explosive/afterattack(atom/movable/target, mob/user, click_parameters) +/obj/item/spear/explosive/afterattack(atom/movable/target, mob/user, list/modifiers) if(!HAS_TRAIT(src, TRAIT_WIELDED) || !istype(target)) return if(target.resistance_flags & INDESTRUCTIBLE) //due to the lich incident of 2021, embedding grenades inside of indestructible structures is forbidden @@ -208,7 +208,7 @@ force_unwielded = 15 force_wielded = 25 -/obj/item/spear/grey_tide/afterattack(atom/movable/target, mob/living/user, click_parameters) +/obj/item/spear/grey_tide/afterattack(atom/movable/target, mob/living/user, list/modifiers) user.faction |= "greytide([REF(user)])" if(!isliving(target)) return diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 53ffe0505a00..97ea3bea4a40 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -51,7 +51,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ . = ..() . += GLOB.glass_recipes -/obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user, params) +/obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user, list/modifiers) add_fingerprint(user) if(istype(W, /obj/item/lightreplacer)) var/obj/item/lightreplacer/lightreplacer = W @@ -119,7 +119,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \ . = ..() . += GLOB.pglass_recipes -/obj/item/stack/sheet/plasmaglass/attackby(obj/item/W, mob/user, params) +/obj/item/stack/sheet/plasmaglass/attackby(obj/item/W, mob/user, list/modifiers) add_fingerprint(user) if(istype(W, /obj/item/stack/rods)) @@ -176,7 +176,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ fire = 70 acid = 100 -/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, params) +/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, list/modifiers) add_fingerprint(user) ..() @@ -366,7 +366,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( if(T && is_station_level(T.z)) SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name) -/obj/item/shard/afterattack(atom/target, mob/user, click_parameters) +/obj/item/shard/afterattack(atom/target, mob/user, list/modifiers) if(!iscarbon(user) || !user.is_holding(src)) return @@ -377,7 +377,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( to_chat(user, span_warning("[src] cuts into your hand!")) jab.apply_damage(force * 0.5, BRUTE, user.get_active_hand(), attacking_item = src) -/obj/item/shard/attackby(obj/item/item, mob/user, params) +/obj/item/shard/attackby(obj/item/item, mob/user, list/modifiers) if(istype(item, /obj/item/lightreplacer)) var/obj/item/lightreplacer/lightreplacer = item lightreplacer.attackby(src, user) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 68603833f0d8..5d21fe0948a3 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -322,7 +322,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ //Step one - dehairing. -/obj/item/stack/sheet/animalhide/attackby(obj/item/W, mob/user, params) +/obj/item/stack/sheet/animalhide/attackby(obj/item/W, mob/user, list/modifiers) if(W.get_sharpness()) playsound(loc, 'sound/weapons/slice.ogg', 50, TRUE, -1) user.visible_message(span_notice("[user] starts cutting hair off \the [src]."), span_notice("You start cutting the hair off \the [src]..."), span_hear("You hear the sound of a knife rubbing against flesh.")) diff --git a/code/game/objects/items/stacks/sheets/light.dm b/code/game/objects/items/stacks/sheets/light.dm index c9153c828444..2a640dffd80a 100644 --- a/code/game/objects/items/stacks/sheets/light.dm +++ b/code/game/objects/items/stacks/sheets/light.dm @@ -18,7 +18,7 @@ . = ..() . += span_warning("The [name] looks unfinished, add iron to complete it.") -/obj/item/stack/light_w/attackby(obj/item/O, mob/user, params) +/obj/item/stack/light_w/attackby(obj/item/O, mob/user, list/modifiers) if(istype(O, /obj/item/stack/sheet/iron)) var/obj/item/stack/sheet/iron/M = O if (M.use(1)) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index cf78ac563bab..95c983b9b996 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -84,7 +84,7 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \ icon_state = "sandbag" w_class = WEIGHT_CLASS_TINY -/obj/item/emptysandbag/attackby(obj/item/W, mob/user, params) +/obj/item/emptysandbag/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/stack/ore/glass)) var/obj/item/stack/ore/glass/G = W to_chat(user, span_notice("You fill the sandbag.")) @@ -462,7 +462,7 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \ grind_results = list(/datum/reagent/carbon = 20) novariants = TRUE -/obj/item/stack/sheet/mineral/coal/attackby(obj/item/W, mob/user, params) +/obj/item/stack/sheet/mineral/coal/attackby(obj/item/W, mob/user, list/modifiers) if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite var/turf/T = get_turf(src) message_admins("Coal ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]") diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index d507c41e6652..b81659a7012d 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -704,7 +704,7 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \ /obj/item/stack/sheet/cardboard/fifty amount = 50 -/obj/item/stack/sheet/cardboard/attackby(obj/item/I, mob/user, params) +/obj/item/stack/sheet/cardboard/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/stamp/clown) && !istype(loc, /obj/item/storage)) var/atom/droploc = drop_location() if(use(1)) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 1671a31e38f1..6b3066b2cd4e 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -728,7 +728,7 @@ is_zero_amount(delete_if_zero = TRUE) -/obj/item/stack/attackby(obj/item/W, mob/user, params) +/obj/item/stack/attackby(obj/item/W, mob/user, list/modifiers) if(can_merge(W, inhand = TRUE)) var/obj/item/stack/S = W if(merge(S)) diff --git a/code/game/objects/items/stacks/tiles/light.dm b/code/game/objects/items/stacks/tiles/light.dm index 2df744703d95..1a4d73826367 100644 --- a/code/game/objects/items/stacks/tiles/light.dm +++ b/code/game/objects/items/stacks/tiles/light.dm @@ -13,7 +13,7 @@ var/state = 0 -/obj/item/stack/tile/light/attackby(obj/item/O, mob/user, params) +/obj/item/stack/tile/light/attackby(obj/item/O, mob/user, list/modifiers) if(O.tool_behaviour == TOOL_CROWBAR) new/obj/item/stack/sheet/iron(user.loc) amount-- diff --git a/code/game/objects/items/stacks/tiles/tile_mineral.dm b/code/game/objects/items/stacks/tiles/tile_mineral.dm index 1c19132488cc..1dfb002f878f 100644 --- a/code/game/objects/items/stacks/tiles/tile_mineral.dm +++ b/code/game/objects/items/stacks/tiles/tile_mineral.dm @@ -4,7 +4,7 @@ /// Determines what stack is gotten out of us when welded. var/mineralType = null -/obj/item/stack/tile/mineral/attackby(obj/item/W, mob/user, params) +/obj/item/stack/tile/mineral/attackby(obj/item/W, mob/user, list/modifiers) if(W.tool_behaviour == TOOL_WELDER) if(get_amount() < 4) to_chat(user, span_warning("You need at least four tiles to do this!")) diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 8c59ec39b50d..94be5dc17a5c 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -95,7 +95,7 @@ /obj/item/storage/toolbox/proc/use_tool_on(atom/interacting_with, mob/living/user, list/modifiers, obj/item/picked_tool) current_interactions += 1 - picked_tool.melee_attack_chain(user, interacting_with, list2params(modifiers)) + picked_tool.melee_attack_chain(user, interacting_with, modifiers) current_interactions -= 1 if (QDELETED(picked_tool) || picked_tool.loc != user || !user.CanReach(picked_tool)) diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm index d5d18461b5fb..b7211708d905 100644 --- a/code/game/objects/items/tanks/tank_types.dm +++ b/code/game/objects/items/tanks/tank_types.dm @@ -104,7 +104,7 @@ air_contents.assert_gas(/datum/gas/plasma) air_contents.gases[/datum/gas/plasma][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) -/obj/item/tank/internals/plasma/attackby(obj/item/W, mob/user, params) +/obj/item/tank/internals/plasma/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/flamethrower)) var/obj/item/flamethrower/F = W if ((!F.status) || (F.ptank)) diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 0c892248ab5b..b7c15a3d204f 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -218,7 +218,7 @@ to_chat(user, span_warning("There isn't enough pressure in [src] to commit suicide with...")) return SHAME -/obj/item/tank/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/tank/attackby(obj/item/attacking_item, mob/user, list/modifiers) add_fingerprint(user) if(istype(attacking_item, /obj/item/assembly_holder)) if(tank_assembly) diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 3b5d1b449881..8b2f70c1b776 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -96,7 +96,7 @@ var/atom/movable/screen/inventory/hand/H = over_object M.putItemFromInventoryInHandIfPossible(src, H.held_index) -/obj/item/watertank/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/watertank/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(attacking_item == noz) remove_noz() return TRUE diff --git a/code/game/objects/items/tcg/tcg.dm b/code/game/objects/items/tcg/tcg.dm index fc2eeba82ff7..136a00b9ab74 100644 --- a/code/game/objects/items/tcg/tcg.dm +++ b/code/game/objects/items/tcg/tcg.dm @@ -128,7 +128,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) icon_state = template.icon_state return ..() -/obj/item/tcgcard/attackby(obj/item/item, mob/living/user, params) +/obj/item/tcgcard/attackby(obj/item/item, mob/living/user, list/modifiers) if(istype(item, /obj/item/tcgcard)) var/obj/item/tcgcard/second_card = item var/obj/item/tcgcard_deck/new_deck = new /obj/item/tcgcard_deck(drop_location()) @@ -253,7 +253,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) return FALSE return TRUE -/obj/item/tcgcard_deck/attackby(obj/item/item, mob/living/user, params) +/obj/item/tcgcard_deck/attackby(obj/item/item, mob/living/user, list/modifiers) . = ..() if(istype(item, /obj/item/tcgcard)) if(contents.len >= 30) diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm index e13251fe8e5e..16f2e8ee5039 100644 --- a/code/game/objects/items/theft_tools.dm +++ b/code/game/objects/items/theft_tools.dm @@ -164,7 +164,7 @@ /obj/item/nuke_core/supermatter_sliver/can_be_pulled(user) // no drag memes return FALSE -/obj/item/nuke_core/supermatter_sliver/attackby(obj/item/W, mob/living/user, params) +/obj/item/nuke_core/supermatter_sliver/attackby(obj/item/W, mob/living/user, list/modifiers) if(istype(W, /obj/item/hemostat/supermatter)) var/obj/item/hemostat/supermatter/tongs = W if (tongs.sliver) diff --git a/code/game/objects/items/tongs.dm b/code/game/objects/items/tongs.dm index b9e883c5059f..f3cb7a610677 100644 --- a/code/game/objects/items/tongs.dm +++ b/code/game/objects/items/tongs.dm @@ -72,7 +72,7 @@ tonged = null update_appearance(UPDATE_ICON) -/obj/item/kitchen/tongs/pre_attack(obj/item/attacked, mob/living/user, params) +/obj/item/kitchen/tongs/pre_attack(obj/item/attacked, mob/living/user, list/modifiers) if (!isnull(tonged) && tonged.force <= 0) // prevents tongs from giving food-weapons extra range attacked.attackby(tonged, user) return TRUE diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 524b55475a6e..82562718da0d 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -114,7 +114,7 @@ flamethrower_screwdriver(tool, user) return ITEM_INTERACT_SUCCESS -/obj/item/weldingtool/attackby(obj/item/tool, mob/user, params) +/obj/item/weldingtool/attackby(obj/item/tool, mob/user, list/modifiers) if(istype(tool, /obj/item/stack/rods)) flamethrower_rods(tool, user) else @@ -174,7 +174,7 @@ INVOKE_ASYNC(src, PROC_REF(try_heal_loop), interacting_with, user, TRUE) return ITEM_INTERACT_SUCCESS -/obj/item/weldingtool/afterattack(atom/target, mob/user, click_parameters) +/obj/item/weldingtool/afterattack(atom/target, mob/user, list/modifiers) if(!isOn()) return use(1) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 63d7a14813e2..a35828a96589 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -71,7 +71,7 @@ return ITEM_INTERACT_SUCCESS return ITEM_INTERACT_BLOCKING -/obj/item/toy/waterballoon/attackby(obj/item/I, mob/user, params) +/obj/item/toy/waterballoon/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/reagent_containers/cup)) if(I.reagents) if(I.reagents.total_volume <= 0) @@ -171,7 +171,7 @@ icon_state = "[storage_state]" update_appearance() -/obj/item/toy/balloon/long/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/item/toy/balloon/long/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(!istype(attacking_item, /obj/item/toy/balloon/long) || !HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) return ..() @@ -194,7 +194,7 @@ qdel(src) return TRUE -/obj/item/toy/balloon/attackby(obj/item/I, mob/user, params) +/obj/item/toy/balloon/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/ammo_casing/foam_dart) && ismonkey(user)) pop_balloon(monkey_pop = TRUE) else @@ -502,7 +502,7 @@ . = ..() . += "There [bullets == 1 ? "is" : "are"] [bullets] cap\s left." -/obj/item/toy/gun/attackby(obj/item/toy/ammo/gun/A, mob/user, params) +/obj/item/toy/gun/attackby(obj/item/toy/ammo/gun/A, mob/user, list/modifiers) if(istype(A, /obj/item/toy/ammo/gun)) if (src.bullets >= 7) @@ -655,7 +655,7 @@ // Copied from /obj/item/melee/energy/sword/attackby -/obj/item/toy/sword/attackby(obj/item/weapon, mob/living/user, params) +/obj/item/toy/sword/attackby(obj/item/weapon, mob/living/user, list/modifiers) if(istype(weapon, /obj/item/toy/sword)) var/obj/item/toy/sword/attatched_sword = weapon if(HAS_TRAIT(weapon, TRAIT_NODROP)) diff --git a/code/game/objects/items/v8_engine.dm b/code/game/objects/items/v8_engine.dm index c75f1ebc13af..a1e86d9b5077 100644 --- a/code/game/objects/items/v8_engine.dm +++ b/code/game/objects/items/v8_engine.dm @@ -70,7 +70,7 @@ AddComponent(/datum/component/two_handed, force_unwielded = 12, force_wielded = 22, attacksound = active_hitsound) RegisterSignals(src, list(COMSIG_ITEM_DROPPED, COMSIG_MOVABLE_PRE_THROW, COMSIG_ITEM_ATTACK_SELF), PROC_REF(reset_charges)) -/obj/item/house_edge/afterattack(atom/target, mob/user, click_parameters) +/obj/item/house_edge/afterattack(atom/target, mob/user, list/modifiers) if(!ismob(target)) return if(HAS_TRAIT(src, TRAIT_WIELDED)) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 4cf2909ab1c6..0cda43f03c5a 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -827,7 +827,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 thrown_datums.Cut() return ..() -/obj/item/melee/baseball_bat/pre_attack(atom/movable/target, mob/living/user, params) +/obj/item/melee/baseball_bat/pre_attack(atom/movable/target, mob/living/user, list/modifiers) var/turf/target_turf = get_turf(target) if(!target_turf) return ..() @@ -941,7 +941,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 )) -/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, click_parameters) +/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, list/modifiers) if(is_type_in_typecache(target, splattable)) to_chat(user, span_warning("You easily splat [target].")) if(isliving(target)) @@ -978,12 +978,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 name = "\improper ACME Extendo-Hand" desc = "A novelty extendo-hand produced by the ACME corporation. Originally designed to knock out roadrunners." -/obj/item/extendohand/attack(atom/M, mob/living/carbon/human/user, params) +/obj/item/extendohand/attack(atom/M, mob/living/carbon/human/user, list/modifiers) var/dist = get_dist(M, user) if(dist < min_reach) to_chat(user, span_warning("[M] is too close to use [src] on.")) return - var/list/modifiers = params2list(params) M.attack_hand(user, modifiers) /obj/item/gohei @@ -1083,16 +1082,16 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 return TRUE return FALSE -/obj/item/highfrequencyblade/pre_attack(atom/A, mob/living/user, params) +/obj/item/highfrequencyblade/pre_attack(atom/target, mob/living/user, list/modifiers) . = ..() if(.) return . if(!HAS_TRAIT(src, TRAIT_WIELDED)) return . // Default attack - if(isliving(A) && HAS_TRAIT(src, TRAIT_PACIFISM)) + if(isliving(target) && HAS_TRAIT(src, TRAIT_PACIFISM)) return . // Default attack (ultimately nothing) - return slash(A, user, params) + return slash(target, user, modifiers) /// triggered on wield of two handed item /obj/item/highfrequencyblade/proc/on_wield(obj/item/source, mob/user) @@ -1102,9 +1101,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/highfrequencyblade/proc/on_unwield(obj/item/source, mob/user) update_icon(UPDATE_ICON_STATE) -/obj/item/highfrequencyblade/proc/slash(atom/target, mob/living/user, params) +/obj/item/highfrequencyblade/proc/slash(atom/target, mob/living/user, list/modifiers) user.do_attack_animation(target, "nothing") - var/list/modifiers = params2list(params) var/damage_mod = 1 var/x_slashed = text2num(modifiers[ICON_X]) || world.icon_size/2 //in case we arent called by a client var/y_slashed = text2num(modifiers[ICON_Y]) || world.icon_size/2 //in case we arent called by a client diff --git a/code/game/objects/items/wizard_weapons.dm b/code/game/objects/items/wizard_weapons.dm index 2211f348b111..d23475808efd 100644 --- a/code/game/objects/items/wizard_weapons.dm +++ b/code/game/objects/items/wizard_weapons.dm @@ -56,7 +56,7 @@ step_towards(A,pull) step_towards(A,pull) -/obj/item/singularityhammer/afterattack(atom/target, mob/user, click_parameters) +/obj/item/singularityhammer/afterattack(atom/target, mob/user, list/modifiers) if(!HAS_TRAIT(src, TRAIT_WIELDED)) return if(!charged) diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 30d1f7944d27..9e68a1fbf45d 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -126,7 +126,7 @@ return FALSE return TRUE -/obj/structure/ai_core/latejoin_inactive/attackby(obj/item/tool, mob/user, params) +/obj/structure/ai_core/latejoin_inactive/attackby(obj/item/tool, mob/user, list/modifiers) if(tool.tool_behaviour == TOOL_MULTITOOL) active = !active to_chat(user, span_notice("You [active? "activate" : "deactivate"] \the [src]'s transmitters.")) @@ -156,7 +156,7 @@ balloon_alert(user, "connected neural network") return ITEM_INTERACT_SUCCESS -/obj/structure/ai_core/attackby(obj/item/tool, mob/living/user, params) +/obj/structure/ai_core/attackby(obj/item/tool, mob/living/user, list/modifiers) if(!anchored) if(tool.tool_behaviour == TOOL_WELDER) if(state != EMPTY_CORE) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index 55e763d01b44..c5576945c982 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -208,7 +208,7 @@ . += mutable_appearance(icon, "brakes_down") . += emissive_appearance(icon, "brakes_down", src, alpha = src.alpha) -/obj/structure/bed/medical/emergency/attackby(obj/item/item, mob/user, params) +/obj/structure/bed/medical/emergency/attackby(obj/item/item, mob/user, list/modifiers) if(istype(item, /obj/item/emergency_bed/silicon)) var/obj/item/emergency_bed/silicon/silicon_bed = item if(silicon_bed.loaded) @@ -254,7 +254,7 @@ righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' w_class = WEIGHT_CLASS_NORMAL // No more excuses, stop getting blood everywhere -/obj/item/emergency_bed/attackby(obj/item/item, mob/living/user, params) +/obj/item/emergency_bed/attackby(obj/item/item, mob/living/user, list/modifiers) if(istype(item, /obj/item/emergency_bed/silicon)) var/obj/item/emergency_bed/silicon/silicon_bed = item if(silicon_bed.loaded) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index e5e23efe5c09..a3fc7948e5cf 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -90,7 +90,7 @@ W.setDir(dir) qdel(src) -/obj/structure/chair/attackby(obj/item/W, mob/user, params) +/obj/structure/chair/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/assembly/shock_kit) && !HAS_TRAIT(src, TRAIT_ELECTRIFIED_BUCKLE)) electrify_self(W, user) return @@ -452,7 +452,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) return TRUE return FALSE -/obj/item/chair/afterattack(atom/target, mob/user, click_parameters) +/obj/item/chair/afterattack(atom/target, mob/user, list/modifiers) if(!prob(break_chance)) return user.visible_message(span_danger("[user] smashes [src] to pieces against [target]")) diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm index cdaa5f2986d3..2b1baea19c5d 100644 --- a/code/game/objects/structures/bonfire.dm +++ b/code/game/objects/structures/bonfire.dm @@ -39,7 +39,7 @@ QDEL_NULL(burning_loop) . = ..() -/obj/structure/bonfire/attackby(obj/item/used_item, mob/living/user, params) +/obj/structure/bonfire/attackby(obj/item/used_item, mob/living/user, list/modifiers) if(istype(used_item, /obj/item/stack/rods) && !can_buckle && !grill) var/obj/item/stack/rods/rods = used_item var/choice = tgui_alert(user, "What would you like to construct?", "Bonfire", list("Stake","Grill")) @@ -68,7 +68,6 @@ if(!user.combat_mode && !(used_item.item_flags & ABSTRACT)) if(user.temporarilyRemoveItemFromInventory(used_item)) used_item.forceMove(get_turf(src)) - var/list/modifiers = params2list(params) //Center the icon where the user clicked. if(!LAZYACCESS(modifiers, ICON_X) || !LAZYACCESS(modifiers, ICON_Y)) return diff --git a/code/game/objects/structures/cannons/cannon.dm b/code/game/objects/structures/cannons/cannon.dm index 3a10cc17189f..bee6649525b2 100644 --- a/code/game/objects/structures/cannons/cannon.dm +++ b/code/game/objects/structures/cannons/cannon.dm @@ -53,7 +53,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/structure/cannon/attackby(obj/item/used_item, mob/user, params) +/obj/structure/cannon/attackby(obj/item/used_item, mob/user, list/modifiers) if(charge_ignited) balloon_alert(user, "it's gonna fire!") return diff --git a/code/game/objects/structures/construction_console/construction_console.dm b/code/game/objects/structures/construction_console/construction_console.dm index 1af9f1bd0975..5c156f1375de 100644 --- a/code/game/objects/structures/construction_console/construction_console.dm +++ b/code/game/objects/structures/construction_console/construction_console.dm @@ -67,10 +67,10 @@ eyeobj.set_telegraph(alerts_cameras) return TRUE -/obj/machinery/computer/camera_advanced/base_construction/attackby(obj/item/W, mob/user, params) +/obj/machinery/computer/camera_advanced/base_construction/attackby(obj/item/W, mob/user, list/modifiers) //If we have an internal RCD, we can refill it by slapping the console with some materials if(internal_rcd && (istype(W, /obj/item/rcd_ammo) || istype(W, /obj/item/stack/sheet))) - internal_rcd.attackby(W, user, params) + internal_rcd.attackby(W, user, modifiers) else return ..() diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index b50753449122..128b61ada153 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -663,7 +663,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) req_access = accesses req_one_access = null -/obj/structure/closet/attackby(obj/item/W, mob/user, params) +/obj/structure/closet/attackby(obj/item/W, mob/user, list/modifiers) if(user in src) return if(src.tool_interact(W,user)) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index fc677da5217b..5434df75be34 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -197,7 +197,7 @@ . = ..() . += span_notice("Right-click with a Security-level ID to reset [src]'s registered ID.") -/obj/structure/closet/secure_closet/brig/genpop/attackby(obj/item/card/id/advanced/prisoner/user_id, mob/user, params) +/obj/structure/closet/secure_closet/brig/genpop/attackby(obj/item/card/id/advanced/prisoner/user_id, mob/user, list/modifiers) if(!secure || !istype(user_id)) return ..() @@ -213,7 +213,7 @@ name = initial(name) update_appearance() -/obj/structure/closet/secure_closet/brig/genpop/attackby_secondary(obj/item/card/id/advanced/used_id, mob/user, params) +/obj/structure/closet/secure_closet/brig/genpop/attackby_secondary(obj/item/card/id/advanced/used_id, mob/user, list/modifiers) if(!secure || !istype(used_id)) return ..() diff --git a/code/game/objects/structures/crates_lockers/crates/bins.dm b/code/game/objects/structures/crates_lockers/crates/bins.dm index a686d53f392c..c79378ccb91a 100644 --- a/code/game/objects/structures/crates_lockers/crates/bins.dm +++ b/code/game/objects/structures/crates_lockers/crates/bins.dm @@ -32,7 +32,7 @@ return . += base_icon_state + "_some" -/obj/structure/closet/crate/bin/attackby(obj/item/W, mob/user, params) +/obj/structure/closet/crate/bin/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/storage/bag/trash) && !opened) var/obj/item/storage/bag/trash/T = W to_chat(user, span_notice("You fill the bag.")) diff --git a/code/game/objects/structures/crates_lockers/crates/large.dm b/code/game/objects/structures/crates_lockers/crates/large.dm index 0a08d9c7949a..1ed0d1330f4b 100644 --- a/code/game/objects/structures/crates_lockers/crates/large.dm +++ b/code/game/objects/structures/crates_lockers/crates/large.dm @@ -30,7 +30,7 @@ else to_chat(user, span_warning("You need a crowbar to pry this open!")) -/obj/structure/closet/crate/large/attackby(obj/item/W, mob/living/user, params) +/obj/structure/closet/crate/large/attackby(obj/item/W, mob/living/user, list/modifiers) if(W.tool_behaviour == TOOL_CROWBAR) if(manifest) tear_manifest(user) diff --git a/code/game/objects/structures/crates_lockers/crates/syndicrate.dm b/code/game/objects/structures/crates_lockers/crates/syndicrate.dm index 8403f8221351..ad4b09895d0e 100644 --- a/code/game/objects/structures/crates_lockers/crates/syndicrate.dm +++ b/code/game/objects/structures/crates_lockers/crates/syndicrate.dm @@ -43,7 +43,7 @@ qdel(src) ///ensures that the syndicrate can only be unlocked by opening it with a syndicrate_key -/obj/structure/closet/crate/secure/syndicrate/attackby(obj/item/item, mob/user, params) +/obj/structure/closet/crate/secure/syndicrate/attackby(obj/item/item, mob/user, list/modifiers) if(!istype(item, /obj/item/syndicrate_key) || created_items) return ..() created_items = TRUE @@ -67,7 +67,7 @@ ) update_appearance() -/obj/structure/closet/crate/secure/syndicrate/attackby_secondary(obj/item/weapon, mob/user, params) +/obj/structure/closet/crate/secure/syndicrate/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/item/syndicrate_key diff --git a/code/game/objects/structures/deployable_turret.dm b/code/game/objects/structures/deployable_turret.dm index 8179b45c575a..2f9ca89629cc 100644 --- a/code/game/objects/structures/deployable_turret.dm +++ b/code/game/objects/structures/deployable_turret.dm @@ -247,7 +247,7 @@ /obj/item/gun_control/CanItemAutoclick() return TRUE -/obj/item/gun_control/attack_atom(obj/O, mob/living/user, params) +/obj/item/gun_control/attack_atom(obj/O, mob/living/user, list/modifiers) user.changeNext_move(CLICK_CD_MELEE) O.attacked_by(src, user) diff --git a/code/game/objects/structures/detectiveboard.dm b/code/game/objects/structures/detectiveboard.dm index 9c9832d36049..33a54d45e530 100644 --- a/code/game/objects/structures/detectiveboard.dm +++ b/code/game/objects/structures/detectiveboard.dm @@ -40,7 +40,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/detectiveboard, 32) /// Attaching evidences: photo and papers -/obj/structure/detectiveboard/attackby(obj/item/item, mob/user, params) +/obj/structure/detectiveboard/attackby(obj/item/item, mob/user, list/modifiers) if(!cases.len) to_chat(user, span_warning("There are no cases!")) return diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 012e8e8a544e..90cdb0c18a30 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -125,7 +125,7 @@ . += "[initial(icon_state)]_closed" return -/obj/structure/displaycase/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/structure/displaycase/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(attacking_item.GetID() && !broken) if(allowed(user)) to_chat(user, span_notice("You [open ? "close":"open"] [src].")) @@ -272,7 +272,7 @@ qdel(src) return ITEM_INTERACT_SUCCESS -/obj/structure/displaycase_chassis/attackby(obj/item/attacking_item, mob/user, params) +/obj/structure/displaycase_chassis/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(istype(attacking_item, /obj/item/electronics/airlock)) balloon_alert(user, "installing electronics...") if(do_after(user, 3 SECONDS, target = src) && user.transferItemToLoc(attacking_item, src)) @@ -359,7 +359,7 @@ holographic_showpiece = TRUE update_appearance() -/obj/structure/displaycase/trophy/attackby(obj/item/attacking_item, mob/user, params) +/obj/structure/displaycase/trophy/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(istype(attacking_item, /obj/item/key/displaycase)) toggle_historian_mode(user) return @@ -609,7 +609,7 @@ return TRUE . = TRUE -/obj/structure/displaycase/forsale/attackby(obj/item/attacking_item, mob/user, params) +/obj/structure/displaycase/forsale/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(isidcard(attacking_item)) //Card Registration var/obj/item/card/id/potential_acc = attacking_item diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index a410e0af4416..8beacd61f79f 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -83,7 +83,7 @@ if(doorname) . += span_notice("There is a small paper placard on the assembly labelled \"[doorname]\".") -/obj/structure/door_assembly/attackby(obj/item/W, mob/living/user, params) +/obj/structure/door_assembly/attackby(obj/item/W, mob/living/user, list/modifiers) if(IS_WRITING_UTENSIL(W) && !user.combat_mode) var/t = tgui_input_text(user, "Enter the name for the door", "Airlock Renaming", created_name, MAX_NAME_LEN) if(!t) diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index cf3864b14005..5c3db19544a8 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -7,7 +7,7 @@ density = TRUE anchored = TRUE -/obj/structure/dresser/attackby(obj/item/I, mob/user, params) +/obj/structure/dresser/attackby(obj/item/I, mob/user, list/modifiers) if(I.tool_behaviour == TOOL_WRENCH) to_chat(user, span_notice("You begin to [anchored ? "unwrench" : "wrench"] [src].")) if(I.use_tool(src, user, 20, volume=50)) diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index 70fb5b57ae23..2150c5af4ba1 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -13,7 +13,7 @@ export_to_component = color_atom_overlay(export_to_component) AddComponent(/datum/component/electrified_buckle, (SHOCK_REQUIREMENT_ITEM | SHOCK_REQUIREMENT_LIVE_CABLE | SHOCK_REQUIREMENT_SIGNAL_RECEIVED_TOGGLE), stored_kit, list(export_to_component)) -/obj/structure/chair/e_chair/attackby(obj/item/W, mob/user, params) +/obj/structure/chair/e_chair/attackby(obj/item/W, mob/user, list/modifiers) if(W.tool_behaviour == TOOL_WRENCH) var/obj/structure/chair/C = new /obj/structure/chair(loc) W.play_tool_sound(src) diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index c4176048e4dc..fc9ac77f14a3 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -65,7 +65,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29) stored_extinguisher = null update_appearance(UPDATE_ICON) -/obj/structure/extinguisher_cabinet/attackby(obj/item/used_item, mob/living/user, params) +/obj/structure/extinguisher_cabinet/attackby(obj/item/used_item, mob/living/user, list/modifiers) if(used_item.tool_behaviour == TOOL_WRENCH && !stored_extinguisher) user.balloon_alert(user, "deconstructing cabinet...") used_item.play_tool_sound(src) diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 79b34ff74b83..a1ec3f823f5a 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -123,7 +123,7 @@ return ITEM_INTERACT_SUCCESS return -/obj/structure/falsewall/attackby(obj/item/W, mob/user, params) +/obj/structure/falsewall/attackby(obj/item/W, mob/user, list/modifiers) if(!opening) return ..() to_chat(user, span_warning("You must wait until the door has stopped moving!")) @@ -200,7 +200,7 @@ . = ..() RegisterSignal(src, COMSIG_ATOM_PROPAGATE_RAD_PULSE, PROC_REF(radiate)) -/obj/structure/falsewall/uranium/attackby(obj/item/W, mob/user, params) +/obj/structure/falsewall/uranium/attackby(obj/item/W, mob/user, list/modifiers) radiate() return ..() diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 2bdc002f3920..44a33f9691ba 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -43,7 +43,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32) QDEL_NULL(held_item) return ..() -/obj/structure/fireaxecabinet/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/structure/fireaxecabinet/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(iscyborg(user) || attacking_item.tool_behaviour == TOOL_MULTITOOL) toggle_lock(user) else if(attacking_item.tool_behaviour == TOOL_WELDER && !user.combat_mode && !broken) diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 2cfd490203c0..f5ed6826a79b 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -52,7 +52,7 @@ /// Flags for the flora to determine what kind of sound to play when it gets hit var/flora_flags = NONE -/obj/structure/flora/attackby(obj/item/used_item, mob/living/user, params) +/obj/structure/flora/attackby(obj/item/used_item, mob/living/user, list/modifiers) if(user.combat_mode) return ..() if(flags_1 & HOLOGRAM_1) diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index 84b090f8127f..f01bc7a3f42b 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -14,7 +14,7 @@ ///If true, the structure can be deconstructed into a metal sheet with a wrench. var/deconstructible = TRUE -/obj/structure/fluff/attackby(obj/item/I, mob/living/user, params) +/obj/structure/fluff/attackby(obj/item/I, mob/living/user, list/modifiers) if(I.tool_behaviour == TOOL_WRENCH && deconstructible) user.visible_message(span_notice("[user] starts disassembling [src]..."), span_notice("You start disassembling [src]...")) I.play_tool_sound(src) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index c26411a30e75..90e9b6ea526f 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -38,7 +38,7 @@ if(GIRDER_TRAM) . += span_notice("[src] is designed for tram usage. Deconstructed with a screwdriver!") -/obj/structure/girder/attackby(obj/item/W, mob/user, params) +/obj/structure/girder/attackby(obj/item/W, mob/user, list/modifiers) var/platingmodifier = 1 if(HAS_TRAIT(user, TRAIT_QUICK_BUILD)) platingmodifier = 0.7 @@ -427,7 +427,7 @@ icon_state= "cultgirder" can_displace = FALSE -/obj/structure/girder/cult/attackby(obj/item/W, mob/user, params) +/obj/structure/girder/cult/attackby(obj/item/W, mob/user, list/modifiers) add_fingerprint(user) if(W.tool_behaviour == TOOL_WELDER) if(!W.tool_start_check(user, amount=1)) @@ -498,7 +498,7 @@ icon_state = "wall_gear" can_displace = FALSE -/obj/structure/girder/bronze/attackby(obj/item/W, mob/living/user, params) +/obj/structure/girder/bronze/attackby(obj/item/W, mob/living/user, list/modifiers) add_fingerprint(user) if(W.tool_behaviour == TOOL_WELDER) if(!W.tool_start_check(user, amount = 0)) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 692ce8c91497..61ede900cd4f 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -215,7 +215,7 @@ span_notice("You [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor.")) return ITEM_INTERACT_SUCCESS -/obj/structure/grille/attackby(obj/item/W, mob/user, params) +/obj/structure/grille/attackby(obj/item/W, mob/user, list/modifiers) user.changeNext_move(CLICK_CD_MELEE) if(istype(W, /obj/item/stack/rods) && broken && do_after(user, 1 SECONDS, target = src)) if(shock(user, 90)) diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm index 029ff62a427a..a9c980cb34a4 100644 --- a/code/game/objects/structures/guillotine.dm +++ b/code/game/objects/structures/guillotine.dm @@ -183,7 +183,7 @@ blade_status = GUILLOTINE_BLADE_DROPPED icon_state = "guillotine" -/obj/structure/guillotine/attackby(obj/item/W, mob/user, params) +/obj/structure/guillotine/attackby(obj/item/W, mob/user, list/modifiers) if (istype(W, /obj/item/sharpener)) add_fingerprint(user) if (blade_status == GUILLOTINE_BLADE_SHARPENING) diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index 408f11c230c2..eec60ffa8a8e 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -31,7 +31,7 @@ . += new /mutable_appearance(gun_overlay) . += "[icon_state]_[open ? "open" : "door"]" -/obj/structure/guncase/attackby(obj/item/I, mob/living/user, params) +/obj/structure/guncase/attackby(obj/item/I, mob/living/user, list/modifiers) if(iscyborg(user) || isalien(user)) return if(istype(I, gun_category) && open) diff --git a/code/game/objects/structures/janitor.dm b/code/game/objects/structures/janitor.dm index 0413bcac5398..53c38e4b5391 100644 --- a/code/game/objects/structures/janitor.dm +++ b/code/game/objects/structures/janitor.dm @@ -28,14 +28,14 @@ return . -/obj/structure/mop_bucket/attackby(obj/item/weapon, mob/user, params) +/obj/structure/mop_bucket/attackby(obj/item/weapon, mob/user, list/modifiers) if(istype(weapon, /obj/item/reagent_containers)) update_appearance(UPDATE_OVERLAYS) return FALSE // skip attack animation when refilling cart return ..() -/obj/structure/mop_bucket/attackby_secondary(obj/item/weapon, mob/user, params) +/obj/structure/mop_bucket/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) if(istype(weapon, /obj/item/mop)) if(weapon.reagents.total_volume >= weapon.reagents.maximum_volume) balloon_alert(user, "already soaked!") @@ -182,7 +182,7 @@ return . || NONE -/obj/structure/mop_bucket/janitorialcart/attackby(obj/item/attacking_item, mob/user, params) +/obj/structure/mop_bucket/janitorialcart/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(istype(attacking_item, /obj/item/mop)) if(mymop) balloon_alert(user, "already has \a [mymop]!") @@ -241,7 +241,7 @@ update_appearance(UPDATE_OVERLAYS) return ITEM_INTERACT_SUCCESS -/obj/structure/mop_bucket/janitorialcart/attackby_secondary(obj/item/weapon, mob/user, params) +/obj/structure/mop_bucket/janitorialcart/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index c51b878496c6..8916156b225e 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -50,7 +50,7 @@ default_unfasten_wrench(user, tool) return TRUE -/obj/structure/kitchenspike_frame/attackby(obj/item/attacking_item, mob/user, params) +/obj/structure/kitchenspike_frame/attackby(obj/item/attacking_item, mob/user, list/modifiers) add_fingerprint(user) if(!istype(attacking_item, /obj/item/stack/rods)) return ..() diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index 9eed58686d86..f7e9e2776c9b 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -374,11 +374,11 @@ use(user, going_up = FALSE) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/structure/ladder/attackby(obj/item/item, mob/user, params) +/obj/structure/ladder/attackby(obj/item/item, mob/user, list/modifiers) use(user) return TRUE -/obj/structure/ladder/attackby_secondary(obj/item/item, mob/user, params) +/obj/structure/ladder/attackby_secondary(obj/item/item, mob/user, list/modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 0d7d23191742..e60d525cb58d 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -48,7 +48,7 @@ /obj/structure/lattice/blob_act(obj/structure/blob/B) return -/obj/structure/lattice/attackby(obj/item/C, mob/user, params) +/obj/structure/lattice/attackby(obj/item/C, mob/user, list/modifiers) if(resistance_flags & INDESTRUCTIBLE) return if(C.tool_behaviour == TOOL_WIRECUTTER) @@ -153,7 +153,7 @@ /obj/structure/lattice/lava/deconstruction_hints(mob/user) return span_notice("The rods look like they could be cut, but the heat treatment will shatter off. There's space for a tile.") -/obj/structure/lattice/lava/attackby(obj/item/attacking_item, mob/user, params) +/obj/structure/lattice/lava/attackby(obj/item/attacking_item, mob/user, list/modifiers) . = ..() if(!istype(attacking_item, /obj/item/stack/tile/iron)) return diff --git a/code/game/objects/structures/lavaland/geyser.dm b/code/game/objects/structures/lavaland/geyser.dm index 169bf6250771..632d7eff694c 100644 --- a/code/game/objects/structures/lavaland/geyser.dm +++ b/code/game/objects/structures/lavaland/geyser.dm @@ -58,7 +58,7 @@ else stop_chemming() //we're full -/obj/structure/geyser/attackby(obj/item/item, mob/user, params) +/obj/structure/geyser/attackby(obj/item/item, mob/user, list/modifiers) if(!istype(item, /obj/item/mining_scanner) && !istype(item, /obj/item/t_scanner/adv_mining_scanner)) playsound(src, SFX_INDUSTRIAL_SCAN, 20, TRUE, -2, TRUE, FALSE) return ..() //this runs the plunger code @@ -142,7 +142,7 @@ ///What layer we set it to var/target_layer = DUCT_LAYER_DEFAULT -/obj/item/plunger/attack_atom(obj/O, mob/living/user, params) +/obj/item/plunger/attack_atom(obj/O, mob/living/user, list/modifiers) if(layer_mode) SEND_SIGNAL(O, COMSIG_MOVABLE_CHANGE_DUCT_LAYER, O, target_layer) return ..() diff --git a/code/game/objects/structures/maintenance.dm b/code/game/objects/structures/maintenance.dm index 0d4fc6782288..2e648d70797e 100644 --- a/code/game/objects/structures/maintenance.dm +++ b/code/game/objects/structures/maintenance.dm @@ -92,7 +92,7 @@ at the cost of risking a vicious bite.**/ return to_chat(user, span_warning("You find nothing of value...")) -/obj/structure/moisture_trap/attackby(obj/item/I, mob/user, params) +/obj/structure/moisture_trap/attackby(obj/item/I, mob/user, list/modifiers) if(iscyborg(user) || isalien(user) || !CanReachInside(user)) return ..() add_fingerprint(user) @@ -137,7 +137,7 @@ at the cost of risking a vicious bite.**/ /// Stage of the pants making process var/status = ALTAR_INACTIVE -/obj/structure/destructible/cult/pants_altar/attackby(obj/attacking_item, mob/user, params) +/obj/structure/destructible/cult/pants_altar/attackby(obj/attacking_item, mob/user, list/modifiers) if(istype(attacking_item, /obj/item/melee/cultblade/dagger) && IS_CULTIST(user) && status) to_chat(user, span_notice("[src] is creating something, you can't move it!")) return diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 3a7de37f2e6a..fdb105776212 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -569,7 +569,7 @@ GLOBAL_LIST_EMPTY(crematoriums) INVOKE_ASYNC(clicker, TYPE_PROC_REF(/mob, ClickOn), src, params) -/obj/structure/tray/attackby(obj/P, mob/user, params) +/obj/structure/tray/attackby(obj/P, mob/user, list/modifiers) if(!istype(P, /obj/item/riding_offhand)) return ..() diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 2d5ef6f0ebc8..022b0df6e777 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -29,7 +29,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/noticeboard, 32) find_and_hang_on_wall() //attaching papers!! -/obj/structure/noticeboard/attackby(obj/item/O, mob/user, params) +/obj/structure/noticeboard/attackby(obj/item/O, mob/user, list/modifiers) if(istype(O, /obj/item/paper) || istype(O, /obj/item/photo)) if(!allowed(user)) to_chat(user, span_warning("You are not authorized to add notices!")) diff --git a/code/game/objects/structures/plaques/_plaques.dm b/code/game/objects/structures/plaques/_plaques.dm index 4e28f7c38c15..5b64b8b1413c 100644 --- a/code/game/objects/structures/plaques/_plaques.dm +++ b/code/game/objects/structures/plaques/_plaques.dm @@ -83,7 +83,7 @@ atom_integrity = max_integrity return TRUE -/obj/structure/plaque/attackby(obj/item/I, mob/user, params) +/obj/structure/plaque/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/pen/fountain)) if(engraved) to_chat(user, span_warning("This plaque has already been engraved.")) @@ -156,7 +156,7 @@ return TRUE -/obj/item/plaque/attackby(obj/item/I, mob/user, params) //Same as part of the above, except for the item in hand instead of the structure. +/obj/item/plaque/attackby(obj/item/I, mob/user, list/modifiers) //Same as part of the above, except for the item in hand instead of the structure. if(istype(I, /obj/item/pen/fountain)) if(engraved) to_chat(user, span_warning("This plaque has already been engraved.")) diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm index 2651684e39b8..c5386de60a13 100644 --- a/code/game/objects/structures/railings.dm +++ b/code/game/objects/structures/railings.dm @@ -71,7 +71,7 @@ else . += span_notice("The railing is unbolted from the floor and can be deconstructed with wirecutters.") -/obj/structure/railing/attackby(obj/item/I, mob/living/user, params) +/obj/structure/railing/attackby(obj/item/I, mob/living/user, list/modifiers) ..() add_fingerprint(user) diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index 4b498a05d921..c174c462aac4 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -132,7 +132,7 @@ return ITEM_INTERACT_SUCCESS -/obj/structure/reflector/attackby(obj/item/W, mob/user, params) +/obj/structure/reflector/attackby(obj/item/W, mob/user, list/modifiers) if(admin) return //Finishing the frame diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 9e9e15b3c3a0..0f9ba11a888e 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -60,7 +60,7 @@ FLOOR SAFES icon_state = "[initial(icon_state)][open ? "-open" : null]" return ..() -/obj/structure/safe/attackby(obj/item/attacking_item, mob/user, params) +/obj/structure/safe/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(open) . = TRUE //no afterattack if(attacking_item.w_class + space <= maxspace) diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm index ce0163120e42..8ca502381bb0 100644 --- a/code/game/objects/structures/shower.dm +++ b/code/game/objects/structures/shower.dm @@ -127,7 +127,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16)) to_chat(user, span_notice("The water temperature seems to be [current_temperature].")) return TRUE -/obj/machinery/shower/attackby(obj/item/tool, mob/user, params) +/obj/machinery/shower/attackby(obj/item/tool, mob/user, list/modifiers) if(istype(tool, /obj/item/stock_parts/water_recycler)) if(has_water_reclaimer) to_chat(user, span_warning("There is already has a water recycler installed.")) @@ -342,7 +342,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16)) . = ..() AddComponent(/datum/component/simple_rotation) -/obj/structure/showerframe/attackby(obj/item/tool, mob/living/user, params) +/obj/structure/showerframe/attackby(obj/item/tool, mob/living/user, list/modifiers) if(istype(tool, /obj/item/stock_parts/water_recycler)) qdel(tool) var/obj/machinery/shower/shower = new(loc, REVERSE_DIR(dir), TRUE) diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm index 6226161bfff4..adb9a53a72d0 100644 --- a/code/game/objects/structures/signs/_signs.dm +++ b/code/game/objects/structures/signs/_signs.dm @@ -84,7 +84,7 @@ atom_integrity = max_integrity return TRUE -/obj/structure/sign/attackby(obj/item/I, mob/user, params) +/obj/structure/sign/attackby(obj/item/I, mob/user, list/modifiers) if(is_editable && IS_WRITING_UTENSIL(I)) if(!length(GLOB.editable_sign_types)) CRASH("GLOB.editable_sign_types failed to populate") @@ -191,7 +191,7 @@ context[SCREENTIP_CONTEXT_LMB] = "Change design" return CONTEXTUAL_SCREENTIP_SET -/obj/item/sign/attackby(obj/item/I, mob/user, params) +/obj/item/sign/attackby(obj/item/I, mob/user, list/modifiers) if(is_editable && IS_WRITING_UTENSIL(I)) if(!length(GLOB.editable_sign_types)) CRASH("GLOB.editable_sign_types failed to populate") diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm index 4fb7b8df14e7..1cf92cc09e32 100644 --- a/code/game/objects/structures/spawner.dm +++ b/code/game/objects/structures/spawner.dm @@ -39,7 +39,7 @@ else . += span_notice("It looks like you could probably scan and tag it with a [scanner_descriptor].") -/obj/structure/spawner/attackby(obj/item/item, mob/user, params) +/obj/structure/spawner/attackby(obj/item/item, mob/user, list/modifiers) . = ..() if(.) return TRUE diff --git a/code/game/objects/structures/stairs.dm b/code/game/objects/structures/stairs.dm index 21d78cae8cd1..55a4356a502f 100644 --- a/code/game/objects/structures/stairs.dm +++ b/code/game/objects/structures/stairs.dm @@ -346,7 +346,7 @@ /obj/structure/stairs_frame/atom_deconstruct(disassembled = TRUE) new frame_stack(get_turf(src), frame_stack_amount) -/obj/structure/stairs_frame/attackby(obj/item/attacked_by, mob/user, params) +/obj/structure/stairs_frame/attackby(obj/item/attacked_by, mob/user, list/modifiers) if(!isstack(attacked_by)) return ..() if(!anchored) diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index d14ac04d9f71..60a52b2359fb 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -59,7 +59,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/structure/tank_dispenser/attackby(obj/item/I, mob/living/user, params) +/obj/structure/tank_dispenser/attackby(obj/item/I, mob/living/user, list/modifiers) var/full if(istype(I, /obj/item/tank/internals/plasma)) if(plasmatanks < TANK_DISPENSER_CAPACITY) diff --git a/code/game/objects/structures/tank_holder.dm b/code/game/objects/structures/tank_holder.dm index 34284b1f1dd0..d942f95974ff 100644 --- a/code/game/objects/structures/tank_holder.dm +++ b/code/game/objects/structures/tank_holder.dm @@ -42,7 +42,7 @@ . += "It is empty." . += span_notice("It is held together by some screws.") -/obj/structure/tank_holder/attackby(obj/item/W, mob/living/user, params) +/obj/structure/tank_holder/attackby(obj/item/W, mob/living/user, list/modifiers) if(user.combat_mode) return ..() if(W.tool_behaviour == TOOL_WRENCH) diff --git a/code/game/objects/structures/toiletbong.dm b/code/game/objects/structures/toiletbong.dm index 0ea21e9ff848..d4952de90ff5 100644 --- a/code/game/objects/structures/toiletbong.dm +++ b/code/game/objects/structures/toiletbong.dm @@ -100,7 +100,7 @@ to_chat(user, span_boldwarning("The [emag_card] falls into the toilet. You fish it back out. Looks like you broke the toilet.")) return TRUE -/obj/structure/toiletbong/attackby(obj/item/attacking_item, mob/user, params) +/obj/structure/toiletbong/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(istype(attacking_item, /obj/item/card/emag)) return return ..() diff --git a/code/game/objects/structures/training_machine.dm b/code/game/objects/structures/training_machine.dm index bed4c4805cca..1a92afc4f84d 100644 --- a/code/game/objects/structures/training_machine.dm +++ b/code/game/objects/structures/training_machine.dm @@ -360,16 +360,16 @@ ///Number of hits made since the Lap button (alt-click) was last pushed var/lap_hits = 0 -/obj/item/training_toolbox/pre_attack(atom/A, mob/living/user, params) +/obj/item/training_toolbox/pre_attack(atom/target, mob/living/user, list/modifiers) . = ..() if(.) return . - if(A == user || !user.combat_mode) + if(target == user || !user.combat_mode) return . - if(!check_hit(A)) + if(!check_hit(target)) return . user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(A) + user.do_attack_animation(target) return TRUE /** diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm index 8fc1426c5f36..32d5929ab369 100644 --- a/code/game/objects/structures/transit_tubes/station.dm +++ b/code/game/objects/structures/transit_tubes/station.dm @@ -93,7 +93,7 @@ break -/obj/structure/transit_tube/station/attackby(obj/item/W, mob/user, params) +/obj/structure/transit_tube/station/attackby(obj/item/W, mob/user, list/modifiers) if(W.tool_behaviour == TOOL_CROWBAR) for(var/obj/structure/transit_tube_pod/P in loc) P.deconstruct(FALSE, user) diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm index a4259c9d554d..ee1193a3a320 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube.dm @@ -32,7 +32,7 @@ if(current_size >= STAGE_FIVE) deconstruct(FALSE) -/obj/structure/transit_tube/attackby(obj/item/W, mob/user, params) +/obj/structure/transit_tube/attackby(obj/item/W, mob/user, list/modifiers) if(W.tool_behaviour == TOOL_WRENCH) if(tube_construction) for(var/obj/structure/transit_tube_pod/pod in src.loc) diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index b1168302f683..8832335728a1 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -27,7 +27,7 @@ icon_state = contents.len ? occupied_icon_state : initial(icon_state) return ..() -/obj/structure/transit_tube_pod/attackby(obj/item/I, mob/user, params) +/obj/structure/transit_tube_pod/attackby(obj/item/I, mob/user, list/modifiers) if(I.tool_behaviour == TOOL_CROWBAR) if(!moving) I.play_tool_sound(src) diff --git a/code/game/objects/structures/votingbox.dm b/code/game/objects/structures/votingbox.dm index 296a5149e1ed..fab8b2f70a78 100644 --- a/code/game/objects/structures/votingbox.dm +++ b/code/game/objects/structures/votingbox.dm @@ -19,7 +19,7 @@ var/list/voted //List of ID's that already voted. COOLDOWN_DECLARE(vote_print_cooldown) -/obj/structure/votebox/attackby(obj/item/I, mob/living/user, params) +/obj/structure/votebox/attackby(obj/item/I, mob/living/user, list/modifiers) if(istype(I,/obj/item/card/id)) if(!owner) register_owner(I,user) diff --git a/code/game/objects/structures/water_structures/sink.dm b/code/game/objects/structures/water_structures/sink.dm index 1059f9fd5b0f..85d420052ec2 100644 --- a/code/game/objects/structures/water_structures/sink.dm +++ b/code/game/objects/structures/water_structures/sink.dm @@ -103,7 +103,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink, (-14)) user.visible_message(span_notice("[user] washes [user.p_their()] [washing_face ? "face" : "hands"] using [src]."), \ span_notice("You wash your [washing_face ? "face" : "hands"] using [src].")) -/obj/structure/sink/attackby(obj/item/O, mob/living/user, params) +/obj/structure/sink/attackby(obj/item/O, mob/living/user, list/modifiers) if(busy) to_chat(user, span_warning("Someone's already washing here!")) return @@ -255,7 +255,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink/kitchen, (-16)) . = ..() AddComponent(/datum/component/simple_rotation) -/obj/structure/sinkframe/attackby(obj/item/tool, mob/living/user, params) +/obj/structure/sinkframe/attackby(obj/item/tool, mob/living/user, list/modifiers) if(istype(tool, /obj/item/stock_parts/water_recycler)) qdel(tool) var/obj/structure/sink/greyscale/new_sink = new(loc, REVERSE_DIR(dir), TRUE) diff --git a/code/game/objects/structures/water_structures/toilet.dm b/code/game/objects/structures/water_structures/toilet.dm index ad2d71f3d046..24243921991e 100644 --- a/code/game/objects/structures/water_structures/toilet.dm +++ b/code/game/objects/structures/water_structures/toilet.dm @@ -188,7 +188,7 @@ for(var/datum/material/M as anything in custom_materials) new M.sheet_type(loc, FLOOR(custom_materials[M] / SHEET_MATERIAL_AMOUNT, 1)) -/obj/structure/toilet/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/structure/toilet/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) add_fingerprint(user) if(cover_open && istype(attacking_item, /obj/item/fish)) if(fishes >= 3) diff --git a/code/game/objects/structures/water_structures/urinal.dm b/code/game/objects/structures/water_structures/urinal.dm index 3b34e2cc0e5b..97db0fa26875 100644 --- a/code/game/objects/structures/water_structures/urinal.dm +++ b/code/game/objects/structures/water_structures/urinal.dm @@ -51,7 +51,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/urinal, 32) return return ..() -/obj/structure/urinal/attackby(obj/item/attacking_item, mob/user, params) +/obj/structure/urinal/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(exposed) if(hidden_item) to_chat(user, span_warning("There is already something in the drain enclosure!")) diff --git a/code/game/objects/structures/water_structures/water_source.dm b/code/game/objects/structures/water_structures/water_source.dm index 9e1b5b40e0e9..42c51b81c5a9 100644 --- a/code/game/objects/structures/water_structures/water_source.dm +++ b/code/game/objects/structures/water_structures/water_source.dm @@ -57,7 +57,7 @@ span_notice("You wash your [washing_face ? "face" : "hands"] using [src]."), ) -/obj/structure/water_source/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/structure/water_source/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(busy) to_chat(user, span_warning("Someone's already washing here!")) return @@ -138,7 +138,7 @@ . = ..() icon_state = base_icon_state -/obj/structure/water_source/puddle/attackby(obj/item/attacking_item, mob/user, params) +/obj/structure/water_source/puddle/attackby(obj/item/attacking_item, mob/user, list/modifiers) icon_state = "[base_icon_state]-splash" . = ..() icon_state = base_icon_state diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 195fbbc643e0..9ddd8563ab7a 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -92,7 +92,7 @@ leaving.Bump(src) return COMPONENT_ATOM_BLOCK_EXIT -/obj/structure/windoor_assembly/attackby(obj/item/W, mob/user, params) +/obj/structure/windoor_assembly/attackby(obj/item/W, mob/user, list/modifiers) //I really should have spread this out across more states but thin little windoors are hard to sprite. add_fingerprint(user) switch(state) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 221c0dbea93d..3c0ebaa2afe2 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -270,7 +270,7 @@ return ITEM_INTERACT_SUCCESS -/obj/structure/window/attackby(obj/item/I, mob/living/user, params) +/obj/structure/window/attackby(obj/item/I, mob/living/user, list/modifiers) if(!can_be_reached(user)) return TRUE //skip the afterattack @@ -468,7 +468,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/unanchored/spawner, 0) return list("delay" = 3 SECONDS, "cost" = 15) return FALSE -/obj/structure/window/reinforced/attackby_secondary(obj/item/tool, mob/user, params) +/obj/structure/window/reinforced/attackby_secondary(obj/item/tool, mob/user, list/modifiers) switch(state) if(RWINDOW_SECURE) if(tool.tool_behaviour == TOOL_WELDER) diff --git a/code/game/turfs/closed/indestructible.dm b/code/game/turfs/closed/indestructible.dm index 6fa1fd0ed69d..b6e6f3b74ba9 100644 --- a/code/game/turfs/closed/indestructible.dm +++ b/code/game/turfs/closed/indestructible.dm @@ -20,7 +20,7 @@ /turf/closed/indestructible/singularity_act() return -/turf/closed/indestructible/attackby(obj/item/attacking_item, mob/user, params) +/turf/closed/indestructible/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(istype(attacking_item, /obj/item/poster) && Adjacent(user)) return place_poster(attacking_item, user) diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index 9c66ccc9d8e0..872a11e7eb3d 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -92,7 +92,7 @@ return ..() -/turf/closed/mineral/attackby(obj/item/I, mob/user, params) +/turf/closed/mineral/attackby(obj/item/I, mob/user, list/modifiers) if (!ISADVANCEDTOOLUSER(user)) to_chat(usr, span_warning("You don't have the dexterity to do this!")) return @@ -676,7 +676,7 @@ det_time = rand(8,10) //So you don't know exactly when the hot potato will explode . = ..() -/turf/closed/mineral/gibtonite/attackby(obj/item/attacking_item, mob/living/user, params) +/turf/closed/mineral/gibtonite/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) var/previous_stage = stage if(istype(attacking_item, /obj/item/mining_scanner) || istype(attacking_item, /obj/item/t_scanner/adv_mining_scanner) && stage == GIBTONITE_ACTIVE) user.visible_message(span_notice("[user] holds [attacking_item] to [src]..."), span_notice("You use [attacking_item] to locate where to cut off the chain reaction and attempt to stop it...")) @@ -793,7 +793,7 @@ base_icon_state = "rock_wall" smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER -/turf/closed/mineral/strong/attackby(obj/item/I, mob/user, params) +/turf/closed/mineral/strong/attackby(obj/item/I, mob/user, list/modifiers) if(!ishuman(user)) to_chat(usr, span_warning("Only a more advanced species could break a rock such as this one!")) return FALSE diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm index 7a951e9abc58..c27d11d9fdeb 100644 --- a/code/game/turfs/closed/wall/mineral_walls.dm +++ b/code/game/turfs/closed/wall/mineral_walls.dm @@ -125,7 +125,7 @@ radiate() return ..() -/turf/closed/wall/mineral/uranium/attackby(obj/item/W, mob/user, params) +/turf/closed/wall/mineral/uranium/attackby(obj/item/W, mob/user, list/modifiers) radiate() return ..() diff --git a/code/game/turfs/open/asteroid.dm b/code/game/turfs/open/asteroid.dm index bcc4f7fbb966..c6625ce8ecdf 100644 --- a/code/game/turfs/open/asteroid.dm +++ b/code/game/turfs/open/asteroid.dm @@ -59,7 +59,7 @@ /turf/open/misc/asteroid/ex_act(severity, target) return FALSE -/turf/open/misc/asteroid/attackby(obj/item/attack_item, mob/user, params) +/turf/open/misc/asteroid/attackby(obj/item/attack_item, mob/user, list/modifiers) . = ..() if(.) return TRUE diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index 0e1863d14e17..62c46e9214fa 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -125,25 +125,25 @@ W.update_appearance() return W -/turf/open/floor/attackby(obj/item/object, mob/living/user, params) +/turf/open/floor/attackby(obj/item/object, mob/living/user, list/modifiers) if(!object || !user) return TRUE . = ..() if(.) return . if(overfloor_placed && istype(object, /obj/item/stack/tile)) - try_replace_tile(object, user, params) + try_replace_tile(object, user, modifiers) return TRUE if(user.combat_mode && istype(object, /obj/item/stack/sheet)) var/obj/item/stack/sheet/sheets = object - return sheets.on_attack_floor(user, params) + return sheets.on_attack_floor(user, modifiers) return FALSE /turf/open/floor/crowbar_act(mob/living/user, obj/item/I) if(overfloor_placed && pry_tile(I, user)) return TRUE -/turf/open/floor/proc/try_replace_tile(obj/item/stack/tile/T, mob/user, params) +/turf/open/floor/proc/try_replace_tile(obj/item/stack/tile/T, mob/user, list/modifiers) if(T.turf_type == type && T.turf_dir == dir) return var/obj/item/crowbar/CB = user.is_holding_tool_quality(TOOL_CROWBAR) @@ -152,7 +152,7 @@ var/turf/open/floor/plating/P = pry_tile(CB, user, TRUE) if(!istype(P)) return - P.attackby(T, user, params) + P.attackby(T, user, modifiers) /turf/open/floor/proc/pry_tile(obj/item/I, mob/user, silent = FALSE) I.play_tool_sound(src, 80) diff --git a/code/game/turfs/open/floor/fancy_floor.dm b/code/game/turfs/open/floor/fancy_floor.dm index 418afff71481..24abffca7ee7 100644 --- a/code/game/turfs/open/floor/fancy_floor.dm +++ b/code/game/turfs/open/floor/fancy_floor.dm @@ -31,7 +31,7 @@ return TRUE return pry_tile(I, user) ? TRUE : FALSE -/turf/open/floor/wood/try_replace_tile(obj/item/stack/tile/T, mob/user, params) +/turf/open/floor/wood/try_replace_tile(obj/item/stack/tile/T, mob/user, list/modifiers) if(T.turf_type == type) return var/obj/item/tool = user.is_holding_tool_quality(TOOL_SCREWDRIVER) @@ -42,7 +42,7 @@ var/turf/open/floor/plating/P = pry_tile(tool, user, TRUE) if(!istype(P)) return - P.attackby(T, user, params) + P.attackby(T, user, modifiers) /turf/open/floor/wood/pry_tile(obj/item/C, mob/user, silent = FALSE) C.play_tool_sound(src, 80) @@ -212,7 +212,7 @@ /turf/open/floor/fake_snow/broken_states() return list("snow_dug") -/turf/open/floor/fake_snow/try_replace_tile(obj/item/stack/tile/T, mob/user, params) +/turf/open/floor/fake_snow/try_replace_tile(obj/item/stack/tile/T, mob/user, list/modifiers) return /turf/open/floor/fake_snow/crowbar_act(mob/living/user, obj/item/I) diff --git a/code/game/turfs/open/floor/light_floor.dm b/code/game/turfs/open/floor/light_floor.dm index dd30a86d8de4..8779c604fa4a 100644 --- a/code/game/turfs/open/floor/light_floor.dm +++ b/code/game/turfs/open/floor/light_floor.dm @@ -129,7 +129,7 @@ currentcolor = choice update_appearance() -/turf/open/floor/light/attackby(obj/item/C, mob/user, params) +/turf/open/floor/light/attackby(obj/item/C, mob/user, list/modifiers) if(..()) return if(istype(C, /obj/item/light/bulb)) //only for light tiles diff --git a/code/game/turfs/open/floor/mineral_floor.dm b/code/game/turfs/open/floor/mineral_floor.dm index 620bfe85e04a..c2ceab62d474 100644 --- a/code/game/turfs/open/floor/mineral_floor.dm +++ b/code/game/turfs/open/floor/mineral_floor.dm @@ -192,7 +192,7 @@ if(isliving(arrived)) squeak() -/turf/open/floor/mineral/bananium/attackby(obj/item/W, mob/user, params) +/turf/open/floor/mineral/bananium/attackby(obj/item/W, mob/user, list/modifiers) .=..() if(!.) honk() @@ -248,7 +248,7 @@ if(isliving(arrived)) radiate() -/turf/open/floor/mineral/uranium/attackby(obj/item/W, mob/user, params) +/turf/open/floor/mineral/uranium/attackby(obj/item/W, mob/user, list/modifiers) .=..() if(!.) radiate() diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm index ec5bbc0f78d6..ce853b506502 100644 --- a/code/game/turfs/open/floor/plating.dm +++ b/code/game/turfs/open/floor/plating.dm @@ -46,7 +46,7 @@ #define PLATE_REINFORCE_COST 2 -/turf/open/floor/plating/attackby(obj/item/C, mob/user, params) +/turf/open/floor/plating/attackby(obj/item/C, mob/user, list/modifiers) if(..()) return if(istype(C, /obj/item/stack/rods) && attachment_holes) @@ -141,7 +141,7 @@ /turf/open/floor/plating/foam/break_tile() return //jetfuel can't break steel foam... -/turf/open/floor/plating/foam/attackby(obj/item/I, mob/user, params) +/turf/open/floor/plating/foam/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/stack/tile/iron)) var/obj/item/stack/tile/iron/P = I if(P.use(1)) @@ -218,7 +218,7 @@ icon_state = "r_plate-[deconstruction_state]" return ..() -/turf/open/floor/plating/reinforced/attackby(obj/item/tool_used, mob/user, params) +/turf/open/floor/plating/reinforced/attackby(obj/item/tool_used, mob/user, list/modifiers) user.changeNext_move(CLICK_CD_MELEE) if (!ISADVANCEDTOOLUSER(user)) to_chat(user, span_warning("You don't have the dexterity to do this!")) diff --git a/code/game/turfs/open/floor/plating/misc_plating.dm b/code/game/turfs/open/floor/plating/misc_plating.dm index 9b79313111f1..b2ed69c5039d 100644 --- a/code/game/turfs/open/floor/plating/misc_plating.dm +++ b/code/game/turfs/open/floor/plating/misc_plating.dm @@ -40,7 +40,7 @@ /turf/open/floor/plating/abductor2/burn_tile() return //unburnable -/turf/open/floor/plating/abductor2/try_replace_tile(obj/item/stack/tile/T, mob/user, params) +/turf/open/floor/plating/abductor2/try_replace_tile(obj/item/stack/tile/T, mob/user, list/modifiers) return /turf/open/floor/plating/snowed diff --git a/code/game/turfs/open/floor/reinforced_floor.dm b/code/game/turfs/open/floor/reinforced_floor.dm index f828f39c45bf..3fe427f1aced 100644 --- a/code/game/turfs/open/floor/reinforced_floor.dm +++ b/code/game/turfs/open/floor/reinforced_floor.dm @@ -33,7 +33,7 @@ return ..() return //unplateable -/turf/open/floor/engine/try_replace_tile(obj/item/stack/tile/T, mob/user, params) +/turf/open/floor/engine/try_replace_tile(obj/item/stack/tile/T, mob/user, list/modifiers) return /turf/open/floor/engine/crowbar_act(mob/living/user, obj/item/I) diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 27e80c200d1b..a07e067a76fe 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -193,7 +193,7 @@ /turf/open/lava/TakeTemperature(temp) -/turf/open/lava/attackby(obj/item/C, mob/user, params) +/turf/open/lava/attackby(obj/item/C, mob/user, list/modifiers) ..() if(istype(C, /obj/item/stack/rods/lava)) var/obj/item/stack/rods/lava/R = C @@ -375,7 +375,7 @@ . = ..() . += span_info("Some liquid plasma could probably be scooped up with a container.") -/turf/open/lava/plasma/attackby(obj/item/I, mob/user, params) +/turf/open/lava/plasma/attackby(obj/item/I, mob/user, list/modifiers) if(!I.is_open_container()) return ..() if(!I.reagents.add_reagent(/datum/reagent/toxin/plasma, rand(5, 10))) diff --git a/code/game/turfs/open/misc.dm b/code/game/turfs/open/misc.dm index 5f993cf70d51..8ae825b0da4f 100644 --- a/code/game/turfs/open/misc.dm +++ b/code/game/turfs/open/misc.dm @@ -21,7 +21,7 @@ heat_capacity = 10000 tiled_dirt = TRUE -/turf/open/misc/attackby(obj/item/W, mob/user, params) +/turf/open/misc/attackby(obj/item/W, mob/user, list/modifiers) . = ..() if(.) return TRUE diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm index fd3d96db1f4f..c3b0d2af163e 100644 --- a/code/game/turfs/open/openspace.dm +++ b/code/game/turfs/open/openspace.dm @@ -111,7 +111,7 @@ /turf/open/openspace/proc/CanBuildHere() return can_build_on -/turf/open/openspace/attackby(obj/item/C, mob/user, params) +/turf/open/openspace/attackby(obj/item/C, mob/user, list/modifiers) ..() if(!CanBuildHere()) return diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm index f636065d5160..751a8e67c16b 100644 --- a/code/game/turfs/open/space/space.dm +++ b/code/game/turfs/open/space/space.dm @@ -137,7 +137,7 @@ GLOBAL_LIST_EMPTY(starlight) /turf/open/space/handle_slip() return -/turf/open/space/attackby(obj/item/C, mob/user, params) +/turf/open/space/attackby(obj/item/C, mob/user, list/modifiers) ..() if(!CanBuildHere()) return diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 83b4ad3d0301..11c5da23f265 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -386,7 +386,7 @@ GLOBAL_LIST_EMPTY(station_turfs) C.wiringGuiUpdate(user) C.is_empty(user) -/turf/attackby(obj/item/C, mob/user, params) +/turf/attackby(obj/item/C, mob/user, list/modifiers) if(..()) return TRUE if(can_lay_cable() && istype(C, /obj/item/stack/cable_coil)) diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm index d30e695be241..eae5253e40ef 100644 --- a/code/modules/antagonists/abductor/machinery/console.dm +++ b/code/modules/antagonists/abductor/machinery/console.dm @@ -266,7 +266,7 @@ vest = V return TRUE -/obj/machinery/abductor/console/attackby(obj/O, mob/user, params) +/obj/machinery/abductor/console/attackby(obj/O, mob/user, list/modifiers) if(istype(O, /obj/item/abductor/gizmo) && AddGizmo(O)) to_chat(user, span_notice("You link the tool to the console.")) else if(istype(O, /obj/item/clothing/suit/armor/abductor/vest) && AddVest(O)) diff --git a/code/modules/antagonists/abductor/machinery/dispenser.dm b/code/modules/antagonists/abductor/machinery/dispenser.dm index 472b24c5064d..fe70d6e605aa 100644 --- a/code/modules/antagonists/abductor/machinery/dispenser.dm +++ b/code/modules/antagonists/abductor/machinery/dispenser.dm @@ -61,7 +61,7 @@ Dispense(gland_id) return TRUE -/obj/machinery/abductor/gland_dispenser/attackby(obj/item/W, mob/user, params) +/obj/machinery/abductor/gland_dispenser/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/organ/heart/gland)) if(!user.transferItemToLoc(W, src)) return diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm index 324c91ea3a52..bef38553b98d 100644 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -241,7 +241,7 @@ /obj/structure/blob/hulk_damage() return 15 -/obj/structure/blob/attackby(obj/item/I, mob/user, params) +/obj/structure/blob/attackby(obj/item/I, mob/user, list/modifiers) if(I.tool_behaviour == TOOL_ANALYZER) user.changeNext_move(CLICK_CD_MELEE) to_chat(user, "The analyzer beeps once, then reports:
") diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index 05b9f7102490..5634bc8e3e38 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -212,7 +212,7 @@ effectiveness = 80, \ ) -/obj/item/melee/arm_blade/afterattack(atom/target, mob/user, click_parameters) +/obj/item/melee/arm_blade/afterattack(atom/target, mob/user, list/modifiers) if(istype(target, /obj/structure/table)) var/obj/smash = target smash.deconstruct(FALSE) diff --git a/code/modules/antagonists/clown_ops/clown_weapons.dm b/code/modules/antagonists/clown_ops/clown_weapons.dm index bd2dfd4b0da0..43e3b4fda527 100644 --- a/code/modules/antagonists/clown_ops/clown_weapons.dm +++ b/code/modules/antagonists/clown_ops/clown_weapons.dm @@ -133,7 +133,7 @@ var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery) slipper.Slip(src, hit_atom) -/obj/item/melee/energy/sword/bananium/attackby(obj/item/weapon, mob/living/user, params) +/obj/item/melee/energy/sword/bananium/attackby(obj/item/weapon, mob/living/user, list/modifiers) if(COOLDOWN_FINISHED(src, next_trombone_allowed) && istype(weapon, /obj/item/melee/energy/sword/bananium)) COOLDOWN_START(src, next_trombone_allowed, 5 SECONDS) to_chat(user, span_warning("You slap the two swords together. Sadly, they do not seem to fit!")) diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm index f68540292b37..a9accccd8b20 100644 --- a/code/modules/antagonists/heretic/heretic_antag.dm +++ b/code/modules/antagonists/heretic/heretic_antag.dm @@ -368,7 +368,7 @@ * and have mansus grasp active in their offhand, * they're able to draw a transmutation rune. */ -/datum/antagonist/heretic/proc/on_item_use(mob/living/source, atom/target, obj/item/weapon, click_parameters) +/datum/antagonist/heretic/proc/on_item_use(mob/living/source, atom/target, obj/item/weapon, list/modifiers) SIGNAL_HANDLER if(!is_type_in_typecache(weapon, scribing_tools)) return NONE diff --git a/code/modules/antagonists/heretic/influences.dm b/code/modules/antagonists/heretic/influences.dm index 662af81249a5..da69f5232c2f 100644 --- a/code/modules/antagonists/heretic/influences.dm +++ b/code/modules/antagonists/heretic/influences.dm @@ -254,7 +254,7 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/effect/heretic_influence/attackby(obj/item/weapon, mob/user, params) +/obj/effect/heretic_influence/attackby(obj/item/weapon, mob/user, list/modifiers) . = ..() if(.) return diff --git a/code/modules/antagonists/heretic/items/heretic_necks.dm b/code/modules/antagonists/heretic/items/heretic_necks.dm index 7233d04ca8a8..c7144f9b6b38 100644 --- a/code/modules/antagonists/heretic/items/heretic_necks.dm +++ b/code/modules/antagonists/heretic/items/heretic_necks.dm @@ -62,7 +62,7 @@ // How much damage does this item do to the targets sanity? var/sanity_damage = 20 -/obj/item/clothing/neck/heretic_focus/moon_amulette/attack(mob/living/target, mob/living/user, params) +/obj/item/clothing/neck/heretic_focus/moon_amulette/attack(mob/living/target, mob/living/user, list/modifiers) var/mob/living/carbon/human/hit = target if(!IS_HERETIC(user)) user.balloon_alert(user, "you feel a presence watching you") diff --git a/code/modules/antagonists/nightmare/nightmare_equipment.dm b/code/modules/antagonists/nightmare/nightmare_equipment.dm index 0d869bd1760e..6921e752240d 100644 --- a/code/modules/antagonists/nightmare/nightmare_equipment.dm +++ b/code/modules/antagonists/nightmare/nightmare_equipment.dm @@ -47,7 +47,7 @@ UnregisterSignal(user, COMSIG_MOB_AFTER_EXIT_JAUNT) remove_crit() -/obj/item/light_eater/attack(mob/living/target, mob/living/user, params) +/obj/item/light_eater/attack(mob/living/target, mob/living/user, list/modifiers) . = ..() if(!has_crit) return diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm b/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm index 87577f1e040d..2d83b12fe690 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm @@ -82,7 +82,7 @@ return discover_after -/obj/item/disk/nuclear/attackby(obj/item/weapon, mob/living/user, params) +/obj/item/disk/nuclear/attackby(obj/item/weapon, mob/living/user, list/modifiers) if(istype(weapon, /obj/item/claymore/highlander) && !fake) var/obj/item/claymore/highlander/claymore = weapon if(claymore.nuke_disk) diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm index abfc0ec702b6..d7aa4388973a 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm @@ -87,7 +87,7 @@ GLOBAL_VAR(station_nuke_source) return TRUE -/obj/machinery/nuclearbomb/attackby(obj/item/weapon, mob/user, params) +/obj/machinery/nuclearbomb/attackby(obj/item/weapon, mob/user, list/modifiers) if (istype(weapon, /obj/item/disk/nuclear)) if(!disk_check(weapon)) return TRUE diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm index 4275c807ea88..c09b02ff2240 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm @@ -27,7 +27,7 @@ else . += span_danger("It's empty.") -/obj/machinery/nuclearbomb/beer/attackby(obj/item/weapon, mob/user, params) +/obj/machinery/nuclearbomb/beer/attackby(obj/item/weapon, mob/user, list/modifiers) if(weapon.is_refillable()) weapon.interact_with_atom(keg, user) // redirect refillable containers to the keg, allowing them to be filled return TRUE // pretend we handled the attack, too. diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index f2b2e3cc3895..530ff29650b7 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -65,7 +65,7 @@ qdel(src) return PROCESS_KILL -/obj/effect/rend/attackby(obj/item/I, mob/user, params) +/obj/effect/rend/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/nullrod)) user.visible_message(span_danger("[user] seals \the [src] with \the [I].")) qdel(src) diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index a535cce443be..2c08e2bc3961 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -309,7 +309,7 @@ A Wraith, which does high damage and can jaunt through walls, though it is quite fragile.\n A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow."} -/obj/structure/constructshell/attackby(obj/item/O, mob/user, params) +/obj/structure/constructshell/attackby(obj/item/O, mob/user, list/modifiers) if(istype(O, /obj/item/soulstone)) var/obj/item/soulstone/SS = O if(!IS_CULTIST(user) && !HAS_MIND_TRAIT(user, TRAIT_MAGICALLY_GIFTED) && !SS.theme == THEME_HOLY) diff --git a/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm b/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm index 79fb2a1568f2..52c6e10c1b94 100644 --- a/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm @@ -74,7 +74,7 @@ return ..() -/obj/item/spellbook/attackby(obj/item/O, mob/user, params) +/obj/item/spellbook/attackby(obj/item/O, mob/user, list/modifiers) // This can be generalized in the future, but for now it stays if(istype(O, /obj/item/antag_spawner/contract)) var/datum/spellbook_entry/item/contract/contract_entry = locate() in entries diff --git a/code/modules/art/paintings.dm b/code/modules/art/paintings.dm index 917808ad7083..0a48167dc1cc 100644 --- a/code/modules/art/paintings.dm +++ b/code/modules/art/paintings.dm @@ -15,7 +15,7 @@ var/obj/item/canvas/painting = null //Adding canvases -/obj/structure/easel/attackby(obj/item/I, mob/user, params) +/obj/structure/easel/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/canvas)) var/obj/item/canvas/canvas = I user.transfer_item_to_turf(canvas, get_turf(src), silent = FALSE) @@ -135,7 +135,7 @@ ui = new(user, src, "Canvas", name) ui.open() -/obj/item/canvas/attackby(obj/item/I, mob/living/user, params) +/obj/item/canvas/attackby(obj/item/I, mob/living/user, list/modifiers) if(!user.combat_mode) ui_interact(user) else @@ -721,7 +721,7 @@ . = ..() SSpersistent_paintings.painting_frames -= src -/obj/structure/sign/painting/attackby(obj/item/I, mob/user, params) +/obj/structure/sign/painting/attackby(obj/item/I, mob/user, list/modifiers) if(!current_canvas && istype(I, /obj/item/canvas)) frame_canvas(user,I) else if(current_canvas && current_canvas.painting_metadata.title == initial(current_canvas.painting_metadata.title) && istype(I,/obj/item/pen)) diff --git a/code/modules/art/statues.dm b/code/modules/art/statues.dm index 18d07bf5ed9a..d5d959705f8a 100644 --- a/code/modules/art/statues.dm +++ b/code/modules/art/statues.dm @@ -33,7 +33,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/structure/statue/attackby(obj/item/W, mob/living/user, params) +/obj/structure/statue/attackby(obj/item/W, mob/living/user, list/modifiers) add_fingerprint(user) if(W.tool_behaviour == TOOL_WELDER) if(!W.tool_start_check(user, amount=1)) diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 0ac5993aeccf..2f0c2aa612e6 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -117,7 +117,7 @@ return . = ..() -/obj/item/assembly/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/assembly/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(isassembly(attacking_item)) var/obj/item/assembly/new_assembly = attacking_item // Check both our's and their's assembly flags to see if either should not duplicate diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index ac8d5d4e8cee..fc2ea4a21a81 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -289,7 +289,7 @@ ..() new /obj/effect/temp_visual/borgflash(get_turf(src)) -/obj/item/assembly/flash/cyborg/attackby(obj/item/W, mob/user, params) +/obj/item/assembly/flash/cyborg/attackby(obj/item/W, mob/user, list/modifiers) return /obj/item/assembly/flash/cyborg/screwdriver_act(mob/living/user, obj/item/I) return diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 5f50618e77df..89d416ca1621 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -134,7 +134,7 @@ for(var/obj/item/assembly/assembly as anything in assemblies) assembly.attack_hand(user, modifiers) // Note override in assembly.dm to prevent side effects here -/obj/item/assembly_holder/attackby(obj/item/weapon, mob/user, params) +/obj/item/assembly_holder/attackby(obj/item/weapon, mob/user, list/modifiers) if(isassembly(weapon)) try_add_assembly(weapon, user) return diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 91f3a0ace5a5..9f9f3818f673 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -120,7 +120,7 @@ update_appearance() -/obj/item/assembly/signaler/attackby(obj/item/W, mob/user, params) +/obj/item/assembly/signaler/attackby(obj/item/W, mob/user, list/modifiers) if(issignaler(W)) var/obj/item/assembly/signaler/signaler2 = W if(secured && signaler2.secured) @@ -182,7 +182,7 @@ /obj/item/assembly/signaler/cyborg -/obj/item/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, params) +/obj/item/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, list/modifiers) return /obj/item/assembly/signaler/cyborg/screwdriver_act(mob/living/user, obj/item/I) return @@ -193,7 +193,7 @@ /obj/item/assembly/signaler/internal/ui_state(mob/user) return GLOB.inventory_state -/obj/item/assembly/signaler/internal/attackby(obj/item/W, mob/user, params) +/obj/item/assembly/signaler/internal/attackby(obj/item/W, mob/user, list/modifiers) return /obj/item/assembly/signaler/internal/screwdriver_act(mob/living/user, obj/item/I) diff --git a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm index c231333bfb86..a8c1ebfea744 100644 --- a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm +++ b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm @@ -98,7 +98,7 @@ if((buildstage == AIR_ALARM_BUILD_COMPLETE)) new /obj/item/stack/cable_coil(loc, 3) -/obj/machinery/airalarm/attackby(obj/item/W, mob/user, params) +/obj/machinery/airalarm/attackby(obj/item/W, mob/user, list/modifiers) update_last_used(user) switch(buildstage) if(AIR_ALARM_BUILD_COMPLETE) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index da7fd51efbd6..f9ca458bb39e 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -388,7 +388,7 @@ nodes[nodes.Find(reference)] = null update_appearance() -/obj/machinery/atmospherics/attackby(obj/item/W, mob/user, params) +/obj/machinery/atmospherics/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/pipe)) //lets you autodrop var/obj/item/pipe/pipe = W if(user.dropItemToGround(pipe)) diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm index 4a811c3435cb..f20ee606cb25 100644 --- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm +++ b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm @@ -168,7 +168,7 @@ /obj/machinery/electrolyzer/crowbar_act(mob/living/user, obj/item/tool) return default_deconstruction_crowbar(tool) -/obj/machinery/electrolyzer/attackby(obj/item/I, mob/user, params) +/obj/machinery/electrolyzer/attackby(obj/item/I, mob/user, list/modifiers) add_fingerprint(user) if(istype(I, /obj/item/stock_parts/power_store/cell)) if(!panel_open) diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm index 194e3744ca6d..8662baf4c2df 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm @@ -34,7 +34,7 @@ . = ..() . += span_notice("[src] can be rotated by first opening the panel with a screwdriver and then using a wrench on it.") -/obj/machinery/atmospherics/components/unary/hypertorus/attackby(obj/item/I, mob/user, params) +/obj/machinery/atmospherics/components/unary/hypertorus/attackby(obj/item/I, mob/user, list/modifiers) if(!fusion_started) if(default_deconstruction_screwdriver(user, icon_state_open, icon_state_off, I)) return @@ -128,7 +128,7 @@ . = ..() . += span_notice("[src] can be rotated by first opening the panel with a screwdriver and then using a wrench on it.") -/obj/machinery/hypertorus/attackby(obj/item/I, mob/user, params) +/obj/machinery/hypertorus/attackby(obj/item/I, mob/user, list/modifiers) if(!fusion_started) if(default_deconstruction_screwdriver(user, icon_state_open, icon_state_off, I)) return diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm index 801a905563d4..b44a9f82fa07 100644 --- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm +++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm @@ -58,7 +58,7 @@ context[SCREENTIP_CONTEXT_LMB] = "Rotate" return CONTEXTUAL_SCREENTIP_SET -/obj/machinery/atmospherics/components/binary/crystallizer/attackby(obj/item/I, mob/user, params) +/obj/machinery/atmospherics/components/binary/crystallizer/attackby(obj/item/I, mob/user, list/modifiers) if(!on) if(default_deconstruction_screwdriver(user, "[base_icon_state]-open", "[base_icon_state]-off", I)) return diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm index 1e89478d8065..6d39f350d13d 100644 --- a/code/modules/atmospherics/machinery/components/tank.dm +++ b/code/modules/atmospherics/machinery/components/tank.dm @@ -548,7 +548,7 @@ if(TANK_PLATING_UNSECURED) icon_state = "plated_frame" -/obj/structure/tank_frame/attackby(obj/item/item, mob/living/user, params) +/obj/structure/tank_frame/attackby(obj/item/item, mob/living/user, list/modifiers) if(construction_state == TANK_FRAME && isstack(item) && add_plating(user, item)) return return ..() diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index ff5adf476875..871a5dc8f923 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -87,7 +87,7 @@ return air_temporary.remove(amount) return parent.air.remove(amount) -/obj/machinery/atmospherics/pipe/attackby(obj/item/item, mob/user, params) +/obj/machinery/atmospherics/pipe/attackby(obj/item/item, mob/user, list/modifiers) if(istype(item, /obj/item/pipe_meter)) var/obj/item/pipe_meter/meter = item user.dropItemToGround(meter) diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index c6ce5933f421..7a2f9424a005 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -412,7 +412,7 @@ if(internal_cell) internal_cell.forceMove(drop_location()) -/obj/machinery/portable_atmospherics/canister/attackby(obj/item/item, mob/user, params) +/obj/machinery/portable_atmospherics/canister/attackby(obj/item/item, mob/user, list/modifiers) if(istype(item, /obj/item/stock_parts/power_store/cell)) var/obj/item/stock_parts/power_store/cell/active_cell = item if(!panel_open) diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index c91c9d1d2310..5a5455223d35 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -196,7 +196,7 @@ update_appearance() return TRUE -/obj/machinery/portable_atmospherics/attackby(obj/item/item, mob/user, params) +/obj/machinery/portable_atmospherics/attackby(obj/item/item, mob/user, list/modifiers) if(!istype(item, /obj/item/tank)) return ..() if(machine_stat & BROKEN) diff --git a/code/modules/awaymissions/mission_code/Cabin.dm b/code/modules/awaymissions/mission_code/Cabin.dm index cf6a6a3c9c7a..81b2c47c4bc0 100644 --- a/code/modules/awaymissions/mission_code/Cabin.dm +++ b/code/modules/awaymissions/mission_code/Cabin.dm @@ -50,7 +50,7 @@ active = FALSE toggleFirepit() -/obj/structure/firepit/attackby(obj/item/W,mob/living/user,params) +/obj/structure/firepit/attackby(obj/item/W,mob/living/user,list/modifiers) if(!active) var/msg = W.ignition_effect(src, user) if(msg) diff --git a/code/modules/awaymissions/signpost.dm b/code/modules/awaymissions/signpost.dm index 864b4fa03f86..b24ada67578c 100644 --- a/code/modules/awaymissions/signpost.dm +++ b/code/modules/awaymissions/signpost.dm @@ -30,7 +30,7 @@ else to_chat(user, "Nothing happens. You feel that this is a bad sign.") -/obj/structure/signpost/attackby(obj/item/W, mob/user, params) +/obj/structure/signpost/attackby(obj/item/W, mob/user, list/modifiers) return interact(user) /obj/structure/signpost/attack_paw(mob/user, list/modifiers) diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm index d7ecda850182..4f0262625a95 100644 --- a/code/modules/awaymissions/super_secret_room.dm +++ b/code/modules/awaymissions/super_secret_room.dm @@ -90,7 +90,7 @@ speaking = FALSE times_spoken_to++ -/obj/structure/speaking_tile/attackby(obj/item/W, mob/user, params) +/obj/structure/speaking_tile/attackby(obj/item/W, mob/user, list/modifiers) return interact(user) /obj/structure/speaking_tile/attack_paw(mob/user, list/modifiers) diff --git a/code/modules/basketball/basketball.dm b/code/modules/basketball/basketball.dm index 35579dc44828..9b991169bf2d 100644 --- a/code/modules/basketball/basketball.dm +++ b/code/modules/basketball/basketball.dm @@ -150,7 +150,7 @@ user.balloon_alert_to_viewers("fumbles the ball") -/obj/item/toy/basketball/attack(mob/living/carbon/target, mob/living/user, params) +/obj/item/toy/basketball/attack(mob/living/carbon/target, mob/living/user, list/modifiers) if(!iscarbon(target) || user.combat_mode) return ..() diff --git a/code/modules/basketball/hoop.dm b/code/modules/basketball/hoop.dm index 505ce9c8c3a4..87e336fb647d 100644 --- a/code/modules/basketball/hoop.dm +++ b/code/modules/basketball/hoop.dm @@ -89,7 +89,7 @@ scoreboard.add_overlay(tens_overlay) scoreboard.add_overlay(emissive_tens_overlay) -/obj/structure/hoop/attackby(obj/item/ball, mob/living/baller, params) +/obj/structure/hoop/attackby(obj/item/ball, mob/living/baller, list/modifiers) if(!baller.can_perform_action(src, NEED_HANDS|FORBID_TELEKINESIS_REACH)) return // TK users aren't allowed to dunk diff --git a/code/modules/capture_the_flag/ctf_game.dm b/code/modules/capture_the_flag/ctf_game.dm index 38a7318b5548..aabec89af478 100644 --- a/code/modules/capture_the_flag/ctf_game.dm +++ b/code/modules/capture_the_flag/ctf_game.dm @@ -171,7 +171,7 @@ player_mob.add_traits(player_traits, CAPTURE_THE_FLAG_TRAIT) return player_mob //used in medisim_game.dm -/obj/machinery/ctf/spawner/attackby(obj/item/item, mob/user, params) +/obj/machinery/ctf/spawner/attackby(obj/item/item, mob/user, list/modifiers) if(istype(item, /obj/item/ctf_flag)) var/obj/item/ctf_flag/flag = item if(flag.team != team) @@ -268,7 +268,7 @@ user.set_anchored(TRUE) user.status_flags &= ~CANPUSH -/obj/item/ctf_flag/attackby(obj/item/item, mob/user, params) +/obj/item/ctf_flag/attackby(obj/item/item, mob/user, list/modifiers) if(!istype(item, /obj/item/ctf_flag)) return ..() @@ -367,7 +367,7 @@ scores += UNLINT("[ctf_team.team_color] - [ctf_team.points]/[ctf_game.points_to_win]\n") balloon_alert_to_viewers(scores) -/obj/machinery/ctf/control_point/attackby(obj/item/item, mob/user, params) +/obj/machinery/ctf/control_point/attackby(obj/item/item, mob/user, list/modifiers) capture(user) /obj/machinery/ctf/control_point/attack_hand(mob/user, list/modifiers) diff --git a/code/modules/cards/cardhand.dm b/code/modules/cards/cardhand.dm index ac14e17fea61..714c49ed38ef 100644 --- a/code/modules/cards/cardhand.dm +++ b/code/modules/cards/cardhand.dm @@ -91,8 +91,8 @@ return ..() -/obj/item/toy/cards/cardhand/attackby_secondary(obj/item/weapon, mob/user, params) - attackby(weapon, user, params, flip_card = TRUE) +/obj/item/toy/cards/cardhand/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) + attackby(weapon, user, modifiers, flip_card = TRUE) return SECONDARY_ATTACK_CONTINUE_CHAIN #define CARDS_MAX_DISPLAY_LIMIT 5 // the amount of cards that are displayed in a hand diff --git a/code/modules/cards/deck/deck.dm b/code/modules/cards/deck/deck.dm index 5fc280f5b19a..3d19e6888937 100644 --- a/code/modules/cards/deck/deck.dm +++ b/code/modules/cards/deck/deck.dm @@ -175,7 +175,7 @@ card.Flip(CARD_FACEDOWN) . = ..() -/obj/item/toy/cards/deck/attackby(obj/item/item, mob/living/user, params) +/obj/item/toy/cards/deck/attackby(obj/item/item, mob/living/user, list/modifiers) if(istype(item, /obj/item/toy/singlecard) || istype(item, /obj/item/toy/cards/cardhand)) insert(item) var/card_grammar = istype(item, /obj/item/toy/singlecard) ? "card" : "cards" diff --git a/code/modules/cards/singlecard.dm b/code/modules/cards/singlecard.dm index 300523254ed7..e61de4a600dc 100644 --- a/code/modules/cards/singlecard.dm +++ b/code/modules/cards/singlecard.dm @@ -219,7 +219,7 @@ return return ..() -/obj/item/toy/singlecard/attackby_secondary(obj/item/item, mob/living/user, modifiers) +/obj/item/toy/singlecard/attackby_secondary(obj/item/item, mob/living/user, list/modifiers) attackby(item, user, modifiers, flip_card=TRUE) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN diff --git a/code/modules/cargo/coupon.dm b/code/modules/cargo/coupon.dm index 6ef2567d2524..965887f44c72 100644 --- a/code/modules/cargo/coupon.dm +++ b/code/modules/cargo/coupon.dm @@ -106,7 +106,7 @@ to_chat(player, span_userdanger("...The suspense is killing you!")) player.set_heartattack(status = TRUE) -/obj/item/coupon/attack_atom(obj/O, mob/living/user, params) +/obj/item/coupon/attack_atom(obj/O, mob/living/user, list/modifiers) if(!istype(O, /obj/machinery/computer/cargo)) return ..() if(discount_pct_off == COUPON_OMEN) diff --git a/code/modules/cargo/materials_market.dm b/code/modules/cargo/materials_market.dm index 947197d16f29..3621ce197beb 100644 --- a/code/modules/cargo/materials_market.dm +++ b/code/modules/cargo/materials_market.dm @@ -53,7 +53,7 @@ if(default_deconstruction_crowbar(tool)) return ITEM_INTERACT_SUCCESS -/obj/machinery/materials_market/attackby(obj/item/O, mob/user, params) +/obj/machinery/materials_market/attackby(obj/item/O, mob/user, list/modifiers) if(is_type_in_list(O, exportable_material_items)) var/amount = 0 var/value = 0 diff --git a/code/modules/cargo/universal_scanner.dm b/code/modules/cargo/universal_scanner.dm index 2e47241c3fbe..ab8046ab3791 100644 --- a/code/modules/cargo/universal_scanner.dm +++ b/code/modules/cargo/universal_scanner.dm @@ -71,7 +71,7 @@ return ITEM_INTERACT_SUCCESS return NONE -/obj/item/universal_scanner/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/universal_scanner/attackby(obj/item/attacking_item, mob/user, list/modifiers) . = ..() if(scanning_mode == SCAN_SALES_TAG && isidcard(attacking_item)) var/obj/item/card/id/potential_acc = attacking_item diff --git a/code/modules/clothing/belts/polymorph_belt.dm b/code/modules/clothing/belts/polymorph_belt.dm index 0b657c5b5247..9eb0ba89dbd9 100644 --- a/code/modules/clothing/belts/polymorph_belt.dm +++ b/code/modules/clothing/belts/polymorph_belt.dm @@ -48,7 +48,7 @@ update_transform_action() playsound(src, 'sound/machines/crate_open.ogg', 50, FALSE) -/obj/item/polymorph_belt/attack(mob/living/target_mob, mob/living/user, params) +/obj/item/polymorph_belt/attack(mob/living/target_mob, mob/living/user, list/modifiers) . = ..() if (.) return diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 25e1f5620185..463f99fc6303 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -113,14 +113,14 @@ else qdel(src) -/obj/item/clothing/attack(mob/living/target, mob/living/user, params) +/obj/item/clothing/attack(mob/living/target, mob/living/user, list/modifiers) if(user.combat_mode || !ismoth(target) || ispickedupmob(src)) return ..() if((clothing_flags & INEDIBLE_CLOTHING) || (resistance_flags & INDESTRUCTIBLE)) return ..() if(isnull(moth_snack)) create_moth_snack() - moth_snack.attack(target, user, params) + moth_snack.attack(target, user, modifiers) /// Creates a food object in null space which we can eat and imagine we're eating this pair of shoes /obj/item/clothing/proc/create_moth_snack() diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm index c62d31d295a6..514d17bd7786 100644 --- a/code/modules/clothing/gloves/_gloves.dm +++ b/code/modules/clothing/gloves/_gloves.dm @@ -72,7 +72,7 @@ return FALSE // We don't want to cut dyed gloves. return TRUE -/obj/item/clothing/gloves/attackby(obj/item/tool, mob/user, params) +/obj/item/clothing/gloves/attackby(obj/item/tool, mob/user, list/modifiers) . = ..() if(.) return diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 3a75bd963356..4266e2625e57 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -45,7 +45,7 @@ . = ..() AddComponent(/datum/component/seclite_attachable, light_icon_state = "flight") -/obj/item/clothing/head/helmet/sec/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/clothing/head/helmet/sec/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(issignaler(attacking_item)) var/obj/item/assembly/signaler/attached_signaler = attacking_item // There's a flashlight in us. Remove it first, or it'll be lost forever! diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index bf3f5f052eb2..91a90c4bf683 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -297,7 +297,7 @@ return TRUE -/obj/item/clothing/head/fedora/inspector_hat/attackby(obj/item/item, mob/user, params) +/obj/item/clothing/head/fedora/inspector_hat/attackby(obj/item/item, mob/user, list/modifiers) . = ..() if(LAZYLEN(contents) >= max_items) diff --git a/code/modules/clothing/head/tophat.dm b/code/modules/clothing/head/tophat.dm index 2affc4c63da1..cb0fd3da3fe0 100644 --- a/code/modules/clothing/head/tophat.dm +++ b/code/modules/clothing/head/tophat.dm @@ -10,7 +10,7 @@ /// Cooldown for how often we can pull rabbits out of here COOLDOWN_DECLARE(rabbit_cooldown) -/obj/item/clothing/head/hats/tophat/attackby(obj/item/hitby_item, mob/user, params) +/obj/item/clothing/head/hats/tophat/attackby(obj/item/hitby_item, mob/user, list/modifiers) . = ..() if(istype(hitby_item, /obj/item/gun/magic/wand)) abracadabra(hitby_item, user) diff --git a/code/modules/clothing/masks/muzzle.dm b/code/modules/clothing/masks/muzzle.dm index 2603f378960e..5d22f66ec27b 100644 --- a/code/modules/clothing/masks/muzzle.dm +++ b/code/modules/clothing/masks/muzzle.dm @@ -77,7 +77,7 @@ INVOKE_ASYNC(user, TYPE_PROC_REF(/mob, emote), "scream") to_chat(user, span_userdanger("You feel a massive pain as hundreds of tiny spikes tear free from your face!")) -/obj/item/clothing/mask/muzzle/tape/attack(mob/living/carbon/victim, mob/living/carbon/attacker, params) +/obj/item/clothing/mask/muzzle/tape/attack(mob/living/carbon/victim, mob/living/carbon/attacker, list/modifiers) if(attacker.combat_mode) return ..() if(victim.is_mouth_covered(ITEM_SLOT_HEAD)) diff --git a/code/modules/clothing/neck/collar_bomb.dm b/code/modules/clothing/neck/collar_bomb.dm index 72f5b20320db..69f1c4094171 100644 --- a/code/modules/clothing/neck/collar_bomb.dm +++ b/code/modules/clothing/neck/collar_bomb.dm @@ -38,7 +38,7 @@ return . += span_tinynotice("It has a [EXAMINE_HINT("wire")] panel that could be interacted with...") -/obj/item/clothing/neck/collar_bomb/attackby(obj/item/item, mob/user, params) +/obj/item/clothing/neck/collar_bomb/attackby(obj/item/item, mob/user, list/modifiers) if(is_wire_tool(item)) wires.interact(user) else diff --git a/code/modules/clothing/shoes/sneakers.dm b/code/modules/clothing/shoes/sneakers.dm index f0f3c68a2f7e..ce6dccb400aa 100644 --- a/code/modules/clothing/shoes/sneakers.dm +++ b/code/modules/clothing/shoes/sneakers.dm @@ -153,13 +153,13 @@ return return ..() -/obj/item/clothing/shoes/sneakers/orange/pre_attack(atom/movable/attacking_movable, mob/living/user, params) +/obj/item/clothing/shoes/sneakers/orange/pre_attack(atom/movable/attacking_movable, mob/living/user, list/modifiers) if(attached_cuffs || attacking_movable.type != /obj/item/restraints/handcuffs) return ..() attacking_movable.forceMove(src) return TRUE -/obj/item/clothing/shoes/sneakers/orange/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/clothing/shoes/sneakers/orange/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(attached_cuffs || attacking_item.type != /obj/item/restraints/handcuffs) // Note: not using istype here because we want to ignore all subtypes return ..() attacking_item.forceMove(src) diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index f7189490997e..fd6b5ca3f7e1 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -213,7 +213,7 @@ return ITEM_INTERACT_SUCCESS // object handling for accessing features of the suit -/obj/item/clothing/suit/space/attackby(obj/item/I, mob/user, params) +/obj/item/clothing/suit/space/attackby(obj/item/I, mob/user, list/modifiers) if(!cell_cover_open || !istype(I, /obj/item/stock_parts/power_store/cell)) return ..() if(cell) diff --git a/code/modules/clothing/spacesuits/softsuit.dm b/code/modules/clothing/spacesuits/softsuit.dm index d72dcf48fc16..b4f31942e5d7 100644 --- a/code/modules/clothing/spacesuits/softsuit.dm +++ b/code/modules/clothing/spacesuits/softsuit.dm @@ -52,7 +52,7 @@ . = ..() . += span_notice("You can start constructing a critter sized mecha with a [span_bold("cyborg leg")].") -/obj/item/clothing/head/helmet/space/eva/attackby(obj/item/attacked_with, mob/user, params) +/obj/item/clothing/head/helmet/space/eva/attackby(obj/item/attacked_with, mob/user, list/modifiers) . = ..() if(.) return diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 21d70112bb3e..ffb60bab4062 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -105,7 +105,7 @@ if(accessory_overlay) . += accessory_overlay -/obj/item/clothing/under/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/clothing/under/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(has_sensor == BROKEN_SENSORS && istype(attacking_item, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/cabling = attacking_item to_chat(user, span_notice("You repair the suit sensors on [src] with [cabling].")) diff --git a/code/modules/economy/holopay.dm b/code/modules/economy/holopay.dm index 45b37969876d..e35d265ddbb6 100644 --- a/code/modules/economy/holopay.dm +++ b/code/modules/economy/holopay.dm @@ -74,7 +74,7 @@ linked_card = null return ..() -/obj/structure/holopay/attackby(obj/item/held_item, mob/item_holder, params) +/obj/structure/holopay/attackby(obj/item/held_item, mob/item_holder, list/modifiers) var/mob/living/user = item_holder if(!isliving(user)) return ..() @@ -115,7 +115,7 @@ return TRUE return ..() -/obj/structure/holopay/attackby_secondary(obj/item/weapon, mob/user, params) +/obj/structure/holopay/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) /// Can kill it by right-clicking with ID because it seems useful and intuitive, to me, at least if(!isidcard(weapon)) return ..() diff --git a/code/modules/events/wizard/rpgloot.dm b/code/modules/events/wizard/rpgloot.dm index 443cc2ddea5f..077c644d2b5d 100644 --- a/code/modules/events/wizard/rpgloot.dm +++ b/code/modules/events/wizard/rpgloot.dm @@ -35,7 +35,7 @@ return ..() -/obj/item/upgradescroll/pre_attack(obj/item/target, mob/living/user) +/obj/item/upgradescroll/pre_attack(obj/item/target, mob/living/user, list/modifiers) . = ..() if(. || !istype(target) || !user.combat_mode) return diff --git a/code/modules/experisci/destructive_scanner.dm b/code/modules/experisci/destructive_scanner.dm index 0b90850b9556..5c37c5a2a279 100644 --- a/code/modules/experisci/destructive_scanner.dm +++ b/code/modules/experisci/destructive_scanner.dm @@ -102,7 +102,7 @@ . = ..() icon_state = scanning ? "tube_on" : "tube_open" -/obj/machinery/destructive_scanner/attackby(obj/item/object, mob/user, params) +/obj/machinery/destructive_scanner/attackby(obj/item/object, mob/user, list/modifiers) if (!scanning && default_deconstruction_screwdriver(user, "tube_open", "tube_open", object) || default_deconstruction_crowbar(object)) update_icon() return diff --git a/code/modules/experisci/experiment/handlers/experiment_handler.dm b/code/modules/experisci/experiment/handlers/experiment_handler.dm index ddecb9440ceb..2606353661e2 100644 --- a/code/modules/experisci/experiment/handlers/experiment_handler.dm +++ b/code/modules/experisci/experiment/handlers/experiment_handler.dm @@ -79,7 +79,7 @@ /** * Hooks on attack to try and run an experiment (When using a handheld handler) */ -/datum/component/experiment_handler/proc/try_run_handheld_experiment(datum/source, atom/target, mob/user, params) +/datum/component/experiment_handler/proc/try_run_handheld_experiment(datum/source, atom/target, mob/user, list/modifiers) SIGNAL_HANDLER if (!should_run_handheld_experiment(source, target, user)) return @@ -89,7 +89,7 @@ /** * Provides feedback when an item isn't related to an experiment, and has fully passed the attack chain */ -/datum/component/experiment_handler/proc/ignored_handheld_experiment_attempt(datum/source, atom/target, mob/user, params) +/datum/component/experiment_handler/proc/ignored_handheld_experiment_attempt(datum/source, atom/target, mob/user, list/modifiers) SIGNAL_HANDLER if ((isnull(selected_experiment) && !(config_flags & EXPERIMENT_CONFIG_ALWAYS_ACTIVE)) || (config_flags & EXPERIMENT_CONFIG_SILENT_FAIL)) return diff --git a/code/modules/explorer_drone/exodrone.dm b/code/modules/explorer_drone/exodrone.dm index 0143959d2969..16e4f4eb1d01 100644 --- a/code/modules/explorer_drone/exodrone.dm +++ b/code/modules/explorer_drone/exodrone.dm @@ -359,7 +359,7 @@ GLOBAL_LIST_EMPTY(exodrone_launchers) if(fuel_canister) . += span_notice("You can remove the [fuel_canister] with a prying tool.") -/obj/machinery/exodrone_launcher/attackby(obj/item/weapon, mob/living/user, params) +/obj/machinery/exodrone_launcher/attackby(obj/item/weapon, mob/living/user, list/modifiers) if(istype(weapon, /obj/item/fuel_pellet)) if(fuel_canister) to_chat(user, span_warning("There's already fuel loaded inside [src]!")) diff --git a/code/modules/explorer_drone/loot.dm b/code/modules/explorer_drone/loot.dm index b0a91c37037b..da0432b5af85 100644 --- a/code/modules/explorer_drone/loot.dm +++ b/code/modules/explorer_drone/loot.dm @@ -162,7 +162,7 @@ GLOBAL_LIST_INIT(adventure_loot_generator_index,generate_generator_index()) cell = new /obj/item/stock_parts/power_store/cell(src) AddComponent(/datum/component/two_handed) -/obj/item/firelance/attack(mob/living/M, mob/living/user, params) +/obj/item/firelance/attack(mob/living/M, mob/living/user, list/modifiers) if(!user.combat_mode) return . = ..() diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index c489cf8384f0..22e72b7b60e3 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -402,7 +402,7 @@ icon_state = base_icon_state return ..() -/obj/item/fish/attackby(obj/item/item, mob/living/user, params) +/obj/item/fish/attackby(obj/item/item, mob/living/user, list/modifiers) if(!istype(item, /obj/item/fish_feed)) return ..() if(!item.reagents.total_volume) diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index 7df047d8f68c..53f633da9307 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -354,7 +354,7 @@ . += line_overlay . += mutable_appearance(icon_file, "hook_overlay") -/obj/item/fishing_rod/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/fishing_rod/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(slot_check(attacking_item,ROD_SLOT_LINE)) use_slot(ROD_SLOT_LINE, user, attacking_item) SStgui.update_uis(src) diff --git a/code/modules/food_and_drinks/machinery/coffeemaker.dm b/code/modules/food_and_drinks/machinery/coffeemaker.dm index 1f929a0de841..aaef02f51a1d 100644 --- a/code/modules/food_and_drinks/machinery/coffeemaker.dm +++ b/code/modules/food_and_drinks/machinery/coffeemaker.dm @@ -179,7 +179,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/coffeemaker/attackby(obj/item/attack_item, mob/living/user, params) +/obj/machinery/coffeemaker/attackby(obj/item/attack_item, mob/living/user, list/modifiers) //You can only screw open empty grinder if(!coffeepot && default_deconstruction_screwdriver(user, icon_state, icon_state, attack_item)) return FALSE @@ -581,7 +581,7 @@ return FALSE return TRUE -/obj/machinery/coffeemaker/impressa/attackby(obj/item/attack_item, mob/living/user, params) +/obj/machinery/coffeemaker/impressa/attackby(obj/item/attack_item, mob/living/user, list/modifiers) //You can only screw open empty grinder if(!coffeepot && default_deconstruction_screwdriver(user, icon_state, icon_state, attack_item)) return diff --git a/code/modules/food_and_drinks/machinery/deep_fryer.dm b/code/modules/food_and_drinks/machinery/deep_fryer.dm index eca04daaf012..839fc36d6b3f 100644 --- a/code/modules/food_and_drinks/machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/machinery/deep_fryer.dm @@ -88,7 +88,7 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/deepfryer/attackby(obj/item/weapon, mob/user, params) +/obj/machinery/deepfryer/attackby(obj/item/weapon, mob/user, list/modifiers) // Dissolving pills into the frier if(istype(weapon, /obj/item/reagent_containers/pill)) if(!reagents.total_volume) diff --git a/code/modules/food_and_drinks/machinery/gibber.dm b/code/modules/food_and_drinks/machinery/gibber.dm index f52c51cfa1d7..bd5721a99770 100644 --- a/code/modules/food_and_drinks/machinery/gibber.dm +++ b/code/modules/food_and_drinks/machinery/gibber.dm @@ -113,7 +113,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/gibber/attackby(obj/item/P, mob/user, params) +/obj/machinery/gibber/attackby(obj/item/P, mob/user, list/modifiers) if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", P)) return diff --git a/code/modules/food_and_drinks/machinery/griddle.dm b/code/modules/food_and_drinks/machinery/griddle.dm index e0c45e6c9af1..6552c20c6f58 100644 --- a/code/modules/food_and_drinks/machinery/griddle.dm +++ b/code/modules/food_and_drinks/machinery/griddle.dm @@ -62,12 +62,11 @@ return default_deconstruction_crowbar(I, ignore_panel = TRUE) -/obj/machinery/griddle/attackby(obj/item/I, mob/user, params) +/obj/machinery/griddle/attackby(obj/item/I, mob/user, list/modifiers) if(griddled_objects.len >= max_items) to_chat(user, span_notice("[src] can't fit more items!")) return - var/list/modifiers = params2list(params) //Center the icon where the user clicked. if(!LAZYACCESS(modifiers, ICON_X) || !LAZYACCESS(modifiers, ICON_Y)) return diff --git a/code/modules/food_and_drinks/machinery/icecream_vat.dm b/code/modules/food_and_drinks/machinery/icecream_vat.dm index 1db71ab2ed46..f76587b4494b 100644 --- a/code/modules/food_and_drinks/machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/machinery/icecream_vat.dm @@ -106,7 +106,7 @@ context[SCREENTIP_CONTEXT_RMB] = "Change mode to flavors" return CONTEXTUAL_SCREENTIP_SET -/obj/machinery/icecream_vat/attackby(obj/item/reagent_containers/beaker, mob/user, params) +/obj/machinery/icecream_vat/attackby(obj/item/reagent_containers/beaker, mob/user, list/modifiers) . = ..() if(.) return @@ -126,7 +126,7 @@ balloon_alert(user, "beaker inserted") custom_ice_cream_beaker = beaker -/obj/machinery/icecream_vat/attackby_secondary(obj/item/reagent_containers/beaker, mob/user, params) +/obj/machinery/icecream_vat/attackby_secondary(obj/item/reagent_containers/beaker, mob/user, list/modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return diff --git a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/machinery/monkeyrecycler.dm index 7fae74c453e3..d06ff096e025 100644 --- a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm +++ b/code/modules/food_and_drinks/machinery/monkeyrecycler.dm @@ -47,7 +47,7 @@ GLOBAL_LIST_EMPTY(monkey_recyclers) power_change() return ITEM_INTERACT_SUCCESS -/obj/machinery/monkey_recycler/attackby(obj/item/O, mob/user, params) +/obj/machinery/monkey_recycler/attackby(obj/item/O, mob/user, list/modifiers) if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", O)) return diff --git a/code/modules/food_and_drinks/machinery/oven.dm b/code/modules/food_and_drinks/machinery/oven.dm index 16e0c9ab42e6..d870efbe2648 100644 --- a/code/modules/food_and_drinks/machinery/oven.dm +++ b/code/modules/food_and_drinks/machinery/oven.dm @@ -96,7 +96,7 @@ update_appearance() use_energy(active_power_usage) -/obj/machinery/oven/attackby(obj/item/item, mob/user, params) +/obj/machinery/oven/attackby(obj/item/item, mob/user, list/modifiers) if(!open || used_tray || !istype(item, /obj/item/plate/oven_tray)) return ..() diff --git a/code/modules/food_and_drinks/machinery/processor.dm b/code/modules/food_and_drinks/machinery/processor.dm index d733de06d337..de670496aed7 100644 --- a/code/modules/food_and_drinks/machinery/processor.dm +++ b/code/modules/food_and_drinks/machinery/processor.dm @@ -87,7 +87,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/processor/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/machinery/processor/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(processing) to_chat(user, span_warning("[src] is in the process of processing!")) return TRUE diff --git a/code/modules/food_and_drinks/machinery/smartfridge.dm b/code/modules/food_and_drinks/machinery/smartfridge.dm index d5c1c7a23a29..7e52d747fd0c 100644 --- a/code/modules/food_and_drinks/machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/machinery/smartfridge.dm @@ -261,7 +261,7 @@ playsound(src, SFX_SHATTER, 50, TRUE) return ..() -/obj/machinery/smartfridge/attackby(obj/item/weapon, mob/living/user, params) +/obj/machinery/smartfridge/attackby(obj/item/weapon, mob/living/user, list/modifiers) if(!machine_stat) var/shown_contents_length = visible_items() if(shown_contents_length >= max_n_of_items) diff --git a/code/modules/food_and_drinks/machinery/stove.dm b/code/modules/food_and_drinks/machinery/stove.dm index 0ecea3a1d6cf..c50ef1b1431c 100644 --- a/code/modules/food_and_drinks/machinery/stove.dm +++ b/code/modules/food_and_drinks/machinery/stove.dm @@ -148,7 +148,7 @@ update_appearance(UPDATE_OVERLAYS) return TRUE -/obj/item/reagent_containers/cup/soup_pot/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/reagent_containers/cup/soup_pot/attackby(obj/item/attacking_item, mob/user, list/modifiers) . = ..() if(.) return diff --git a/code/modules/food_and_drinks/plate.dm b/code/modules/food_and_drinks/plate.dm index 9e3d47abb181..6c3bb9c0b3cf 100644 --- a/code/modules/food_and_drinks/plate.dm +++ b/code/modules/food_and_drinks/plate.dm @@ -29,7 +29,7 @@ if(fragile) AddElement(/datum/element/can_shatter) -/obj/item/plate/attackby(obj/item/I, mob/user, params) +/obj/item/plate/attackby(obj/item/I, mob/user, list/modifiers) if(!IS_EDIBLE(I)) balloon_alert(user, "not food!") return @@ -39,7 +39,6 @@ if(contents.len >= max_items) balloon_alert(user, "can't fit!") return - var/list/modifiers = params2list(params) //Center the icon where the user clicked. if(!LAZYACCESS(modifiers, ICON_X) || !LAZYACCESS(modifiers, ICON_Y)) return @@ -51,13 +50,13 @@ else return ..() -/obj/item/plate/pre_attack(atom/A, mob/living/user, params) - if(!iscarbon(A)) +/obj/item/plate/pre_attack(atom/target, mob/living/user, list/modifiers) + if(!iscarbon(target)) return if(!contents.len) return var/obj/item/object_to_eat = contents[1] - A.attackby(object_to_eat, user) + target.attackby(object_to_eat, user) return TRUE //No normal attack ///This proc adds the food to viscontents and makes sure it can deregister if this changes. diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm index 789aeeddaaf1..25d7dfb56f3c 100644 --- a/code/modules/holodeck/items.dm +++ b/code/modules/holodeck/items.dm @@ -93,7 +93,7 @@ to_chat(user, span_warning("You are too primitive to use this device!")) return -/obj/machinery/readybutton/attackby(obj/item/W, mob/user, params) +/obj/machinery/readybutton/attackby(obj/item/W, mob/user, list/modifiers) to_chat(user, span_warning("The device is a solid button, there's nothing you can do with it!")) /obj/machinery/readybutton/attack_hand(mob/user, list/modifiers) @@ -148,7 +148,7 @@ /obj/machinery/conveyor/holodeck -/obj/machinery/conveyor/holodeck/attackby(obj/item/I, mob/user, params) +/obj/machinery/conveyor/holodeck/attackby(obj/item/I, mob/user, list/modifiers) if(!user.transferItemToLoc(I, drop_location())) return ..() diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index c6cfd175958e..0250fe6ffe10 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -147,7 +147,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/structure/beebox/attackby(obj/item/I, mob/user, params) +/obj/structure/beebox/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/honey_frame)) var/obj/item/honey_frame/HF = I if(honey_frames.len < BEEBOX_MAX_FRAMES) diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 2a211ef4c537..9b20046cd725 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -202,7 +202,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/biogenerator/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/machinery/biogenerator/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(user.combat_mode) return ..() diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm index a971b2b6a740..f9a82473e712 100644 --- a/code/modules/hydroponics/fermenting_barrel.dm +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -50,7 +50,7 @@ else . += span_notice("It is currently closed, letting it ferment fruits or draw reagents from its tap.") -/obj/structure/fermenting_barrel/attackby(obj/item/object, mob/user, params) +/obj/structure/fermenting_barrel/attackby(obj/item/object, mob/user, list/modifiers) if(open) if(istype(object, /obj/item/food/grown) && insert_fruit(user, object)) balloon_alert(user, "added fruit") diff --git a/code/modules/hydroponics/grown/corn.dm b/code/modules/hydroponics/grown/corn.dm index 02f77280c5ab..3fc026a60e38 100644 --- a/code/modules/hydroponics/grown/corn.dm +++ b/code/modules/hydroponics/grown/corn.dm @@ -47,7 +47,7 @@ throw_range = 7 grind_results = list(/datum/reagent/cellulose = 10) //really partially hemicellulose -/obj/item/grown/corncob/attackby(obj/item/grown/W, mob/user, params) +/obj/item/grown/corncob/attackby(obj/item/grown/W, mob/user, list/modifiers) if(W.get_sharpness()) to_chat(user, span_notice("You use [W] to fashion a pipe out of the corn cob!")) new /obj/item/cigarette/pipe/cobpipe (user.loc) diff --git a/code/modules/hydroponics/grown/potato.dm b/code/modules/hydroponics/grown/potato.dm index c57111b86d0c..e91e55a62fd7 100644 --- a/code/modules/hydroponics/grown/potato.dm +++ b/code/modules/hydroponics/grown/potato.dm @@ -37,7 +37,7 @@ icon_state = "potato_wedges" bite_consumption_mod = 100 -/obj/item/food/grown/potato/attackby(obj/item/W, mob/user, params) +/obj/item/food/grown/potato/attackby(obj/item/W, mob/user, list/modifiers) if(W.get_sharpness()) to_chat(user, span_notice("You cut the potato into wedges with [W].")) var/obj/item/food/grown/potato/wedges/Wedges = new /obj/item/food/grown/potato/wedges diff --git a/code/modules/hydroponics/grown/pumpkin.dm b/code/modules/hydroponics/grown/pumpkin.dm index edfa985b4b1d..59f2ba67a935 100644 --- a/code/modules/hydroponics/grown/pumpkin.dm +++ b/code/modules/hydroponics/grown/pumpkin.dm @@ -29,7 +29,7 @@ ///Which type of lantern this gourd produces when carved. var/carved_type = /obj/item/clothing/head/utility/hardhat/pumpkinhead -/obj/item/food/grown/pumpkin/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/item/food/grown/pumpkin/attackby(obj/item/W as obj, mob/user as mob, list/modifiers) if(W.get_sharpness()) user.show_message(span_notice("You carve a face into [src]!"), MSG_VISUAL) new carved_type(user.loc) diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm index 6162f9ad1d11..c3c84c37cdda 100644 --- a/code/modules/hydroponics/grown/root.dm +++ b/code/modules/hydroponics/grown/root.dm @@ -25,7 +25,7 @@ juice_typepath = /datum/reagent/consumable/carrotjuice wine_power = 30 -/obj/item/food/grown/carrot/attackby(obj/item/I, mob/user, params) +/obj/item/food/grown/carrot/attackby(obj/item/I, mob/user, list/modifiers) if(I.get_sharpness()) var/carrot_blade var/carrot_sword_chance = (max(0, seed.potency - 50) / 50) diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 6d9f70b5f539..a6b3ba5b10c6 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -81,7 +81,7 @@ return NONE -/obj/item/grown/log/attackby(obj/item/W, mob/user, params) +/obj/item/grown/log/attackby(obj/item/W, mob/user, list/modifiers) if(W.get_sharpness()) user.show_message(span_notice("You make [plank_name] out of \the [src]!"), MSG_VISUAL) var/seed_modifier = 0 diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index 873576917296..976c0247cb97 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -194,7 +194,7 @@ playsound(src, SFX_DESECRATION ,50, TRUE, -1) return BRUTELOSS -/obj/item/scythe/pre_attack(atom/target, mob/living/user, params) +/obj/item/scythe/pre_attack(atom/target, mob/living/user, list/modifiers) if(!istype(target, /obj/structure/alien/resin/flower_bud) && !istype(target, /obj/structure/spacevine)) return ..() if(swiping || get_turf(target) == get_turf(user)) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 866201894060..3cc7d81a54ee 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -207,7 +207,7 @@ if(!QDELETED(src) && gone == myseed) set_seed(null, FALSE) -/obj/machinery/hydroponics/constructable/attackby(obj/item/I, mob/living/user, params) +/obj/machinery/hydroponics/constructable/attackby(obj/item/I, mob/living/user, list/modifiers) if (!user.combat_mode) // handle opening the panel if(default_deconstruction_screwdriver(user, icon_state, icon_state, I)) @@ -856,7 +856,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/hydroponics/attackby(obj/item/O, mob/user, params) +/obj/machinery/hydroponics/attackby(obj/item/O, mob/user, list/modifiers) //Called when mob user "attacks" it with object O if(IS_EDIBLE(O) || is_reagent_container(O)) // Syringe stuff (and other reagent containers now too) var/obj/item/reagent_containers/reagent_source = O @@ -1078,7 +1078,7 @@ else return ..() -/obj/machinery/hydroponics/attackby_secondary(obj/item/weapon, mob/user, params) +/obj/machinery/hydroponics/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) if (istype(weapon, /obj/item/reagent_containers/syringe)) to_chat(user, span_warning("You can't get any extract out of this plant.")) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN @@ -1200,7 +1200,7 @@ /obj/machinery/hydroponics/soil/update_status_light_overlays() return // Has no lights -/obj/machinery/hydroponics/soil/attackby_secondary(obj/item/weapon, mob/user, params) +/obj/machinery/hydroponics/soil/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) if(weapon.tool_behaviour != TOOL_SHOVEL) //Spades can still uproot plants on left click return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN balloon_alert(user, "clearing up soil...") diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index a78c7142e4fc..fbb5dd54c5c4 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -94,7 +94,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/seed_extractor/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/machinery/seed_extractor/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(!isliving(user) || user.combat_mode) return ..() @@ -126,7 +126,7 @@ var/list/generated_seeds = seedify(attacking_item, -1, src, user) if(!isnull(generated_seeds)) - if(LAZYACCESS(params2list(params), RIGHT_CLICK)) + if(LAZYACCESS(modifiers, RIGHT_CLICK)) //find all seeds lying on the turf and add them to the machine for(var/obj/item/seeds/seed as anything in generated_seeds) //machine is full diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 680bab3660d2..2a1dcdea7695 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -475,7 +475,7 @@ /obj/item/seeds/proc/on_chem_reaction(datum/reagents/reagents) return -/obj/item/seeds/attackby(obj/item/O, mob/user, params) +/obj/item/seeds/attackby(obj/item/O, mob/user, list/modifiers) if(IS_WRITING_UTENSIL(O)) var/choice = tgui_input_list(usr, "What would you like to change?", "Seed Alteration", list("Plant Name", "Seed Description", "Product Description")) if(isnull(choice)) diff --git a/code/modules/hydroponics/unique_plant_genes.dm b/code/modules/hydroponics/unique_plant_genes.dm index acc7ce6aefc6..93b97aa60c69 100644 --- a/code/modules/hydroponics/unique_plant_genes.dm +++ b/code/modules/hydroponics/unique_plant_genes.dm @@ -76,7 +76,7 @@ return /// Signal proc for [COMSIG_ITEM_AFTERATTACK] that allows for effects after an attack is done -/datum/plant_gene/trait/attack/proc/after_plant_attack(obj/item/source, atom/target, mob/user, click_parameters) +/datum/plant_gene/trait/attack/proc/after_plant_attack(obj/item/source, atom/target, mob/user, list/modifiers) SIGNAL_HANDLER INVOKE_ASYNC(src, PROC_REF(after_attack_effect), source, target, user) @@ -129,7 +129,7 @@ name = "Bright Petals" description = "Makes others feel the power on hit." -/datum/plant_gene/trait/attack/sunflower_attack/after_attack_effect(obj/item/our_plant, atom/target, mob/user, proximity_flag, click_parameters) +/datum/plant_gene/trait/attack/sunflower_attack/after_attack_effect(obj/item/our_plant, atom/target, mob/user, list/modifiers) if(ismob(target)) var/mob/target_mob = target user.visible_message("[user] smacks [target_mob] with [user.p_their()] [our_plant.name]! FLOWER POWER!", ignored_mobs = list(target_mob, user)) diff --git a/code/modules/instruments/items.dm b/code/modules/instruments/items.dm index 38ace109729c..9e51bb5d2e0e 100644 --- a/code/modules/instruments/items.dm +++ b/code/modules/instruments/items.dm @@ -124,7 +124,7 @@ . = ..() AddElement(/datum/element/spooky) -/obj/item/instrument/trumpet/spectral/attack(mob/living/target_mob, mob/living/user, params) +/obj/item/instrument/trumpet/spectral/attack(mob/living/target_mob, mob/living/user, list/modifiers) playsound(src, 'sound/runtime/instruments/trombone/En4.mid', 1000, 1, -1) return ..() @@ -148,7 +148,7 @@ . = ..() AddElement(/datum/element/spooky) -/obj/item/instrument/saxophone/spectral/attack(mob/living/target_mob, mob/living/user, params) +/obj/item/instrument/saxophone/spectral/attack(mob/living/target_mob, mob/living/user, list/modifiers) playsound(src, 'sound/runtime/instruments/trombone/En4.mid', 1000, 1, -1) return ..() @@ -172,7 +172,7 @@ . = ..() AddElement(/datum/element/spooky) -/obj/item/instrument/trombone/spectral/attack(mob/living/target_mob, mob/living/user, params) +/obj/item/instrument/trombone/spectral/attack(mob/living/target_mob, mob/living/user, list/modifiers) playsound(src, 'sound/runtime/instruments/trombone/Cn4.mid', 1000, 1, -1) return ..() diff --git a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm index dbe6c65a0312..de49ed272c75 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm @@ -85,7 +85,7 @@ user.visible_message(span_suicide("[user] is killing [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to get closer to god!")) return (BRUTELOSS|FIRELOSS) -/obj/item/nullrod/attack(mob/living/target_mob, mob/living/user, params) +/obj/item/nullrod/attack(mob/living/target_mob, mob/living/user, list/modifiers) if(!user.mind?.holy_role) return ..() if(!IS_CULTIST(target_mob) || istype(target_mob, /mob/living/carbon/human/cult_ghost)) @@ -241,7 +241,7 @@ force = 15 menu_description = "An odd sharp blade which provides a low chance of blocking incoming melee attacks and deals a random amount of damage, which can range from almost nothing to very high. Can be worn on the back." -/obj/item/nullrod/claymore/multiverse/melee_attack_chain(mob/user, atom/target, params) +/obj/item/nullrod/claymore/multiverse/melee_attack_chain(mob/user, atom/target, list/modifiers) var/old_force = force force += rand(-14, 15) . = ..() diff --git a/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm b/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm index e5d1fd1fe5e5..1e06109a81da 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm @@ -94,7 +94,7 @@ If the scythe isn't empowered when you sheath it, you take a heap of damage and ) AddElement(/datum/element/bane, mob_biotypes = MOB_PLANT, damage_multiplier = 0.5, requires_combat_mode = FALSE) //less good at killing revenants, much better at killing plants -/obj/item/vorpalscythe/attack(mob/living/target, mob/living/user, params) +/obj/item/vorpalscythe/attack(mob/living/target, mob/living/user, list/modifiers) if(ismonkey(target) && !target.mind) //Don't empower from hitting monkeys. Hit a corgi or something, I don't know. return ..() diff --git a/code/modules/library/book.dm b/code/modules/library/book.dm index 6f4f8bec500d..6b72f0e3b512 100644 --- a/code/modules/library/book.dm +++ b/code/modules/library/book.dm @@ -98,7 +98,7 @@ user.visible_message(span_notice("[user] opens a book titled \"[book_data.title]\" and begins reading intently.")) display_content(user) -/obj/item/book/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/item/book/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(IS_WRITING_UTENSIL(attacking_item)) if(!user.can_perform_action(src) || !user.can_write(attacking_item)) return @@ -179,7 +179,7 @@ user.balloon_alert(user, "book added to inventory") playsound(loc, 'sound/items/barcodebeep.ogg', 20, FALSE) - else if(try_carve(attacking_item, user, params)) + else if(try_carve(attacking_item, user, modifiers)) return return ..() @@ -188,7 +188,7 @@ icon_state = "book[rand(1, maximum_book_state)]" /// Called when user attempts to carve the book with an item -/obj/item/book/proc/try_carve(obj/item/carving_item, mob/living/user, params) +/obj/item/book/proc/try_carve(obj/item/carving_item, mob/living/user, list/modifiers) if(carved) return FALSE if(!user.combat_mode) diff --git a/code/modules/library/bookcase.dm b/code/modules/library/bookcase.dm index 004db281c75c..961bbc9f07a8 100644 --- a/code/modules/library/bookcase.dm +++ b/code/modules/library/bookcase.dm @@ -94,7 +94,7 @@ I.forceMove(Tsec) update_appearance() -/obj/structure/bookcase/attackby(obj/item/attacking_item, mob/user, params) +/obj/structure/bookcase/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(state == BOOKCASE_UNANCHORED) if(attacking_item.tool_behaviour == TOOL_WRENCH) if(attacking_item.use_tool(src, user, 20, volume=50)) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index d03247b85da2..7fb0509d3bd5 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -539,7 +539,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0) set_screen_state(MIN_LIBRARY) return TRUE -/obj/machinery/computer/libraryconsole/bookmanagement/attackby(obj/item/weapon, mob/user, params) +/obj/machinery/computer/libraryconsole/bookmanagement/attackby(obj/item/weapon, mob/user, list/modifiers) if(!istype(weapon, /obj/item/barcodescanner)) return ..() var/obj/item/barcodescanner/scanner = weapon @@ -705,7 +705,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0) cache = null return ..() -/obj/machinery/libraryscanner/attackby(obj/hitby, mob/user, params) +/obj/machinery/libraryscanner/attackby(obj/hitby, mob/user, list/modifiers) if(istype(hitby, /obj/item/book)) user.transferItemToLoc(hitby, src) if(held_book) @@ -786,7 +786,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0) if(default_deconstruction_crowbar(tool)) return ITEM_INTERACT_SUCCESS -/obj/machinery/bookbinder/attackby(obj/hitby, mob/user, params) +/obj/machinery/bookbinder/attackby(obj/hitby, mob/user, list/modifiers) if(istype(hitby, /obj/item/paper)) prebind_book(user, hitby) return TRUE diff --git a/code/modules/library/skill_learning/skill_station.dm b/code/modules/library/skill_learning/skill_station.dm index 8fc982280348..e28dda41b1d0 100644 --- a/code/modules/library/skill_learning/skill_station.dm +++ b/code/modules/library/skill_learning/skill_station.dm @@ -83,7 +83,7 @@ else toggle_open() -/obj/machinery/skill_station/attackby(obj/item/I, mob/living/user, params) +/obj/machinery/skill_station/attackby(obj/item/I, mob/living/user, list/modifiers) if(istype(I,/obj/item/skillchip)) if(inserted_skillchip) to_chat(user,span_notice("There's already a skillchip inside.")) diff --git a/code/modules/mapfluff/ruins/lavaland_ruin_code.dm b/code/modules/mapfluff/ruins/lavaland_ruin_code.dm index 6b5690de6338..be0fbd85f67e 100644 --- a/code/modules/mapfluff/ruins/lavaland_ruin_code.dm +++ b/code/modules/mapfluff/ruins/lavaland_ruin_code.dm @@ -40,7 +40,7 @@ /// Type of shell to create var/shell_type = /obj/effect/mob_spawn/ghost_role/human/golem -/obj/item/golem_shell/attackby(obj/item/potential_food, mob/user, params) +/obj/item/golem_shell/attackby(obj/item/potential_food, mob/user, list/modifiers) . = ..() if(!isstack(potential_food)) balloon_alert(user, "not a mineral!") diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm index 2a4f908d2c1b..fbfdeda4c996 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm @@ -105,7 +105,7 @@ reagents.expose(user, TOUCH, 20) //Covers target in 20u of oil. to_chat(user, span_notice("You touch the pool of oil, only to get oil all over yourself. It would be wise to wash this off with water.")) -/obj/structure/sink/oil_well/attackby(obj/item/O, mob/living/user, params) +/obj/structure/sink/oil_well/attackby(obj/item/O, mob/living/user, list/modifiers) flick("puddle-oil-splash",src) if(O.tool_behaviour == TOOL_SHOVEL) //attempt to deconstruct the puddle with a shovel to_chat(user, "You fill in the oil well with soil.") diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm b/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm index 172c0e2f9e5c..fec863153d49 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm @@ -49,7 +49,7 @@ warning_channel = "Syndicate" include_in_cims = FALSE -/obj/machinery/power/supermatter_crystal/shard/syndicate/attackby(obj/item/item, mob/living/user, params) +/obj/machinery/power/supermatter_crystal/shard/syndicate/attackby(obj/item/item, mob/living/user, list/modifiers) if(istype(item, /obj/item/scalpel/supermatter)) //You can already yoink the docs as a free objective win, another would be just gross to_chat(user, span_danger("This shard's already in Syndicate custody, taking it again could cause more harm than good.")) return diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm index 15566603a932..ccc2ebab6c2f 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm @@ -36,7 +36,7 @@ w_class = WEIGHT_CLASS_NORMAL hitsound = 'sound/weapons/bladeslice.ogg' -/obj/item/knife/envy/afterattack(atom/target, mob/living/carbon/human/user, click_parameters) +/obj/item/knife/envy/afterattack(atom/target, mob/living/carbon/human/user, list/modifiers) if(!istype(user) || !ishuman(target)) return diff --git a/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm b/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm index b65b32044c31..087ce994df4f 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm @@ -98,7 +98,7 @@ . = ..() stored_organ = pick_weight(allowed_organs) -/obj/structure/meateor_fluff/flesh_pod/attackby(obj/item/attacking_item, mob/user, params) +/obj/structure/meateor_fluff/flesh_pod/attackby(obj/item/attacking_item, mob/user, list/modifiers) if (attacking_item.sharpness & SHARP_EDGED) cut_open(user) return diff --git a/code/modules/meteors/meteor_types.dm b/code/modules/meteors/meteor_types.dm index 28088535c74e..8cc20152c562 100644 --- a/code/modules/meteors/meteor_types.dm +++ b/code/modules/meteors/meteor_types.dm @@ -116,7 +116,7 @@ check_examine_award(user) -/obj/effect/meteor/attackby(obj/item/I, mob/user, params) +/obj/effect/meteor/attackby(obj/item/I, mob/user, list/modifiers) if(I.tool_behaviour == TOOL_MINING) make_debris() qdel(src) diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index c33181dd8068..8ac8275de9dd 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -135,7 +135,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, sort_list(list( /obj/structure/marker_beacon/attack_tk(mob/user) return -/obj/structure/marker_beacon/attackby(obj/item/I, mob/user, params) +/obj/structure/marker_beacon/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/stack/marker_beacon)) var/obj/item/stack/marker_beacon/M = I to_chat(user, span_notice("You start picking [src] up...")) diff --git a/code/modules/mining/equipment/resonator.dm b/code/modules/mining/equipment/resonator.dm index 99b27e15ca8a..a08fbf437536 100644 --- a/code/modules/mining/equipment/resonator.dm +++ b/code/modules/mining/equipment/resonator.dm @@ -42,7 +42,7 @@ new /obj/effect/temp_visual/resonance(target_turf, user, src, mode, adding_failure) user.changeNext_move(CLICK_CD_MELEE) -/obj/item/resonator/pre_attack(atom/target, mob/user, params) +/obj/item/resonator/pre_attack(atom/target, mob/user, list/modifiers) if(check_allowed_items(target, not_inside = TRUE)) create_resonance(target, user) return ..() diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 8a7ffeec88f6..058103e83e1e 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -180,7 +180,7 @@ GLOBAL_LIST(labor_sheet_values) return user.examinate(src) -/obj/machinery/mineral/labor_points_checker/attackby(obj/item/weapon, mob/user, params) +/obj/machinery/mineral/labor_points_checker/attackby(obj/item/weapon, mob/user, list/modifiers) if(!istype(weapon, /obj/item/card/id/advanced/prisoner)) return ..() var/obj/item/card/id/advanced/prisoner/prisoner_id = weapon diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 94a4df2591de..cfbc06e77398 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -15,7 +15,7 @@ /// var to check if it got opened by a key var/spawned_loot = FALSE -/obj/structure/closet/crate/necropolis/tendril/attackby(obj/item/item, mob/user, params) +/obj/structure/closet/crate/necropolis/tendril/attackby(obj/item/item, mob/user, list/modifiers) if(!istype(item, /obj/item/skeleton_key) || spawned_loot) return ..() var/loot = rand(1,21) diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 9e44b3e8ea60..ee7846f91c29 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -282,7 +282,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ /obj/item/gibtonite/IsSpecialAssembly() return TRUE -/obj/item/gibtonite/attackby(obj/item/I, mob/user, params) +/obj/item/gibtonite/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/assembly_holder) && !rig) var/obj/item/assembly_holder/holder = I if(!(locate(/obj/item/assembly/igniter) in holder.assemblies)) @@ -477,7 +477,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ . = ..() . += span_info("It's worth [value] credit\s.") -/obj/item/coin/attackby(obj/item/W, mob/user, params) +/obj/item/coin/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/CC = W if(string_attached) diff --git a/code/modules/mob/living/basic/bots/_bots.dm b/code/modules/mob/living/basic/bots/_bots.dm index e6995cb74cce..156515204142 100644 --- a/code/modules/mob/living/basic/bots/_bots.dm +++ b/code/modules/mob/living/basic/bots/_bots.dm @@ -427,7 +427,7 @@ GLOBAL_LIST_INIT(command_strings, list( heal_overall_damage(10) user.visible_message(span_notice("[user] repairs [src]!"),span_notice("You repair [src].")) -/mob/living/basic/bot/attackby(obj/item/attacking_item, mob/living/user, params) +/mob/living/basic/bot/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(attacking_item.GetID()) unlock_with_id(user) return diff --git a/code/modules/mob/living/basic/cult/shade.dm b/code/modules/mob/living/basic/cult/shade.dm index ca9b735c1bd0..6233a959aeb9 100644 --- a/code/modules/mob/living/basic/cult/shade.dm +++ b/code/modules/mob/living/basic/cult/shade.dm @@ -71,7 +71,7 @@ SSblackbox.record_feedback("tally", "cult_shade_suicided", 1) ..() -/mob/living/basic/shade/attackby(obj/item/item, mob/user, params) +/mob/living/basic/shade/attackby(obj/item/item, mob/user, list/modifiers) if(istype(item, /obj/item/soulstone)) var/obj/item/soulstone/stone = item stone.capture_shade(src, user) diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm index ca3f2f464333..1ee623084266 100644 --- a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm +++ b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm @@ -108,7 +108,7 @@ if (tentacles.cooldown_time > 1 SECONDS) tentacles.cooldown_time -= 1 SECONDS -/mob/living/basic/mining/goliath/attackby(obj/item/attacking_item, mob/living/user, params) +/mob/living/basic/mining/goliath/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if (!istype(attacking_item, /obj/item/goliath_saddle)) return ..() if (!tameable) diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm b/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm index ff0e6a74f964..c5b6705fdeff 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm @@ -56,7 +56,7 @@ stage = 0 elapsed_time = 0 -/obj/item/organ/legion_tumour/attack(mob/living/target, mob/living/user, params) +/obj/item/organ/legion_tumour/attack(mob/living/target, mob/living/user, list/modifiers) if (try_apply(target, user)) qdel(src) return diff --git a/code/modules/mob/living/basic/minebots/minebot.dm b/code/modules/mob/living/basic/minebots/minebot.dm index 33c3fbc3cd09..fa7b5bd41878 100644 --- a/code/modules/mob/living/basic/minebots/minebot.dm +++ b/code/modules/mob/living/basic/minebots/minebot.dm @@ -113,9 +113,9 @@ user.balloon_alert(user, "successfully repaired!") return TRUE -/mob/living/basic/mining_drone/attackby(obj/item/item_used, mob/user, params) +/mob/living/basic/mining_drone/attackby(obj/item/item_used, mob/user, list/modifiers) if(item_used.tool_behaviour == TOOL_CROWBAR || istype(item_used, /obj/item/borg/upgrade/modkit)) - item_used.melee_attack_chain(user, stored_gun, params) + item_used.melee_attack_chain(user, stored_gun, modifiers) return return ..() diff --git a/code/modules/mob/living/basic/pets/dog/_dog.dm b/code/modules/mob/living/basic/pets/dog/_dog.dm index 1eca84ded3aa..2ae7288f9c5c 100644 --- a/code/modules/mob/living/basic/pets/dog/_dog.dm +++ b/code/modules/mob/living/basic/pets/dog/_dog.dm @@ -85,7 +85,7 @@ attack_verb_continuous = list("attacks", "bashes", "batters", "bludgeons", "whacks") attack_verb_simple = list("attack", "bash", "batter", "bludgeon", "whack") -/obj/item/dog_bone/pre_attack(atom/target, mob/living/user, params) +/obj/item/dog_bone/pre_attack(atom/target, mob/living/user, list/modifiers) if (!isdog(target) || user.combat_mode) return ..() var/mob/living/basic/pet/dog/dog_target = target diff --git a/code/modules/mob/living/basic/pets/dog/corgi.dm b/code/modules/mob/living/basic/pets/dog/corgi.dm index 3789804a16fd..a6c3389d09b8 100644 --- a/code/modules/mob/living/basic/pets/dog/corgi.dm +++ b/code/modules/mob/living/basic/pets/dog/corgi.dm @@ -104,7 +104,7 @@ armorval += inventory_back.get_armor_rating(type) return armorval * 0.5 -/mob/living/basic/pet/dog/corgi/attackby(obj/item/attacking_item, mob/user, params) +/mob/living/basic/pet/dog/corgi/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(istype(attacking_item, /obj/item/razor)) if(shaved) to_chat(user, span_warning("You can't shave this corgi, [p_they()] has already been shaved!")) diff --git a/code/modules/mob/living/basic/pets/parrot/_parrot.dm b/code/modules/mob/living/basic/pets/parrot/_parrot.dm index 27445157c431..071222b6d466 100644 --- a/code/modules/mob/living/basic/pets/parrot/_parrot.dm +++ b/code/modules/mob/living/basic/pets/parrot/_parrot.dm @@ -337,7 +337,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list( return FALSE /// If we're right-clicked on with a cracker, we eat the cracker. -/mob/living/basic/parrot/proc/on_attacked(mob/living/basic/source, obj/item/thing, mob/living/attacker, params) +/mob/living/basic/parrot/proc/on_attacked(mob/living/basic/source, obj/item/thing, mob/living/attacker, list/modifiers) SIGNAL_HANDLER if(!istype(thing, /obj/item/food/cracker)) // Poly wants a cracker return diff --git a/code/modules/mob/living/basic/ruin_defender/living_floor.dm b/code/modules/mob/living/basic/ruin_defender/living_floor.dm index 657f66fe8718..9fad5ec6bde6 100644 --- a/code/modules/mob/living/basic/ruin_defender/living_floor.dm +++ b/code/modules/mob/living/basic/ruin_defender/living_floor.dm @@ -80,7 +80,7 @@ /mob/living/basic/living_floor/med_hud_set_status() return -/mob/living/basic/living_floor/attackby(obj/item/weapon, mob/user, params) +/mob/living/basic/living_floor/attackby(obj/item/weapon, mob/user, list/modifiers) if(weapon.tool_behaviour != TOOL_CROWBAR) return ..() balloon_alert(user, "prying...") diff --git a/code/modules/mob/living/basic/vermin/mothroach.dm b/code/modules/mob/living/basic/vermin/mothroach.dm index 4c06665a14af..1ffeb7bc8d26 100644 --- a/code/modules/mob/living/basic/vermin/mothroach.dm +++ b/code/modules/mob/living/basic/vermin/mothroach.dm @@ -57,7 +57,7 @@ else playsound(loc, 'sound/voice/moth/scream_moth.ogg', 50, TRUE) -/mob/living/basic/mothroach/attackby(obj/item/attacking_item, mob/living/user, params) +/mob/living/basic/mothroach/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) . = ..() if(src.stat == DEAD) return diff --git a/code/modules/mob/living/basic/vermin/mouse.dm b/code/modules/mob/living/basic/vermin/mouse.dm index 010cba1b9309..1582388b99ee 100644 --- a/code/modules/mob/living/basic/vermin/mouse.dm +++ b/code/modules/mob/living/basic/vermin/mouse.dm @@ -334,7 +334,7 @@ qdel(src) return LAZARUS_INJECTOR_USED -/obj/item/food/deadmouse/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/food/deadmouse/attackby(obj/item/attacking_item, mob/user, list/modifiers) var/mob/living/living_user = user if(istype(living_user) && attacking_item.get_sharpness() && living_user.combat_mode) if(!isturf(loc)) diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index c0bf48b1dc95..35fe35b428e9 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -49,7 +49,7 @@ if(brain) . += "mmi_dead" -/obj/item/mmi/attackby(obj/item/O, mob/user, params) +/obj/item/mmi/attackby(obj/item/O, mob/user, list/modifiers) user.changeNext_move(CLICK_CD_MELEE) if(istype(O, /obj/item/organ/brain)) //Time to stick a brain in it --NEO var/obj/item/organ/brain/newbrain = O diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index da13953c0cb5..bdc9a1772405 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -166,7 +166,7 @@ L.mind.transfer_to(brainmob) to_chat(brainmob, span_notice("You feel slightly disoriented. That's normal when you're just a brain.")) -/obj/item/organ/brain/attackby(obj/item/item, mob/user, params) +/obj/item/organ/brain/attackby(obj/item/item, mob/user, list/modifiers) user.changeNext_move(CLICK_CD_MELEE) if(istype(item, /obj/item/borg/apparatus/organ_storage)) diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index 4959321ebdd9..365787bdeefd 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -212,7 +212,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) icon_state = "[base_icon_state]" return -/obj/item/mmi/posibrain/attackby(obj/item/O, mob/user, params) +/obj/item/mmi/posibrain/attackby(obj/item/O, mob/user, list/modifiers) return /obj/item/mmi/posibrain/add_mmi_overlay() diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 1ac136bbf89f..e5db03ae49c3 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -49,8 +49,8 @@ if(atom_integrity < 90) Die() -/obj/item/clothing/mask/facehugger/attackby(obj/item/O, mob/user, params) - return O.attack_atom(src, user, params) +/obj/item/clothing/mask/facehugger/attackby(obj/item/O, mob/user, list/modifiers) + return O.attack_atom(src, user, modifiers) /obj/item/clothing/mask/facehugger/proc/react_to_mob(datum/source, mob/user) SIGNAL_HANDLER diff --git a/code/modules/mob/living/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm index 96694fd090b6..89345bb6d887 100644 --- a/code/modules/mob/living/inhand_holder.dm +++ b/code/modules/mob/living/inhand_holder.dm @@ -133,3 +133,15 @@ if(delete_mob && held_mob) QDEL_NULL(held_mob) return ..() + +/obj/item/clothing/head/mob_holder/attack_self(mob/user, modifiers) + . = ..() + if(. || !held_mob) //overriden or mob missing + return + user.UnarmedAttack(held_mob, proximity_flag = TRUE, modifiers = modifiers) + +/obj/item/clothing/head/mob_holder/base_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = ..() + if(. || !held_mob) // Another interaction was performed + return + tool.melee_attack_chain(user, held_mob, modifiers) //Interact with the mob with our tool diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index 1148b639d011..5dd5ef780f27 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -1,5 +1,5 @@ -/mob/living/silicon/ai/attackby(obj/item/W, mob/user, params) +/mob/living/silicon/ai/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/ai_module)) var/obj/item/ai_module/MOD = W if(!mind) //A player mind is required for law procs to run antag checks. diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 59acc8b952b1..a61470c56552 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -473,7 +473,7 @@ user.visible_message(span_notice("[user] repairs [src]!"),span_notice("You repair [src].")) return ITEM_INTERACT_SUCCESS -/mob/living/simple_animal/bot/attackby(obj/item/attacking_item, mob/living/user, params) +/mob/living/simple_animal/bot/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(attacking_item.GetID()) unlock_with_id(user) return diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index d1287db9c00b..3769ef1710fb 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -10,7 +10,7 @@ var/build_step = ASSEMBLY_FIRST_STEP var/robot_arm = /obj/item/bodypart/arm/right/robot -/obj/item/bot_assembly/attackby(obj/item/I, mob/user, params) +/obj/item/bot_assembly/attackby(obj/item/I, mob/user, list/modifiers) ..() if(IS_WRITING_UTENSIL(I)) rename_bot() @@ -73,7 +73,7 @@ return ..() -/obj/item/bot_assembly/cleanbot/attackby(obj/item/item_attached, mob/user, params) +/obj/item/bot_assembly/cleanbot/attackby(obj/item/item_attached, mob/user, list/modifiers) ..() if(!istype(item_attached, /obj/item/bodypart/arm/left/robot) && !istype(item_attached, /obj/item/bodypart/arm/right/robot)) return @@ -98,7 +98,7 @@ var/lasercolor = "" var/vest_type = /obj/item/clothing/suit/armor/vest -/obj/item/bot_assembly/ed209/attackby(obj/item/W, mob/user, params) +/obj/item/bot_assembly/ed209/attackby(obj/item/W, mob/user, list/modifiers) ..() switch(build_step) if(ASSEMBLY_FIRST_STEP, ASSEMBLY_SECOND_STEP) @@ -228,7 +228,7 @@ if(ASSEMBLY_SECOND_STEP) icon_state = "[toolbox_color]toolbox_tiles_sensor" -/obj/item/bot_assembly/floorbot/attackby(obj/item/W, mob/user, params) +/obj/item/bot_assembly/floorbot/attackby(obj/item/W, mob/user, list/modifiers) ..() switch(build_step) if(ASSEMBLY_FIRST_STEP) @@ -268,7 +268,7 @@ if(skin) icon_state = "[base_icon_state]_[skin]" // NON-MODULE CHANGE -/obj/item/bot_assembly/medbot/attackby(obj/item/W, mob/user, params) +/obj/item/bot_assembly/medbot/attackby(obj/item/W, mob/user, list/modifiers) ..() switch(build_step) if(ASSEMBLY_FIRST_STEP) @@ -305,7 +305,7 @@ icon_state = "honkbot_arm" created_name = "Honkbot" -/obj/item/bot_assembly/honkbot/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/bot_assembly/honkbot/attackby(obj/item/attacking_item, mob/user, list/modifiers) ..() switch(build_step) if(ASSEMBLY_FIRST_STEP) @@ -344,7 +344,7 @@ var/swordamt = 0 //If you're converting it into a grievousbot, how many swords have you attached var/toyswordamt = 0 //honk -/obj/item/bot_assembly/secbot/attackby(obj/item/I, mob/user, params) +/obj/item/bot_assembly/secbot/attackby(obj/item/I, mob/user, list/modifiers) ..() var/atom/Tsec = drop_location() switch(build_step) @@ -478,7 +478,7 @@ icon_state = "firebot_arm" created_name = "Firebot" -/obj/item/bot_assembly/firebot/attackby(obj/item/I, mob/user, params) +/obj/item/bot_assembly/firebot/attackby(obj/item/I, mob/user, list/modifiers) ..() switch(build_step) if(ASSEMBLY_FIRST_STEP) @@ -508,7 +508,7 @@ icon_state = "hygienebot" created_name = "Hygienebot" -/obj/item/bot_assembly/hygienebot/attackby(obj/item/I, mob/user, params) +/obj/item/bot_assembly/hygienebot/attackby(obj/item/I, mob/user, list/modifiers) . = ..() var/atom/Tsec = drop_location() switch(build_step) @@ -563,7 +563,7 @@ icon_state = "vim_0" created_name = "\improper Vim" -/obj/item/bot_assembly/vim/attackby(obj/item/part, mob/user, params) +/obj/item/bot_assembly/vim/attackby(obj/item/part, mob/user, list/modifiers) . = ..() if(.) return diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 81144a20ab47..ee999baf4852 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -177,7 +177,7 @@ diag_hud_set_mulebotcell() return ITEM_INTERACT_SUCCESS -/mob/living/simple_animal/bot/mulebot/attackby(obj/item/I, mob/living/user, params) +/mob/living/simple_animal/bot/mulebot/attackby(obj/item/I, mob/living/user, list/modifiers) if(istype(I, /obj/item/stock_parts/power_store/cell) && bot_cover_flags & BOT_COVER_OPEN) if(cell) to_chat(user, span_warning("[src] already has a power cell!")) diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index fe35ca424e88..545e3701b532 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -252,7 +252,7 @@ return ..() -/mob/living/simple_animal/bot/secbot/attackby(obj/item/attacking_item, mob/living/user, params) +/mob/living/simple_animal/bot/secbot/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) ..() if(!(bot_mode_flags & BOT_MODE_ON)) // Bots won't remember if you hit them while they're off. return diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index ae48ae4a1577..7406dea77c1a 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -152,7 +152,7 @@ Difficulty: Hard * * mob/user The user of the item * * params, extra parameters */ -/mob/living/simple_animal/hostile/megafauna/bubblegum/attackby(obj/item/W, mob/user, params) +/mob/living/simple_animal/hostile/megafauna/bubblegum/attackby(obj/item/W, mob/user, list/modifiers) . = ..() if(istype(W, /obj/item/organ/tongue)) user.client?.give_award(/datum/award/achievement/jobs/frenching, user) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 44a902acc4d1..b9b61641136c 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -749,7 +749,7 @@ Difficulty: Hard layer = LOW_OBJ_LAYER anchored = TRUE -/obj/effect/hierophant/attackby(obj/item/attacking_item, mob/user, params) +/obj/effect/hierophant/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(istype(attacking_item, /obj/item/hierophant_club)) var/obj/item/hierophant_club/club = attacking_item if(club.beacon == src) diff --git a/code/modules/mod/mod_construction.dm b/code/modules/mod/mod_construction.dm index 3581c04e606a..f152af190a95 100644 --- a/code/modules/mod/mod_construction.dm +++ b/code/modules/mod/mod_construction.dm @@ -67,7 +67,7 @@ . = ..() . += span_notice("You could probably attach some wires to it...") -/obj/item/mod/construction/lavalandcore/attackby(obj/item/weapon, mob/user, params) +/obj/item/mod/construction/lavalandcore/attackby(obj/item/weapon, mob/user, list/modifiers) if(!istype(weapon, /obj/item/stack/cable_coil)) return ..() if(!weapon.tool_start_check(user, amount=2)) @@ -155,7 +155,7 @@ display_text = "All it's missing is external plating..." . += span_notice(display_text) -/obj/item/mod/construction/shell/attackby(obj/item/part, mob/user, params) +/obj/item/mod/construction/shell/attackby(obj/item/part, mob/user, list/modifiers) . = ..() switch(step) if(START_STEP) diff --git a/code/modules/mod/mod_link.dm b/code/modules/mod/mod_link.dm index 1aad85c04a50..9a1bfdd30420 100644 --- a/code/modules/mod/mod_link.dm +++ b/code/modules/mod/mod_link.dm @@ -205,7 +205,7 @@ return cell.use(0.02 * STANDARD_CELL_RATE * seconds_per_tick, force = TRUE) -/obj/item/clothing/neck/link_scryer/attackby(obj/item/attacked_by, mob/user, params) +/obj/item/clothing/neck/link_scryer/attackby(obj/item/attacked_by, mob/user, list/modifiers) . = ..() if(cell || !istype(attacked_by, /obj/item/stock_parts/power_store/cell)) return diff --git a/code/modules/mod/modules/_module.dm b/code/modules/mod/modules/_module.dm index eb3aabcb38d1..f9c792a74ae1 100644 --- a/code/modules/mod/modules/_module.dm +++ b/code/modules/mod/modules/_module.dm @@ -510,7 +510,7 @@ return FALSE return TRUE -/obj/item/mod/module/anomaly_locked/attackby(obj/item/item, mob/living/user, params) +/obj/item/mod/module/anomaly_locked/attackby(obj/item/item, mob/living/user, list/modifiers) if(item.type in accepted_anomalies) if(core) balloon_alert(user, "core already in!") diff --git a/code/modules/mod/modules/module_pathfinder.dm b/code/modules/mod/modules/module_pathfinder.dm index f33088db5a86..9e79c968e36c 100644 --- a/code/modules/mod/modules/module_pathfinder.dm +++ b/code/modules/mod/modules/module_pathfinder.dm @@ -43,7 +43,7 @@ else . += span_warning("The implant is missing.") -/obj/item/mod/module/pathfinder/attack(mob/living/target, mob/living/user, params) +/obj/item/mod/module/pathfinder/attack(mob/living/target, mob/living/user, list/modifiers) if(!ishuman(target) || !implant) return if(!do_after(user, 1.5 SECONDS, target = target)) diff --git a/code/modules/modular_computers/computers/item/disks/virus_disk.dm b/code/modules/modular_computers/computers/item/disks/virus_disk.dm index 28ceb2da54a1..39536b0ed4d1 100644 --- a/code/modules/modular_computers/computers/item/disks/virus_disk.dm +++ b/code/modules/modular_computers/computers/item/disks/virus_disk.dm @@ -109,7 +109,7 @@ ///How much progression should be shown in the uplink, set on purchase of the item. var/current_progression = 0 -/obj/item/computer_disk/virus/frame/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/computer_disk/virus/frame/attackby(obj/item/attacking_item, mob/user, list/modifiers) . = ..() if(!istype(attacking_item, /obj/item/stack/telecrystal)) return diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm index 7d85432739f0..25edd47a51b9 100644 --- a/code/modules/modular_computers/computers/item/pda.dm +++ b/code/modules/modular_computers/computers/item/pda.dm @@ -107,7 +107,7 @@ return ..() -/obj/item/modular_computer/pda/pre_attack(atom/target, mob/living/user, params) +/obj/item/modular_computer/pda/pre_attack(atom/target, mob/living/user, list/modifiers) if(!inserted_disk || !ismachinery(target)) return ..() diff --git a/code/modules/pai/card.dm b/code/modules/pai/card.dm index f94efa85a9b0..7106d35c0f3f 100644 --- a/code/modules/pai/card.dm +++ b/code/modules/pai/card.dm @@ -30,12 +30,12 @@ SSpai.pai_card_list += src ADD_TRAIT(src, TRAIT_CASTABLE_LOC, INNATE_TRAIT) -/obj/item/pai_card/attackby(obj/item/used, mob/user, params) +/obj/item/pai_card/attackby(obj/item/used, mob/user, list/modifiers) if(pai && istype(used, /obj/item/encryptionkey)) if(!pai.encrypt_mod) to_chat(user, span_alert("Encryption Key ports not configured.")) return - pai.radio.attackby(used, user, params) + pai.radio.attackby(used, user, modifiers) to_chat(user, span_notice("You insert [used] into the [src].")) return return ..() diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index a952ba6b178f..50e73a241c52 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -113,7 +113,7 @@ return TRUE . = ..() -/obj/item/clipboard/attackby(obj/item/weapon, mob/user, params) +/obj/item/clipboard/attackby(obj/item/weapon, mob/user, list/modifiers) var/obj/item/paper/toppaper = toppaper_ref?.resolve() if(istype(weapon, /obj/item/paper)) //Add paper into the clipboard diff --git a/code/modules/paperwork/desk_bell.dm b/code/modules/paperwork/desk_bell.dm index f4ecd27a01bf..9fc22eeac911 100644 --- a/code/modules/paperwork/desk_bell.dm +++ b/code/modules/paperwork/desk_bell.dm @@ -59,7 +59,7 @@ /obj/structure/desk_bell/attack_paw(mob/user, list/modifiers) return attack_hand(user, modifiers) -/obj/structure/desk_bell/attackby(obj/item/weapon, mob/living/user, params) +/obj/structure/desk_bell/attackby(obj/item/weapon, mob/living/user, list/modifiers) . = ..() times_rang += weapon.force ring_bell(user) diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index db069717768c..83374a720b67 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -152,7 +152,7 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department fax_name = new_fax_name return ITEM_INTERACT_SUCCESS -/obj/machinery/fax/attackby(obj/item/item, mob/user, params) +/obj/machinery/fax/attackby(obj/item/item, mob/user, list/modifiers) if (jammed && clear_jam(item, user)) return if (panel_open) diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 05c8001375d1..13613b2c8647 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -42,8 +42,7 @@ for(var/obj/item/obj in src) obj.forceMove(loc) -/obj/structure/filingcabinet/attackby(obj/item/P, mob/living/user, params) - var/list/modifiers = params2list(params) +/obj/structure/filingcabinet/attackby(obj/item/P, mob/living/user, list/modifiers) if(P.tool_behaviour == TOOL_WRENCH && LAZYACCESS(modifiers, RIGHT_CLICK)) to_chat(user, span_notice("You begin to [anchored ? "unwrench" : "wrench"] [src].")) if(P.use_tool(src, user, 20, volume=50)) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 3bda5754fa84..2b97f1a9e43c 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -81,7 +81,7 @@ paper_overlay = contents[1].color_atom_overlay(paper_overlay) return paper_overlay -/obj/item/folder/attackby(obj/item/weapon, mob/user, params) +/obj/item/folder/attackby(obj/item/weapon, mob/user, list/modifiers) if(is_type_in_typecache(weapon, folder_insertables)) //Add paper, photo or documents into the folder if(!user.transferItemToLoc(weapon, src)) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 9828633fc2e5..675a4206b704 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -417,7 +417,7 @@ user.put_in_hands(new_plane) return new_plane -/obj/item/paper/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/item/paper/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) // Enable picking paper up by clicking on it with the clipboard or folder if(istype(attacking_item, /obj/item/clipboard) || istype(attacking_item, /obj/item/folder) || istype(attacking_item, /obj/item/paper_bin)) attacking_item.attackby(src, user) diff --git a/code/modules/paperwork/paper_biscuit.dm b/code/modules/paperwork/paper_biscuit.dm index 5d77fd424894..20e4f9d85f44 100644 --- a/code/modules/paperwork/paper_biscuit.dm +++ b/code/modules/paperwork/paper_biscuit.dm @@ -73,7 +73,7 @@ return ..() -/obj/item/folder/biscuit/attackby(obj/item/weapon, mob/user, params) +/obj/item/folder/biscuit/attackby(obj/item/weapon, mob/user, list/modifiers) if (is_type_in_typecache(weapon, folder_insertables) && !crack_check(user)) return diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm index 0a6edf893be3..bcee2af4bc3a 100644 --- a/code/modules/paperwork/paper_cutter.dm +++ b/code/modules/paperwork/paper_cutter.dm @@ -110,7 +110,7 @@ blade_secured = !blade_secured return ITEM_INTERACT_SUCCESS -/obj/item/papercutter/attackby(obj/item/inserted_item, mob/user, params) +/obj/item/papercutter/attackby(obj/item/inserted_item, mob/user, list/modifiers) if(istype(inserted_item, /obj/item/paper)) if(is_type_in_list(inserted_item, list( /obj/item/paper/fake_report, diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 6764f6747b6d..29618e313051 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -116,7 +116,7 @@ add_fingerprint(user) return ..() -/obj/item/paper_bin/attackby(obj/item/I, mob/user, params) +/obj/item/paper_bin/attackby(obj/item/I, mob/user, list/modifiers) if(at_overlay_limit()) dump_contents(drop_location(), TRUE) return diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index 4183b3829995..f3f713b7a95e 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -80,7 +80,7 @@ user.put_in_hands(released_paper) -/obj/item/paperplane/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/paperplane/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(IS_WRITING_UTENSIL(attacking_item)) to_chat(user, span_warning("You should unfold [src] before changing it!")) return diff --git a/code/modules/paperwork/paperwork.dm b/code/modules/paperwork/paperwork.dm index 03f22177f9e7..d8403354fdad 100644 --- a/code/modules/paperwork/paperwork.dm +++ b/code/modules/paperwork/paperwork.dm @@ -39,7 +39,7 @@ detailed_desc = span_notice("As you sift through the papers, you slowly start to piece together what you're reading.") -/obj/item/paperwork/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/paperwork/attackby(obj/item/attacking_item, mob/user, list/modifiers) . = ..() if(.) return @@ -234,7 +234,7 @@ else . += span_notice("These appear to just be a photocopy of the original documents.") -/obj/item/paperwork/photocopy/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/paperwork/photocopy/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(istype(attacking_item, /obj/item/stamp/void) && !stamped && !voided) to_chat(user, span_notice("You plant the [attacking_item] firmly onto the front of the documents.")) stamp_overlay = mutable_appearance('icons/obj/service/bureaucracy.dmi', "paper_stamp-void") diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 70dd11839741..e8d4fb118f28 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -244,7 +244,7 @@ SEND_SIGNAL(src, COMSIG_PEN_ROTATED, deg, user) return CLICK_ACTION_SUCCESS -/obj/item/pen/attack(mob/living/M, mob/user, params) +/obj/item/pen/attack(mob/living/M, mob/user, list/modifiers) if(force) // If the pen has a force value, call the normal attack procs. Used for e-daggers and captain's pen mostly. return ..() if(!M.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE)) @@ -268,7 +268,7 @@ * Sleepypens */ -/obj/item/pen/sleepy/attack(mob/living/M, mob/user, params) +/obj/item/pen/sleepy/attack(mob/living/M, mob/user, list/modifiers) . = ..() if(!.) return diff --git a/code/modules/paperwork/ticketmachine.dm b/code/modules/paperwork/ticketmachine.dm index b3d925fcf189..44ddecad5476 100644 --- a/code/modules/paperwork/ticketmachine.dm +++ b/code/modules/paperwork/ticketmachine.dm @@ -177,7 +177,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/ticket_machine, 32) maptext_x = 4 maptext = MAPTEXT(current_number) //Finally, apply the maptext -/obj/machinery/ticket_machine/attackby(obj/item/I, mob/user, params) +/obj/machinery/ticket_machine/attackby(obj/item/I, mob/user, list/modifiers) ..() if(istype(I, /obj/item/hand_labeler_refill)) if(!(ticket_number >= max_number)) diff --git a/code/modules/photography/photos/frame.dm b/code/modules/photography/photos/frame.dm index 2158e829b50d..394465400713 100644 --- a/code/modules/photography/photos/frame.dm +++ b/code/modules/photography/photos/frame.dm @@ -147,7 +147,7 @@ return ITEM_INTERACT_SUCCESS -/obj/structure/sign/picture_frame/attackby(obj/item/I, mob/user, params) +/obj/structure/sign/picture_frame/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/photo)) if(framed) diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm index d9547e9cd118..1759fd6c815a 100644 --- a/code/modules/photography/photos/photo.dm +++ b/code/modules/photography/photos/photo.dm @@ -80,7 +80,7 @@ /obj/item/photo/attack_self(mob/user) user.examinate(src) -/obj/item/photo/attackby(obj/item/P, mob/user, params) +/obj/item/photo/attackby(obj/item/P, mob/user, list/modifiers) if(IS_WRITING_UTENSIL(P)) if(!user.can_write(P)) return diff --git a/code/modules/plumbing/plumbers/plumbing_buffer.dm b/code/modules/plumbing/plumbers/plumbing_buffer.dm index 06aad506ff03..9c43d09522b3 100644 --- a/code/modules/plumbing/plumbers/plumbing_buffer.dm +++ b/code/modules/plumbing/plumbers/plumbing_buffer.dm @@ -84,7 +84,7 @@ to_chat(user, span_notice("New activation threshold is now [activation_volume].")) return -/obj/machinery/plumbing/buffer/attackby(obj/item/item, mob/user, params) +/obj/machinery/plumbing/buffer/attackby(obj/item/item, mob/user, list/modifiers) if(item.tool_behaviour == TOOL_SCREWDRIVER) to_chat(user, span_notice("You reset the automatic buffer.")) diff --git a/code/modules/plumbing/plumbers/teleporter.dm b/code/modules/plumbing/plumbers/teleporter.dm index 46c46d594f6f..b0ed573f7602 100644 --- a/code/modules/plumbing/plumbers/teleporter.dm +++ b/code/modules/plumbing/plumbers/teleporter.dm @@ -98,7 +98,7 @@ senders = list() -/obj/machinery/plumbing/receiver/attackby(obj/item/I, mob/user, params) +/obj/machinery/plumbing/receiver/attackby(obj/item/I, mob/user, list/modifiers) if(default_deconstruction_screwdriver(user, icon_state + "_open", initial(icon_state), I)) update_appearance() return diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 510355918c98..1f910cca525f 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -174,7 +174,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri icon_state = dir_string return ..() -/obj/structure/cable/proc/handlecable(obj/item/W, mob/user, params) +/obj/structure/cable/proc/handlecable(obj/item/W, mob/user, list/modifiers) var/turf/T = get_turf(src) if(T.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) return @@ -204,8 +204,8 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri // - Wirecutters : cut it duh ! // - Multitool : get the power currently passing through the cable // -/obj/structure/cable/attackby(obj/item/W, mob/user, params) - handlecable(W, user, params) +/obj/structure/cable/attackby(obj/item/item, mob/user, list/modifiers) + handlecable(item, user, modifiers) // shock the user with probability prb diff --git a/code/modules/power/floodlight.dm b/code/modules/power/floodlight.dm index ecacc0bc6a95..8bf4fd7c1f7b 100644 --- a/code/modules/power/floodlight.dm +++ b/code/modules/power/floodlight.dm @@ -97,7 +97,7 @@ return TRUE -/obj/structure/floodlight_frame/attackby(obj/item/O, mob/user, params) +/obj/structure/floodlight_frame/attackby(obj/item/O, mob/user, list/modifiers) if(istype(O, /obj/item/stack/cable_coil) && state == FLOODLIGHT_NEEDS_WIRES) var/obj/item/stack/S = O if(S.use(5)) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 1e561c603079..1d35c683fe8a 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -82,7 +82,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) main_part = null return ..() -/obj/machinery/gravity_generator/part/attackby(obj/item/weapon, mob/user, params) +/obj/machinery/gravity_generator/part/attackby(obj/item/weapon, mob/user, list/modifiers) if(!main_part) return return main_part.attackby(weapon, user) @@ -234,7 +234,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) . += span_notice("The new plating just needs to be bolted into place now.") // Fixing the gravity generator. -/obj/machinery/gravity_generator/main/attackby(obj/item/weapon, mob/user, params) +/obj/machinery/gravity_generator/main/attackby(obj/item/weapon, mob/user, list/modifiers) if(machine_stat & BROKEN) switch(broken_state) if(GRAV_NEEDS_SCREWDRIVER) diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm index bf624e02c360..996fa6c990b7 100644 --- a/code/modules/power/lighting/light.dm +++ b/code/modules/power/lighting/light.dm @@ -346,7 +346,7 @@ // attack with item - insert light (if right type), otherwise try to break the light -/obj/machinery/light/attackby(obj/item/tool, mob/living/user, params) +/obj/machinery/light/attackby(obj/item/tool, mob/living/user, list/modifiers) // attempt to insert light if(istype(tool, /obj/item/light)) if(status == LIGHT_OK) diff --git a/code/modules/power/lighting/light_construct.dm b/code/modules/power/lighting/light_construct.dm index 902ca9fb0eb3..06f76ade2148 100644 --- a/code/modules/power/lighting/light_construct.dm +++ b/code/modules/power/lighting/light_construct.dm @@ -75,7 +75,7 @@ cell_reference.forceMove(drop_location()) return cell_reference.attack_tk(user) -/obj/structure/light_construct/attackby(obj/item/tool, mob/user, params) +/obj/structure/light_construct/attackby(obj/item/tool, mob/user, list/modifiers) add_fingerprint(user) if(istype(tool, /obj/item/stock_parts/power_store/cell)) if(!cell_connectors) diff --git a/code/modules/power/lighting/light_items.dm b/code/modules/power/lighting/light_items.dm index 2fc3148aa0ca..2669f208d3ac 100644 --- a/code/modules/power/lighting/light_items.dm +++ b/code/modules/power/lighting/light_items.dm @@ -32,7 +32,7 @@ AddElement(/datum/element/update_icon_updates_onmob) AddComponent(/datum/component/golem_food, golem_food_key = /obj/item/light, extra_validation = CALLBACK(src, PROC_REF(is_intact))) -/obj/item/light/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/light/attackby(obj/item/attacking_item, mob/user, list/modifiers) . = ..() if(istype(attacking_item, /obj/item/lightreplacer)) @@ -127,7 +127,7 @@ ..() shatter(M) -/obj/item/light/attack_atom(obj/O, mob/living/user, params) +/obj/item/light/attack_atom(obj/O, mob/living/user, list/modifiers) ..() shatter(O) diff --git a/code/modules/power/pipecleaners.dm b/code/modules/power/pipecleaners.dm index 7f1ef8fc2e3a..87230f1c0e76 100644 --- a/code/modules/power/pipecleaners.dm +++ b/code/modules/power/pipecleaners.dm @@ -150,8 +150,8 @@ By design, d1 is the smallest direction and d2 is the highest investigate_log("was pulled up by [key_name(usr)] in [AREACOORD(src)]", INVESTIGATE_WIRES) deconstruct() -/obj/structure/pipe_cleaner/attackby(obj/item/W, mob/user, params) - handlecable(W, user, params) +/obj/structure/pipe_cleaner/attackby(obj/item/W, mob/user, list/modifiers) + handlecable(W, user, modifiers) /obj/structure/pipe_cleaner/singularity_pull(S, current_size) ..() diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index b302ae8871b2..46fa7ff7b3cf 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -175,7 +175,7 @@ else disconnect_from_network() -/obj/machinery/power/port_gen/pacman/attackby(obj/item/O, mob/user, params) +/obj/machinery/power/port_gen/pacman/attackby(obj/item/O, mob/user, list/modifiers) if(istype(O, sheet_path)) var/obj/item/stack/addstack = O var/amount = min((max_sheets - sheets), addstack.amount) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 35d75ed8dcea..988394c89202 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -326,7 +326,7 @@ // attach a wire to a power machine - leads from the turf you are standing on //almost never called, overwritten by all power machines but terminal and generator -/obj/machinery/power/attackby(obj/item/W, mob/user, params) +/obj/machinery/power/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/coil = W var/turf/T = user.loc diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm index 657263b3de41..98efc280f4f8 100644 --- a/code/modules/power/rtg.dm +++ b/code/modules/power/rtg.dm @@ -37,7 +37,7 @@ if(in_range(user, src) || isobserver(user)) . += span_notice("The status display reads: Power generation at [display_power(power_gen, convert = FALSE)].") -/obj/machinery/power/rtg/attackby(obj/item/I, mob/user, params) +/obj/machinery/power/rtg/attackby(obj/item/I, mob/user, list/modifiers) if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-open", initial(icon_state), I)) return else if(default_deconstruction_crowbar(I)) @@ -142,7 +142,7 @@ power_gen = 750 anchored = TRUE -/obj/machinery/power/rtg/old_station/attackby(obj/item/I, mob/user, params) +/obj/machinery/power/rtg/old_station/attackby(obj/item/I, mob/user, list/modifiers) if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-open", initial(icon_state), I)) to_chat(user,span_warning("You feel it crumbling under your hands!")) return diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index b47f32a4d10d..c66a977ad271 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -50,7 +50,7 @@ yeet_shock(user) return TRUE -/obj/machinery/field/containment/attackby(obj/item/W, mob/user, params) +/obj/machinery/field/containment/attackby(obj/item/W, mob/user, list/modifiers) yeet_shock(user) return TRUE diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index e4e2ec438134..f1a489389753 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -332,7 +332,7 @@ locked = !locked to_chat(user, span_notice("You [src.locked ? "lock" : "unlock"] the controls.")) -/obj/machinery/power/emitter/attackby(obj/item/item, mob/user, params) +/obj/machinery/power/emitter/attackby(obj/item/item, mob/user, list/modifiers) if(item.GetID()) togglelock(user) return diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index e09fadfbed36..2017603ae1c9 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -312,7 +312,7 @@ return randomise_offset(anchored ? 0 : random_offset) -/obj/item/solar_assembly/attackby(obj/item/item_used, mob/user, params) +/obj/item/solar_assembly/attackby(obj/item/item_used, mob/user, list/modifiers) if(item_used.tool_behaviour == TOOL_WRENCH && isturf(loc)) if(isinspace()) to_chat(user, span_warning("You can't secure [src] here.")) @@ -566,7 +566,7 @@ return TRUE return FALSE -/obj/machinery/power/solar_control/attackby(obj/item/I, mob/living/user, params) +/obj/machinery/power/solar_control/attackby(obj/item/I, mob/living/user, list/modifiers) if(I.tool_behaviour == TOOL_SCREWDRIVER) if(I.use_tool(src, user, 20, volume=50)) if (src.machine_stat & BROKEN) diff --git a/code/modules/power/supermatter/supermatter_hit_procs.dm b/code/modules/power/supermatter/supermatter_hit_procs.dm index 5f0db611c5e1..95497a058c38 100644 --- a/code/modules/power/supermatter/supermatter_hit_procs.dm +++ b/code/modules/power/supermatter/supermatter_hit_procs.dm @@ -65,7 +65,7 @@ qdel(rip_u) return COMPONENT_CANCEL_ATTACK_CHAIN -/obj/machinery/power/supermatter_crystal/attackby(obj/item/item, mob/user, params) +/obj/machinery/power/supermatter_crystal/attackby(obj/item/item, mob/user, list/modifiers) if(istype(item, /obj/item/scalpel/supermatter)) var/obj/item/scalpel/supermatter/scalpel = item to_chat(user, span_notice("You carefully begin to scrape \the [src] with \the [scalpel]...")) diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 14eb6c88864b..6125483432ba 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -74,7 +74,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/power/energy_accumulator/tesla_coil/attackby(obj/item/W, mob/user, params) +/obj/machinery/power/energy_accumulator/tesla_coil/attackby(obj/item/W, mob/user, list/modifiers) if(default_deconstruction_screwdriver(user, "coil_open[anchored]", "coil[anchored]", W)) return @@ -156,7 +156,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/power/energy_accumulator/grounding_rod/attackby(obj/item/W, mob/user, params) +/obj/machinery/power/energy_accumulator/grounding_rod/attackby(obj/item/W, mob/user, list/modifiers) if(default_deconstruction_screwdriver(user, "grounding_rod_open[anchored]", "grounding_rod[anchored]", W)) return diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm index 0d45232d8fa2..9b6c0478d7b3 100644 --- a/code/modules/projectiles/ammunition/_ammunition.dm +++ b/code/modules/projectiles/ammunition/_ammunition.dm @@ -105,7 +105,7 @@ if(!loaded_projectile) loaded_projectile = new projectile_type(src, src) -/obj/item/ammo_casing/attackby(obj/item/I, mob/user, params) +/obj/item/ammo_casing/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/ammo_box)) var/obj/item/ammo_box/box = I if(isturf(loc)) diff --git a/code/modules/projectiles/ammunition/ballistic/foam.dm b/code/modules/projectiles/ammunition/ballistic/foam.dm index 2895d74555be..f02e88b85a39 100644 --- a/code/modules/projectiles/ammunition/ballistic/foam.dm +++ b/code/modules/projectiles/ammunition/ballistic/foam.dm @@ -39,7 +39,7 @@ [length(type_initial_names) ? ", such as [english_list(type_initial_names, and_text = "or ", final_comma_text = ", ")]" : ""].") -/obj/item/ammo_casing/foam_dart/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/ammo_casing/foam_dart/attackby(obj/item/attacking_item, mob/user, list/modifiers) var/obj/projectile/bullet/foam_dart/dart = loaded_projectile if (attacking_item.tool_behaviour == TOOL_SCREWDRIVER && !modified) modified = TRUE diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index e2b4612d6413..4c9da1487e4e 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -340,7 +340,7 @@ return ..() -/obj/item/gun/ballistic/automatic/l6_saw/attackby(obj/item/A, mob/user, params) +/obj/item/gun/ballistic/automatic/l6_saw/attackby(obj/item/A, mob/user, list/modifiers) if(!cover_open && istype(A, accepted_magazine_type)) balloon_alert(user, "open the cover!") return diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index d772003e9809..a861eb322a07 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -16,7 +16,7 @@ /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted pin = /obj/item/firing_pin -/obj/item/gun/ballistic/revolver/grenadelauncher/attackby(obj/item/A, mob/user, params) +/obj/item/gun/ballistic/revolver/grenadelauncher/attackby(obj/item/A, mob/user, list/modifiers) ..() if(istype(A, /obj/item/ammo_box) || isammocasing(A)) chamber_round() diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index a457c214464d..5f1918efc15f 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -90,7 +90,7 @@ return underbarrel.try_fire_gun(target, user, params) return ..() -/obj/item/gun/ballistic/automatic/pistol/clandestine/fisher/afterattack(atom/target, mob/user, click_parameters) +/obj/item/gun/ballistic/automatic/pistol/clandestine/fisher/afterattack(atom/target, mob/user, list/modifiers) var/obj/projectile/energy/fisher/melee/simulated_hit = new simulated_hit.firer = user simulated_hit.on_hit(target) diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm index 9a7fa9aa78be..12047025e848 100644 --- a/code/modules/projectiles/guns/energy/dueling.dm +++ b/code/modules/projectiles/guns/energy/dueling.dm @@ -165,7 +165,7 @@ setting_overlay = mutable_appearance(icon,setting_iconstate()) add_overlay(setting_overlay) -/obj/item/gun/energy/dueling/attackby(obj/item/W, mob/user, params) +/obj/item/gun/energy/dueling/attackby(obj/item/W, mob/user, list/modifiers) if(istype(W, /obj/item/gun/energy/dueling)) var/obj/item/gun/energy/dueling/other_gun = W diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm index 65fa80bd8306..1829c9351532 100644 --- a/code/modules/projectiles/guns/energy/laser_gatling.dm +++ b/code/modules/projectiles/guns/energy/laser_gatling.dm @@ -53,7 +53,7 @@ else ..() -/obj/item/minigunpack/attackby(obj/item/W, mob/user, params) +/obj/item/minigunpack/attackby(obj/item/W, mob/user, list/modifiers) if(W == gun) //Don't need armed check, because if you have the gun assume its armed. user.dropItemToGround(gun, TRUE) else diff --git a/code/modules/projectiles/guns/energy/recharge.dm b/code/modules/projectiles/guns/energy/recharge.dm index b97397f1c206..bdbc30e40e53 100644 --- a/code/modules/projectiles/guns/energy/recharge.dm +++ b/code/modules/projectiles/guns/energy/recharge.dm @@ -168,7 +168,7 @@ Caveat emptor." \ ) -/obj/item/gun/energy/recharge/fisher/attack(mob/living/target_mob, mob/living/user, params) +/obj/item/gun/energy/recharge/fisher/attack(mob/living/target_mob, mob/living/user, list/modifiers) . = ..() if(.) return diff --git a/code/modules/projectiles/guns/special/grenade_launcher.dm b/code/modules/projectiles/guns/special/grenade_launcher.dm index 834a7f506686..41ce1e6cb8b8 100644 --- a/code/modules/projectiles/guns/special/grenade_launcher.dm +++ b/code/modules/projectiles/guns/special/grenade_launcher.dm @@ -28,7 +28,7 @@ max_grenades = reset_fantasy_variable("max_syringes", max_grenades) return ..() -/obj/item/gun/grenadelauncher/attackby(obj/item/I, mob/user, params) +/obj/item/gun/grenadelauncher/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/grenade/c4)) return diff --git a/code/modules/projectiles/guns/special/hand_of_midas.dm b/code/modules/projectiles/guns/special/hand_of_midas.dm index 9d6a89c77c3d..d0e2af708ce5 100644 --- a/code/modules/projectiles/guns/special/hand_of_midas.dm +++ b/code/modules/projectiles/guns/special/hand_of_midas.dm @@ -78,7 +78,7 @@ return ITEM_INTERACT_SUCCESS // If we botch a shot, we have to start over again by inserting gold coins into the gun. Can only be done if it has no charges or gold. -/obj/item/gun/magic/midas_hand/attackby(obj/item/I, mob/living/user, params) +/obj/item/gun/magic/midas_hand/attackby(obj/item/I, mob/living/user, list/modifiers) . = ..() if(charges || gold_timer) balloon_alert(user, "already loaded") diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index bd89819c6726..0187dbc8981f 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -266,7 +266,7 @@ gun.desc = initial(desc) ..() -/obj/item/firing_pin/paywall/attackby(obj/item/M, mob/living/user, params) +/obj/item/firing_pin/paywall/attackby(obj/item/M, mob/living/user, list/modifiers) if(isidcard(M)) var/obj/item/card/id/id = M if(!id.registered_account) diff --git a/code/modules/reagents/chemistry/items.dm b/code/modules/reagents/chemistry/items.dm index 68141702d55b..ca4a8b07e8ca 100644 --- a/code/modules/reagents/chemistry/items.dm +++ b/code/modules/reagents/chemistry/items.dm @@ -163,7 +163,7 @@ if(reagent_type) reagents.add_reagent(reagent_type, 15) -/obj/item/burner/attackby(obj/item/I, mob/living/user, params) +/obj/item/burner/attackby(obj/item/I, mob/living/user, list/modifiers) . = ..() if(is_reagent_container(I)) if(lit) diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 44aabc73783e..23b3ddbaacb9 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -79,13 +79,12 @@ beaker = null update_appearance() -/obj/machinery/computer/pandemic/attackby(obj/item/held_item, mob/user, params) +/obj/machinery/computer/pandemic/attackby(obj/item/held_item, mob/user, list/modifiers) //Advanced science! Percision instruments (eg droppers and syringes) are precise enough to modify the loaded sample! if(istype(held_item, /obj/item/reagent_containers/dropper) || istype(held_item, /obj/item/reagent_containers/syringe)) if(!beaker) balloon_alert(user, "no beaker!") return ..() - var/list/modifiers = params2list(params) if(istype(held_item, /obj/item/reagent_containers/syringe) && LAZYACCESS(modifiers, RIGHT_CLICK)) held_item.interact_with_atom_secondary(beaker, user) else diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 43e21aa7fdcd..8c9bcf7071b8 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -84,7 +84,7 @@ RegisterSignals(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_REM_REAGENT), PROC_REF(on_reagent_change)) RegisterSignal(reagents, COMSIG_QDELETING, PROC_REF(on_reagents_del)) -/obj/item/reagent_containers/attack(mob/living/target_mob, mob/living/user, params) +/obj/item/reagent_containers/attack(mob/living/target_mob, mob/living/user, list/modifiers) if (!user.combat_mode) return return ..() @@ -125,7 +125,7 @@ balloon_alert(user, "transferring [amount_per_transfer_from_this]u") mode_change_message(user) -/obj/item/reagent_containers/pre_attack_secondary(atom/target, mob/living/user, params) +/obj/item/reagent_containers/pre_attack_secondary(atom/target, mob/living/user, list/modifiers) if(HAS_TRAIT(target, TRAIT_DO_NOT_SPLASH)) return ..() if(!user.combat_mode) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index df12232b522f..0aefe25c7167 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -99,7 +99,7 @@ /obj/item/reagent_containers/blood/universal blood_type = /datum/blood_type/universal -/obj/item/reagent_containers/blood/attackby(obj/item/tool, mob/user, params) +/obj/item/reagent_containers/blood/attackby(obj/item/tool, mob/user, list/modifiers) if (IS_WRITING_UTENSIL(tool)) if(!user.can_write(tool)) return diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index 4d0475d81c96..dcbc7ce95f83 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -186,7 +186,7 @@ target.update_appearance() return ITEM_INTERACT_SUCCESS -/obj/item/reagent_containers/cup/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/reagent_containers/cup/attackby(obj/item/attacking_item, mob/user, list/modifiers) var/hotness = attacking_item.get_temperature() if(hotness && reagents) reagents.expose_temperature(hotness) @@ -431,7 +431,7 @@ melee = 10 acid = 50 -/obj/item/reagent_containers/cup/bucket/attackby(obj/O, mob/user, params) +/obj/item/reagent_containers/cup/bucket/attackby(obj/O, mob/user, list/modifiers) if(istype(O, /obj/item/mop)) if(reagents.total_volume < 1) user.balloon_alert(user, "empty!") diff --git a/code/modules/reagents/reagent_containers/cups/bottle.dm b/code/modules/reagents/reagent_containers/cups/bottle.dm index 59752a5a7b65..0a778f1cf789 100644 --- a/code/modules/reagents/reagent_containers/cups/bottle.dm +++ b/code/modules/reagents/reagent_containers/cups/bottle.dm @@ -511,7 +511,7 @@ return CONTEXTUAL_SCREENTIP_SET //when you attack the syrup bottle with a container it refills it -/obj/item/reagent_containers/cup/bottle/syrup_bottle/item_interaction(mob/living/user, obj/item/tool, params) +/obj/item/reagent_containers/cup/bottle/syrup_bottle/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(IS_WRITING_UTENSIL(tool)) return writing_utensil_act(user, tool) if(cap_on && tool.is_refillable()) diff --git a/code/modules/reagents/reagent_containers/cups/glassbottle.dm b/code/modules/reagents/reagent_containers/cups/glassbottle.dm index 53b8483e1ea2..b9c34f4e19a3 100644 --- a/code/modules/reagents/reagent_containers/cups/glassbottle.dm +++ b/code/modules/reagents/reagent_containers/cups/glassbottle.dm @@ -674,7 +674,7 @@ if(do_after(user, 1 SECONDS, src)) return pop_cork(user, sabrage = FALSE, froth_severity = pick(0, 1)) -/obj/item/reagent_containers/cup/glass/bottle/champagne/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/item/reagent_containers/cup/glass/bottle/champagne/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) . = ..() if(spillable) @@ -911,7 +911,7 @@ target.fire_act() new /obj/effect/hotspot(get_turf(target)) -/obj/item/reagent_containers/cup/glass/bottle/molotov/attackby(obj/item/I, mob/user, params) +/obj/item/reagent_containers/cup/glass/bottle/molotov/attackby(obj/item/I, mob/user, list/modifiers) if(I.get_temperature() && !active) active = TRUE log_bomber(user, "has primed a", src, "for detonation") diff --git a/code/modules/reagents/reagent_containers/misc.dm b/code/modules/reagents/reagent_containers/misc.dm index e989f49c2432..f19d78c6ffb5 100644 --- a/code/modules/reagents/reagent_containers/misc.dm +++ b/code/modules/reagents/reagent_containers/misc.dm @@ -73,7 +73,7 @@ to_chat(user, span_notice("You screw the battery case on [src] [open ? "open" : "closed"] .")) update_appearance() -/obj/item/reagent_containers/cup/maunamug/attackby(obj/item/I, mob/user, params) +/obj/item/reagent_containers/cup/maunamug/attackby(obj/item/I, mob/user, list/modifiers) add_fingerprint(user) if(!istype(I, /obj/item/stock_parts/power_store/cell)) return ..() diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index b2f76bb4f44f..131fb82afe47 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -135,7 +135,7 @@ current_range = spray_range to_chat(user, span_notice("You switch the nozzle setting to [stream_mode ? "\"stream\"":"\"spray\""].")) -/obj/item/reagent_containers/spray/attackby(obj/item/I, mob/user, params) +/obj/item/reagent_containers/spray/attackby(obj/item/I, mob/user, list/modifiers) var/hotness = I.get_temperature() if(hotness && reagents) reagents.expose_temperature(hotness) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index c3c583223adf..49935dfdf77c 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -24,7 +24,7 @@ . = ..() AddElement(/datum/element/update_icon_updates_onmob) -/obj/item/reagent_containers/syringe/attackby(obj/item/I, mob/user, params) +/obj/item/reagent_containers/syringe/attackby(obj/item/I, mob/user, list/modifiers) return /obj/item/reagent_containers/syringe/proc/try_syringe(atom/target, mob/user) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 57d75810ac88..839885aebb45 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -82,7 +82,7 @@ if(tank_volume && (damage_flag == BULLET || damage_flag == LASER)) boom() -/obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, params) +/obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, list/modifiers) if(W.is_refillable()) return FALSE //so we can refill them via their afterattack. if(istype(W, /obj/item/assembly_holder) && accepts_rig) diff --git a/code/modules/recycling/conveyor.dm b/code/modules/recycling/conveyor.dm index 6addae95f9c4..36b0708a16c9 100644 --- a/code/modules/recycling/conveyor.dm +++ b/code/modules/recycling/conveyor.dm @@ -266,7 +266,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) SSmove_manager.stop_looping(thing, SSconveyors) // attack with item, place item on conveyor -/obj/machinery/conveyor/attackby(obj/item/attacking_item, mob/living/user, params) +/obj/machinery/conveyor/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if(attacking_item.tool_behaviour == TOOL_CROWBAR) user.visible_message(span_notice("[user] struggles to pry up [src] with [attacking_item]."), \ span_notice("You struggle to pry up [src] with [attacking_item].")) @@ -310,7 +310,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) else return ..() -/obj/machinery/conveyor/attackby_secondary(obj/item/attacking_item, mob/living/user, params) +/obj/machinery/conveyor/attackby_secondary(obj/item/attacking_item, mob/living/user, list/modifiers) if(attacking_item.tool_behaviour == TOOL_SCREWDRIVER) attacking_item.play_tool_sound(src) flipped = !flipped @@ -468,7 +468,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/machinery/conveyor_switch/attack_robot_secondary(mob/user, list/modifiers) return attack_hand_secondary(user, modifiers) -/obj/machinery/conveyor_switch/attackby(obj/item/attacking_item, mob/user, params) +/obj/machinery/conveyor_switch/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(is_wire_tool(attacking_item)) wires.interact(user) return TRUE @@ -583,7 +583,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) use(1) return ITEM_INTERACT_SUCCESS -/obj/item/stack/conveyor/attackby(obj/item/item_used, mob/user, params) +/obj/item/stack/conveyor/attackby(obj/item/item_used, mob/user, list/modifiers) ..() if(istype(item_used, /obj/item/conveyor_switch_construct)) to_chat(user, span_notice("You link the switch to the conveyor belt assembly.")) diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 62aadf8eda68..188d05a710a9 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -114,7 +114,7 @@ air_contents.merge(removed) trunk_check() -/obj/machinery/disposal/attackby(obj/item/I, mob/living/user, params) +/obj/machinery/disposal/attackby(obj/item/I, mob/living/user, list/modifiers) add_fingerprint(user) if(!pressure_charging && !full_pressure && !flush) if(I.tool_behaviour == TOOL_SCREWDRIVER) @@ -361,7 +361,7 @@ interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_IGNORE_MOBILITY // attack by item places it in to disposal -/obj/machinery/disposal/bin/attackby(obj/item/I, mob/user, params) +/obj/machinery/disposal/bin/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/storage/bag/trash)) //Not doing component overrides because this is a specific type. var/obj/item/storage/bag/trash/bag = I to_chat(user, span_warning("You empty the bag.")) diff --git a/code/modules/recycling/disposal/pipe_sorting.dm b/code/modules/recycling/disposal/pipe_sorting.dm index 90cd58329663..abf001f47dc5 100644 --- a/code/modules/recycling/disposal/pipe_sorting.dm +++ b/code/modules/recycling/disposal/pipe_sorting.dm @@ -55,7 +55,7 @@ else . += "It has no sorting tags set." -/obj/structure/disposalpipe/sorting/mail/attackby(obj/item/I, mob/user, params) +/obj/structure/disposalpipe/sorting/mail/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/dest_tagger)) var/obj/item/dest_tagger/O = I diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 0bbf7071b340..46e49c7ed5c3 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -103,7 +103,7 @@ if(sticker) . += "[base_icon_state]_tag" -/obj/item/delivery/attackby(obj/item/item, mob/user, params) +/obj/item/delivery/attackby(obj/item/item, mob/user, list/modifiers) if(istype(item, /obj/item/dest_tagger)) var/obj/item/dest_tagger/dest_tagger = item @@ -356,7 +356,7 @@ if(payments_acc) . += span_notice("Ctrl-click to clear the registered account.") -/obj/item/sales_tagger/attackby(obj/item/item, mob/living/user, params) +/obj/item/sales_tagger/attackby(obj/item/item, mob/living/user, list/modifiers) . = ..() if(isidcard(item)) var/obj/item/card/id/potential_acc = item diff --git a/code/modules/religion/burdened/psyker.dm b/code/modules/religion/burdened/psyker.dm index 64049ba6dafd..14bf4d484db2 100644 --- a/code/modules/religion/burdened/psyker.dm +++ b/code/modules/religion/burdened/psyker.dm @@ -229,7 +229,7 @@ /obj/item/gun/ballistic/revolver/chaplain/attack_self(mob/living/user) pray_refill(user) -/obj/item/gun/ballistic/revolver/chaplain/attackby(obj/item/possibly_ammo, mob/user, params) +/obj/item/gun/ballistic/revolver/chaplain/attackby(obj/item/possibly_ammo, mob/user, list/modifiers) if (isammocasing(possibly_ammo) || istype(possibly_ammo, /obj/item/ammo_box)) user.balloon_alert(user, "no manual reloads!") return diff --git a/code/modules/religion/sparring/ceremonial_gear.dm b/code/modules/religion/sparring/ceremonial_gear.dm index 75bad29990cb..de525a0a2866 100644 --- a/code/modules/religion/sparring/ceremonial_gear.dm +++ b/code/modules/religion/sparring/ceremonial_gear.dm @@ -41,7 +41,7 @@ ) RegisterSignal(src, COMSIG_ITEM_SHARPEN_ACT, PROC_REF(block_sharpening)) -/obj/item/ceremonial_blade/melee_attack_chain(mob/user, atom/target, params) +/obj/item/ceremonial_blade/melee_attack_chain(mob/user, atom/target, list/modifiers) if(!HAS_TRAIT(target, TRAIT_SPARRING)) return ..() var/old_force = force diff --git a/code/modules/research/anomaly/anomaly_core.dm b/code/modules/research/anomaly/anomaly_core.dm index 9cf762e58d21..1028b7d4dcb0 100644 --- a/code/modules/research/anomaly/anomaly_core.dm +++ b/code/modules/research/anomaly/anomaly_core.dm @@ -29,7 +29,7 @@ /obj/item/assembly/signaler/anomaly/attack_self() return -/obj/item/assembly/signaler/anomaly/attackby(obj/item/I, mob/user, params) +/obj/item/assembly/signaler/anomaly/attackby(obj/item/I, mob/user, list/modifiers) if(I.tool_behaviour == TOOL_ANALYZER) to_chat(user, span_notice("Analyzing... [src]'s stabilized field is fluctuating along frequency [format_frequency(frequency)], code [code].")) return ..() diff --git a/code/modules/research/anomaly/anomaly_refinery.dm b/code/modules/research/anomaly/anomaly_refinery.dm index a47926cabc43..12ca241dc6b6 100644 --- a/code/modules/research/anomaly/anomaly_refinery.dm +++ b/code/modules/research/anomaly/anomaly_refinery.dm @@ -71,7 +71,7 @@ var/radius = clamp(round(MIN_RADIUS_REQUIRED + radius_increase_per_core * already_made, 1), MIN_RADIUS_REQUIRED, MAX_RADIUS_REQUIRED) return radius -/obj/machinery/research/anomaly_refinery/attackby(obj/item/tool, mob/living/user, params) +/obj/machinery/research/anomaly_refinery/attackby(obj/item/tool, mob/living/user, list/modifiers) if(active) to_chat(user, span_warning("You can't insert [tool] into [src] while [p_theyre()] currently active.")) return diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 597a6ba7d00b..074cb47f16c2 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -116,7 +116,7 @@ if(in_range(user, src) || isobserver(user)) . += span_notice("The status display reads: Malfunction probability reduced by [malfunction_probability_coeff]%.
Cooldown interval between experiments at [resetTime*0.1] seconds.") -/obj/machinery/rnd/experimentor/attackby(obj/item/weapon, mob/living/user, params) +/obj/machinery/rnd/experimentor/attackby(obj/item/weapon, mob/living/user, list/modifiers) if(user.combat_mode) return ..() if(!is_insertion_ready(user)) diff --git a/code/modules/research/ordnance/doppler_array.dm b/code/modules/research/ordnance/doppler_array.dm index 90f56055d53c..52cb2d0d0910 100644 --- a/code/modules/research/ordnance/doppler_array.dm +++ b/code/modules/research/ordnance/doppler_array.dm @@ -49,7 +49,7 @@ . = ..() . += span_notice("It is currently facing [dir2text(dir)]") -/obj/machinery/doppler_array/attackby(obj/item/item, mob/user, params) +/obj/machinery/doppler_array/attackby(obj/item/item, mob/user, list/modifiers) if(istype(item, /obj/item/computer_disk)) var/obj/item/computer_disk/disk = item eject_disk(user) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index b0e3dbe2a328..d42604835149 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -64,7 +64,7 @@ Nothing else in the console has ID requirements. d_disk = null return ..() -/obj/machinery/computer/rdconsole/attackby(obj/item/D, mob/user, params) +/obj/machinery/computer/rdconsole/attackby(obj/item/D, mob/user, list/modifiers) //Loading a disk into it. if(istype(D, /obj/item/disk)) if(istype(D, /obj/item/disk/tech_disk)) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 3f610fc23844..68022cc372a1 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -165,7 +165,7 @@ return ITEM_INTERACT_BLOCKING return ..() -/obj/machinery/rnd/server/master/attackby(obj/item/attacking_item, mob/user, params) +/obj/machinery/rnd/server/master/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(istype(attacking_item, /obj/item/computer_disk/hdd_theft)) switch(deconstruction_state) if(HDD_PANEL_CLOSED) diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index c5136baafb14..1f81056ba0c1 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -27,7 +27,7 @@ Slimecrossing Weapons throwforce = 15 damtype = BRUTE -/obj/item/knife/rainbowknife/afterattack(atom/target, mob/user, params) +/obj/item/knife/rainbowknife/afterattack(atom/target, mob/user, list/modifiers) if(isliving(target)) damtype = pick(BRUTE, BURN, TOX, OXY) switch(damtype) diff --git a/code/modules/research/xenobiology/vatgrowing/petri_dish.dm b/code/modules/research/xenobiology/vatgrowing/petri_dish.dm index 2ff71feff245..68600e246523 100644 --- a/code/modules/research/xenobiology/vatgrowing/petri_dish.dm +++ b/code/modules/research/xenobiology/vatgrowing/petri_dish.dm @@ -26,7 +26,7 @@ var/datum/micro_organism/MO = i . += MO.get_details() -/obj/item/petri_dish/pre_attack(atom/A, mob/living/user, params) +/obj/item/petri_dish/pre_attack(atom/A, mob/living/user, list/modifiers) . = ..() if(!sample || !istype(A, /obj/structure/sink)) return FALSE diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 98249455c24e..f195c09232aa 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -124,7 +124,7 @@ user.hud_used.show_hud(user.hud_used.hud_version) return ..() -/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/used_item, mob/user, params) +/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/used_item, mob/user, list/modifiers) if(istype(used_item, /obj/item/food/monkeycube)) monkeys++ to_chat(user, span_notice("You feed [used_item] to [src]. It now has [monkeys] monkey cubes stored.")) diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 9abc4bc5e08e..859d2bbd2bd8 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -62,7 +62,7 @@ active = FALSE update_appearance() -/obj/machinery/power/emitter/energycannon/magical/attackby(obj/item/W, mob/user, params) +/obj/machinery/power/emitter/energycannon/magical/attackby(obj/item/W, mob/user, list/modifiers) return /obj/machinery/power/emitter/energycannon/magical/ex_act(severity) @@ -283,7 +283,7 @@ /obj/machinery/scanner_gate/luxury_shuttle/auto_scan(atom/movable/AM) return -/obj/machinery/scanner_gate/luxury_shuttle/attackby(obj/item/W, mob/user, params) +/obj/machinery/scanner_gate/luxury_shuttle/attackby(obj/item/W, mob/user, list/modifiers) return /obj/machinery/scanner_gate/luxury_shuttle/emag_act(mob/user, obj/item/card/emag/emag_card) diff --git a/code/modules/spells/spell_types/self/sanguine_strike.dm b/code/modules/spells/spell_types/self/sanguine_strike.dm index aa6f501ea422..caed3b321f9e 100644 --- a/code/modules/spells/spell_types/self/sanguine_strike.dm +++ b/code/modules/spells/spell_types/self/sanguine_strike.dm @@ -58,7 +58,7 @@ RegisterSignal(enchanted, COMSIG_ITEM_DROPPED, PROC_REF(on_dropped)) /// signal called from attacking with the enchanted item -/datum/action/cooldown/spell/sanguine_strike/proc/on_enchanted_afterattack(obj/item/enchanted, atom/target, mob/user, click_parameters) +/datum/action/cooldown/spell/sanguine_strike/proc/on_enchanted_afterattack(obj/item/enchanted, atom/target, mob/user, list/modifiers) SIGNAL_HANDLER end_enchantment(enchanted) if(!isliving(target)) diff --git a/code/modules/spells/spell_types/self/spacetime_distortion.dm b/code/modules/spells/spell_types/self/spacetime_distortion.dm index 976d83e8a30a..ab276cd7c837 100644 --- a/code/modules/spells/spell_types/self/spacetime_distortion.dm +++ b/code/modules/spells/spell_types/self/spacetime_distortion.dm @@ -149,7 +149,7 @@ if(!busy) walk_link(AM) -/obj/effect/cross_action/spacetime_dist/attackby(obj/item/W, mob/user, params) +/obj/effect/cross_action/spacetime_dist/attackby(obj/item/W, mob/user, list/modifiers) if(user.temporarilyRemoveItemFromInventory(W)) walk_link(W) else diff --git a/code/modules/spells/spell_types/touch/_touch.dm b/code/modules/spells/spell_types/touch/_touch.dm index b769cb00dbfb..9f36fea910a1 100644 --- a/code/modules/spells/spell_types/touch/_touch.dm +++ b/code/modules/spells/spell_types/touch/_touch.dm @@ -168,7 +168,7 @@ * * When our hand hits an atom, we can cast do_hand_hit() on them. */ -/datum/action/cooldown/spell/touch/proc/on_hand_hit(datum/source, mob/living/caster, atom/target, click_parameters) +/datum/action/cooldown/spell/touch/proc/on_hand_hit(datum/source, mob/living/caster, atom/target, list/modifiers) SIGNAL_HANDLER SHOULD_NOT_OVERRIDE(TRUE) // DEFINITELY don't put effects here, put them in cast_on_hand_hit @@ -182,7 +182,7 @@ * * When our hand hits an atom, we can cast do_hand_hit() on them. */ -/datum/action/cooldown/spell/touch/proc/on_hand_hit_secondary(datum/source, mob/living/caster, atom/target, click_parameters) +/datum/action/cooldown/spell/touch/proc/on_hand_hit_secondary(datum/source, mob/living/caster, atom/target, list/modifiers) SIGNAL_HANDLER SHOULD_NOT_OVERRIDE(TRUE) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index f45d5dc37d09..79c571b8ac0a 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -577,7 +577,7 @@ // NON-MODULE CHANGE END return ..() -/obj/item/bodypart/attackby(obj/item/weapon, mob/user, params) +/obj/item/bodypart/attackby(obj/item/weapon, mob/user, list/modifiers) SHOULD_CALL_PARENT(TRUE) if(weapon.get_sharpness()) diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm index 293ffc0e64ae..cdfbf46eb51c 100644 --- a/code/modules/surgery/bodyparts/robot_bodyparts.dm +++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm @@ -318,7 +318,7 @@ TRAIT_RESISTHIGHPRESSURE, ), AUGMENTATION_TRAIT) -/obj/item/bodypart/chest/robot/attackby(obj/item/weapon, mob/user, params) +/obj/item/bodypart/chest/robot/attackby(obj/item/weapon, mob/user, list/modifiers) if(istype(weapon, /obj/item/stock_parts/power_store/cell)) if(cell) to_chat(user, span_warning("You have already inserted a cell!")) @@ -471,7 +471,7 @@ . += "It has two eye sockets occupied by flashes." . += span_notice("You can remove the seated flash[single_flash ? "":"es"] with a crowbar.") -/obj/item/bodypart/head/robot/attackby(obj/item/weapon, mob/user, params) +/obj/item/bodypart/head/robot/attackby(obj/item/weapon, mob/user, list/modifiers) if(istype(weapon, /obj/item/assembly/flash/handheld)) var/obj/item/assembly/flash/handheld/flash = weapon if(flash1 && flash2) diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm index ea0ed8faa087..045401fe64c0 100644 --- a/code/modules/surgery/organs/autosurgeon.dm +++ b/code/modules/surgery/organs/autosurgeon.dm @@ -119,11 +119,11 @@ /obj/item/autosurgeon/attack_self(mob/user)//when the object it used... use_autosurgeon(user, user) -/obj/item/autosurgeon/attack(mob/living/target, mob/living/user, params) +/obj/item/autosurgeon/attack(mob/living/target, mob/living/user, list/modifiers) add_fingerprint(user) use_autosurgeon(target, user, 8 SECONDS) -/obj/item/autosurgeon/attackby(obj/item/attacking_item, mob/user, params) +/obj/item/autosurgeon/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(isorgan(attacking_item)) load_organ(attacking_item, user) else diff --git a/code/modules/transport/tram/tram_controller.dm b/code/modules/transport/tram/tram_controller.dm index aec66d39020e..b01c48cd524d 100644 --- a/code/modules/transport/tram/tram_controller.dm +++ b/code/modules/transport/tram/tram_controller.dm @@ -770,7 +770,7 @@ . += span_notice("The cabinet can be opened with a [EXAMINE_HINT("Left-click.")]") -/obj/machinery/transport/tram_controller/attackby(obj/item/weapon, mob/living/user, params) +/obj/machinery/transport/tram_controller/attackby(obj/item/weapon, mob/living/user, list/modifiers) if(user.combat_mode || cover_open) return ..() diff --git a/code/modules/transport/tram/tram_floors.dm b/code/modules/transport/tram/tram_floors.dm index adf37e6a87f2..3f7aa9c32bb7 100644 --- a/code/modules/transport/tram/tram_floors.dm +++ b/code/modules/transport/tram/tram_floors.dm @@ -22,7 +22,7 @@ . += ..() . += span_notice("The reinforcement bolts are [EXAMINE_HINT("wrenched")] firmly in place. Use a [EXAMINE_HINT("wrench")] to remove the plate.") -/turf/open/floor/tram/attackby(obj/item/object, mob/living/user, params) +/turf/open/floor/tram/attackby(obj/item/object, mob/living/user, list/modifiers) . = ..() if(istype(object, /obj/item/stack/thermoplastic)) build_with_transport_tiles(object, user) @@ -34,7 +34,7 @@ return ..() return //unplateable -/turf/open/floor/tram/try_replace_tile(obj/item/stack/tile/replacement_tile, mob/user, params) +/turf/open/floor/tram/try_replace_tile(obj/item/stack/tile/replacement_tile, mob/user, list/modifiers) return /turf/open/floor/tram/crowbar_act(mob/living/user, obj/item/item) @@ -126,7 +126,7 @@ /turf/open/floor/tram/plate/energized/burnt_states() return list("energized_plate_damaged") -/turf/open/floor/tram/plate/energized/attackby(obj/item/attacking_item, mob/living/user, params) +/turf/open/floor/tram/plate/energized/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) if((broken || burnt) && istype(attacking_item, /obj/item/stack/sheet/mineral/titanium)) if(attacking_item.use(1)) broken = FALSE @@ -149,7 +149,7 @@ clawfootstep = FOOTSTEP_HARD_CLAW heavyfootstep = FOOTSTEP_GENERIC_HEAVY -/turf/open/indestructible/tram/attackby(obj/item/object, mob/living/user, params) +/turf/open/indestructible/tram/attackby(obj/item/object, mob/living/user, list/modifiers) . = ..() if(istype(object, /obj/item/stack/thermoplastic)) build_with_transport_tiles(object, user) diff --git a/code/modules/transport/tram/tram_signals.dm b/code/modules/transport/tram/tram_signals.dm index eb6486660304..eb30b636e471 100644 --- a/code/modules/transport/tram/tram_signals.dm +++ b/code/modules/transport/tram/tram_signals.dm @@ -118,7 +118,7 @@ SStransport.crossing_signals -= src . = ..() -/obj/machinery/transport/crossing_signal/attackby(obj/item/weapon, mob/living/user, params) +/obj/machinery/transport/crossing_signal/attackby(obj/item/weapon, mob/living/user, list/modifiers) if(!user.combat_mode) if(default_deconstruction_screwdriver(user, icon_state, icon_state, weapon)) return @@ -180,7 +180,7 @@ find_uplink() return CLICK_ACTION_SUCCESS -/obj/machinery/transport/crossing_signal/attackby_secondary(obj/item/weapon, mob/user, params) +/obj/machinery/transport/crossing_signal/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) . = ..() if(weapon.tool_behaviour == TOOL_WRENCH && panel_open) @@ -538,7 +538,7 @@ . += span_notice("The red [EXAMINE_HINT("local fault")] light is on.") . += span_notice("The status display reads: Repair required.") -/obj/machinery/transport/guideway_sensor/attackby(obj/item/weapon, mob/living/user, params) +/obj/machinery/transport/guideway_sensor/attackby(obj/item/weapon, mob/living/user, list/modifiers) if (!user.combat_mode) if(default_deconstruction_screwdriver(user, icon_state, icon_state, weapon)) return diff --git a/code/modules/transport/tram/tram_structures.dm b/code/modules/transport/tram/tram_structures.dm index 26df15ae6b4e..7c4ec09babe9 100644 --- a/code/modules/transport/tram/tram_structures.dm +++ b/code/modules/transport/tram/tram_structures.dm @@ -163,7 +163,7 @@ update_appearance() return ITEM_INTERACT_SUCCESS -/obj/structure/tram/attackby_secondary(obj/item/tool, mob/user, params) +/obj/structure/tram/attackby_secondary(obj/item/tool, mob/user, list/modifiers) switch(state) if(TRAM_SCREWED_TO_FRAME) if(tool.tool_behaviour == TOOL_SCREWDRIVER) @@ -218,7 +218,7 @@ for(var/i in 1 to mineral_amount) new mineral(loc) -/obj/structure/tram/attackby(obj/item/item, mob/user, params) +/obj/structure/tram/attackby(obj/item/item, mob/user, list/modifiers) . = ..() if(istype(item, /obj/item/wallframe/tram)) @@ -353,7 +353,7 @@ /// The last time a radiation pulse was performed var/last_event = 0 -/obj/structure/tram/alt/uranium/attackby(obj/item/W, mob/user, params) +/obj/structure/tram/alt/uranium/attackby(obj/item/W, mob/user, list/modifiers) radiate() return ..() diff --git a/code/modules/transport/transport_module.dm b/code/modules/transport/transport_module.dm index b265dece0c0c..528257bee84a 100644 --- a/code/modules/transport/transport_module.dm +++ b/code/modules/transport/transport_module.dm @@ -729,7 +729,7 @@ return open_lift_radial(user) -/obj/structure/transport/linear/attackby(obj/item/attacking_item, mob/user, params) +/obj/structure/transport/linear/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(!radial_travel) return ..() diff --git a/code/modules/tutorials/tutorials/drop.dm b/code/modules/tutorials/tutorials/drop.dm index 06980b28848d..6ace8bb88a78 100644 --- a/code/modules/tutorials/tutorials/drop.dm +++ b/code/modules/tutorials/tutorials/drop.dm @@ -18,8 +18,8 @@ QDEL_NULL(drop_preview) return ..() -/datum/tutorial/drop/perform(list/params) - create_drop_preview(params[SCREEN_LOC]) +/datum/tutorial/drop/perform(list/modifiers) + create_drop_preview(modifiers[SCREEN_LOC]) addtimer(CALLBACK(src, PROC_REF(show_instructions)), TIME_TO_START_MOVING_DROP_ICON) RegisterSignal(user, COMSIG_MOB_DROPPING_ITEM, PROC_REF(on_dropped_item)) diff --git a/code/modules/tutorials/tutorials/switch_hands.dm b/code/modules/tutorials/tutorials/switch_hands.dm index f1bcbbb3b711..c1a9c3e02f2b 100644 --- a/code/modules/tutorials/tutorials/switch_hands.dm +++ b/code/modules/tutorials/tutorials/switch_hands.dm @@ -25,8 +25,8 @@ return ..() -/datum/tutorial/switch_hands/perform(list/params) - create_hand_preview(params[SCREEN_LOC]) +/datum/tutorial/switch_hands/perform(list/modifiers) + create_hand_preview(modifiers[SCREEN_LOC]) addtimer(CALLBACK(src, PROC_REF(show_instructions)), TIME_TO_START_MOVING_HAND_ICON) RegisterSignal(user, COMSIG_MOB_SWAP_HANDS, PROC_REF(on_swap_hands)) diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm index ba1e043bb177..84dff137faa1 100644 --- a/code/modules/vehicles/mecha/combat/durand.dm +++ b/code/modules/vehicles/mecha/combat/durand.dm @@ -124,10 +124,10 @@ Expects a turf. Returns true if the attack should be blocked, false if not.*/ else . = ..() -/obj/vehicle/sealed/mecha/durand/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/vehicle/sealed/mecha/durand/attackby(obj/item/W as obj, mob/user as mob, list/modifiers) if(defense_check(user.loc)) log_message("Attack absorbed by defense field. Attacker - [user], with [W]", LOG_MECHA, color="orange") - shield.attackby(W, user, params) + shield.attackby(W, user, modifiers) else . = ..() diff --git a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm index ac277e1b1f01..a94a0cb2518f 100644 --- a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm @@ -318,7 +318,7 @@ log_message("Deactivated.", LOG_MECHA) return TRUE -/obj/item/mecha_parts/mecha_equipment/generator/attackby(obj/item/weapon, mob/user, params) +/obj/item/mecha_parts/mecha_equipment/generator/attackby(obj/item/weapon, mob/user, list/modifiers) . = ..() if(!istype(weapon, fuel)) return FALSE diff --git a/code/modules/vehicles/mecha/mech_bay.dm b/code/modules/vehicles/mecha/mech_bay.dm index 5166b9c5fdfc..a0c1914ee65c 100644 --- a/code/modules/vehicles/mecha/mech_bay.dm +++ b/code/modules/vehicles/mecha/mech_bay.dm @@ -76,7 +76,7 @@ recharge_console.update_appearance() -/obj/machinery/mech_bay_recharge_port/attackby(obj/item/I, mob/user, params) +/obj/machinery/mech_bay_recharge_port/attackby(obj/item/I, mob/user, list/modifiers) if(default_deconstruction_screwdriver(user, "recharge_port-o", "recharge_port", I)) return diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm index c37ea8381754..16d0a739762e 100644 --- a/code/modules/vehicles/mecha/mecha_defense.dm +++ b/code/modules/vehicles/mecha/mecha_defense.dm @@ -209,14 +209,14 @@ cookedalive.adjust_fire_stacks(1) cookedalive.ignite_mob() -/obj/vehicle/sealed/mecha/attackby_secondary(obj/item/weapon, mob/user, params) +/obj/vehicle/sealed/mecha/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) if(istype(weapon, /obj/item/mecha_parts)) var/obj/item/mecha_parts/parts = weapon parts.try_attach_part(user, src, TRUE) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN return ..() -/obj/vehicle/sealed/mecha/attackby(obj/item/weapon, mob/living/user, params) +/obj/vehicle/sealed/mecha/attackby(obj/item/weapon, mob/living/user, list/modifiers) if(user.combat_mode) return ..() if(istype(weapon, /obj/item/mmi)) diff --git a/code/modules/vehicles/mecha/mecha_parts.dm b/code/modules/vehicles/mecha/mecha_parts.dm index 4ea14a6d332a..2501ef1b36ab 100644 --- a/code/modules/vehicles/mecha/mecha_parts.dm +++ b/code/modules/vehicles/mecha/mecha_parts.dm @@ -252,7 +252,7 @@ name = "\improper Phazon chassis" construct_type = /datum/component/construction/unordered/mecha_chassis/phazon -/obj/item/mecha_parts/chassis/phazon/attackby(obj/item/I, mob/user, params) +/obj/item/mecha_parts/chassis/phazon/attackby(obj/item/I, mob/user, list/modifiers) . = ..() if(istype(I, /obj/item/assembly/signaler/anomaly) && !istype(I, /obj/item/assembly/signaler/anomaly/bluespace)) to_chat(user, "The anomaly core socket only accepts bluespace anomaly cores!") diff --git a/code/modules/vehicles/motorized_wheelchair.dm b/code/modules/vehicles/motorized_wheelchair.dm index 8b28aa241d01..84111f51bada 100644 --- a/code/modules/vehicles/motorized_wheelchair.dm +++ b/code/modules/vehicles/motorized_wheelchair.dm @@ -101,7 +101,7 @@ user.put_in_hands(power_cell) power_cell = null -/obj/vehicle/ridden/wheelchair/motorized/attackby(obj/item/attacking_item, mob/user, params) +/obj/vehicle/ridden/wheelchair/motorized/attackby(obj/item/attacking_item, mob/user, list/modifiers) if(!panel_open) return ..() diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm index 967a48c6c4e9..71de2a9685b8 100644 --- a/code/modules/vehicles/pimpin_ride.dm +++ b/code/modules/vehicles/pimpin_ride.dm @@ -34,7 +34,7 @@ if (installed_upgrade) . += "It has been upgraded with [installed_upgrade], which can be removed with a screwdriver." -/obj/vehicle/ridden/janicart/attackby(obj/item/I, mob/user, params) +/obj/vehicle/ridden/janicart/attackby(obj/item/I, mob/user, list/modifiers) if(istype(I, /obj/item/storage/bag/trash)) if(trash_bag) to_chat(user, span_warning("[src] already has a trashbag hooked!")) diff --git a/code/modules/vehicles/ridden.dm b/code/modules/vehicles/ridden.dm index 52c7924d72f2..7771133727dd 100644 --- a/code/modules/vehicles/ridden.dm +++ b/code/modules/vehicles/ridden.dm @@ -29,7 +29,7 @@ add_occupant(M) return ..() -/obj/vehicle/ridden/attackby(obj/item/I, mob/user, params) +/obj/vehicle/ridden/attackby(obj/item/I, mob/user, list/modifiers) if(!key_type || is_key(inserted_key) || !is_key(I)) return ..() if(!user.transferItemToLoc(I, src)) diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm index 6ccb2f70c616..b00246ab8443 100644 --- a/code/modules/vehicles/scooter.dm +++ b/code/modules/vehicles/scooter.dm @@ -227,7 +227,7 @@ icon_state = "scooter_frame" w_class = WEIGHT_CLASS_NORMAL -/obj/item/scooter_frame/attackby(obj/item/I, mob/user, params) +/obj/item/scooter_frame/attackby(obj/item/I, mob/user, list/modifiers) if(!istype(I, /obj/item/stack/sheet/iron)) return ..() if(!I.tool_start_check(user, amount=5)) @@ -250,7 +250,7 @@ /obj/vehicle/ridden/scooter/skateboard/wrench_act(mob/living/user, obj/item/I) return -/obj/vehicle/ridden/scooter/skateboard/improvised/attackby(obj/item/I, mob/user, params) +/obj/vehicle/ridden/scooter/skateboard/improvised/attackby(obj/item/I, mob/user, list/modifiers) if(!istype(I, /obj/item/stack/rods)) return ..() if(!I.tool_start_check(user, amount=2)) diff --git a/code/modules/vehicles/sealed.dm b/code/modules/vehicles/sealed.dm index 821a69d8f826..83ef89ee88ce 100644 --- a/code/modules/vehicles/sealed.dm +++ b/code/modules/vehicles/sealed.dm @@ -105,7 +105,7 @@ /obj/vehicle/sealed/proc/exit_location(M) return drop_location() -/obj/vehicle/sealed/attackby(obj/item/I, mob/user, params) +/obj/vehicle/sealed/attackby(obj/item/I, mob/user, list/modifiers) if(key_type && !is_key(inserted_key) && is_key(I)) if(user.transferItemToLoc(I, src)) to_chat(user, span_notice("You insert [I] into [src].")) diff --git a/code/modules/vehicles/secway.dm b/code/modules/vehicles/secway.dm index c8cab1a7dc1c..ce2a3d23cdb3 100644 --- a/code/modules/vehicles/secway.dm +++ b/code/modules/vehicles/secway.dm @@ -61,7 +61,7 @@ else user.balloon_alert_to_viewers("stopped welding [src]", "interrupted the repair!") -/obj/vehicle/ridden/secway/attackby(obj/item/W, mob/living/user, params) +/obj/vehicle/ridden/secway/attackby(obj/item/W, mob/living/user, list/modifiers) if(!istype(W, /obj/item/food/grown/banana)) return ..() // ignore the occupants because they're presumably too distracted to notice the guy stuffing fruit into their vehicle's exhaust. do segways have exhausts? they do now! diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index d4ca5ce02a5d..ea2644c7e506 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -716,7 +716,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) to_chat(user, span_warning("You must first secure [src].")) return TRUE -/obj/machinery/vending/attackby(obj/item/attack_item, mob/living/user, params) +/obj/machinery/vending/attackby(obj/item/attack_item, mob/living/user, list/modifiers) if(panel_open && is_wire_tool(attack_item)) wires.interact(user) return @@ -1754,7 +1754,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) vend_ready = TRUE return TRUE -/obj/machinery/vending/custom/attackby(obj/item/attack_item, mob/user, params) +/obj/machinery/vending/custom/attackby(obj/item/attack_item, mob/user, list/modifiers) if(!linked_account && isliving(user)) var/mob/living/living_user = user var/obj/item/card/id/card_used = living_user.get_idcard(TRUE) diff --git a/code/modules/wiremod/components/abstract/module.dm b/code/modules/wiremod/components/abstract/module.dm index 4dd144b4c80e..a87bd8ebd22c 100644 --- a/code/modules/wiremod/components/abstract/module.dm +++ b/code/modules/wiremod/components/abstract/module.dm @@ -229,9 +229,9 @@ . = list() .["global_port_types"] = GLOB.wiremod_basic_types -/obj/item/circuit_component/module/attackby(obj/item/I, mob/living/user, params) +/obj/item/circuit_component/module/attackby(obj/item/I, mob/living/user, list/modifiers) if(istype(I, /obj/item/circuit_component)) - internal_circuit.attackby(I, user, params) + internal_circuit.attackby(I, user, modifiers) return return ..() diff --git a/code/modules/wiremod/core/component_printer.dm b/code/modules/wiremod/core/component_printer.dm index e609cda6f18c..2ba92f68d465 100644 --- a/code/modules/wiremod/core/component_printer.dm +++ b/code/modules/wiremod/core/component_printer.dm @@ -205,7 +205,7 @@ return data -/obj/machinery/component_printer/attackby(obj/item/weapon, mob/living/user, params) +/obj/machinery/component_printer/attackby(obj/item/weapon, mob/living/user, list/modifiers) if (user.combat_mode) return ..() @@ -435,7 +435,7 @@ created_atom.pixel_x = created_atom.base_pixel_x + rand(-5, 5) created_atom.pixel_y = created_atom.base_pixel_y + rand(-5, 5) -/obj/machinery/module_duplicator/attackby(obj/item/weapon, mob/user, params) +/obj/machinery/module_duplicator/attackby(obj/item/weapon, mob/user, list/modifiers) var/list/data = list() if(istype(weapon, /obj/item/circuit_component/module)) diff --git a/code/modules/wiremod/core/integrated_circuit.dm b/code/modules/wiremod/core/integrated_circuit.dm index 0a9e6335a067..9b50c7ff914b 100644 --- a/code/modules/wiremod/core/integrated_circuit.dm +++ b/code/modules/wiremod/core/integrated_circuit.dm @@ -146,7 +146,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) SEND_SIGNAL(src, COMSIG_CIRCUIT_SET_LOCKED, new_value) locked = new_value -/obj/item/integrated_circuit/attackby(obj/item/I, mob/living/user, params) +/obj/item/integrated_circuit/attackby(obj/item/I, mob/living/user, list/modifiers) . = ..() if(istype(I, /obj/item/circuit_component)) add_component_manually(I, user) diff --git a/code/modules/wiremod/core/marker.dm b/code/modules/wiremod/core/marker.dm index 65ed029213e3..36c1857b9c95 100644 --- a/code/modules/wiremod/core/marker.dm +++ b/code/modules/wiremod/core/marker.dm @@ -27,8 +27,8 @@ clear_marked_atom() return TRUE -/obj/item/multitool/circuit/melee_attack_chain(mob/user, atom/target, params) - var/is_right_clicking = LAZYACCESS(params2list(params), RIGHT_CLICK) +/obj/item/multitool/circuit/melee_attack_chain(mob/user, atom/target, list/modifiers) + var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK) if(marked_atom || !user.Adjacent(target) || is_right_clicking) return ..() diff --git a/code/modules/wiremod/core/usb_cable.dm b/code/modules/wiremod/core/usb_cable.dm index 23683bf0ee81..73e42e8494a2 100644 --- a/code/modules/wiremod/core/usb_cable.dm +++ b/code/modules/wiremod/core/usb_cable.dm @@ -36,7 +36,7 @@ if (!check_in_range()) return PROCESS_KILL -/obj/item/usb_cable/pre_attack(atom/target, mob/living/user, params) +/obj/item/usb_cable/pre_attack(atom/target, mob/living/user, list/modifiers) . = ..() if (.) return diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm index 513a744945f5..4a3c95e9a9f7 100644 --- a/code/modules/wiremod/shell/brain_computer_interface.dm +++ b/code/modules/wiremod/shell/brain_computer_interface.dm @@ -354,7 +354,7 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/machinery/bci_implanter/attackby(obj/item/weapon, mob/user, params) +/obj/machinery/bci_implanter/attackby(obj/item/weapon, mob/user, list/modifiers) var/obj/item/organ/cyberimp/bci/new_bci = weapon if (istype(new_bci)) if (!(locate(/obj/item/integrated_circuit) in new_bci)) @@ -376,7 +376,7 @@ return ..() -/obj/machinery/bci_implanter/attackby_secondary(obj/item/weapon, mob/user, params) +/obj/machinery/bci_implanter/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) if (!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, weapon)) update_appearance() return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN diff --git a/code/modules/wiremod/shell/dispenser.dm b/code/modules/wiremod/shell/dispenser.dm index 4a00f7fed88d..57ae4acd56ee 100644 --- a/code/modules/wiremod/shell/dispenser.dm +++ b/code/modules/wiremod/shell/dispenser.dm @@ -60,7 +60,7 @@ new /obj/item/circuit_component/dispenser_bot() ), SHELL_CAPACITY_LARGE) -/obj/structure/dispenser_bot/attackby(obj/item/item, mob/living/user, params) +/obj/structure/dispenser_bot/attackby(obj/item/item, mob/living/user, list/modifiers) if(user.combat_mode) return ..() if(istype(item, /obj/item/wrench) || istype(item, /obj/item/multitool) || istype(item, /obj/item/integrated_circuit)) diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm index dd34e8ff1779..aa0dcfcb494a 100644 --- a/code/modules/zombie/items.dm +++ b/code/modules/zombie/items.dm @@ -11,7 +11,7 @@ bare_wound_bonus = 15 sharpness = SHARP_EDGED -/obj/item/mutant_hand/zombie/afterattack(atom/target, mob/user, click_parameters) +/obj/item/mutant_hand/zombie/afterattack(atom/target, mob/user, list/modifiers) if(ishuman(target)) try_to_zombie_infect(target, user, user.zone_selected) else if(isliving(target)) From f26ea9757c693d5ab216a9a2e212a4781a016531 Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Sun, 18 May 2025 22:32:12 -0500 Subject: [PATCH 2/3] Re-refactors batons / Refactors attack chain force modifiers (#90809) Melee attack chain now has a list passed along with it, `attack_modifiers`, which you can stick force modifiers to change the resulting attack This is basically a soft implementation of damage packets until a more definitive pr, but one that only applies to item attack chain, and not unarmed attacks. This change was done to facilitate a baton refactor - batons no longer hack together their own attack chain, and are now integrated straight into the real attack chain. This refactor itself was done because batons don't send any attack signals, which has been annoying in the past (for swing combat). :cl: Melbert refactor: Batons have been refactored again. Baton stuns now properly count as an attack, when before it was a nothing. Report any oddities, particularly in regards to harmbatonning vs normal batonning. refactor: The method of adjusting item damage mid-attack has been refactored - some affected items include the Nullblade and knives. Report any strange happenings with damage numbers. refactor: A few objects have been moved to the new interaction chain - records consoles, mawed crucible, alien weeds and space vines, hedges, restaurant portals, and some mobs - to name a few. fix: Spears only deal bonus damage against secure lockers, not all closet types (including crates) /:cl: --- code/__DEFINES/combat.dm | 51 ++- .../signals/signals_mob/signals_mob_main.dm | 2 +- code/__DEFINES/dcs/signals/signals_object.dm | 8 +- code/_onclick/item_attack.dm | 168 +++++----- code/datums/components/focused_attacker.dm | 10 +- code/datums/components/trapdoor.dm | 2 +- code/datums/holocall.dm | 2 +- code/datums/martial/sleeping_carp.dm | 2 +- code/datums/memory/tattoo_kit.dm | 4 +- code/game/machinery/PDApainter.dm | 2 +- code/game/machinery/_machinery.dm | 4 +- code/game/machinery/bank_machine.dm | 2 +- .../machinery/camera/camera_construction.dm | 2 +- code/game/machinery/cell_charger.dm | 2 +- code/game/machinery/civilian_bounties.dm | 2 +- .../game/machinery/computer/communications.dm | 2 +- code/game/machinery/computer/dna_console.dm | 2 +- code/game/machinery/computer/law.dm | 2 +- .../machinery/computer/operating_computer.dm | 2 +- .../orders/order_computer/mining_order.dm | 2 +- .../machinery/computer/prisoner/_prisoner.dm | 2 +- .../machinery/computer/records/medical.dm | 10 +- .../machinery/computer/records/security.dm | 10 +- code/game/machinery/defibrillator_mount.dm | 2 +- code/game/machinery/deployable.dm | 2 +- code/game/machinery/dish_drive.dm | 2 +- .../game/machinery/dna_infuser/dna_infuser.dm | 2 +- .../dna_infuser/organ_sets/goliath_organs.dm | 2 +- code/game/machinery/dna_scanner.dm | 2 +- code/game/machinery/doors/airlock.dm | 2 +- code/game/machinery/doors/door.dm | 2 +- code/game/machinery/firealarm.dm | 2 +- code/game/machinery/flasher.dm | 4 +- code/game/machinery/hologram.dm | 2 +- code/game/machinery/hypnochair.dm | 2 +- code/game/machinery/iv_drip.dm | 2 +- code/game/machinery/launch_pad.dm | 4 +- code/game/machinery/mass_driver.dm | 2 +- code/game/machinery/medical_kiosk.dm | 2 +- code/game/machinery/modular_shield.dm | 2 +- code/game/machinery/navbeacon.dm | 2 +- code/game/machinery/nebula_shielding.dm | 2 +- .../newscaster/newscaster_machine.dm | 2 +- code/game/machinery/pipe/pipe_dispenser.dm | 2 +- .../machinery/porta_turret/portable_turret.dm | 4 +- .../porta_turret/portable_turret_construct.dm | 2 +- .../porta_turret/portable_turret_cover.dm | 6 +- code/game/machinery/prisonlabor.dm | 2 +- code/game/machinery/quantum_pad.dm | 4 +- code/game/machinery/recharger.dm | 2 +- code/game/machinery/rechargestation.dm | 2 +- code/game/machinery/requests_console.dm | 2 +- code/game/machinery/roulette_machine.dm | 2 +- code/game/machinery/scanner_gate.dm | 4 +- code/game/machinery/shieldgen.dm | 4 +- code/game/machinery/spaceheater.dm | 4 +- code/game/machinery/suit_storage_unit.dm | 2 +- code/game/machinery/syndicatebomb.dm | 4 +- .../telecomms/machine_interactions.dm | 2 +- .../machinery/telecomms/machines/allinone.dm | 2 +- .../telecomms/machines/message_server.dm | 2 +- code/game/machinery/teleporter.dm | 4 +- code/game/objects/effects/decals/cleanable.dm | 2 +- .../objects/effects/decals/cleanable/misc.dm | 2 +- .../fluid_spread/effects_foam.dm | 2 +- code/game/objects/effects/effects.dm | 4 +- code/game/objects/effects/portals.dm | 2 +- .../objects/effects/poster_demotivational.dm | 2 +- .../objects/effects/poster_motivational.dm | 4 +- code/game/objects/effects/posters/poster.dm | 4 +- .../temporary_visuals/miscellaneous.dm | 2 +- code/game/objects/items/cardboard_cutouts.dm | 2 +- code/game/objects/items/cigs_lighters.dm | 4 +- code/game/objects/items/cosmetics.dm | 2 +- code/game/objects/items/courtroom.dm | 2 +- code/game/objects/items/crab17.dm | 2 +- code/game/objects/items/credit_holochip.dm | 2 +- code/game/objects/items/defib.dm | 2 +- .../game/objects/items/devices/aicard_evil.dm | 2 +- .../objects/items/devices/laserpointer.dm | 2 +- .../objects/items/devices/lightreplacer.dm | 2 +- .../items/devices/radio/electropack.dm | 2 +- .../objects/items/devices/radio/headset.dm | 2 +- code/game/objects/items/devices/swapper.dm | 2 +- .../game/objects/items/devices/table_clock.dm | 2 +- .../objects/items/devices/taperecorder.dm | 2 +- .../objects/items/devices/traitordevices.dm | 2 +- code/game/objects/items/dualsaber.dm | 2 +- code/game/objects/items/dyespray.dm | 2 +- code/game/objects/items/extinguisher.dm | 4 +- code/game/objects/items/fireaxe.dm | 2 +- code/game/objects/items/flamethrower.dm | 2 +- code/game/objects/items/food/egg.dm | 4 +- code/game/objects/items/food/misc.dm | 2 +- code/game/objects/items/food/pancakes.dm | 4 +- code/game/objects/items/grenades/festive.dm | 6 +- .../game/objects/items/grenades/ghettobomb.dm | 2 +- code/game/objects/items/grenades/plastic.dm | 2 +- code/game/objects/items/hand_items.dm | 12 +- code/game/objects/items/hot_potato.dm | 2 +- .../objects/items/implants/implantcase.dm | 2 +- code/game/objects/items/implants/implanter.dm | 2 +- .../game/objects/items/implants/implantpad.dm | 2 +- .../items/implants/security/implant_chem.dm | 2 +- code/game/objects/items/inspector.dm | 6 +- .../objects/items/kirby_plants/kirbyplants.dm | 2 +- code/game/objects/items/kitchen.dm | 6 +- code/game/objects/items/knives.dm | 2 +- code/game/objects/items/latexballoon.dm | 2 +- code/game/objects/items/mail.dm | 2 +- code/game/objects/items/melee/baton.dm | 292 ++++++++---------- code/game/objects/items/melee/misc.dm | 6 +- code/game/objects/items/piggy_bank.dm | 2 +- code/game/objects/items/pillow.dm | 4 +- code/game/objects/items/plushes.dm | 4 +- code/game/objects/items/pneumaticCannon.dm | 2 +- code/game/objects/items/powerfist.dm | 2 +- code/game/objects/items/puzzle_pieces.dm | 4 +- code/game/objects/items/rcd/RSF.dm | 2 +- code/game/objects/items/robot/ai_upgrades.dm | 8 +- .../game/objects/items/robot/items/generic.dm | 2 +- .../game/objects/items/robot/items/storage.dm | 6 +- code/game/objects/items/robot/robot_parts.dm | 2 +- .../objects/items/robot/robot_upgrades.dm | 2 +- code/game/objects/items/secret_documents.dm | 2 +- code/game/objects/items/sharpener.dm | 2 +- code/game/objects/items/shields.dm | 2 +- code/game/objects/items/signs.dm | 2 +- code/game/objects/items/spear.dm | 4 +- code/game/objects/items/stacks/medical.dm | 2 +- .../game/objects/items/stacks/sheets/glass.dm | 10 +- .../objects/items/stacks/sheets/leather.dm | 2 +- .../game/objects/items/stacks/sheets/light.dm | 2 +- .../objects/items/stacks/sheets/mineral.dm | 4 +- .../items/stacks/sheets/sheet_types.dm | 2 +- code/game/objects/items/stacks/stack.dm | 2 +- code/game/objects/items/stacks/tiles/light.dm | 2 +- .../items/stacks/tiles/tile_mineral.dm | 2 +- code/game/objects/items/tanks/tank_types.dm | 2 +- code/game/objects/items/tanks/tanks.dm | 2 +- code/game/objects/items/tanks/watertank.dm | 2 +- code/game/objects/items/tcg/tcg.dm | 4 +- code/game/objects/items/theft_tools.dm | 2 +- code/game/objects/items/tongs.dm | 2 +- code/game/objects/items/tools/weldingtool.dm | 4 +- code/game/objects/items/toys.dm | 10 +- code/game/objects/items/v8_engine.dm | 2 +- code/game/objects/items/weaponry.dm | 8 +- code/game/objects/items/wizard_weapons.dm | 2 +- code/game/objects/objs.dm | 49 ++- code/game/objects/structures/ai_core.dm | 4 +- code/game/objects/structures/aliens.dm | 1 + .../objects/structures/beds_chairs/bed.dm | 4 +- .../objects/structures/beds_chairs/chair.dm | 4 +- code/game/objects/structures/bonfire.dm | 2 +- .../game/objects/structures/cannons/cannon.dm | 2 +- .../construction_console.dm | 2 +- .../structures/crates_lockers/closets.dm | 2 +- .../crates_lockers/closets/secure/security.dm | 4 +- .../structures/crates_lockers/crates/bins.dm | 2 +- .../structures/crates_lockers/crates/large.dm | 2 +- .../crates_lockers/crates/syndicrate.dm | 4 +- .../objects/structures/deployable_turret.dm | 8 +- .../game/objects/structures/detectiveboard.dm | 2 +- code/game/objects/structures/displaycase.dm | 8 +- code/game/objects/structures/door_assembly.dm | 2 +- code/game/objects/structures/dresser.dm | 2 +- code/game/objects/structures/electricchair.dm | 2 +- code/game/objects/structures/extinguisher.dm | 2 +- code/game/objects/structures/false_walls.dm | 4 +- code/game/objects/structures/fireaxe.dm | 2 +- code/game/objects/structures/flora.dm | 2 +- code/game/objects/structures/fluff.dm | 2 +- code/game/objects/structures/girders.dm | 6 +- code/game/objects/structures/grille.dm | 2 +- code/game/objects/structures/guillotine.dm | 2 +- code/game/objects/structures/guncase.dm | 2 +- code/game/objects/structures/janitor.dm | 8 +- code/game/objects/structures/kitchen_spike.dm | 2 +- code/game/objects/structures/ladders.dm | 4 +- code/game/objects/structures/lattice.dm | 4 +- .../objects/structures/lavaland/geyser.dm | 4 +- code/game/objects/structures/maintenance.dm | 4 +- code/game/objects/structures/mirror.dm | 9 +- code/game/objects/structures/morgue.dm | 2 +- code/game/objects/structures/noticeboard.dm | 2 +- .../game/objects/structures/ore_containers.dm | 2 +- .../objects/structures/plaques/_plaques.dm | 4 +- code/game/objects/structures/railings.dm | 2 +- code/game/objects/structures/reflector.dm | 2 +- code/game/objects/structures/safe.dm | 2 +- code/game/objects/structures/shower.dm | 4 +- code/game/objects/structures/signs/_signs.dm | 4 +- code/game/objects/structures/spawner.dm | 2 +- code/game/objects/structures/stairs.dm | 2 +- .../game/objects/structures/tank_dispenser.dm | 2 +- code/game/objects/structures/tank_holder.dm | 2 +- code/game/objects/structures/toiletbong.dm | 2 +- .../objects/structures/training_machine.dm | 2 +- .../structures/transit_tubes/station.dm | 2 +- .../structures/transit_tubes/transit_tube.dm | 2 +- .../transit_tubes/transit_tube_pod.dm | 2 +- code/game/objects/structures/votingbox.dm | 2 +- .../structures/water_structures/sink.dm | 4 +- .../structures/water_structures/toilet.dm | 2 +- .../structures/water_structures/urinal.dm | 2 +- .../water_structures/water_source.dm | 4 +- .../objects/structures/windoor_assembly.dm | 2 +- code/game/objects/structures/window.dm | 4 +- code/game/turfs/turf.dm | 2 +- .../abductor/equipment/gear/abductor_items.dm | 7 +- .../antagonists/abductor/machinery/console.dm | 2 +- .../abductor/machinery/dispenser.dm | 2 +- .../antagonists/blob/structures/_blob.dm | 2 +- .../changeling/powers/mutations.dm | 2 +- .../antagonists/clown_ops/clown_weapons.dm | 2 +- .../modules/antagonists/heretic/influences.dm | 2 +- .../heretic/items/heretic_blades.dm | 2 +- .../heretic/items/heretic_necks.dm | 2 +- .../heretic/knowledge/blade_lore.dm | 8 +- .../heretic/structures/carving_knife.dm | 7 +- .../heretic/structures/mawed_crucible.dm | 44 +-- .../nightmare/nightmare_equipment.dm | 2 +- .../equipment/nuclear_authentication_disk.dm | 2 +- .../equipment/nuclear_bomb/_nuclear_bomb.dm | 2 +- .../equipment/nuclear_bomb/beer_nuke.dm | 2 +- .../antagonists/wizard/equipment/artefact.dm | 2 +- .../antagonists/wizard/equipment/soulstone.dm | 2 +- .../wizard/equipment/wizard_spellbook.dm | 2 +- code/modules/art/paintings.dm | 6 +- code/modules/art/statues.dm | 2 +- code/modules/assembly/assembly.dm | 2 +- code/modules/assembly/flash.dm | 2 +- code/modules/assembly/holder.dm | 2 +- code/modules/assembly/signaler.dm | 6 +- .../machinery/air_alarm/air_alarm_interact.dm | 2 +- .../atmospherics/machinery/atmosmachinery.dm | 2 +- .../components/electrolyzer/electrolyzer.dm | 2 +- .../machinery/components/fusion/hfr_parts.dm | 4 +- .../gas_recipe_machines/crystallizer.dm | 2 +- .../atmospherics/machinery/components/tank.dm | 2 +- .../atmospherics/machinery/pipes/pipes.dm | 2 +- .../machinery/portable/canister.dm | 2 +- .../portable/portable_atmospherics.dm | 18 +- code/modules/awaymissions/signpost.dm | 2 +- .../modules/awaymissions/super_secret_room.dm | 2 +- code/modules/basketball/basketball.dm | 2 +- code/modules/basketball/hoop.dm | 2 +- code/modules/bitrunning/server/_parent.dm | 2 +- code/modules/capture_the_flag/ctf_game.dm | 6 +- code/modules/cards/cardhand.dm | 2 +- code/modules/cards/deck/deck.dm | 2 +- code/modules/cards/singlecard.dm | 2 +- code/modules/cargo/coupon.dm | 2 +- code/modules/cargo/materials_market.dm | 2 +- code/modules/cargo/universal_scanner.dm | 2 +- code/modules/clothing/belts/polymorph_belt.dm | 2 +- code/modules/clothing/clothing.dm | 2 +- code/modules/clothing/gloves/_gloves.dm | 2 +- code/modules/clothing/head/helmet.dm | 2 +- code/modules/clothing/head/jobs.dm | 2 +- code/modules/clothing/head/tophat.dm | 2 +- code/modules/clothing/masks/muzzle.dm | 2 +- code/modules/clothing/neck/collar_bomb.dm | 2 +- code/modules/clothing/shoes/sneakers.dm | 4 +- .../clothing/spacesuits/_spacesuits.dm | 2 +- code/modules/clothing/spacesuits/softsuit.dm | 2 +- code/modules/clothing/under/_under.dm | 2 +- code/modules/economy/holopay.dm | 4 +- .../events/space_vines/vine_structure.dm | 17 +- code/modules/events/wizard/rpgloot.dm | 2 +- code/modules/experisci/destructive_scanner.dm | 2 +- code/modules/explorer_drone/exodrone.dm | 2 +- code/modules/explorer_drone/loot.dm | 2 +- code/modules/fishing/fish/_fish.dm | 2 +- code/modules/fishing/fishing_rod.dm | 2 +- .../food_and_drinks/machinery/coffeemaker.dm | 4 +- .../food_and_drinks/machinery/deep_fryer.dm | 2 +- .../food_and_drinks/machinery/gibber.dm | 2 +- .../food_and_drinks/machinery/griddle.dm | 2 +- .../food_and_drinks/machinery/icecream_vat.dm | 4 +- .../machinery/monkeyrecycler.dm | 2 +- .../modules/food_and_drinks/machinery/oven.dm | 2 +- .../food_and_drinks/machinery/processor.dm | 2 +- .../food_and_drinks/machinery/smartfridge.dm | 2 +- .../food_and_drinks/machinery/stove.dm | 2 +- code/modules/food_and_drinks/plate.dm | 4 +- .../food_and_drinks/restaurant/_venue.dm | 24 +- code/modules/holodeck/items.dm | 4 +- .../hydroponics/beekeeping/bee_smoker.dm | 2 +- code/modules/hydroponics/beekeeping/beebox.dm | 2 +- code/modules/hydroponics/biogenerator.dm | 2 +- code/modules/hydroponics/fermenting_barrel.dm | 2 +- code/modules/hydroponics/grown/corn.dm | 2 +- code/modules/hydroponics/grown/hedges.dm | 17 +- code/modules/hydroponics/grown/potato.dm | 2 +- code/modules/hydroponics/grown/pumpkin.dm | 2 +- code/modules/hydroponics/grown/root.dm | 2 +- code/modules/hydroponics/grown/towercap.dm | 2 +- code/modules/hydroponics/hydroitemdefines.dm | 2 +- code/modules/hydroponics/hydroponics.dm | 8 +- code/modules/hydroponics/seed_extractor.dm | 2 +- code/modules/hydroponics/seeds.dm | 2 +- code/modules/instruments/items.dm | 6 +- .../job_types/chaplain/chaplain_nullrod.dm | 10 +- .../chaplain/chaplain_vorpal_scythe.dm | 2 +- code/modules/library/book.dm | 2 +- code/modules/library/bookcase.dm | 2 +- code/modules/library/lib_machines.dm | 6 +- .../library/skill_learning/skill_station.dm | 2 +- .../mapfluff/ruins/lavaland_ruin_code.dm | 2 +- .../lavalandruin_code/elephantgraveyard.dm | 2 +- .../ruins/lavalandruin_code/syndicate_base.dm | 2 +- .../ruins/objects_and_mobs/sin_ruins.dm | 2 +- .../mapfluff/ruins/spaceruin_code/meateor.dm | 2 +- .../oldstation/oldstation_rnd.dm | 2 +- code/modules/meteors/meteor_types.dm | 2 +- .../mining/equipment/marker_beacons.dm | 2 +- code/modules/mining/equipment/resonator.dm | 2 +- code/modules/mining/laborcamp/laborstacker.dm | 2 +- .../mining/lavaland/necropolis_chests.dm | 2 +- code/modules/mining/ores_coins.dm | 4 +- code/modules/mob/living/basic/bots/_bots.dm | 2 +- code/modules/mob/living/basic/clown/clown.dm | 22 +- code/modules/mob/living/basic/cult/shade.dm | 2 +- .../living/basic/jungle/seedling/seedling.dm | 2 +- .../living/basic/jungle/venus_human_trap.dm | 12 +- .../living/basic/lavaland/goliath/goliath.dm | 2 +- .../basic/lavaland/legion/legion_tumour.dm | 2 +- .../mob/living/basic/minebots/minebot.dm | 2 +- .../modules/mob/living/basic/pets/dog/_dog.dm | 2 +- .../mob/living/basic/pets/dog/corgi.dm | 2 +- .../basic/ruin_defender/living_floor.dm | 2 +- .../basic/space_fauna/eyeball/_eyeball.dm | 2 +- .../mob/living/basic/space_fauna/mushroom.dm | 2 +- .../mob/living/basic/vermin/mothroach.dm | 2 +- code/modules/mob/living/basic/vermin/mouse.dm | 2 +- code/modules/mob/living/brain/MMI.dm | 2 +- code/modules/mob/living/brain/brain_item.dm | 2 +- code/modules/mob/living/brain/posibrain.dm | 2 +- .../living/carbon/alien/special/facehugger.dm | 2 +- .../mob/living/silicon/ai/ai_defense.dm | 2 +- .../mob/living/simple_animal/bot/bot.dm | 2 +- .../living/simple_animal/bot/construction.dm | 20 +- .../mob/living/simple_animal/bot/mulebot.dm | 2 +- .../mob/living/simple_animal/bot/secbot.dm | 2 +- .../hostile/megafauna/bubblegum.dm | 2 +- .../hostile/megafauna/hierophant.dm | 2 +- .../mob/living/simple_animal/hostile/ooze.dm | 21 +- code/modules/mod/mod_construction.dm | 4 +- code/modules/mod/mod_link.dm | 2 +- code/modules/mod/modules/_module.dm | 2 +- code/modules/mod/modules/module_pathfinder.dm | 2 +- .../computers/item/disks/virus_disk.dm | 2 +- .../modular_computers/computers/item/pda.dm | 2 +- .../computers/machinery/modular_computer.dm | 4 +- code/modules/pai/card.dm | 2 +- code/modules/paperwork/clipboard.dm | 2 +- code/modules/paperwork/desk_bell.dm | 2 +- code/modules/paperwork/fax.dm | 2 +- code/modules/paperwork/filingcabinet.dm | 2 +- code/modules/paperwork/folders.dm | 2 +- code/modules/paperwork/paper.dm | 2 +- code/modules/paperwork/paper_biscuit.dm | 2 +- code/modules/paperwork/paper_cutter.dm | 2 +- code/modules/paperwork/paperbin.dm | 2 +- code/modules/paperwork/paperplane.dm | 2 +- code/modules/paperwork/paperwork.dm | 4 +- code/modules/paperwork/pen.dm | 4 +- code/modules/paperwork/photocopier.dm | 2 +- code/modules/paperwork/ticketmachine.dm | 2 +- code/modules/photography/photos/frame.dm | 2 +- code/modules/photography/photos/photo.dm | 2 +- .../plumbing/plumbers/plumbing_buffer.dm | 2 +- code/modules/plumbing/plumbers/teleporter.dm | 2 +- code/modules/power/cable.dm | 2 +- code/modules/power/floodlight.dm | 2 +- code/modules/power/gravitygenerator.dm | 4 +- code/modules/power/lighting/light.dm | 13 +- .../modules/power/lighting/light_construct.dm | 2 +- code/modules/power/lighting/light_items.dm | 4 +- code/modules/power/pipecleaners.dm | 2 +- code/modules/power/port_gen.dm | 2 +- code/modules/power/power.dm | 2 +- code/modules/power/rtg.dm | 4 +- .../power/singularity/containment_field.dm | 2 +- code/modules/power/singularity/emitter.dm | 2 +- code/modules/power/solar.dm | 4 +- .../supermatter/supermatter_hit_procs.dm | 2 +- code/modules/power/tesla/coil.dm | 4 +- .../projectiles/ammunition/_ammunition.dm | 2 +- .../projectiles/ammunition/ballistic/foam.dm | 2 +- .../projectiles/guns/ballistic/automatic.dm | 2 +- .../projectiles/guns/ballistic/launchers.dm | 2 +- .../projectiles/guns/ballistic/pistol.dm | 2 +- .../projectiles/guns/energy/dueling.dm | 2 +- .../projectiles/guns/energy/laser_gatling.dm | 2 +- .../projectiles/guns/energy/recharge.dm | 2 +- .../guns/special/grenade_launcher.dm | 2 +- .../projectiles/guns/special/hand_of_midas.dm | 2 +- code/modules/projectiles/pins.dm | 2 +- code/modules/reagents/chemistry/items.dm | 2 +- .../reagents/chemistry/machinery/pandemic.dm | 4 +- code/modules/reagents/reagent_containers.dm | 4 +- .../reagents/reagent_containers/blood_pack.dm | 2 +- .../reagents/reagent_containers/cups/_cup.dm | 4 +- .../reagent_containers/cups/glassbottle.dm | 4 +- .../reagents/reagent_containers/misc.dm | 2 +- .../reagents/reagent_containers/spray.dm | 2 +- .../reagents/reagent_containers/syringes.dm | 2 +- code/modules/reagents/reagent_dispenser.dm | 4 +- code/modules/recycling/conveyor.dm | 8 +- code/modules/recycling/disposal/bin.dm | 4 +- .../recycling/disposal/pipe_sorting.dm | 2 +- code/modules/recycling/sortingmachinery.dm | 4 +- code/modules/religion/burdened/psyker.dm | 2 +- code/modules/research/anomaly/anomaly_core.dm | 2 +- .../research/anomaly/anomaly_refinery.dm | 2 +- code/modules/research/experimentor.dm | 2 +- .../research/ordnance/doppler_array.dm | 2 +- code/modules/research/rdconsole.dm | 2 +- code/modules/research/server.dm | 2 +- .../xenobiology/crossbreeding/_weapons.dm | 2 +- .../xenobiology/vatgrowing/petri_dish.dm | 2 +- .../research/xenobiology/xenobio_camera.dm | 2 +- code/modules/shuttle/special.dm | 4 +- .../spell_types/self/spacetime_distortion.dm | 2 +- code/modules/surgery/bodyparts/_bodyparts.dm | 2 +- .../surgery/bodyparts/robot_bodyparts.dm | 4 +- code/modules/surgery/organs/autosurgeon.dm | 4 +- .../modules/transport/tram/tram_controller.dm | 2 +- code/modules/transport/tram/tram_signals.dm | 6 +- .../modules/transport/tram/tram_structures.dm | 6 +- code/modules/transport/transport_module.dm | 2 +- code/modules/vehicles/cars/clowncar.dm | 12 +- code/modules/vehicles/mecha/combat/durand.dm | 2 +- .../mecha/equipment/tools/other_tools.dm | 2 +- code/modules/vehicles/mecha/mech_bay.dm | 2 +- code/modules/vehicles/mecha/mecha_defense.dm | 15 +- code/modules/vehicles/mecha/mecha_parts.dm | 2 +- code/modules/vehicles/motorized_wheelchair.dm | 2 +- code/modules/vehicles/pimpin_ride.dm | 2 +- code/modules/vehicles/ridden.dm | 2 +- code/modules/vehicles/scooter.dm | 4 +- code/modules/vehicles/sealed.dm | 2 +- code/modules/vehicles/secway.dm | 2 +- code/modules/vending/_vending.dm | 4 +- .../wiremod/components/abstract/module.dm | 2 +- code/modules/wiremod/components/action/mmi.dm | 2 +- .../modules/wiremod/core/component_printer.dm | 4 +- .../wiremod/core/integrated_circuit.dm | 2 +- code/modules/wiremod/core/usb_cable.dm | 2 +- .../wiremod/shell/brain_computer_interface.dm | 4 +- code/modules/wiremod/shell/dispenser.dm | 2 +- code/modules/zombie/items.dm | 2 +- 455 files changed, 1023 insertions(+), 978 deletions(-) diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 91fd01f3f024..df3777f2bc0c 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -318,14 +318,6 @@ GLOBAL_LIST_INIT(all_precise_body_zones, list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_ /// Calculates the new armour value after armour penetration. Can return negative values, and those must be caught. #define PENETRATE_ARMOUR(armour, penetration) (penetration == 100 ? 0 : 100 * (armour - penetration) / (100 - penetration)) -/// Return values used in item/melee/baton/baton_attack. -/// Does a normal item attack. -#define BATON_DO_NORMAL_ATTACK 1 -/// The attack has been stopped. Either because the user was clumsy or the attack was blocked. -#define BATON_ATTACK_DONE 2 -/// The baton attack is still going. baton_effect() is called. -#define BATON_ATTACKING 3 - // Defines for combo attack component /// LMB Attack #define LEFT_ATTACK "Left Attack" @@ -360,3 +352,46 @@ GLOBAL_LIST_INIT(all_precise_body_zones, list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_ #define JOULES_PER_DAMAGE (25 KILO JOULES) /// Calculates the amount of burn force when applying this much energy to a mob via electrocution from an energy source. #define ELECTROCUTE_DAMAGE(energy) (energy >= 1 KILO JOULES ? clamp(20 + round(energy / JOULES_PER_DAMAGE), 20, 195) + rand(-5,5) : 0) + +// Attack chain attack_modifier modifiers +/// Sets the weapon's base force to this. Use carefully (as multiple overrides may collide). Set via [SET_ATTACK_FORCE] +#define FORCE_OVERRIDE "force_override" +/// Flat addition or subtration to the weapon's force. Set via [MODIFY_ATTACK_FORCE] +#define FORCE_MODIFIER "force_modifier" +/// Multiplication of the weapon's force. Applied AFTER [FORCE_MODIFIER]. Set via [MODIFY_ATTACK_FORCE_MULTIPLIER] +#define FORCE_MULTIPLIER "force_multiplier" +/// If set in modifiers, default messages ("You hit the thing with the thing") are silenced +#define SILENCE_DEFAULT_MESSAGES "silence_default_messages" +/// If set in modifiers, default hitsound is silenced +#define SILENCE_HITSOUND "silence_hitsound" + +/// Used in attack chain to set the force of the attack without changing the base force of the item. +#define SET_ATTACK_FORCE(atk_mods, value) \ + if(!islist(atk_mods)) { atk_mods = list() }; \ + atk_mods[FORCE_OVERRIDE] = value; + +/// Used in attack chain to add or remove force from the attack without changing the base force of the item. +#define MODIFY_ATTACK_FORCE(atk_mods, amount) \ + if(!islist(atk_mods)) { atk_mods = list() }; \ + atk_mods[FORCE_MODIFIER] += amount; + +/// Used in attack chain to multiply the force of the attack without changing the base force of the item. +#define MODIFY_ATTACK_FORCE_MULTIPLIER(atk_mods, amount) \ + if(!islist(atk_mods)) { atk_mods = list() }; \ + if(!(FORCE_MULTIPLIER in atk_mods)) { atk_mods[FORCE_MULTIPLIER] = 1 }; \ + atk_mods[FORCE_MULTIPLIER] *= amount; + +/// Used in attack chain to prevent hitsounds on attack (to allow for custom sounds) +#define MUTE_ATTACK_HITSOUND(atk_mods) \ + if(!islist(atk_mods)) { atk_mods = list() }; \ + atk_mods[SILENCE_HITSOUND] = TRUE; + +/// Used in attack chain to prevent default visible messages from being sent (to allow for custom messages) +#define HIDE_ATTACK_MESSAGES(atk_mods) \ + if(!islist(atk_mods)) { atk_mods = list() }; \ + atk_mods[SILENCE_DEFAULT_MESSAGES] = TRUE; + +/// Calculates the final force of some item based on atk_mods +/// Needs to have support for force overrides and multipliers of 0 (hence why we ternaries are used over 'or's) +#define CALCULATE_FORCE(some_item, atk_mods) \ + ((((FORCE_OVERRIDE in atk_mods) ? atk_mods[FORCE_OVERRIDE] : some_item.force) + (atk_mods?[FORCE_MODIFIER] || 0)) * ((FORCE_MULTIPLIER in atk_mods) ? atk_mods[FORCE_MULTIPLIER] : 1)) diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm index e4d4af56214c..60b352accca1 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -187,7 +187,7 @@ #define COMSIG_TABLE_SLAMMED "table_slammed" ///from base of atom/attack_hand(): (mob/user, modifiers) #define COMSIG_MOB_ATTACK_HAND "mob_attack_hand" -///from base of /obj/item/attack(): (mob/M, mob/user, list/modifiers) +///from base of /obj/item/attack(): (mob/M, mob/user, list/modifiers, list/attack_modifiers) #define COMSIG_MOB_ITEM_ATTACK "mob_item_attack" ///from base of mob/RangedAttack(): (atom/A, modifiers) #define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm index 41cae9a68202..06f6497dda5d 100644 --- a/code/__DEFINES/dcs/signals/signals_object.dm +++ b/code/__DEFINES/dcs/signals/signals_object.dm @@ -136,7 +136,7 @@ #define COMSIG_ITEM_ON_GRIND "on_grind" ///from base of obj/item/on_juice(): () #define COMSIG_ITEM_ON_JUICE "on_juice" -///from /obj/machinery/hydroponics/attackby(obj/item/O, mob/user, list/modifiers) when an object is used as compost: (mob/user) +///from /obj/machinery/hydroponics/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) when an object is used as compost: (mob/user) #define COMSIG_ITEM_ON_COMPOSTED "on_composted" ///Called when an item is dried by a drying rack #define COMSIG_ITEM_DRIED "item_dried" @@ -452,7 +452,7 @@ /// Prevents click from happening. #define COMPONENT_CANCEL_EQUIPMENT_CLICK (1<<0) -///from base of /obj/item/attack(): (mob/living, mob/living, list/modifiers) +///from base of /obj/item/attack(): (mob/living, mob/living, list/modifiers, list/attack_modifiers) #define COMSIG_ITEM_ATTACK "item_attack" ///from base of obj/item/attack_self(): (/mob) #define COMSIG_ITEM_ATTACK_SELF "item_attack_self" @@ -462,12 +462,12 @@ #define COMSIG_ITEM_ATTACK_ATOM "item_attack_atom" ///from base of obj/item/pre_attack(): (atom/target, mob/user, list/modifiers) #define COMSIG_ITEM_PRE_ATTACK "item_pre_attack" -/// From base of [/obj/item/proc/pre_attack_secondary()]: (atom/target, mob/user, list/modifiers) +/// From base of [/obj/item/proc/pre_attack_secondary()]: (atom/target, mob/user, list/modifiers, list/attack_modifiers) #define COMSIG_ITEM_PRE_ATTACK_SECONDARY "item_pre_attack_secondary" #define COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN (1<<0) #define COMPONENT_SECONDARY_CONTINUE_ATTACK_CHAIN (1<<1) #define COMPONENT_SECONDARY_CALL_NORMAL_ATTACK_CHAIN (1<<2) -/// From base of [/obj/item/proc/attack_secondary()]: (atom/target, mob/user, list/modifiers) +/// From base of [/obj/item/proc/attack_secondary()]: (atom/target, mob/user, list/modifiers, list/attack_modifiers) #define COMSIG_ITEM_ATTACK_SECONDARY "item_attack_secondary" ///from base of [obj/item/attack()]: (atom/target, mob/user, proximity_flag, list/modifiers) #define COMSIG_ITEM_AFTERATTACK "item_afterattack" diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 7e18629202e0..45a3144e9cad 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -1,17 +1,31 @@ /** - * This is the proc that handles the order of an item_attack. + * THIS IS THE ROOT OF ALL EVIL (I mean the root of all item-on-atom interactions) * - * The order of procs called is: - * * [/atom/proc/tool_act] on the target. If it returns ITEM_INTERACT_SUCCESS or ITEM_INTERACT_BLOCKING, the chain will be stopped. - * * [/obj/item/proc/pre_attack] on src. If this returns TRUE, the chain will be stopped. - * * [/atom/proc/attackby] on the target. If it returns TRUE, the chain will be stopped. - * * [/obj/item/proc/afterattack]. The return value does not matter. + * Implementation details + * + * [obj/item/proc/base_item_interaction] handles all non-combat interactions of an item with an atom. + * This calls [atom/proc/tool_act], among others. + * + * [obj/item/proc/pre_attack] is called before an attack is made, before we even check for block. + * Use pre attack to cancel attacks early based on conditions ("You cant attack with this unless you're a pacifist!") + * After pre-attack we go into [atom/proc/attackby] which is where individual atoms handle what happens when being hit + * Objects use [obj/item/proc/attack_atom], mobs use [obj/item/proc/attack]. + * You GENERALLY should never override attack, like ever. (On-attack effects go in afterattack) + * Regardless, we go BACK to the atom to call [atom/proc/attacked_by], which is where the damage is actually applied. + * Finally we call [obj/item/proc/afterattack] after damage is dealt, to handle special item interacts after an attack occurs. + * Use afterattack for stuff like "My stick stuns when it hits people". + * + * Arguments + * * mob/living/user - The mob using src on something + * * atom/target - The atom being clicked on with src + * * list/modifiers - click params such as alt/shift and x/y, etc + * * list/attack_modifiers - attack modifiers such as force, damage type, etc. Only used in attacks */ -/obj/item/proc/melee_attack_chain(mob/user, atom/target, list/modifiers) +/obj/item/proc/melee_attack_chain(mob/user, atom/target, list/modifiers, list/attack_modifiers = list()) //Proxy replaces src cause it returns an atom that will attack the target on our behalf var/obj/item/source_atom = get_proxy_attacker_for(target, user) if(source_atom != src) //if we are someone else then call that attack chain else we can proceed with the usual stuff - return source_atom.melee_attack_chain(user, target, modifiers) + return source_atom.melee_attack_chain(user, target, modifiers, attack_modifiers) var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK) @@ -25,9 +39,9 @@ var/pre_attack_result if (is_right_clicking) - switch (pre_attack_secondary(target, user, modifiers)) + switch (pre_attack_secondary(target, user, modifiers, attack_modifiers)) if (SECONDARY_ATTACK_CALL_NORMAL) - pre_attack_result = pre_attack(target, user, modifiers) + pre_attack_result = pre_attack(target, user, modifiers, attack_modifiers) if (SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return TRUE if (SECONDARY_ATTACK_CONTINUE_CHAIN) @@ -35,7 +49,7 @@ else CRASH("pre_attack_secondary must return an SECONDARY_ATTACK_* define, please consult code/__DEFINES/combat.dm") else - pre_attack_result = pre_attack(target, user, modifiers) + pre_attack_result = pre_attack(target, user, modifiers, attack_modifiers) if(pre_attack_result) return TRUE @@ -44,9 +58,9 @@ var/attackby_result if (is_right_clicking) - switch (target.attackby_secondary(src, user, modifiers)) + switch (target.attackby_secondary(src, user, modifiers, attack_modifiers)) if (SECONDARY_ATTACK_CALL_NORMAL) - attackby_result = target.attackby(src, user, modifiers) + attackby_result = target.attackby(src, user, modifiers, attack_modifiers) if (SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return TRUE if (SECONDARY_ATTACK_CONTINUE_CHAIN) @@ -54,7 +68,7 @@ else CRASH("attackby_secondary must return an SECONDARY_ATTACK_* define, please consult code/__DEFINES/combat.dm") else - attackby_result = target.attackby(src, user, modifiers) + attackby_result = target.attackby(src, user, modifiers, attack_modifiers) if (attackby_result) // This means the attack failed or was handled for whatever reason @@ -89,11 +103,12 @@ * * atom/target - The atom about to be hit * * mob/living/user - The mob doing the htting * * list/modifiers - click params such as alt/shift etc - * + * * attack_modifiers - attack modifiers such as force, damage type, etc + * See: [/obj/item/proc/melee_attack_chain] */ -/obj/item/proc/pre_attack(atom/target, mob/living/user, list/modifiers) //do stuff before attackby! - if(SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK, target, user, modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN) +/obj/item/proc/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) //do stuff before attackby! + if(SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK, target, user, modifiers, attack_modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN) return TRUE return FALSE //return TRUE to avoid calling attackby after this proc does stuff @@ -104,11 +119,12 @@ * * atom/target - The atom about to be hit * * mob/living/user - The mob doing the htting * * list/modifiers - click params such as alt/shift etc + * * list/attack_modifiers - attack modifiers such as force, damage type, etc * * See: [/obj/item/proc/melee_attack_chain] */ -/obj/item/proc/pre_attack_secondary(atom/target, mob/living/user, list/modifiers) - var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK_SECONDARY, target, user, modifiers) +/obj/item/proc/pre_attack_secondary(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) + var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK_SECONDARY, target, user, modifiers, attack_modifiers) if(signal_result & COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN @@ -124,12 +140,13 @@ * Arguments: * * obj/item/attacking_item - The item hitting this atom * * mob/user - The wielder of this item - * * params - click params such as alt/shift etc + * * list/modifiers - click params such as alt/shift etc + * * list/attack_modifiers - attack modifiers such as force, damage type, etc * * See: [/obj/item/proc/melee_attack_chain] */ -/atom/proc/attackby(obj/item/attacking_item, mob/user, list/modifiers) - if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY, attacking_item, user, modifiers) & COMPONENT_NO_AFTERATTACK) +/atom/proc/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) + if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY, attacking_item, user, modifiers, attack_modifiers) & COMPONENT_NO_AFTERATTACK) return TRUE return FALSE @@ -139,12 +156,13 @@ * Arguments: * * obj/item/weapon - The item hitting this atom * * mob/user - The wielder of this item - * * params - click params such as alt/shift etc + * * list/modifiers - click params such as alt/shift etc + * * list/attack_modifiers - attack modifiers such as force, damage type, etc * * See: [/obj/item/proc/melee_attack_chain] */ -/atom/proc/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) - var/signal_result = SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY_SECONDARY, weapon, user, modifiers) +/atom/proc/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) + var/signal_result = SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY_SECONDARY, weapon, user, modifiers, attack_modifiers) if(signal_result & COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN @@ -154,12 +172,12 @@ return SECONDARY_ATTACK_CALL_NORMAL -/obj/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(..()) return TRUE if(!(obj_flags & CAN_BE_HIT)) return FALSE - return attacking_item.attack_atom(src, user, modifiers) + return attacking_item.attack_atom(src, user, modifiers, attack_modifiers) /mob/living/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(user.combat_mode) @@ -177,14 +195,14 @@ return NONE -/mob/living/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/mob/living/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(..()) return TRUE user.changeNext_move(attacking_item.attack_speed) - return attacking_item.attack(src, user, modifiers) + return attacking_item.attack(src, user, modifiers, attack_modifiers) -/mob/living/attackby_secondary(obj/item/weapon, mob/living/user, list/modifiers) - var/result = weapon.attack_secondary(src, user, modifiers) +/mob/living/attackby_secondary(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers) + var/result = weapon.attack_secondary(src, user, modifiers, attack_modifiers) // Normal attackby updates click cooldown, so we have to make up for it if (result != SECONDARY_ATTACK_CALL_NORMAL) @@ -201,51 +219,52 @@ * Arguments: * * mob/living/target_mob - The mob being hit by this item * * mob/living/user - The mob hitting with this item - * * params - Click params of this attack + * * modifiers - click modifiers such as alt/shift or x/y + * * attack_modifiers - attack modifiers such as force, damage type, etc */ -/obj/item/proc/attack(mob/living/target_mob, mob/living/user, list/modifiers) - var/signal_return = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, target_mob, user, modifiers) +/obj/item/proc/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers) + var/signal_return = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, target_mob, user, modifiers, attack_modifiers) || SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK, target_mob, user, modifiers, attack_modifiers) if(signal_return & COMPONENT_CANCEL_ATTACK_CHAIN) return TRUE if(signal_return & COMPONENT_SKIP_ATTACK) return FALSE - SEND_SIGNAL(user, COMSIG_MOB_ITEM_ATTACK, target_mob, user, modifiers) - if(item_flags & NOBLUDGEON) return FALSE - if(!IS_DISABLING_DAMAGE(damtype) && force && HAS_TRAIT(user, TRAIT_PACIFISM)) + var/final_force = CALCULATE_FORCE(src, attack_modifiers) + if(damtype != STAMINA && final_force && HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to harm other living beings!")) return FALSE - if(!force && !HAS_TRAIT(src, TRAIT_CUSTOM_TAP_SOUND)) - playsound(src, 'sound/weapons/tap.ogg', get_clamped_volume(), TRUE, -1) - else if(hitsound) - playsound(src, hitsound, get_clamped_volume(), TRUE, extrarange = stealthy_audio ? SILENCED_SOUND_EXTRARANGE : -1, falloff_distance = 0) + if(!LAZYACCESS(attack_modifiers, SILENCE_HITSOUND)) + if(!final_force && !HAS_TRAIT(src, TRAIT_CUSTOM_TAP_SOUND)) + playsound(src, 'sound/weapons/tap.ogg', get_clamped_volume(), TRUE, -1) + else if(hitsound) + playsound(src, hitsound, get_clamped_volume(), TRUE, extrarange = stealthy_audio ? SILENCED_SOUND_EXTRARANGE : -1, falloff_distance = 0) target_mob.lastattacker = user.real_name target_mob.lastattackerckey = user.ckey - if(force && target_mob == user && user.client) + if(final_force && target_mob == user && user.client) user.client.give_award(/datum/award/achievement/misc/selfouch, user) if(get(src, /mob/living) == user) // telekinesis. user.do_attack_animation(target_mob) - if(!target_mob.attacked_by(src, user)) + if(!target_mob.attacked_by(src, user, modifiers, attack_modifiers)) return TRUE - SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target_mob, user, modifiers) - SEND_SIGNAL(target_mob, COMSIG_ATOM_AFTER_ATTACKEDBY, src, user, modifiers) - afterattack(target_mob, user, modifiers) - - log_combat(user, target_mob, "attacked", src.name, "(COMBAT MODE: [uppertext(user.combat_mode)]) (DAMTYPE: [uppertext(damtype)])") + SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, target_mob, user, modifiers, attack_modifiers) + SEND_SIGNAL(target_mob, COMSIG_ATOM_AFTER_ATTACKEDBY, src, user, modifiers, attack_modifiers) + afterattack(target_mob, user, modifiers, attack_modifiers) + if(final_force > 0) + log_combat(user, target_mob, "attacked", src.name, "(COMBAT MODE: [uppertext(user.combat_mode)]) (DAMTYPE: [uppertext(damtype)])") add_fingerprint(user) return FALSE // unhandled /// The equivalent of [/obj/item/proc/attack] but for alternate attacks, AKA right clicking -/obj/item/proc/attack_secondary(mob/living/victim, mob/living/user, list/modifiers) - var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_SECONDARY, victim, user, modifiers) +/obj/item/proc/attack_secondary(mob/living/victim, mob/living/user, list/modifiers, list/attack_modifiers) + var/signal_result = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_SECONDARY, victim, user, modifiers, attack_modifiers) if(signal_result & COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN @@ -256,8 +275,8 @@ return SECONDARY_ATTACK_CALL_NORMAL /// The equivalent of the standard version of [/obj/item/proc/attack] but for non mob targets. -/obj/item/proc/attack_atom(atom/attacked_atom, mob/living/user, list/modifiers) - var/signal_return = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_ATOM, attacked_atom, user) | SEND_SIGNAL(user, COMSIG_LIVING_ATTACK_ATOM, attacked_atom) +/obj/item/proc/attack_atom(atom/attacked_atom, mob/living/user, list/modifiers, list/attack_modifiers) + var/signal_return = SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_ATOM, attacked_atom, user, modifiers, attack_modifiers) | SEND_SIGNAL(user, COMSIG_LIVING_ATTACK_ATOM, attacked_atom, modifiers, attack_modifiers) if(signal_return & COMPONENT_SKIP_ATTACK) return TRUE if(signal_return & COMPONENT_CANCEL_ATTACK_CHAIN) @@ -267,30 +286,32 @@ user.changeNext_move(attack_speed) if(get(src, /mob/living) == user) // telekinesis. user.do_attack_animation(attacked_atom) - attacked_atom.attacked_by(src, user) - SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, attacked_atom, user, modifiers) - SEND_SIGNAL(attacked_atom, COMSIG_ATOM_AFTER_ATTACKEDBY, src, user, modifiers) - afterattack(attacked_atom, user, modifiers) + attacked_atom.attacked_by(src, user, modifiers, attack_modifiers) + SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, attacked_atom, user, modifiers, attack_modifiers) + SEND_SIGNAL(attacked_atom, COMSIG_ATOM_AFTER_ATTACKEDBY, src, user, modifiers, attack_modifiers) + afterattack(attacked_atom, user, modifiers, attack_modifiers) return FALSE // unhandled /// Called from [/obj/item/proc/attack_atom] and [/obj/item/proc/attack] if the attack succeeds -/atom/proc/attacked_by(obj/item/attacking_item, mob/living/user) +/atom/proc/attacked_by(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(!uses_integrity) CRASH("attacked_by() was called on an object that doesnt use integrity!") - if(!attacking_item.force) - return + var/final_force = CALCULATE_FORCE(attacking_item, attack_modifiers) + if(final_force <= 0) + return 0 - var/damage = take_damage(attacking_item.force, attacking_item.damtype, MELEE, 1, get_dir(src, user)) + var/damage = take_damage(final_force, attacking_item.damtype, MELEE, 1, get_dir(src, user)) //only witnesses close by and the victim see a hit message. user.visible_message(span_danger("[user] hits [src] with [attacking_item][damage ? "." : ", without leaving a mark!"]"), \ span_danger("You hit [src] with [attacking_item][damage ? "." : ", without leaving a mark!"]"), null, COMBAT_MESSAGE_RANGE) log_combat(user, src, "attacked", attacking_item) + return damage -/area/attacked_by(obj/item/attacking_item, mob/living/user) +/area/attacked_by(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) CRASH("areas are NOT supposed to have attacked_by() called on them!") -/mob/living/attacked_by(obj/item/attacking_item, mob/living/user) +/mob/living/attacked_by(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) var/targeting = check_zone(user.zone_selected) if(user != src) @@ -300,7 +321,8 @@ targeting = get_random_valid_zone(targeting, zone_hit_chance) var/targeting_human_readable = parse_zone(targeting) - send_item_attack_message(attacking_item, user, targeting_human_readable, targeting) + if(!LAZYACCESS(attack_modifiers, SILENCE_DEFAULT_MESSAGES)) + send_item_attack_message(attacking_item, user, targeting_human_readable, targeting) var/armor_block = min(run_armor_check( def_zone = targeting, @@ -311,9 +333,9 @@ weak_against_armour = attacking_item.weak_against_armour, ), ARMOR_MAX_BLOCK) - var/damage = attacking_item.force * user.outgoing_damage_mod - if(mob_biotypes & (MOB_ROBOTIC|MOB_MINERAL|MOB_SKELETAL)) // this should probably check hit bodypart for humanoids - damage *= attacking_item.get_demolition_modifier(src) + var/final_force = CALCULATE_FORCE(attacking_item, attack_modifiers) + if(mob_biotypes & MOB_ROBOTIC) + final_force *= attacking_item.get_demolition_modifier(src) var/wounding = attacking_item.wound_bonus if((attacking_item.item_flags & SURGICAL_TOOL) && !user.combat_mode && HAS_TRAIT(user, TRAIT_READY_TO_OPERATE)) @@ -321,20 +343,20 @@ if(user != src) // This doesn't factor in armor, or most damage modifiers (physiology). Your mileage may vary - if(check_block(attacking_item, damage, "the [attacking_item.name]", MELEE_ATTACK, attacking_item.armour_penetration, attacking_item.damtype)) - return FALSE + if(check_block(attacking_item, final_force, "\the [attacking_item]", MELEE_ATTACK, attacking_item.armour_penetration, attacking_item.damtype)) + return 0 SEND_SIGNAL(attacking_item, COMSIG_ITEM_ATTACK_ZONE, src, user, targeting) - if(damage <= 0) - return TRUE + if(final_force <= 0) + return 1 // Pretend like we did 1 damage so afterattack still runs if(ishuman(src) || client) // istype(src) is kinda bad, but it's to avoid spamming the blackbox SSblackbox.record_feedback("nested tally", "item_used_for_combat", 1, list("[attacking_item.force]", "[attacking_item.type]")) SSblackbox.record_feedback("tally", "zone_targeted", 1, targeting_human_readable) var/damage_done = apply_damage( - damage = damage, + damage = final_force, damagetype = attacking_item.damtype, def_zone = targeting, blocked = armor_block, @@ -347,7 +369,7 @@ attack_effects(damage_done, targeting, armor_block, attacking_item, user) - return TRUE + return damage_done /** * Called when we take damage, used to cause effects such as a blood splatter. @@ -459,7 +481,7 @@ * * proximity_flag - is 1 if this afterattack was called on something adjacent, in your square, or on your person. * * click_parameters - is the params string from byond [/atom/proc/Click] code, see that documentation. */ -/obj/item/proc/afterattack(atom/target, mob/user, list/modifiers) +/obj/item/proc/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) PROTECTED_PROC(TRUE) return diff --git a/code/datums/components/focused_attacker.dm b/code/datums/components/focused_attacker.dm index 12432414f775..23d88a9f5a6a 100644 --- a/code/datums/components/focused_attacker.dm +++ b/code/datums/components/focused_attacker.dm @@ -3,6 +3,8 @@ * Not compatible with any other component or status effect which modifies attack damage */ /datum/component/focused_attacker + /// Current attack bonus + VAR_FINAL/current_gain /// Amount of damage we gain per attack var/gain_per_attack /// Maximum amount by which we can increase our attack power @@ -48,14 +50,14 @@ register_new_target(target) /// Before an item attacks, try increasing its attack power -/datum/component/focused_attacker/proc/pre_item_attack(obj/item/weapon, atom/target, mob/user, list/modifiers) +/datum/component/focused_attacker/proc/pre_item_attack(obj/item/weapon, atom/target, mob/user, list/modifiers, list/attack_modifiers) SIGNAL_HANDLER if (target == last_target) - if (weapon.force - initial(weapon.force) < maximum_gain) - weapon.force += gain_per_attack + current_gain += gain_per_attack + MODIFY_ATTACK_FORCE(attack_modifiers, current_gain) return - weapon.force = initial(weapon.force) + current_gain = 0 register_new_target(target) /// Register a new target diff --git a/code/datums/components/trapdoor.dm b/code/datums/components/trapdoor.dm index 614f9ffb53d8..afe6339866dc 100644 --- a/code/datums/components/trapdoor.dm +++ b/code/datums/components/trapdoor.dm @@ -288,7 +288,7 @@ internals.forceMove(get_turf(src)) internals = null -/obj/item/trapdoor_remote/attackby(obj/item/assembly/trapdoor/assembly, mob/living/user, list/modifiers) +/obj/item/trapdoor_remote/attackby(obj/item/assembly/trapdoor/assembly, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(. || !istype(assembly)) return diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm index a399a03e56f7..bdc7bad27e9e 100644 --- a/code/datums/holocall.dm +++ b/code/datums/holocall.dm @@ -238,7 +238,7 @@ QDEL_NULL(record) return ..() -/obj/item/disk/holodisk/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/disk/holodisk/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/disk/holodisk)) var/obj/item/disk/holodisk/holodiskOriginal = item if (holodiskOriginal.record) diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index e20a8e7050ef..7f98435c093e 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -273,7 +273,7 @@ icon_state = "[base_icon_state]0" return ..() -/obj/item/staff/bostaff/attack(mob/target, mob/living/user, list/modifiers) +/obj/item/staff/bostaff/attack(mob/target, mob/living/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50)) to_chat(user, span_warning("You club yourself over the head with [src].")) diff --git a/code/datums/memory/tattoo_kit.dm b/code/datums/memory/tattoo_kit.dm index 415a61996133..424e9c695b44 100644 --- a/code/datums/memory/tattoo_kit.dm +++ b/code/datums/memory/tattoo_kit.dm @@ -17,7 +17,7 @@ . += span_notice("This kit has enough ink for [uses] use\s.") . += span_boldnotice("You can use a toner cartridge to refill this.") -/obj/item/tattoo_kit/attackby(obj/item/toner/ink_cart, mob/living/tattoo_artist, list/modifiers) +/obj/item/tattoo_kit/attackby(obj/item/toner/ink_cart, mob/living/tattoo_artist, list/modifiers, list/attack_modifiers) . = ..() if(!istype(ink_cart)) return @@ -29,7 +29,7 @@ qdel(ink_cart) balloon_alert(tattoo_artist, "added tattoo ink") -/obj/item/tattoo_kit/attack(mob/living/tattoo_holder, mob/living/tattoo_artist, list/modifiers) +/obj/item/tattoo_kit/attack(mob/living/tattoo_holder, mob/living/tattoo_artist, list/modifiers, list/attack_modifiers) . = ..() if(.) return TRUE diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index 82e6c5da2cc3..05a4fbd9eac1 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -109,7 +109,7 @@ power_change() return ITEM_INTERACT_SUCCESS -/obj/machinery/pdapainter/attackby(obj/item/O, mob/living/user, list/modifiers) +/obj/machinery/pdapainter/attackby(obj/item/O, mob/living/user, list/modifiers, list/attack_modifiers) if(machine_stat & BROKEN) if(O.tool_behaviour == TOOL_WELDER && !user.combat_mode) if(!O.tool_start_check(user, amount=1)) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 9fca4aea378d..0f90239599a4 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -796,13 +796,13 @@ return attack_robot(user) return _try_interact(user) -/obj/machinery/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return update_last_used(user) -/obj/machinery/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm index f3868aeb24c1..0e7c90c6649b 100644 --- a/code/game/machinery/bank_machine.dm +++ b/code/game/machinery/bank_machine.dm @@ -43,7 +43,7 @@ synced_bank_account = null return ..() -/obj/machinery/computer/bank_machine/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/computer/bank_machine/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) var/value = 0 if(istype(weapon, /obj/item/stack/spacecash)) var/obj/item/stack/spacecash/inserted_cash = weapon diff --git a/code/game/machinery/camera/camera_construction.dm b/code/game/machinery/camera/camera_construction.dm index 9f7403283f9a..3ca8bbbea2f4 100644 --- a/code/game/machinery/camera/camera_construction.dm +++ b/code/game/machinery/camera/camera_construction.dm @@ -119,7 +119,7 @@ return ITEM_INTERACT_SUCCESS return ..() -/obj/machinery/camera/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/machinery/camera/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(camera_construction_state != CAMERA_STATE_FINISHED || panel_open) if(attacking_item.tool_behaviour == TOOL_ANALYZER) if(!isXRay(TRUE)) //don't reveal it was already upgraded if was done via MALF AI Upgrade Camera Network ability diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 296c6cc900d7..c1865b3d8525 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -41,7 +41,7 @@ update_appearance() return ITEM_INTERACT_SUCCESS -/obj/machinery/cell_charger/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/cell_charger/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/stock_parts/power_store/cell) && !panel_open) if(machine_stat & BROKEN) to_chat(user, span_warning("[src] is broken!")) diff --git a/code/game/machinery/civilian_bounties.dm b/code/game/machinery/civilian_bounties.dm index a56b00e9a51d..c1a73764e35f 100644 --- a/code/game/machinery/civilian_bounties.dm +++ b/code/game/machinery/civilian_bounties.dm @@ -47,7 +47,7 @@ ///Typecast of an inserted, scanned ID card inside the console, as bounties are held within the ID card. var/obj/item/card/id/inserted_scan_id -/obj/machinery/computer/piratepad_control/civilian/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/machinery/computer/piratepad_control/civilian/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(isidcard(I)) if(id_insert(user, I, inserted_scan_id)) inserted_scan_id = I diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 37ca7af73f9f..47edf82057ab 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -113,7 +113,7 @@ return TRUE return authenticated -/obj/machinery/computer/communications/attackby(obj/I, mob/user, list/modifiers) +/obj/machinery/computer/communications/attackby(obj/I, mob/user, list/modifiers, list/attack_modifiers) if(isidcard(I)) attack_hand(user) else diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 545de429de21..8ef33ae20587 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -172,7 +172,7 @@ genetic_damage_pulse() return -/obj/machinery/computer/scan_consolenew/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/computer/scan_consolenew/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) // Store chromosomes in the console if there's room if (istype(item, /obj/item/chromosome)) item.forceMove(src) diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index 37d05870c520..f29edb6748fd 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -12,7 +12,7 @@ log_silicon("\A [name] was created at [loc_name(src)].") message_admins("\A [name] was created at [ADMIN_VERBOSEJMP(src)].") -/obj/machinery/computer/upload/attackby(obj/item/O, mob/user, list/modifiers) +/obj/machinery/computer/upload/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) if(istype(O, /obj/item/ai_module)) var/obj/item/ai_module/M = O if(machine_stat & (NOPOWER|BROKEN|MAINT)) diff --git a/code/game/machinery/computer/operating_computer.dm b/code/game/machinery/computer/operating_computer.dm index 10eaa4f2af4b..9864a6f4c27b 100644 --- a/code/game/machinery/computer/operating_computer.dm +++ b/code/game/machinery/computer/operating_computer.dm @@ -66,7 +66,7 @@ linked_techweb = tool.buffer return TRUE -/obj/machinery/computer/operating/item_interaction(mob/living/user, obj/item/tool, list/modifiers) +/obj/machinery/computer/operating/item_interaction(mob/living/user, obj/item/tool, list/modifiers, list/attack_modifiers) if(istype(tool, /obj/item/disk/surgery)) user.visible_message( span_notice("[user] begins to load [tool] in [src]..."), diff --git a/code/game/machinery/computer/orders/order_computer/mining_order.dm b/code/game/machinery/computer/orders/order_computer/mining_order.dm index a0f8b96ff407..54946f8afeec 100644 --- a/code/game/machinery/computer/orders/order_computer/mining_order.dm +++ b/code/game/machinery/computer/orders/order_computer/mining_order.dm @@ -155,7 +155,7 @@ . = ..() . += span_notice("There's [points] point\s on the card.") -/obj/item/card/mining_point_card/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/card/mining_point_card/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(!isidcard(attacking_item)) return ..() var/obj/item/card/id/attacking_id = attacking_item diff --git a/code/game/machinery/computer/prisoner/_prisoner.dm b/code/game/machinery/computer/prisoner/_prisoner.dm index 37bc1ce69c69..1df46b261164 100644 --- a/code/game/machinery/computer/prisoner/_prisoner.dm +++ b/code/game/machinery/computer/prisoner/_prisoner.dm @@ -50,7 +50,7 @@ balloon_alert_to_viewers("id ejected") playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) -/obj/machinery/computer/prisoner/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/computer/prisoner/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(istype(weapon, /obj/item/card/id/advanced/prisoner)) id_insert(user, weapon) return TRUE diff --git a/code/game/machinery/computer/records/medical.dm b/code/game/machinery/computer/records/medical.dm index 5129b48124ee..a009072868a2 100644 --- a/code/game/machinery/computer/records/medical.dm +++ b/code/game/machinery/computer/records/medical.dm @@ -19,11 +19,11 @@ icon_keyboard = "laptop_key" pass_flags = PASSTABLE -/obj/machinery/computer/records/medical/attacked_by(obj/item/attacking_item, mob/living/user) - . = ..() - if(!istype(attacking_item, /obj/item/photo)) - return - insert_new_record(user, attacking_item) +/obj/machinery/computer/records/medical/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!istype(tool, /obj/item/photo)) + return NONE + insert_new_record(user, tool) + return ITEM_INTERACT_SUCCESS /obj/machinery/computer/records/medical/ui_interact(mob/user, datum/tgui/ui) . = ..() diff --git a/code/game/machinery/computer/records/security.dm b/code/game/machinery/computer/records/security.dm index d71bbc0b2144..504a61ae86c8 100644 --- a/code/game/machinery/computer/records/security.dm +++ b/code/game/machinery/computer/records/security.dm @@ -65,11 +65,11 @@ qdel(target) continue -/obj/machinery/computer/records/security/attacked_by(obj/item/attacking_item, mob/living/user) - . = ..() - if(!istype(attacking_item, /obj/item/photo)) - return - insert_new_record(user, attacking_item) +/obj/machinery/computer/records/security/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!istype(tool, /obj/item/photo)) + return NONE + insert_new_record(user, tool) + return ITEM_INTERACT_SUCCESS /obj/machinery/computer/records/security/ui_interact(mob/user, datum/tgui/ui) . = ..() diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm index 39866b74ac35..26e26b68f3d2 100644 --- a/code/game/machinery/defibrillator_mount.dm +++ b/code/game/machinery/defibrillator_mount.dm @@ -83,7 +83,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/defibrillator_mount, 28) return user.put_in_hands(defib.paddles) -/obj/machinery/defibrillator_mount/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/machinery/defibrillator_mount/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/defibrillator)) if(defib) to_chat(user, span_warning("There's already a defibrillator in [src]!")) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 788b7ba4fd4d..831b83bcf8f5 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -26,7 +26,7 @@ return -/obj/structure/barricade/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/structure/barricade/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(I.tool_behaviour == TOOL_WELDER && !user.combat_mode && bar_material == METAL) if(atom_integrity < max_integrity) if(!I.tool_start_check(user, amount=1)) diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm index 06dea01b66c7..41ce6ecfebee 100644 --- a/code/game/machinery/dish_drive.dm +++ b/code/game/machinery/dish_drive.dm @@ -83,7 +83,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/dish_drive/attackby(obj/item/dish, mob/living/user, list/modifiers) +/obj/machinery/dish_drive/attackby(obj/item/dish, mob/living/user, list/modifiers, list/attack_modifiers) if(is_type_in_list(dish, collectable_items) && !user.combat_mode) if(!user.transferItemToLoc(dish, src)) return diff --git a/code/game/machinery/dna_infuser/dna_infuser.dm b/code/game/machinery/dna_infuser/dna_infuser.dm index 306b3034c664..1b6aa6a61397 100644 --- a/code/game/machinery/dna_infuser/dna_infuser.dm +++ b/code/game/machinery/dna_infuser/dna_infuser.dm @@ -210,7 +210,7 @@ //we set drop to false to manually call it with an allowlist dump_inventory_contents(list(occupant)) -/obj/machinery/dna_infuser/attackby(obj/item/used, mob/user, list/modifiers) +/obj/machinery/dna_infuser/attackby(obj/item/used, mob/user, list/modifiers, list/attack_modifiers) if(infusing) return if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, used))//sent icon_state is irrelevant... diff --git a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm index f854b6686a0a..9872859fa499 100644 --- a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm @@ -128,7 +128,7 @@ . = ..() . += "You can use your tendril hammer arm to deliver a devastating blow against mining fauna, but only once every two seconds." -/obj/item/goliath_infuser_hammer/attack(mob/living/target, mob/living/carbon/human/user, list/modifiers) +/obj/item/goliath_infuser_hammer/attack(mob/living/target, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers) . = ..() //If we're on cooldown, we'll do a normal attack. diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index 1ea07dd09f60..0ede1a9025b9 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -125,7 +125,7 @@ return open_machine() -/obj/machinery/dna_scannernew/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/dna_scannernew/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, item))//sent icon_state is irrelevant... update_appearance()//..since we're updating the icon here, since the scanner can be unpowered when opened/closed diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index c5b0ab15efe2..65cc48bebb28 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1004,7 +1004,7 @@ update_appearance() return TRUE -/obj/machinery/door/airlock/attackby(obj/item/C, mob/user, list/modifiers) +/obj/machinery/door/airlock/attackby(obj/item/C, mob/user, list/modifiers, list/attack_modifiers) if(!issilicon(user) && !isAdminGhostAI(user)) if(isElectrified() && (C.obj_flags & CONDUCTS_ELECTRICITY) && shock(user, 75)) return diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 4d0a55bc1758..8fef4b2545b0 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -363,7 +363,7 @@ try_to_crowbar(tool, user, forced_open) return ITEM_INTERACT_SUCCESS -/obj/machinery/door/attackby(obj/item/weapon, mob/living/user, list/modifiers) +/obj/machinery/door/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(weapon, /obj/item/access_key)) var/obj/item/access_key/key = weapon return key.attempt_open_door(user, src) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 566041c62ccb..a73405245424 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -302,7 +302,7 @@ /obj/machinery/firealarm/attack_robot_secondary(mob/user) return attack_hand_secondary(user) -/obj/machinery/firealarm/attackby(obj/item/tool, mob/living/user, list/modifiers) +/obj/machinery/firealarm/attackby(obj/item/tool, mob/living/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if(tool.tool_behaviour == TOOL_SCREWDRIVER && buildstage == FIRE_ALARM_BUILD_SECURED) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 53070b6aa0f7..c28e9fff3c37 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -62,7 +62,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/flasher, 26) return ..() //Don't want to render prison breaks impossible -/obj/machinery/flasher/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/machinery/flasher/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if (attacking_item.tool_behaviour == TOOL_WIRECUTTER) if (bulb) @@ -185,7 +185,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/flasher, 26) if(vname == NAMEOF(src, flash_range)) proximity_monitor?.set_range(flash_range) -/obj/machinery/flasher/portable/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/machinery/flasher/portable/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if (attacking_item.tool_behaviour == TOOL_WRENCH) attacking_item.play_tool_sound(src, 100) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index c0619a2dbbfc..97070ea89c1a 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -254,7 +254,7 @@ Possible to do for anyone motivated enough: if(record_mode) record_stop() -/obj/machinery/holopad/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/holopad/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(default_deconstruction_screwdriver(user, "holopad_open", "holopad0", item)) return diff --git a/code/game/machinery/hypnochair.dm b/code/game/machinery/hypnochair.dm index 492e7d8430b4..264f2ca569a3 100644 --- a/code/game/machinery/hypnochair.dm +++ b/code/game/machinery/hypnochair.dm @@ -27,7 +27,7 @@ open_machine() update_appearance() -/obj/machinery/hypnochair/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/hypnochair/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, item)) update_appearance() return diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 1df0936efbc1..4725a7cfd830 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -179,7 +179,7 @@ user.visible_message(span_warning("[user] attaches [src] to [target]."), span_notice("You attach [src] to [target].")) attach_iv(target, user) -/obj/machinery/iv_drip/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/iv_drip/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(use_internal_storage) return ..() diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index 77d5c1b0eb48..753fdd1ef6f7 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -75,7 +75,7 @@ balloon_alert(user, "saved to buffer") return ITEM_INTERACT_SUCCESS -/obj/machinery/launchpad/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/launchpad/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(!stationary) return ..() @@ -312,7 +312,7 @@ closed = TRUE update_indicator() -/obj/machinery/launchpad/briefcase/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/launchpad/briefcase/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/launchpad_remote)) var/obj/item/launchpad_remote/launch = item if(launch.pad == WEAKREF(src)) //do not attempt to link when already linked diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index 57727a43068f..43dfb9ee79c1 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -54,7 +54,7 @@ O.throw_at(target, drive_range * power, power) flick("mass_driver1", src) -/obj/machinery/mass_driver/attackby(obj/item/item, mob/living/user, list/modifiers) +/obj/machinery/mass_driver/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers) if(is_wire_tool(item) && panel_open) wires.interact(user) diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm index bddf742b5622..2f5e9cf66478 100644 --- a/code/game/machinery/medical_kiosk.dm +++ b/code/game/machinery/medical_kiosk.dm @@ -117,7 +117,7 @@ active_price = board.custom_cost return -/obj/machinery/medical_kiosk/attackby(obj/item/O, mob/user, list/modifiers) +/obj/machinery/medical_kiosk/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) if(default_deconstruction_screwdriver(user, "[base_icon_state]_open", "[base_icon_state]_off", O)) return else if(default_deconstruction_crowbar(O)) diff --git a/code/game/machinery/modular_shield.dm b/code/game/machinery/modular_shield.dm index 8c4cd22ced7c..554aaf4952b9 100644 --- a/code/game/machinery/modular_shield.dm +++ b/code/game/machinery/modular_shield.dm @@ -143,7 +143,7 @@ if(default_deconstruction_crowbar(tool)) return TRUE -/obj/machinery/modular_shield_generator/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/modular_shield_generator/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(is_wire_tool(W) && panel_open) wires.interact(user) diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 7b48d21c711d..730437c2fe8c 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -115,7 +115,7 @@ return TRUE return default_deconstruction_screwdriver(user, "navbeacon1","navbeacon0",tool) -/obj/machinery/navbeacon/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/machinery/navbeacon/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) var/turf/our_turf = loc if(our_turf.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) return // prevent intraction when T-scanner revealed diff --git a/code/game/machinery/nebula_shielding.dm b/code/game/machinery/nebula_shielding.dm index fc423cc6d764..c5e632fa913f 100644 --- a/code/game/machinery/nebula_shielding.dm +++ b/code/game/machinery/nebula_shielding.dm @@ -109,7 +109,7 @@ if(isopenturf(turf)) turf.atmos_spawn_air("[GAS_TRITIUM]=1;[TURF_TEMPERATURE(T20C)]") -/obj/machinery/nebula_shielding/radiation/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/nebula_shielding/radiation/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(default_deconstruction_screwdriver(user, initial(icon_state) + "_open", initial(icon_state), item)) return diff --git a/code/game/machinery/newscaster/newscaster_machine.dm b/code/game/machinery/newscaster/newscaster_machine.dm index c74ff1948272..d7ef8c533177 100644 --- a/code/game/machinery/newscaster/newscaster_machine.dm +++ b/code/game/machinery/newscaster/newscaster_machine.dm @@ -490,7 +490,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) . = ..() update_appearance() -/obj/machinery/newscaster/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/machinery/newscaster/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(attacking_item, /obj/item/paper)) if(!user.temporarilyRemoveItemFromInventory(attacking_item)) return diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index c421f90bbe5b..1d84b0f008e6 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -151,7 +151,7 @@ ui = new(user, src, "PipeDispenser", name) ui.open() -/obj/machinery/pipedispenser/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/pipedispenser/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter)) to_chat(usr, span_notice("You put [W] back into [src].")) diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 93ef14f0cce2..dc653b2d7194 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -324,7 +324,7 @@ DEFINE_BITFIELD(turret_flags, list( balloon_alert(user, "saved to multitool buffer") return ITEM_INTERACT_SUCCESS -/obj/machinery/porta_turret/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/porta_turret/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(machine_stat & BROKEN) if(I.tool_behaviour == TOOL_CROWBAR) //If the turret is destroyed, you can remove it with a crowbar to @@ -979,7 +979,7 @@ DEFINE_BITFIELD(turret_flags, list( to_chat(user, span_notice("You link \the [multi_tool.buffer] with \the [src].")) return ITEM_INTERACT_SUCCESS -/obj/machinery/turretid/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/machinery/turretid/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(machine_stat & BROKEN) return diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm index 2711923259b0..d606481939b1 100644 --- a/code/game/machinery/porta_turret/portable_turret_construct.dm +++ b/code/game/machinery/porta_turret/portable_turret_construct.dm @@ -40,7 +40,7 @@ if(PTURRET_START_EXTERNAL_ARMOUR) . += span_notice("The turret's armor needs to be welded in place, the armor looks like it could be pried off.") -/obj/machinery/porta_turret_construct/attackby(obj/item/used, mob/user, list/modifiers) +/obj/machinery/porta_turret_construct/attackby(obj/item/used, mob/user, list/modifiers, list/attack_modifiers) //this is a bit unwieldy but self-explanatory switch(build_step) if(PTURRET_UNSECURED) //first step diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm index dd950a00a4a2..9ce769c1ddc4 100644 --- a/code/game/machinery/porta_turret/portable_turret_cover.dm +++ b/code/game/machinery/porta_turret/portable_turret_cover.dm @@ -45,7 +45,7 @@ balloon_alert(user, "saved to multitool buffer") return ITEM_INTERACT_SUCCESS -/obj/machinery/porta_turret_cover/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/porta_turret_cover/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(I.tool_behaviour == TOOL_WRENCH && !parent_turret.on) if(parent_turret.raised) return @@ -72,8 +72,8 @@ return ..() -/obj/machinery/porta_turret_cover/attacked_by(obj/item/I, mob/user) - parent_turret.attacked_by(I, user) +/obj/machinery/porta_turret_cover/attacked_by(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) + return parent_turret.attacked_by(I, user, modifiers) /obj/machinery/porta_turret_cover/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers) parent_turret.attack_alien(user, modifiers) diff --git a/code/game/machinery/prisonlabor.dm b/code/game/machinery/prisonlabor.dm index e226adcbbc5e..24373326b0e6 100644 --- a/code/game/machinery/prisonlabor.dm +++ b/code/game/machinery/prisonlabor.dm @@ -26,7 +26,7 @@ QDEL_NULL(current_plate) . = ..() -/obj/machinery/plate_press/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/machinery/plate_press/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(!is_operational) to_chat(user, span_warning("[src] has to be on to do this!")) return FALSE diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index b42fcc45f764..cb80f4a27898 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -71,7 +71,7 @@ balloon_alert(user, "no quantum pad data found!") return NONE -/obj/machinery/quantumpad/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/quantumpad/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(default_deconstruction_screwdriver(user, "qpad-idle-open", "qpad-idle", weapon)) return @@ -242,5 +242,3 @@ failed.set_output(COMPONENT_SIGNAL) return attached_pad.doteleport(target_pad = attached_pad.linked_pad) - - diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 7a71e248b7e5..4b68c1a41408 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -77,7 +77,7 @@ update_appearance() return ..() -/obj/machinery/recharger/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/machinery/recharger/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(!is_type_in_typecache(attacking_item, allowed_devices)) return ..() diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index c5d6d083a000..51f19f3afa4b 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -106,7 +106,7 @@ if (!(. & EMP_PROTECT_SELF)) open_machine() -/obj/machinery/recharge_station/attackby(obj/item/P, mob/user, list/modifiers) +/obj/machinery/recharge_station/attackby(obj/item/P, mob/user, list/modifiers, list/attack_modifiers) if(state_open) if(default_deconstruction_screwdriver(user, "borgdecon2", "borgcharger0", P)) return diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 9ce3b5796d4c..f4b9402e6ad5 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -385,7 +385,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) to_chat(user, span_warning("You must open the maintenance panel first!")) return TRUE -/obj/machinery/requests_console/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/machinery/requests_console/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) var/obj/item/card/id/ID = attacking_item.GetID() if(ID) message_verified_by = "[ID.registered_name] ([ID.assignment])" diff --git a/code/game/machinery/roulette_machine.dm b/code/game/machinery/roulette_machine.dm index fa01c07e12bf..e84bcb622326 100644 --- a/code/game/machinery/roulette_machine.dm +++ b/code/game/machinery/roulette_machine.dm @@ -117,7 +117,7 @@ update_appearance() // Not applicable to all objects. ///Handles setting ownership and the betting itself. -/obj/machinery/roulette/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/roulette/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(machine_stat & MAINT && is_wire_tool(W)) wires.interact(user) return diff --git a/code/game/machinery/scanner_gate.dm b/code/game/machinery/scanner_gate.dm index 0b041152b284..8866d341f8fa 100644 --- a/code/game/machinery/scanner_gate.dm +++ b/code/game/machinery/scanner_gate.dm @@ -139,7 +139,7 @@ return set_scanline("passive") -/obj/machinery/scanner_gate/item_interaction(mob/living/user, obj/item/tool, list/modifiers) +/obj/machinery/scanner_gate/item_interaction(mob/living/user, obj/item/tool, list/modifiers, list/attack_modifiers) . = ..() if(. & ITEM_INTERACT_ANY_BLOCKER) return . @@ -155,7 +155,7 @@ return ITEM_INTERACT_SUCCESS return NONE -/obj/machinery/scanner_gate/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/machinery/scanner_gate/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) var/obj/item/card/id/card = attacking_item.GetID() if(card) if(locked) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index d2e941bb4141..307b602775cd 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -236,7 +236,7 @@ set_anchored(FALSE) -/obj/machinery/shieldgen/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/shieldgen/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/stack/cable_coil) && (machine_stat & BROKEN) && panel_open) var/obj/item/stack/cable_coil/coil = W if (coil.get_amount() < 1) @@ -460,7 +460,7 @@ return return default_deconstruction_crowbar(tool) -/obj/machinery/power/shieldwallgen/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/power/shieldwallgen/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(W.GetID()) if(allowed(user) && !(obj_flags & EMAGGED)) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 0f2948664ce9..b37c398b79ff 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -197,7 +197,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/space_heater/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/space_heater/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if(default_deconstruction_screwdriver(user, icon_state, icon_state, I)) @@ -398,7 +398,7 @@ . = TRUE ///Slightly modified to ignore the open_hatch - it's always open, we hacked it. -/obj/machinery/space_heater/improvised_chem_heater/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/space_heater/improvised_chem_heater/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if(default_deconstruction_crowbar(item)) return diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 62b92671d4ca..f67f29670adb 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -630,7 +630,7 @@ return TRUE -/obj/machinery/suit_storage_unit/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/suit_storage_unit/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) . = TRUE var/obj/item/card/id/id = null if(istype(weapon, /obj/item/stock_parts/card_reader) && can_install_card_reader(user)) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 3a64a23f36ac..4b3a40b3243d 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -193,7 +193,7 @@ return TRUE -/obj/machinery/syndicatebomb/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/syndicatebomb/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(is_wire_tool(I) && open_panel) wires.interact(user) @@ -511,7 +511,7 @@ playsound(loc, 'sound/effects/bamf.ogg', 75, TRUE, 5) -/obj/item/bombcore/chemical/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/bombcore/chemical/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(I.tool_behaviour == TOOL_CROWBAR && beakers.len > 0) I.play_tool_sound(src) for (var/obj/item/B in beakers) diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 85f8f53e8a4b..78a5297c9143 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -16,7 +16,7 @@ FREQ_CTF_BLUE, ) -/obj/machinery/telecomms/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/machinery/telecomms/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) var/icon_closed = initial(icon_state) var/icon_open = "[initial(icon_state)]_o" diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm index ab849dd69232..bd30c5ba0b57 100644 --- a/code/game/machinery/telecomms/machines/allinone.dm +++ b/code/game/machinery/telecomms/machines/allinone.dm @@ -45,6 +45,6 @@ sleep(signal.data["slow"]) // simulate the network lag if necessary signal.broadcast() -/obj/machinery/telecomms/allinone/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/machinery/telecomms/allinone/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(attacking_item.tool_behaviour == TOOL_MULTITOOL) return attack_hand(user) diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index 099445833939..681621f8bfa4 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -34,7 +34,7 @@ to_chat(user, span_warning("It seems that the blackbox is missing...")) return -/obj/machinery/blackbox_recorder/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/machinery/blackbox_recorder/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(attacking_item, /obj/item/blackbox)) if(HAS_TRAIT(attacking_item, TRAIT_NODROP) || !user.transferItemToLoc(attacking_item, src)) to_chat(user, span_warning("[attacking_item] is stuck to your hand!")) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index af4f4a685aab..4b972e57204b 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -52,7 +52,7 @@ if(is_ready()) teleport(AM) -/obj/machinery/teleport/hub/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/teleport/hub/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(default_deconstruction_screwdriver(user, "tele-o", "tele0", W)) if(power_station?.engaged) power_station.engaged = 0 //hub with panel open is off, so the station must be informed. @@ -179,7 +179,7 @@ balloon_alert(user, "data uploaded from buffer") return ITEM_INTERACT_SUCCESS -/obj/machinery/teleport/station/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/teleport/station/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(default_deconstruction_screwdriver(user, "controller-o", "controller", W)) update_appearance() return diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index 2306308c01a7..4d2562e65544 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -95,7 +95,7 @@ /obj/effect/decal/cleanable/proc/lazy_init_reagents() return -/obj/effect/decal/cleanable/attackby(obj/item/W, mob/user, list/modifiers) +/obj/effect/decal/cleanable/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if((istype(W, /obj/item/reagent_containers/cup) && !istype(W, /obj/item/reagent_containers/cup/rag)) || istype(W, /obj/item/reagent_containers/cup/glass)) if(src.reagents && W.reagents) lazy_init_reagents() diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index 4da8b79bd336..800b4b8c80fa 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -500,7 +500,7 @@ . = ..() ignite() -/obj/effect/decal/cleanable/fuel_pool/attackby(obj/item/item, mob/user, list/modifiers) +/obj/effect/decal/cleanable/fuel_pool/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(item.ignition_effect(src, user)) ignite() return ..() diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm index 715aa5e0f72f..b0546ac3081d 100644 --- a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm +++ b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm @@ -335,7 +335,7 @@ to_chat(user, span_warning("You hit [src] but bounce off it!")) playsound(src.loc, 'sound/weapons/tap.ogg', 100, TRUE) -/obj/structure/foamedmetal/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/foamedmetal/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) ///A speed modifier for how fast the wall is build var/platingmodifier = 1 if(HAS_TRAIT(user, TRAIT_QUICK_BUILD)) diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index e2f7b952f1e3..09c43742660e 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -10,8 +10,8 @@ blocks_emissive = EMISSIVE_BLOCK_GENERIC uses_integrity = FALSE -/obj/effect/attackby(obj/item/weapon, mob/user, list/modifiers) - if(SEND_SIGNAL(weapon, COMSIG_ITEM_ATTACK_EFFECT, src, user, modifiers) & COMPONENT_NO_AFTERATTACK) +/obj/effect/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) + if(SEND_SIGNAL(weapon, COMSIG_ITEM_ATTACK_EFFECT, src, user, modifiers, attack_modifiers) & COMPONENT_NO_AFTERATTACK) return TRUE // I'm not sure why these are snowflaked to early return but they are diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 7a6524b92855..6cf788254f4b 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -69,7 +69,7 @@ /obj/effect/portal/newtonian_move(direction, instant = FALSE, start_delay = 0) return TRUE -/obj/effect/portal/attackby(obj/item/W, mob/user, list/modifiers) +/obj/effect/portal/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(user && Adjacent(user)) teleport(user) return TRUE diff --git a/code/game/objects/effects/poster_demotivational.dm b/code/game/objects/effects/poster_demotivational.dm index 0a92d53ea1d1..40f618f9b02d 100644 --- a/code/game/objects/effects/poster_demotivational.dm +++ b/code/game/objects/effects/poster_demotivational.dm @@ -23,7 +23,7 @@ demoraliser = new(src, 7, TRUE, mood_category) return ..() -/obj/structure/sign/poster/traitor/attackby(obj/item/tool, mob/user, list/modifiers) +/obj/structure/sign/poster/traitor/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers) if (tool.tool_behaviour == TOOL_WIRECUTTER) QDEL_NULL(demoraliser) return ..() diff --git a/code/game/objects/effects/poster_motivational.dm b/code/game/objects/effects/poster_motivational.dm index feafff150ba6..9720fe2ef6dc 100644 --- a/code/game/objects/effects/poster_motivational.dm +++ b/code/game/objects/effects/poster_motivational.dm @@ -17,7 +17,7 @@ department_grab.quirk_poster_department = quirk_poster_department /// You can use any spraypaint can on a quirk poster to turn it into a contraband poster from the traitor objective -/obj/item/poster/quirk/attackby(obj/item/postertool, mob/user, list/modifiers) +/obj/item/poster/quirk/attackby(obj/item/postertool, mob/user, list/modifiers, list/attack_modifiers) if(!user.is_antag() || !HAS_TRAIT(user, TRAIT_POSTERBOY) || !istype(postertool, /obj/item/toy/crayon)) return ..() balloon_alert(user, "converting poster...") @@ -50,7 +50,7 @@ mood_buff = new(_host = src, range = 7, _ignore_if_not_on_turf = TRUE, department = quirk_poster_department) return ..() -/obj/structure/sign/poster/quirk/attackby(obj/item/I, mob/user, list/modifiers) +/obj/structure/sign/poster/quirk/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if (I.tool_behaviour == TOOL_WIRECUTTER) QDEL_NULL(mood_buff) return ..() diff --git a/code/game/objects/effects/posters/poster.dm b/code/game/objects/effects/posters/poster.dm index 4e1d0e39476f..f3c38c169752 100644 --- a/code/game/objects/effects/posters/poster.dm +++ b/code/game/objects/effects/posters/poster.dm @@ -55,7 +55,7 @@ name = "[name] - [poster_structure.original_name]" -/obj/item/poster/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/poster/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(!istype(I, /obj/item/shard)) return ..() @@ -175,7 +175,7 @@ desc = holi_data.poster_desc icon_state = holi_data.poster_icon -/obj/structure/sign/poster/attackby(obj/item/tool, mob/user, list/modifiers) +/obj/structure/sign/poster/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers) if(tool.tool_behaviour == TOOL_WIRECUTTER) tool.play_tool_sound(src, 100) if(ruined) diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 549c6253a7f5..927215910f9d 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -555,7 +555,7 @@ playsound(loc, 'sound/weapons/egloves.ogg', vol = 80, vary = TRUE) end() -/obj/effect/constructing_effect/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/effect/constructing_effect/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) attacked(user) /obj/effect/constructing_effect/attack_hand(mob/living/user, list/modifiers) diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index bbf6e6576a68..5a0057d4f778 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -79,7 +79,7 @@ pushed_over = FALSE tacticool = AddComponent(/datum/component/tactical) -/obj/item/cardboard_cutout/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/item/cardboard_cutout/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/toy/crayon)) change_appearance(I, user) return TRUE diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index 0aec740cac8a..31f0e2ade3a2 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -324,7 +324,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM user.visible_message(span_suicide("[user] is huffing [src] as quickly as [user.p_they()] can! It looks like [user.p_theyre()] trying to give [user.p_them()]self cancer.")) return (TOXLOSS|OXYLOSS) -/obj/item/cigarette/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/cigarette/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(lit) return ..() @@ -844,7 +844,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM STOP_PROCESSING(SSobj, src) QDEL_NULL(cig_smoke) -/obj/item/cigarette/pipe/attackby(obj/item/thing, mob/user, list/modifiers) +/obj/item/cigarette/pipe/attackby(obj/item/thing, mob/user, list/modifiers, list/attack_modifiers) if(!istype(thing, /obj/item/food/grown)) return ..() diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index 11281e2b20fa..28d6f0a97307 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -201,7 +201,7 @@ skinhead.set_hairstyle("Skinhead", update = TRUE) playsound(loc, shave_sound, 33, TRUE) -/obj/item/razor/attack(mob/target_mob, mob/living/user, list/modifiers) +/obj/item/razor/attack(mob/target_mob, mob/living/user, list/modifiers, list/attack_modifiers) if(!ishuman(target_mob)) return ..() var/mob/living/carbon/human/human_target = target_mob diff --git a/code/game/objects/items/courtroom.dm b/code/game/objects/items/courtroom.dm index 9a68d4934bc8..c49228d15119 100644 --- a/code/game/objects/items/courtroom.dm +++ b/code/game/objects/items/courtroom.dm @@ -33,7 +33,7 @@ w_class = WEIGHT_CLASS_TINY resistance_flags = FLAMMABLE -/obj/item/gavelblock/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/gavelblock/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/gavelhammer)) playsound(loc, 'sound/items/gavel.ogg', 100, TRUE) user.visible_message(span_warning("[user] strikes [src] with [I].")) diff --git a/code/game/objects/items/crab17.dm b/code/game/objects/items/crab17.dm index 89d2c147fe50..65e417a99be9 100644 --- a/code/game/objects/items/crab17.dm +++ b/code/game/objects/items/crab17.dm @@ -64,7 +64,7 @@ return FALSE return TRUE -/obj/structure/checkoutmachine/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/structure/checkoutmachine/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(!canwalk) balloon_alert(user, "not ready to accept transactions!") return diff --git a/code/game/objects/items/credit_holochip.dm b/code/game/objects/items/credit_holochip.dm index c1fe7ef09f60..b9e2790cda9a 100644 --- a/code/game/objects/items/credit_holochip.dm +++ b/code/game/objects/items/credit_holochip.dm @@ -91,7 +91,7 @@ else return 0 -/obj/item/holochip/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/holochip/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) ..() if(istype(I, /obj/item/holochip)) var/obj/item/holochip/H = I diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 06a90788569e..73876e871bea 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -434,7 +434,7 @@ forceMove(defib) defib.update_power() -/obj/item/shockpaddles/attack(mob/M, mob/living/user, list/modifiers) +/obj/item/shockpaddles/attack(mob/M, mob/living/user, list/modifiers, list/attack_modifiers) if(busy) return defib?.update_power() diff --git a/code/game/objects/items/devices/aicard_evil.dm b/code/game/objects/items/devices/aicard_evil.dm index 9ccf95e70476..9a523460d223 100644 --- a/code/game/objects/items/devices/aicard_evil.dm +++ b/code/game/objects/items/devices/aicard_evil.dm @@ -88,7 +88,7 @@ max_capacity = 1000 w_class = WEIGHT_CLASS_NORMAL -/obj/item/computer_disk/syndie_ai_upgrade/pre_attack(atom/target, mob/living/user, list/modifiers) +/obj/item/computer_disk/syndie_ai_upgrade/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) var/mob/living/silicon/ai/AI if(isAI(target)) AI = target diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index a203cad87dcc..3d86e32797f2 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -82,7 +82,7 @@ crystal_lens = null return ITEM_INTERACT_SUCCESS -/obj/item/laser_pointer/attackby(obj/item/attack_item, mob/user, list/modifiers) +/obj/item/laser_pointer/attackby(obj/item/attack_item, mob/user, list/modifiers, list/attack_modifiers) if(istype(attack_item, /obj/item/stock_parts/micro_laser)) if(diode) balloon_alert(user, "already has a diode!") diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index b24086f6733a..e9e6838db087 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -82,7 +82,7 @@ //replace lights & stuff return do_action(interacting_with, user) ? ITEM_INTERACT_SUCCESS : NONE -/obj/item/lightreplacer/attackby(obj/item/insert, mob/user, list/modifiers) +/obj/item/lightreplacer/attackby(obj/item/insert, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(uses >= max_uses) user.balloon_alert(user, "already full!") diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index c0154ee0b070..974e65bfb58d 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -38,7 +38,7 @@ return return ..() -/obj/item/electropack/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/electropack/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/clothing/head/helmet)) var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit(user) A.icon = 'icons/obj/devices/assemblies.dmi' diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 120402da3bed..c883f86c60d2 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -418,7 +418,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( tool.play_tool_sound(src, 10) return TRUE -/obj/item/radio/headset/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/radio/headset/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/encryptionkey)) if(keyslot && keyslot2) to_chat(user, span_warning("The headset can't hold another key!")) diff --git a/code/game/objects/items/devices/swapper.dm b/code/game/objects/items/devices/swapper.dm index 72e957ec5721..07a41c43bd4b 100644 --- a/code/game/objects/items/devices/swapper.dm +++ b/code/game/objects/items/devices/swapper.dm @@ -29,7 +29,7 @@ icon_state = "swapper[linked_swapper ? "-linked" : null]" return ..() -/obj/item/swapper/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/swapper/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/swapper)) var/obj/item/swapper/other_swapper = I if(other_swapper.linked_swapper) diff --git a/code/game/objects/items/devices/table_clock.dm b/code/game/objects/items/devices/table_clock.dm index bf7625899346..02facf1bf77d 100644 --- a/code/game/objects/items/devices/table_clock.dm +++ b/code/game/objects/items/devices/table_clock.dm @@ -33,7 +33,7 @@ . += span_info("The current CST (local) time is: [station_time_timestamp()].") . += span_info("The current TCT (galactic) time is: [time2text(world.realtime, "hh:mm:ss")].") -/obj/item/table_clock/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/table_clock/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(attacking_item.force < 5 || broken) return diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 4952a54cffe9..889162546239 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -85,7 +85,7 @@ else soundloop.start() -/obj/item/taperecorder/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/taperecorder/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(!mytape && istype(I, /obj/item/tape)) if(!user.transferItemToLoc(I,src)) return diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 327fe285f1eb..f8dbbfd3bf6f 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -380,7 +380,7 @@ effective or pretty fucking useless. return TRUE -/obj/machinery/porta_turret/syndicate/toolbox/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/machinery/porta_turret/syndicate/toolbox/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(!istype(attacking_item, /obj/item/wrench/combat)) return ..() diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm index efea199af6ea..c57a18d29ff4 100644 --- a/code/game/objects/items/dualsaber.dm +++ b/code/game/objects/items/dualsaber.dm @@ -208,7 +208,7 @@ /obj/item/dualsaber/purple possible_colors = list("purple") -/obj/item/dualsaber/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/dualsaber/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(W.tool_behaviour == TOOL_MULTITOOL) if(!hacked) hacked = TRUE diff --git a/code/game/objects/items/dyespray.dm b/code/game/objects/items/dyespray.dm index 4eeb916c14c1..5e054d7a7f0c 100644 --- a/code/game/objects/items/dyespray.dm +++ b/code/game/objects/items/dyespray.dm @@ -8,7 +8,7 @@ /obj/item/dyespray/attack_self(mob/user) dye(user, user) -/obj/item/dyespray/pre_attack(atom/target, mob/living/user, list/modifiers) +/obj/item/dyespray/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) dye(target, user) return ..() diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index ad681e0467df..22104cf1b060 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -169,7 +169,7 @@ else return ..() -/obj/item/extinguisher/attack_atom(obj/O, mob/living/user, list/modifiers) +/obj/item/extinguisher/attack_atom(obj/O, mob/living/user, list/modifiers, list/attack_modifiers) if(AttemptRefill(O, user)) refilling = TRUE return FALSE @@ -300,7 +300,7 @@ user.visible_message(span_notice("[user] empties out \the [src] onto the floor using the release valve."), span_info("You quietly empty out \the [src] using its release valve.")) //firebot assembly -/obj/item/extinguisher/attackby(obj/O, mob/user, list/modifiers) +/obj/item/extinguisher/attackby(obj/O, mob/user, list/modifiers, list/attack_modifiers) if(istype(O, /obj/item/bodypart/arm/left/robot) || istype(O, /obj/item/bodypart/arm/right/robot)) to_chat(user, span_notice("You add [O] to [src].")) qdel(O) diff --git a/code/game/objects/items/fireaxe.dm b/code/game/objects/items/fireaxe.dm index 83b1118483c2..adecb19d4593 100644 --- a/code/game/objects/items/fireaxe.dm +++ b/code/game/objects/items/fireaxe.dm @@ -57,7 +57,7 @@ user.visible_message(span_suicide("[user] axes [user.p_them()]self from head to toe! It looks like [user.p_theyre()] trying to commit suicide!")) return BRUTELOSS -/obj/item/fireaxe/afterattack(atom/target, mob/user, list/modifiers) +/obj/item/fireaxe/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) if(!HAS_TRAIT(src, TRAIT_WIELDED)) //destroys windows and grilles in one hit return if(target.resistance_flags & INDESTRUCTIBLE) diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index b786cc6b3f19..bf9ae18a611a 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -117,7 +117,7 @@ update_appearance() return TRUE -/obj/item/flamethrower/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/flamethrower/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(isigniter(W)) var/obj/item/assembly/igniter/I = W if(I.secured) diff --git a/code/game/objects/items/food/egg.dm b/code/game/objects/items/food/egg.dm index 18206832b5ba..3a306852ba34 100644 --- a/code/game/objects/items/food/egg.dm +++ b/code/game/objects/items/food/egg.dm @@ -88,7 +88,7 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) new /mob/living/basic/chick(spawn_turf) GLOB.chicks_from_eggs++ -/obj/item/food/egg/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/food/egg/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/toy/crayon)) var/obj/item/toy/crayon/crayon = item var/clr = crayon.crayon_color @@ -278,7 +278,7 @@ GLOBAL_VAR_INIT(chicks_from_eggs, 0) venue_value = FOOD_PRICE_CHEAP crafting_complexity = FOOD_COMPLEXITY_2 -/obj/item/food/omelette/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/food/omelette/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/kitchen/fork)) var/obj/item/kitchen/fork/fork = item if(fork.forkload) diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm index 8f68fa028587..fe4f9fb64165 100644 --- a/code/game/objects/items/food/misc.dm +++ b/code/game/objects/items/food/misc.dm @@ -296,7 +296,7 @@ . = ..() . += span_notice("If you had a rod you could make butter on a stick.") -/obj/item/food/butter/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/food/butter/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/stack/rods)) var/obj/item/stack/rods/rods = item if(!rods.use(1))//borgs can still fail this if they have no metal diff --git a/code/game/objects/items/food/pancakes.dm b/code/game/objects/items/food/pancakes.dm index 3e89427478eb..daba9af5bf79 100644 --- a/code/game/objects/items/food/pancakes.dm +++ b/code/game/objects/items/food/pancakes.dm @@ -30,7 +30,7 @@ positive_result = TRUE,\ use_large_steam_sprite = TRUE) -/obj/item/food/pancakes/raw/attackby(obj/item/garnish, mob/living/user, list/modifiers) +/obj/item/food/pancakes/raw/attackby(obj/item/garnish, mob/living/user, list/modifiers, list/attack_modifiers) var/newresult if(istype(garnish, /obj/item/food/grown/berries)) newresult = /obj/item/food/pancakes/blueberry @@ -117,7 +117,7 @@ ingredients_listed += "[ING.name], " . += "It contains [contents.len?"[ingredients_listed]":"no ingredient, "]on top of a [initial(name)]." -/obj/item/food/pancakes/attackby(obj/item/item, mob/living/user, list/modifiers) +/obj/item/food/pancakes/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/food/pancakes)) var/obj/item/food/pancakes/pancake = item if((contents.len >= PANCAKE_MAX_STACK) || ((pancake.contents.len + contents.len) > PANCAKE_MAX_STACK)) diff --git a/code/game/objects/items/grenades/festive.dm b/code/game/objects/items/grenades/festive.dm index afb1eccb7024..5166c8229409 100644 --- a/code/game/objects/items/grenades/festive.dm +++ b/code/game/objects/items/grenades/festive.dm @@ -14,7 +14,7 @@ /obj/item/sparkler/fire_act(exposed_temperature, exposed_volume) light() -/obj/item/sparkler/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/sparkler/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) var/ignition_msg = item.ignition_effect(src, user) if(ignition_msg) light(user, ignition_msg) @@ -75,7 +75,7 @@ /obj/item/grenade/firecracker/attack_self(mob/user) // You need to light it manually. return -/obj/item/grenade/firecracker/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/grenade/firecracker/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) var/ignition_msg = item.ignition_effect(src, user) if(ignition_msg && !active) visible_message(ignition_msg) @@ -117,5 +117,3 @@ update_mob() explosion(src, devastation_range = -1, heavy_impact_range = -1, light_impact_range = 2) qdel(src) - - diff --git a/code/game/objects/items/grenades/ghettobomb.dm b/code/game/objects/items/grenades/ghettobomb.dm index 26f8ecdfab8e..b10c6e6e9760 100644 --- a/code/game/objects/items/grenades/ghettobomb.dm +++ b/code/game/objects/items/grenades/ghettobomb.dm @@ -217,7 +217,7 @@ else . += span_notice("The wires are just dangling from it, you need some sort of activating assembly.") -/obj/item/sliced_pipe/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/sliced_pipe/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(!wires_are_in) // here we can stuff in additional objects for a cooler effect if(is_type_in_typecache(item, allowed) && contents.len < MAX_STUFFINGS) diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index 5852be33c810..c9dd469e19c1 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -53,7 +53,7 @@ to_chat(user, span_notice("The wire panel can be accessed without a screwdriver.")) return TRUE -/obj/item/grenade/c4/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/grenade/c4/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(is_wire_tool(item)) wires.interact(user) else diff --git a/code/game/objects/items/hand_items.dm b/code/game/objects/items/hand_items.dm index fb98f9e1a343..f11c33dfd0f9 100644 --- a/code/game/objects/items/hand_items.dm +++ b/code/game/objects/items/hand_items.dm @@ -282,14 +282,14 @@ playsound(slapped, 'sound/weapons/slap.ogg', slap_volume, TRUE, -1) return -/obj/item/hand_item/slapper/pre_attack_secondary(atom/target, mob/living/user, list/modifiers) +/obj/item/hand_item/slapper/pre_attack_secondary(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) if(!loc.Adjacent(target) || !istype(target, /obj/structure/table)) return ..() slam_table(target, user) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/item/hand_item/slapper/pre_attack(atom/target, mob/living/user, list/modifiers) +/obj/item/hand_item/slapper/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) if(!loc.Adjacent(target) || !istype(target, /obj/structure/table)) return ..() @@ -338,7 +338,7 @@ desc = "Sometimes, you just want to act gentlemanly." inhand_icon_state = "nothing" -/obj/item/hand_item/hand/pre_attack(mob/living/carbon/help_target, mob/living/carbon/helper, list/modifiers) +/obj/item/hand_item/hand/pre_attack(mob/living/carbon/help_target, mob/living/carbon/helper, list/modifiers, list/attack_modifiers) if(!loc.Adjacent(help_target) || !istype(helper) || !istype(help_target)) return ..() @@ -347,7 +347,7 @@ return TRUE -/obj/item/hand_item/hand/pre_attack_secondary(mob/living/carbon/help_target, mob/living/carbon/helper, list/modifiers) +/obj/item/hand_item/hand/pre_attack_secondary(mob/living/carbon/help_target, mob/living/carbon/helper, list/modifiers, list/attack_modifiers) if(!loc.Adjacent(help_target) || !istype(helper) || !istype(help_target)) return ..() @@ -358,7 +358,7 @@ return SECONDARY_ATTACK_CALL_NORMAL -/obj/item/hand_item/hand/attack(mob/living/carbon/target_mob, mob/living/carbon/user, list/modifiers) +/obj/item/hand_item/hand/attack(mob/living/carbon/target_mob, mob/living/carbon/user, list/modifiers, list/attack_modifiers) if(!loc.Adjacent(target_mob) || !istype(user) || !istype(target_mob)) return TRUE @@ -445,7 +445,7 @@ attack_verb_continuous = list("steals") attack_verb_simple = list("steal") -/obj/item/hand_item/stealer/attack(mob/living/target_mob, mob/living/user, list/modifiers) +/obj/item/hand_item/stealer/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if (!ishuman(target_mob)) return diff --git a/code/game/objects/items/hot_potato.dm b/code/game/objects/items/hot_potato.dm index 563d70e1f153..4141c74fd67c 100644 --- a/code/game/objects/items/hot_potato.dm +++ b/code/game/objects/items/hot_potato.dm @@ -95,7 +95,7 @@ if(active) to_chat(user, span_userdanger("You have a really bad feeling about [src]!")) -/obj/item/hot_potato/attack(mob/living/target_mob, mob/living/user, list/modifiers) +/obj/item/hot_potato/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return . diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm index e081248f8ada..87fca49be899 100644 --- a/code/game/objects/items/implants/implantcase.dm +++ b/code/game/objects/items/implants/implantcase.dm @@ -35,7 +35,7 @@ icon_state = "implantcase-[imp ? imp.implant_color : 0]" return ..() -/obj/item/implantcase/attackby(obj/item/used_item, mob/living/user, list/modifiers) +/obj/item/implantcase/attackby(obj/item/used_item, mob/living/user, list/modifiers, list/attack_modifiers) if(IS_WRITING_UTENSIL(used_item)) if(!user.can_write(used_item)) return diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm index 26e13ae9a65a..d15fed1e64a3 100644 --- a/code/game/objects/items/implants/implanter.dm +++ b/code/game/objects/items/implants/implanter.dm @@ -50,7 +50,7 @@ else to_chat(user, span_warning("[src] fails to implant [target].")) -/obj/item/implanter/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/item/implanter/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(IS_WRITING_UTENSIL(I)) return ..() if(!user.can_write(I)) diff --git a/code/game/objects/items/implants/implantpad.dm b/code/game/objects/items/implants/implantpad.dm index d3a6affea154..94f4a68f9985 100644 --- a/code/game/objects/items/implants/implantpad.dm +++ b/code/game/objects/items/implants/implantpad.dm @@ -37,7 +37,7 @@ inserted_case = null update_appearance(UPDATE_ICON) -/obj/item/implantpad/attackby(obj/item/implantcase/attacking_item, mob/user, list/modifiers) +/obj/item/implantpad/attackby(obj/item/implantcase/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(inserted_case || !istype(attacking_item)) return ..() if(!user.transferItemToLoc(attacking_item, src)) diff --git a/code/game/objects/items/implants/security/implant_chem.dm b/code/game/objects/items/implants/security/implant_chem.dm index e20da8ab7b95..178dfcae2a60 100644 --- a/code/game/objects/items/implants/security/implant_chem.dm +++ b/code/game/objects/items/implants/security/implant_chem.dm @@ -95,7 +95,7 @@ desc = "A glass case containing a remote chemical implant." imp_type = /obj/item/implant/chem -/obj/item/implantcase/chem/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/implantcase/chem/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/reagent_containers/syringe) && imp) W.interact_with_atom(imp, user, modifiers) return TRUE diff --git a/code/game/objects/items/inspector.dm b/code/game/objects/items/inspector.dm index a4874eae9899..8613caecedf4 100644 --- a/code/game/objects/items/inspector.dm +++ b/code/game/objects/items/inspector.dm @@ -65,7 +65,7 @@ balloon_alert(user, "[cell_cover_open ? "opened" : "closed"] cell cover") return TRUE -/obj/item/inspector/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/inspector/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(cell_cover_open && istype(I, /obj/item/stock_parts/power_store/cell)) if(cell) to_chat(user, span_warning("[src] already has a cell installed.")) @@ -223,7 +223,7 @@ cycle_print_time(user) return TRUE -/obj/item/inspector/clown/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/inspector/clown/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(cell_cover_open && istype(I, /obj/item/kitchen/fork)) cycle_sound(user) return @@ -302,7 +302,7 @@ check_settings_legality() return TRUE -/obj/item/inspector/clown/bananium/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/inspector/clown/bananium/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(cell_cover_open) check_settings_legality() diff --git a/code/game/objects/items/kirby_plants/kirbyplants.dm b/code/game/objects/items/kirby_plants/kirbyplants.dm index 100691d44b64..3263e126e71c 100644 --- a/code/game/objects/items/kirby_plants/kirbyplants.dm +++ b/code/game/objects/items/kirby_plants/kirbyplants.dm @@ -50,7 +50,7 @@ . = ..() icon_state = dead ? "plant-25" : base_icon_state -/obj/item/kirbyplants/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/item/kirbyplants/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(!dead && trimmable && HAS_TRAIT(user,TRAIT_BONSAI) && isturf(loc) && I.get_sharpness()) to_chat(user,span_notice("You start trimming [src].")) diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index 7481c51c0a71..2d2aa2518f42 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -252,7 +252,7 @@ filled_overlay.color = mix_color_from_reagents(reagents.reagent_list) . += filled_overlay -/obj/item/kitchen/spoon/attack(mob/living/target_mob, mob/living/user, list/modifiers) +/obj/item/kitchen/spoon/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers) if(!target_mob.reagents || reagents.total_volume <= 0) return ..() @@ -279,7 +279,7 @@ reagents.trans_to(target_mob, spoon_sip_size, methods = INGEST) return TRUE -/obj/item/kitchen/spoon/pre_attack(atom/attacked_atom, mob/living/user, list/modifiers) +/obj/item/kitchen/spoon/pre_attack(atom/attacked_atom, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return @@ -299,7 +299,7 @@ attacked_atom.balloon_alert(user, "it's full!") return TRUE -/obj/item/kitchen/spoon/pre_attack_secondary(atom/attacked_atom, mob/living/user, list/modifiers) +/obj/item/kitchen/spoon/pre_attack_secondary(atom/attacked_atom, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return diff --git a/code/game/objects/items/knives.dm b/code/game/objects/items/knives.dm index 62f48e2d3124..cba27bca02fb 100644 --- a/code/game/objects/items/knives.dm +++ b/code/game/objects/items/knives.dm @@ -89,7 +89,7 @@ /// Bleed stacks applied when an organic mob target is hit var/bleed_stacks_per_hit = 3 -/obj/item/knife/bloodletter/afterattack(atom/target, mob/user, list/modifiers) +/obj/item/knife/bloodletter/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) if(!isliving(target)) return var/mob/living/M = target diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index 7dd3493e6b30..e08080504dd8 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -101,7 +101,7 @@ return ..() -/obj/item/latexballoon/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/latexballoon/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/tank)) var/obj/item/tank/air_tank = item blow(air_tank, user) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index b853104d7211..595f2bee3f87 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -98,7 +98,7 @@ postmark_image.appearance_flags |= RESET_COLOR|KEEP_APART|KEEP_APART . += postmark_image -/obj/item/mail/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/mail/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) // Destination tagging if(istype(W, /obj/item/dest_tagger)) var/obj/item/dest_tagger/destination_tag = W diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm index ac7027f43f50..6dbbc508a057 100644 --- a/code/game/objects/items/melee/baton.dm +++ b/code/game/objects/items/melee/baton.dm @@ -42,12 +42,15 @@ var/on_stun_sound = 'sound/effects/woodhit.ogg' /// The volume of the above. var/on_stun_volume = 75 - /// Do we animate the "hit" when stunning something? - var/stun_animation = TRUE /// Whether the stun attack is logged. Only relevant for abductor batons, which have different modes. var/log_stun_attack = TRUE /// Boolean on whether people with chunky fingers can use this baton. var/chunky_finger_usable = FALSE + /// Boolean, if TRUE when we harmbaton someone we will also try to stun if the baton is active / not on cooldown. + var/stun_on_harmbaton = FALSE + + /// Text shown when trying to stun someone while the baton is on cooldown. + var/wait_desc = "" /// What term do we use to describe our baton being 'ready', or the phrase to use when var/active is TRUE. var/activated_word = "ready" @@ -93,37 +96,83 @@ else . = "that is [stun_strength] effective at disabling targets[affect_cyborg ? ", including cyborgs" : ""]" -/** - * Ok, think of baton attacks like a melee attack chain: - * - * [/baton_attack()] comes first. It checks if the user is clumsy, if the target parried the attack and handles some messages and sounds. - * * Depending on its return value, it'll either do a normal attack, continue to the next step or stop the attack. - * - * [/finalize_baton_attack()] is then called. It handles logging stuff, sound effects and calls baton_effect(). - * * The proc is also called in other situations such as stunbatons right clicking or throw impact. Basically when baton_attack() - * * checks are either redundant or unnecessary. - * - * [/baton_effect()] is third in the line. It knockdowns targets, along other effects called in additional_effects_cyborg() and - * * additional_effects_non_cyborg(). - * - * Last but not least [/set_batoned()], which gives the target the IWASBATONED trait with REF(user) as source and then removes it - * * after a cooldown has passed. Basically, it stops users from cheesing the cooldowns by dual wielding batons. - * - * TL;DR: [/baton_attack()] -> [/finalize_baton_attack()] -> [/baton_effect()] -> [/set_batoned()] - */ -/obj/item/melee/baton/attack(mob/living/target, mob/living/user, list/modifiers) - add_fingerprint(user) - switch(baton_attack(target, user, modifiers)) - if(BATON_DO_NORMAL_ATTACK) - return ..() - if(BATON_ATTACKING) - finalize_baton_attack(target, user, modifiers) +/// Checks if we can actually USE the baton. Impure +/obj/item/melee/baton/proc/can_baton(mob/living/target, mob/living/user) + PROTECTED_PROC(TRUE) + if(clumsy_check(user, target)) + return FALSE + + if(!chunky_finger_usable && ishuman(user)) + var/mob/living/carbon/human/human_user = user + if(human_user.check_chunky_fingers() && user.is_holding(src) && !HAS_MIND_TRAIT(user, TRAIT_CHUNKYFINGERS_IGNORE_BATON)) + balloon_alert(human_user, "fingers are too big!") + return FALSE + + return TRUE + +// Stun attack +/obj/item/melee/baton/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) + . = ..() + if(. || !isliving(target)) + return . + + if(!can_baton(target, user)) + return TRUE + + if(!COOLDOWN_FINISHED(src, cooldown_check)) + if(wait_desc) + balloon_alert(user, wait_desc) + return TRUE + + if(HAS_TRAIT_FROM(target, TRAIT_IWASBATONED, REF(user))) //no doublebaton abuse anon! + target.balloon_alert(user, "can't stun yet!") + return TRUE + + if(active) + // when we continue to attack, deal 0 (brute) damage (just stun) + SET_ATTACK_FORCE(attack_modifiers, 0) + MUTE_ATTACK_HITSOUND(attack_modifiers) + HIDE_ATTACK_MESSAGES(attack_modifiers) + return . + +// Harm attack +/obj/item/melee/baton/pre_attack_secondary(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) + . = ..() + if(. != SECONDARY_ATTACK_CALL_NORMAL || !isliving(target)) + return . + + if(!can_baton(target, user)) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + // call attack, NOT pre_attack + // (so we go directly to harming) + return SECONDARY_ATTACK_CONTINUE_CHAIN + +// This is where stun gets applied +/obj/item/melee/baton/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) + if(!active || !COOLDOWN_FINISHED(src, cooldown_check) || HAS_TRAIT_FROM(target, TRAIT_IWASBATONED, REF(user))) + return + // worst check in the chain but - right click = harmbaton + if(LAZYACCESS(modifiers, RIGHT_CLICK) && !stun_on_harmbaton) + return + + finalize_baton_attack(target, user, modifiers) + + var/list/desc + if(iscyborg(target)) + desc = get_cyborg_stun_description(target, user) + if(!affect_cyborg) + playsound(src, 'sound/effects/bang.ogg', 10, TRUE) //bonk + else + desc = get_stun_description(target, user) + + if(desc) + target.visible_message(desc["visible"], desc["local"], visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE) /obj/item/melee/baton/apply_fantasy_bonuses(bonus) . = ..() stamina_damage = modify_fantasy_variable("stamina_damage", stamina_damage, bonus * 4) - /obj/item/melee/baton/remove_fantasy_bonuses(bonus) stamina_damage = reset_fantasy_variable("stamina_damage", stamina_damage) return ..() @@ -152,75 +201,19 @@ return CONTEXTUAL_SCREENTIP_SET -/obj/item/melee/baton/proc/baton_attack(mob/living/target, mob/living/user, modifiers) - . = BATON_ATTACKING - - if(clumsy_check(user, target)) - return BATON_ATTACK_DONE - - if(!chunky_finger_usable && ishuman(user)) - var/mob/living/carbon/human/potential_chunky_finger_human = user - if(potential_chunky_finger_human.check_chunky_fingers() && user.is_holding(src) && !HAS_MIND_TRAIT(user, TRAIT_CHUNKYFINGERS_IGNORE_BATON)) - balloon_alert(potential_chunky_finger_human, "fingers are too big!") - return BATON_ATTACK_DONE - - if(!active || LAZYACCESS(modifiers, RIGHT_CLICK)) - return BATON_DO_NORMAL_ATTACK - - if(cooldown_check > world.time) - var/wait_desc = get_wait_description() - if (wait_desc) - to_chat(user, wait_desc) - return BATON_ATTACK_DONE - - if(check_parried(target, user)) - return BATON_ATTACK_DONE - - if(HAS_TRAIT_FROM(target, TRAIT_IWASBATONED, REF(user))) //no doublebaton abuse anon! - to_chat(user, span_danger("You fumble and miss [target]!")) - return BATON_ATTACK_DONE - - if(stun_animation) - user.do_attack_animation(target) - - var/list/desc - - if(iscyborg(target)) - if(affect_cyborg) - desc = get_cyborg_stun_description(target, user) - else - desc = get_unga_dunga_cyborg_stun_description(target, user) - playsound(get_turf(src), 'sound/effects/bang.ogg', 10, TRUE) //bonk - . = BATON_ATTACK_DONE - else - desc = get_stun_description(target, user) - - if(desc) - target.visible_message(desc["visible"], desc["local"]) - -/obj/item/melee/baton/proc/check_parried(mob/living/carbon/human/human_target, mob/living/user) - if (human_target.check_block(src, 0, "[user]'s [name]", MELEE_ATTACK)) - playsound(human_target, 'sound/weapons/genhit.ogg', 50, TRUE) - return TRUE - return FALSE - -/obj/item/melee/baton/proc/finalize_baton_attack(mob/living/target, mob/living/user, modifiers, in_attack_chain = TRUE) - if(!in_attack_chain && HAS_TRAIT_FROM(target, TRAIT_IWASBATONED, REF(user))) - return BATON_ATTACK_DONE - - cooldown_check = world.time + cooldown +/// Wrapper for calling "stun()" and doing relevant vfx/sfx +/obj/item/melee/baton/proc/finalize_baton_attack(mob/living/target, mob/living/user, list/modifiers) + PROTECTED_PROC(TRUE) + COOLDOWN_START(src, cooldown_check, cooldown) if(on_stun_sound) - playsound(get_turf(src), on_stun_sound, on_stun_volume, TRUE, -1) - if(user) - target.lastattacker = user.real_name - target.lastattackerckey = user.ckey - target.LAssailant = WEAKREF(user) - if(log_stun_attack) - log_combat(user, target, "stun attacked", src) + playsound(src, on_stun_sound, on_stun_volume, TRUE, -1) if(baton_effect(target, user, modifiers) && user) set_batoned(target, user, cooldown) + log_combat(user, target, "stunned", src.name) -/obj/item/melee/baton/proc/baton_effect(mob/living/target, mob/living/user, modifiers, stun_override) +/// The actual "stun()" of the stun baton +/obj/item/melee/baton/proc/baton_effect(mob/living/target, mob/living/user, list/modifiers, stun_override) + PROTECTED_PROC(TRUE) var/trait_check = HAS_TRAIT(target, TRAIT_BATON_RESISTANCE) if(iscyborg(target)) if(!affect_cyborg) @@ -244,46 +237,37 @@ SEND_SIGNAL(target, COMSIG_MOB_BATONED, user, src) return TRUE -/// Description for trying to stun when still on cooldown. -/obj/item/melee/baton/proc/get_wait_description() - return - /// Default message for stunning a living, non-cyborg mob. /obj/item/melee/baton/proc/get_stun_description(mob/living/target, mob/living/user) + PROTECTED_PROC(TRUE) . = list() - .["visible"] = span_danger("[user] knocks [target] down with [src]!") .["local"] = span_userdanger("[user] knocks you down with [src]!") - return . - /// Default message for stunning a cyborg. /obj/item/melee/baton/proc/get_cyborg_stun_description(mob/living/target, mob/living/user) + PROTECTED_PROC(TRUE) . = list() - - .["visible"] = span_danger("[user] pulses [target]'s sensors with the baton!") - .["local"] = span_danger("You pulse [target]'s sensors with the baton!") - - return . - -/// Default message for trying to stun a cyborg with a baton that can't stun cyborgs. -/obj/item/melee/baton/proc/get_unga_dunga_cyborg_stun_description(mob/living/target, mob/living/user) - . = list() - - .["visible"] = span_danger("[user] tries to knock down [target] with [src], and predictably fails!") //look at this duuuuuude - .["local"] = span_userdanger("[user] tries to... knock you down with [src]?") //look at the top of his head! - - return . + if(affect_cyborg) + .["visible"] = span_danger("[user] pulses [target]'s sensors with the baton!") + .["local"] = span_danger("You pulse [target]'s sensors with the baton!") + else + .["visible"] = span_danger("[user] tries to knock down [target] with [src], and predictably fails!") //look at this duuuuuude + .["local"] = span_userdanger("[user] tries to... knock you down with [src]?") //look at the top of his head! /// Contains any special effects that we apply to living, non-cyborg mobs we stun. Does not include applying a knockdown, dealing stamina damage, etc. /obj/item/melee/baton/proc/additional_effects_non_cyborg(mob/living/target, mob/living/user) + PROTECTED_PROC(TRUE) return /// Contains any special effects that we apply to cyborgs we stun. Does not include flashing the cyborg's screen, hardstunning them, etc. /obj/item/melee/baton/proc/additional_effects_cyborg(mob/living/target, mob/living/user) + PROTECTED_PROC(TRUE) return +/// Used in marking a target as being hit by a baton /obj/item/melee/baton/proc/set_batoned(mob/living/target, mob/living/user, cooldown) + PRIVATE_PROC(TRUE) if(!cooldown) return var/user_ref = REF(user) // avoids harddels. @@ -293,7 +277,7 @@ /obj/item/melee/baton/proc/clumsy_check(mob/living/user, mob/living/intented_target) if(!active || !HAS_TRAIT(user, TRAIT_CLUMSY) || prob(50)) return FALSE - user.visible_message(span_danger("[user] accidentally hits [user.p_them()]self over the head with [src]! What a doofus!"), span_userdanger("You accidentally hit yourself over the head with [src]!")) + user.visible_message(span_danger("[user] accidentally hits [user.p_them()]self over the head with [src]! What a doofus!"), span_userdanger("You accidentally hit yourself over the head with [src]!"), visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE) if(iscyborg(user)) if(affect_cyborg) @@ -301,9 +285,9 @@ user.Paralyze(clumsy_knockdown_time) additional_effects_cyborg(user, user) // user is the target here if(on_stun_sound) - playsound(get_turf(src), on_stun_sound, on_stun_volume, TRUE, -1) + playsound(src, on_stun_sound, on_stun_volume, TRUE, -1) else - playsound(get_turf(src), 'sound/effects/bang.ogg', 10, TRUE) + playsound(src, 'sound/effects/bang.ogg', 10, TRUE) else //straight up always force say for clumsy humans if(ishuman(user)) @@ -313,14 +297,11 @@ user.apply_damage(stamina_damage, PAIN, spread_damage = TRUE) additional_effects_non_cyborg(user, user) // user is the target here if(on_stun_sound) - playsound(get_turf(src), on_stun_sound, on_stun_volume, TRUE, -1) - - user.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD, attacking_item = src) + playsound(src, on_stun_sound, on_stun_volume, TRUE, -1) + user.apply_damage(2 * force, BRUTE, BODY_ZONE_HEAD, attacking_item = src) log_combat(user, user, "accidentally stun attacked [user.p_them()]self due to their clumsiness", src) - if(stun_animation) - user.do_attack_animation(user) - return + user.do_attack_animation(user) /obj/item/conversion_kit name = "conversion kit" @@ -444,15 +425,13 @@ stun_armour_penetration = 40 clumsy_knockdown_time = 24 SECONDS affect_cyborg = TRUE + wait_desc = "still charging!" on_stun_sound = 'sound/effects/contractorbatonhit.ogg' on_inhand_icon_state = "contractor_baton_on" on_sound = 'sound/weapons/contractorbatonextend.ogg' active_force = 16 -/obj/item/melee/baton/telescopic/contractor_baton/get_wait_description() - return span_danger("The baton is still charging!") - /obj/item/melee/baton/telescopic/contractor_baton/additional_effects_non_cyborg(mob/living/target, mob/living/user) target.set_jitter_if_lower(40 SECONDS) target.set_stutter_if_lower(40 SECONDS) @@ -481,6 +460,8 @@ on_stun_sound = 'sound/weapons/egloves.ogg' on_stun_volume = 50 active = FALSE + stun_on_harmbaton = TRUE + wait_desc = "still charging!" activated_word = "activated" context_living_rmb_active = "Harmful Stun" light_range = 1.5 @@ -524,7 +505,7 @@ /obj/item/melee/baton/security/suicide_act(mob/living/user) if(cell?.charge && active) user.visible_message(span_suicide("[user] is putting the live [name] in [user.p_their()] mouth! It looks like [user.p_theyre()] trying to commit suicide!")) - attack(user, user) + finalize_baton_attack(user, user) return FIRELOSS else user.visible_message(span_suicide("[user] is shoving the [name] down their throat! It looks like [user.p_theyre()] trying to commit suicide!")) @@ -593,7 +574,7 @@ tool.play_tool_sound(src) return TRUE -/obj/item/melee/baton/security/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/melee/baton/security/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/stock_parts/power_store/cell)) var/obj/item/stock_parts/power_store/cell/active_cell = item if(cell) @@ -684,18 +665,20 @@ SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK) deductcharge(cell_hit_cost) -/// Handles prodding targets with turned off stunbatons and right clicking stun'n'bash -/obj/item/melee/baton/security/baton_attack(mob/living/target, mob/living/user, modifiers) +/obj/item/melee/baton/security/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() - if(. != BATON_DO_NORMAL_ATTACK) - return - if(LAZYACCESS(modifiers, RIGHT_CLICK)) - if(active && cooldown_check <= world.time && !check_parried(target, user)) - finalize_baton_attack(target, user, modifiers, in_attack_chain = FALSE) - else if(!user.combat_mode) - target.visible_message(span_warning("[user] prods [target] with [src]. Luckily it was off."), \ - span_warning("[user] prods you with [src]. Luckily it was off.")) - return BATON_ATTACK_DONE + if(. || !isliving(target)) + return . + + if(!active && !user.combat_mode) + target.visible_message( + span_warning("[user] prods [target] with [src]. Luckily it was off."), + span_warning("[user] prods you with [src]. Luckily it was off."), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + ) + return TRUE + + return . /obj/item/melee/baton/security/baton_effect(mob/living/target, mob/living/user, modifiers, stun_override) if(iscyborg(loc)) @@ -731,25 +714,22 @@ if(!trait_check) target.Knockdown(knockdown_time) -/obj/item/melee/baton/security/get_wait_description() - return span_danger("The baton is still charging!") - /obj/item/melee/baton/security/get_stun_description(mob/living/target, mob/living/user) . = list() .["visible"] = span_danger("[user] stuns [target] with [src]!") .["local"] = span_userdanger("[user] stuns you with [src]!") -/obj/item/melee/baton/security/get_unga_dunga_cyborg_stun_description(mob/living/target, mob/living/user) - . = list() - - .["visible"] = span_danger("[user] tries to stun [target] with [src], and predictably fails!") - .["local"] = span_userdanger("[user] tries to... stun you with [src]?") +/obj/item/melee/baton/security/get_cyborg_stun_description(mob/living/target, mob/living/user) + . = ..() + if(!affect_cyborg) + .["visible"] = span_danger("[user] tries to stun [target] with [src], and predictably fails!") + .["local"] = span_userdanger("[user] tries to... stun you with [src]?") /obj/item/melee/baton/security/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) . = ..() if(!. && active && prob(throw_stun_chance) && isliving(hit_atom)) - finalize_baton_attack(hit_atom, thrownby?.resolve(), in_attack_chain = FALSE) + finalize_baton_attack(hit_atom, thrownby?.resolve()) /obj/item/melee/baton/security/emp_act(severity) . = ..() @@ -808,7 +788,7 @@ . = ..() sparkler = new (src) -/obj/item/melee/baton/security/cattleprod/attackby(obj/item/item, mob/user, list/modifiers)//handles sticking a crystal onto a stunprod to make an improved cattleprod +/obj/item/melee/baton/security/cattleprod/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers)//handles sticking a crystal onto a stunprod to make an improved cattleprod if(!istype(item, /obj/item/stack)) return ..() @@ -840,9 +820,9 @@ var/obj/item/melee/baton/security/cattleprod/brand_new_prod = new our_prod(user.loc) user.put_in_hands(brand_new_prod) -/obj/item/melee/baton/security/cattleprod/baton_effect() +/obj/item/melee/baton/security/cattleprod/can_baton(mob/living/target, mob/living/user) if(!sparkler.activate()) - return BATON_ATTACK_DONE + return FALSE return ..() /obj/item/melee/baton/security/cattleprod/Destroy() @@ -869,15 +849,7 @@ /obj/item/melee/baton/security/boomerang/Initialize(mapload) . = ..() - AddComponent(/datum/component/boomerang, throw_range+2, TRUE) - -/obj/item/melee/baton/security/boomerang/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(!active) - return ..() - var/caught = hit_atom.hitby(src, skipcatch = FALSE, hitpush = FALSE, throwingdatum = throwingdatum) - var/mob/thrown_by = thrownby?.resolve() - if(isliving(hit_atom) && !iscyborg(hit_atom) && !caught && prob(throw_stun_chance))//if they are a living creature and they didn't catch it - finalize_baton_attack(hit_atom, thrown_by, in_attack_chain = FALSE) + AddComponent(/datum/component/boomerang, throw_range + 2, TRUE) /obj/item/melee/baton/security/boomerang/loaded //Same as above, comes with a cell. preload_cell_type = /obj/item/stock_parts/power_store/cell/high diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index f0bc7c3cea24..d0edf982fd27 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -201,7 +201,7 @@ final_block_chance = 0 //Don't bring a sword to a gunfight, and also you aren't going to really block someone full body tackling you with a sword return ..() -/obj/item/melee/beesword/afterattack(atom/target, mob/user, list/modifiers) +/obj/item/melee/beesword/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) if(iscarbon(target)) var/mob/living/carbon/carbon_target = target carbon_target.reagents.add_reagent(/datum/reagent/toxin, 4) @@ -249,7 +249,7 @@ if(!isspaceturf(turf)) consume_turf(turf) -/obj/item/melee/supermatter_sword/pre_attack(atom/target, mob/living/user, list/modifiers) +/obj/item/melee/supermatter_sword/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return . @@ -341,7 +341,7 @@ attack_verb_simple = list("flog", "whip", "lash", "discipline") hitsound = 'sound/weapons/whip.ogg' -/obj/item/melee/curator_whip/afterattack(atom/target, mob/user, list/modifiers) +/obj/item/melee/curator_whip/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) if(ishuman(target)) var/mob/living/carbon/human/human_target = target human_target.drop_all_held_items() diff --git a/code/game/objects/items/piggy_bank.dm b/code/game/objects/items/piggy_bank.dm index 51a18dfea564..a11eac5f8283 100644 --- a/code/game/objects/items/piggy_bank.dm +++ b/code/game/objects/items/piggy_bank.dm @@ -92,7 +92,7 @@ if(95 to INFINITY) balloon_alert(user, "brimming with cash") -/obj/item/piggy_bank/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/piggy_bank/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) var/creds_value = item.get_item_credit_value() if(isnull(creds_value)) return ..() diff --git a/code/game/objects/items/pillow.dm b/code/game/objects/items/pillow.dm index b39ae15b31fb..776954e8e055 100644 --- a/code/game/objects/items/pillow.dm +++ b/code/game/objects/items/pillow.dm @@ -46,7 +46,7 @@ . = ..() QDEL_NULL(pillow_trophy) -/obj/item/pillow/attack(mob/living/carbon/target_mob, mob/living/user, list/modifiers) +/obj/item/pillow/attack(mob/living/carbon/target_mob, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(!iscarbon(target_mob)) return @@ -71,7 +71,7 @@ user.visible_message("[user] starts to smother [victim]", span_notice("You begin smothering [victim]"), vision_distance = COMBAT_MESSAGE_RANGE) INVOKE_ASYNC(src, PROC_REF(smothering), user, victim) -/obj/item/pillow/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/pillow/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(!bricked && istype(attacking_item, /obj/item/stack/sheet/mineral/sandstone)) var/obj/item/stack/sheet/mineral/sandstone/brick = attacking_item balloon_alert(user, "inserting brick...") diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 5eeb2135961e..ea9aebe5e588 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -124,7 +124,7 @@ else to_chat(user, span_notice("You try to pet [src], but it has no stuffing. Aww...")) -/obj/item/toy/plush/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/item/toy/plush/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(I.get_sharpness()) if(!grenade) if(!stuffed) @@ -691,7 +691,7 @@ ) AddElement(/datum/element/connect_loc, loc_connections) -/obj/item/toy/plush/goatplushie/attackby(obj/item/cigarette/rollie/fat_dart, mob/user, list/modifiers) +/obj/item/toy/plush/goatplushie/attackby(obj/item/cigarette/rollie/fat_dart, mob/user, list/modifiers, list/attack_modifiers) if(!istype(fat_dart)) return ..() if(splat) diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index 4c0f07f0cfc2..0407f369baf0 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -110,7 +110,7 @@ balloon_alert(user, "output level set to [pressure_setting_to_text(pressure_setting)]") return TRUE -/obj/item/pneumatic_cannon/attackby(obj/item/W, mob/living/user, list/modifiers) +/obj/item/pneumatic_cannon/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers) if(user.combat_mode) return ..() if(istype(W, /obj/item/tank/internals)) diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm index 4cff847acfbd..73d120da03b6 100644 --- a/code/game/objects/items/powerfist.dm +++ b/code/game/objects/items/powerfist.dm @@ -71,7 +71,7 @@ update_tank(tank, TANK_REMOVING, user) return TRUE -/obj/item/melee/powerfist/attackby(obj/item/item_to_insert, mob/user, list/modifiers) +/obj/item/melee/powerfist/attackby(obj/item/item_to_insert, mob/user, list/modifiers, list/attack_modifiers) if(!istype(item_to_insert, /obj/item/tank/internals)) return ..() if(tank) diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm index de427ade39ae..b96aa6712879 100644 --- a/code/game/objects/items/puzzle_pieces.dm +++ b/code/game/objects/items/puzzle_pieces.dm @@ -126,7 +126,7 @@ desc = "This door only opens when a keycard is swiped. It looks virtually indestructible." uses_queuelinks = FALSE -/obj/machinery/door/puzzle/keycard/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/machinery/door/puzzle/keycard/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(!istype(attacking_item, /obj/item/keycard)) return @@ -376,7 +376,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle/button, 32) icon_state = "keycardpad0" base_icon_state = "keycardpad" -/obj/machinery/puzzle/keycardpad/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/machinery/puzzle/keycardpad/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(!istype(attacking_item, /obj/item/keycard) || used) return diff --git a/code/game/objects/items/rcd/RSF.dm b/code/game/objects/items/rcd/RSF.dm index 10332b831292..758dfb94417d 100644 --- a/code/game/objects/items/rcd/RSF.dm +++ b/code/game/objects/items/rcd/RSF.dm @@ -72,7 +72,7 @@ RSF /obj/item/rsf/cyborg matter = 30 -/obj/item/rsf/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/rsf/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(is_type_in_list(W,matter_by_item))//If the thing we got hit by is in our matter list var/tempMatter = matter_by_item[W.type] + matter if(tempMatter > max_matter) diff --git a/code/game/objects/items/robot/ai_upgrades.dm b/code/game/objects/items/robot/ai_upgrades.dm index 06611b720fd6..8e25322b5f2b 100644 --- a/code/game/objects/items/robot/ai_upgrades.dm +++ b/code/game/objects/items/robot/ai_upgrades.dm @@ -7,7 +7,7 @@ ///The upgrade that will be applied to the AI when installed var/datum/ai_module/to_gift = /datum/ai_module -/obj/item/aiupgrade/pre_attack(atom/target, mob/living/user, list/modifiers) +/obj/item/aiupgrade/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) if(!isAI(target)) return ..() var/mob/living/silicon/ai/AI = target @@ -48,7 +48,7 @@ icon_state = "datadisk3" -/obj/item/malf_upgrade/pre_attack(atom/A, mob/living/user, list/modifiers) +/obj/item/malf_upgrade/pre_attack(atom/A, mob/living/user, list/modifiers, list/attack_modifiers) if(!isAI(A)) return ..() var/mob/living/silicon/ai/AI = A @@ -78,7 +78,3 @@ name = "power transfer upgrade" desc = "A legal upgrade that allows an artificial intelligence to directly provide power to APCs from a distance" to_gift = /datum/ai_module/power_apc - - - - diff --git a/code/game/objects/items/robot/items/generic.dm b/code/game/objects/items/robot/items/generic.dm index 3d2346ff8a90..1ee0c61aa77c 100644 --- a/code/game/objects/items/robot/items/generic.dm +++ b/code/game/objects/items/robot/items/generic.dm @@ -97,7 +97,7 @@ if(HUG_MODE_CRUSH) to_chat(user, "ERROR: ARM ACTUATORS OVERLOADED.") -/obj/item/borg/cyborghug/attack(mob/living/attacked_mob, mob/living/silicon/robot/user, list/modifiers) +/obj/item/borg/cyborghug/attack(mob/living/attacked_mob, mob/living/silicon/robot/user, list/modifiers, list/attack_modifiers) if(attacked_mob == user) return if(attacked_mob.health < 0) diff --git a/code/game/objects/items/robot/items/storage.dm b/code/game/objects/items/robot/items/storage.dm index 4fa9486dc3a9..94878e6d97bc 100644 --- a/code/game/objects/items/robot/items/storage.dm +++ b/code/game/objects/items/robot/items/storage.dm @@ -61,7 +61,7 @@ stored.forceMove(user.drop_location()) return CLICK_ACTION_SUCCESS -/obj/item/borg/apparatus/pre_attack(atom/atom, mob/living/user, list/modifiers) +/obj/item/borg/apparatus/pre_attack(atom/atom, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(atom.loc, /mob/living/silicon/robot) || istype(atom.loc, /obj/item/robot_model) || HAS_TRAIT(atom, TRAIT_NODROP)) return ..() // Borgs should not be grabbing their own modules @@ -90,7 +90,7 @@ update_appearance() return NONE -/obj/item/borg/apparatus/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/borg/apparatus/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(stored) item.melee_attack_chain(user, stored, modifiers) return @@ -314,7 +314,7 @@ . += "The apparatus currently has [stored] secured." . += span_notice(" Alt-click will drop the currently stored circuit. ") -/obj/item/borg/apparatus/circuit/pre_attack(atom/atom, mob/living/user, list/modifiers) +/obj/item/borg/apparatus/circuit/pre_attack(atom/atom, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(atom, /obj/item/ai_module) && !stored) //If an admin wants a borg to upload laws, who am I to stop them? Otherwise, we can hint that it fails to_chat(user, span_warning("This circuit board doesn't seem to have standard robot apparatus pin holes. You're unable to pick it up.")) return ..() diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 7a569c8620cc..7a8036d118c6 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -166,7 +166,7 @@ return TRUE //ADD -/obj/item/robot_suit/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/robot_suit/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/stack/sheet/iron)) var/obj/item/stack/sheet/iron/M = W if(!l_arm && !r_arm && !l_leg && !r_leg && !chest && !head) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 28ca79012075..4a2e66c078ad 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -780,7 +780,7 @@ icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "cyborg_upgrade1" -/obj/item/borg_restart_board/pre_attack(mob/living/silicon/robot/borgo, mob/living/user, list/modifiers) +/obj/item/borg_restart_board/pre_attack(mob/living/silicon/robot/borgo, mob/living/user, list/modifiers, list/attack_modifiers) if(!istype(borgo)) return ..() if(!borgo.opened) diff --git a/code/game/objects/items/secret_documents.dm b/code/game/objects/items/secret_documents.dm index ef6b12444f9b..91a2a8934e4f 100644 --- a/code/game/objects/items/secret_documents.dm +++ b/code/game/objects/items/secret_documents.dm @@ -66,7 +66,7 @@ var/obj/item/documents/photocopy/C = copy copy_type = C.copy_type -/obj/item/documents/photocopy/attackby(obj/item/O, mob/user, list/modifiers) +/obj/item/documents/photocopy/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) if(istype(O, /obj/item/toy/crayon/red) || istype(O, /obj/item/toy/crayon/blue)) if (forgedseal) to_chat(user, span_warning("You have already forged a seal on [src]!")) diff --git a/code/game/objects/items/sharpener.dm b/code/game/objects/items/sharpener.dm index 741a75090c6d..d435b9558c9a 100644 --- a/code/game/objects/items/sharpener.dm +++ b/code/game/objects/items/sharpener.dm @@ -23,7 +23,7 @@ ///If TRUE, the whetstone will only sharpen already sharp items var/requires_sharpness = TRUE -/obj/item/sharpener/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/sharpener/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(uses == 0) to_chat(user, span_warning("The sharpening block is too worn to use again!")) return diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index c3ce61d5733b..d77a122d4837 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -147,7 +147,7 @@ slapcraft_recipes = slapcraft_recipe_list,\ ) -/obj/item/shield/riot/attackby(obj/item/attackby_item, mob/user, list/modifiers) +/obj/item/shield/riot/attackby(obj/item/attackby_item, mob/user, list/modifiers, list/attack_modifiers) if(istype(attackby_item, /obj/item/melee/baton)) if(!COOLDOWN_FINISHED(src, baton_bash)) return diff --git a/code/game/objects/items/signs.dm b/code/game/objects/items/signs.dm index c7767a7af31e..a725791e2389 100644 --- a/code/game/objects/items/signs.dm +++ b/code/game/objects/items/signs.dm @@ -30,7 +30,7 @@ name = "[label] sign" desc = "It reads: [label]" -/obj/item/picket_sign/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/picket_sign/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(IS_WRITING_UTENSIL(W)) retext(user, W) else diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm index b219cd69d9c7..432da2f096e4 100644 --- a/code/game/objects/items/spear.dm +++ b/code/game/objects/items/spear.dm @@ -177,7 +177,7 @@ return CLICK_ACTION_SUCCESS -/obj/item/spear/explosive/afterattack(atom/movable/target, mob/user, list/modifiers) +/obj/item/spear/explosive/afterattack(atom/movable/target, mob/user, list/modifiers, list/attack_modifiers) if(!HAS_TRAIT(src, TRAIT_WIELDED) || !istype(target)) return if(target.resistance_flags & INDESTRUCTIBLE) //due to the lich incident of 2021, embedding grenades inside of indestructible structures is forbidden @@ -208,7 +208,7 @@ force_unwielded = 15 force_wielded = 25 -/obj/item/spear/grey_tide/afterattack(atom/movable/target, mob/living/user, list/modifiers) +/obj/item/spear/grey_tide/afterattack(atom/movable/target, mob/living/user, list/modifiers, list/attack_modifiers) user.faction |= "greytide([REF(user)])" if(!isliving(target)) return diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 28aa74e20d2a..6b5c19569e58 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -578,7 +578,7 @@ /obj/item/stack/medical/wrap/gauze/twelve amount = 12 -/obj/item/stack/medical/wrap/gauze/item_interaction(mob/living/user, obj/item/tool, list/modifiers) +/obj/item/stack/medical/wrap/gauze/item_interaction(mob/living/user, obj/item/tool, list/modifiers, list/attack_modifiers) if(tool.tool_behaviour == TOOL_WIRECUTTER || tool.get_sharpness()) if(get_amount() < 2) balloon_alert(user, "not enough gauze!") diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 97ea3bea4a40..beb0fdbf6d8c 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -51,7 +51,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ . = ..() . += GLOB.glass_recipes -/obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if(istype(W, /obj/item/lightreplacer)) var/obj/item/lightreplacer/lightreplacer = W @@ -119,7 +119,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \ . = ..() . += GLOB.pglass_recipes -/obj/item/stack/sheet/plasmaglass/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/stack/sheet/plasmaglass/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if(istype(W, /obj/item/stack/rods)) @@ -176,7 +176,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ fire = 70 acid = 100 -/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) ..() @@ -366,7 +366,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( if(T && is_station_level(T.z)) SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name) -/obj/item/shard/afterattack(atom/target, mob/user, list/modifiers) +/obj/item/shard/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) if(!iscarbon(user) || !user.is_holding(src)) return @@ -377,7 +377,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( to_chat(user, span_warning("[src] cuts into your hand!")) jab.apply_damage(force * 0.5, BRUTE, user.get_active_hand(), attacking_item = src) -/obj/item/shard/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/shard/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/lightreplacer)) var/obj/item/lightreplacer/lightreplacer = item lightreplacer.attackby(src, user) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 5d21fe0948a3..e61811c7928d 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -322,7 +322,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ //Step one - dehairing. -/obj/item/stack/sheet/animalhide/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/stack/sheet/animalhide/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(W.get_sharpness()) playsound(loc, 'sound/weapons/slice.ogg', 50, TRUE, -1) user.visible_message(span_notice("[user] starts cutting hair off \the [src]."), span_notice("You start cutting the hair off \the [src]..."), span_hear("You hear the sound of a knife rubbing against flesh.")) diff --git a/code/game/objects/items/stacks/sheets/light.dm b/code/game/objects/items/stacks/sheets/light.dm index 2a640dffd80a..ea54d6d691e1 100644 --- a/code/game/objects/items/stacks/sheets/light.dm +++ b/code/game/objects/items/stacks/sheets/light.dm @@ -18,7 +18,7 @@ . = ..() . += span_warning("The [name] looks unfinished, add iron to complete it.") -/obj/item/stack/light_w/attackby(obj/item/O, mob/user, list/modifiers) +/obj/item/stack/light_w/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) if(istype(O, /obj/item/stack/sheet/iron)) var/obj/item/stack/sheet/iron/M = O if (M.use(1)) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 95c983b9b996..3985f70a46d7 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -84,7 +84,7 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \ icon_state = "sandbag" w_class = WEIGHT_CLASS_TINY -/obj/item/emptysandbag/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/emptysandbag/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/stack/ore/glass)) var/obj/item/stack/ore/glass/G = W to_chat(user, span_notice("You fill the sandbag.")) @@ -462,7 +462,7 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \ grind_results = list(/datum/reagent/carbon = 20) novariants = TRUE -/obj/item/stack/sheet/mineral/coal/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/stack/sheet/mineral/coal/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite var/turf/T = get_turf(src) message_admins("Coal ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]") diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index b81659a7012d..30ee062ca35c 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -704,7 +704,7 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \ /obj/item/stack/sheet/cardboard/fifty amount = 50 -/obj/item/stack/sheet/cardboard/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/stack/sheet/cardboard/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/stamp/clown) && !istype(loc, /obj/item/storage)) var/atom/droploc = drop_location() if(use(1)) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 6b3066b2cd4e..da5afc34515a 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -728,7 +728,7 @@ is_zero_amount(delete_if_zero = TRUE) -/obj/item/stack/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/stack/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(can_merge(W, inhand = TRUE)) var/obj/item/stack/S = W if(merge(S)) diff --git a/code/game/objects/items/stacks/tiles/light.dm b/code/game/objects/items/stacks/tiles/light.dm index 1a4d73826367..8deaa203089c 100644 --- a/code/game/objects/items/stacks/tiles/light.dm +++ b/code/game/objects/items/stacks/tiles/light.dm @@ -13,7 +13,7 @@ var/state = 0 -/obj/item/stack/tile/light/attackby(obj/item/O, mob/user, list/modifiers) +/obj/item/stack/tile/light/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) if(O.tool_behaviour == TOOL_CROWBAR) new/obj/item/stack/sheet/iron(user.loc) amount-- diff --git a/code/game/objects/items/stacks/tiles/tile_mineral.dm b/code/game/objects/items/stacks/tiles/tile_mineral.dm index 1dfb002f878f..402fcda96216 100644 --- a/code/game/objects/items/stacks/tiles/tile_mineral.dm +++ b/code/game/objects/items/stacks/tiles/tile_mineral.dm @@ -4,7 +4,7 @@ /// Determines what stack is gotten out of us when welded. var/mineralType = null -/obj/item/stack/tile/mineral/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/stack/tile/mineral/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(W.tool_behaviour == TOOL_WELDER) if(get_amount() < 4) to_chat(user, span_warning("You need at least four tiles to do this!")) diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm index b7211708d905..8f0cc857ab1c 100644 --- a/code/game/objects/items/tanks/tank_types.dm +++ b/code/game/objects/items/tanks/tank_types.dm @@ -104,7 +104,7 @@ air_contents.assert_gas(/datum/gas/plasma) air_contents.gases[/datum/gas/plasma][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) -/obj/item/tank/internals/plasma/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/tank/internals/plasma/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/flamethrower)) var/obj/item/flamethrower/F = W if ((!F.status) || (F.ptank)) diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index b7c15a3d204f..89240e52e743 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -218,7 +218,7 @@ to_chat(user, span_warning("There isn't enough pressure in [src] to commit suicide with...")) return SHAME -/obj/item/tank/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/tank/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if(istype(attacking_item, /obj/item/assembly_holder)) if(tank_assembly) diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 8b2f70c1b776..8db1b86da854 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -96,7 +96,7 @@ var/atom/movable/screen/inventory/hand/H = over_object M.putItemFromInventoryInHandIfPossible(src, H.held_index) -/obj/item/watertank/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/watertank/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(attacking_item == noz) remove_noz() return TRUE diff --git a/code/game/objects/items/tcg/tcg.dm b/code/game/objects/items/tcg/tcg.dm index 136a00b9ab74..8487cd1a7952 100644 --- a/code/game/objects/items/tcg/tcg.dm +++ b/code/game/objects/items/tcg/tcg.dm @@ -128,7 +128,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) icon_state = template.icon_state return ..() -/obj/item/tcgcard/attackby(obj/item/item, mob/living/user, list/modifiers) +/obj/item/tcgcard/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/tcgcard)) var/obj/item/tcgcard/second_card = item var/obj/item/tcgcard_deck/new_deck = new /obj/item/tcgcard_deck(drop_location()) @@ -253,7 +253,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) return FALSE return TRUE -/obj/item/tcgcard_deck/attackby(obj/item/item, mob/living/user, list/modifiers) +/obj/item/tcgcard_deck/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(istype(item, /obj/item/tcgcard)) if(contents.len >= 30) diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm index 16f2e8ee5039..52bb3c7b8825 100644 --- a/code/game/objects/items/theft_tools.dm +++ b/code/game/objects/items/theft_tools.dm @@ -164,7 +164,7 @@ /obj/item/nuke_core/supermatter_sliver/can_be_pulled(user) // no drag memes return FALSE -/obj/item/nuke_core/supermatter_sliver/attackby(obj/item/W, mob/living/user, list/modifiers) +/obj/item/nuke_core/supermatter_sliver/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/hemostat/supermatter)) var/obj/item/hemostat/supermatter/tongs = W if (tongs.sliver) diff --git a/code/game/objects/items/tongs.dm b/code/game/objects/items/tongs.dm index f3cb7a610677..354c74da4716 100644 --- a/code/game/objects/items/tongs.dm +++ b/code/game/objects/items/tongs.dm @@ -72,7 +72,7 @@ tonged = null update_appearance(UPDATE_ICON) -/obj/item/kitchen/tongs/pre_attack(obj/item/attacked, mob/living/user, list/modifiers) +/obj/item/kitchen/tongs/pre_attack(obj/item/attacked, mob/living/user, list/modifiers, list/attack_modifiers) if (!isnull(tonged) && tonged.force <= 0) // prevents tongs from giving food-weapons extra range attacked.attackby(tonged, user) return TRUE diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 82562718da0d..52e00c877b20 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -114,7 +114,7 @@ flamethrower_screwdriver(tool, user) return ITEM_INTERACT_SUCCESS -/obj/item/weldingtool/attackby(obj/item/tool, mob/user, list/modifiers) +/obj/item/weldingtool/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers) if(istype(tool, /obj/item/stack/rods)) flamethrower_rods(tool, user) else @@ -174,7 +174,7 @@ INVOKE_ASYNC(src, PROC_REF(try_heal_loop), interacting_with, user, TRUE) return ITEM_INTERACT_SUCCESS -/obj/item/weldingtool/afterattack(atom/target, mob/user, list/modifiers) +/obj/item/weldingtool/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) if(!isOn()) return use(1) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index a35828a96589..6b33312ec9e1 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -71,7 +71,7 @@ return ITEM_INTERACT_SUCCESS return ITEM_INTERACT_BLOCKING -/obj/item/toy/waterballoon/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/toy/waterballoon/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/reagent_containers/cup)) if(I.reagents) if(I.reagents.total_volume <= 0) @@ -171,7 +171,7 @@ icon_state = "[storage_state]" update_appearance() -/obj/item/toy/balloon/long/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/item/toy/balloon/long/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(!istype(attacking_item, /obj/item/toy/balloon/long) || !HAS_TRAIT(user, TRAIT_BALLOON_SUTRA)) return ..() @@ -194,7 +194,7 @@ qdel(src) return TRUE -/obj/item/toy/balloon/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/toy/balloon/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/ammo_casing/foam_dart) && ismonkey(user)) pop_balloon(monkey_pop = TRUE) else @@ -502,7 +502,7 @@ . = ..() . += "There [bullets == 1 ? "is" : "are"] [bullets] cap\s left." -/obj/item/toy/gun/attackby(obj/item/toy/ammo/gun/A, mob/user, list/modifiers) +/obj/item/toy/gun/attackby(obj/item/toy/ammo/gun/A, mob/user, list/modifiers, list/attack_modifiers) if(istype(A, /obj/item/toy/ammo/gun)) if (src.bullets >= 7) @@ -655,7 +655,7 @@ // Copied from /obj/item/melee/energy/sword/attackby -/obj/item/toy/sword/attackby(obj/item/weapon, mob/living/user, list/modifiers) +/obj/item/toy/sword/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(weapon, /obj/item/toy/sword)) var/obj/item/toy/sword/attatched_sword = weapon if(HAS_TRAIT(weapon, TRAIT_NODROP)) diff --git a/code/game/objects/items/v8_engine.dm b/code/game/objects/items/v8_engine.dm index a1e86d9b5077..73cd672d96f9 100644 --- a/code/game/objects/items/v8_engine.dm +++ b/code/game/objects/items/v8_engine.dm @@ -70,7 +70,7 @@ AddComponent(/datum/component/two_handed, force_unwielded = 12, force_wielded = 22, attacksound = active_hitsound) RegisterSignals(src, list(COMSIG_ITEM_DROPPED, COMSIG_MOVABLE_PRE_THROW, COMSIG_ITEM_ATTACK_SELF), PROC_REF(reset_charges)) -/obj/item/house_edge/afterattack(atom/target, mob/user, list/modifiers) +/obj/item/house_edge/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) if(!ismob(target)) return if(HAS_TRAIT(src, TRAIT_WIELDED)) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 0cda43f03c5a..b092102d1f54 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -827,7 +827,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 thrown_datums.Cut() return ..() -/obj/item/melee/baseball_bat/pre_attack(atom/movable/target, mob/living/user, list/modifiers) +/obj/item/melee/baseball_bat/pre_attack(atom/movable/target, mob/living/user, list/modifiers, list/attack_modifiers) var/turf/target_turf = get_turf(target) if(!target_turf) return ..() @@ -941,7 +941,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 )) -/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, list/modifiers) +/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) if(is_type_in_typecache(target, splattable)) to_chat(user, span_warning("You easily splat [target].")) if(isliving(target)) @@ -978,7 +978,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 name = "\improper ACME Extendo-Hand" desc = "A novelty extendo-hand produced by the ACME corporation. Originally designed to knock out roadrunners." -/obj/item/extendohand/attack(atom/M, mob/living/carbon/human/user, list/modifiers) +/obj/item/extendohand/attack(atom/M, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers) var/dist = get_dist(M, user) if(dist < min_reach) to_chat(user, span_warning("[M] is too close to use [src] on.")) @@ -1082,7 +1082,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 return TRUE return FALSE -/obj/item/highfrequencyblade/pre_attack(atom/target, mob/living/user, list/modifiers) +/obj/item/highfrequencyblade/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return . diff --git a/code/game/objects/items/wizard_weapons.dm b/code/game/objects/items/wizard_weapons.dm index d23475808efd..ad36f6104012 100644 --- a/code/game/objects/items/wizard_weapons.dm +++ b/code/game/objects/items/wizard_weapons.dm @@ -56,7 +56,7 @@ step_towards(A,pull) step_towards(A,pull) -/obj/item/singularityhammer/afterattack(atom/target, mob/user, list/modifiers) +/obj/item/singularityhammer/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) if(!HAS_TRAIT(src, TRAIT_WIELDED)) return if(!charged) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index a02197172677..1575ec675c59 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -80,28 +80,47 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) GLOB.objects_by_id_tag -= id_tag . = ..() -/obj/attacked_by(obj/item/attacking_item, mob/living/user) +/obj/attacked_by(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(!attacking_item.force) - return + return 0 var/demo_mod = attacking_item.get_demolition_modifier(src) - var/total_force = (attacking_item.force * demo_mod) + var/total_force = CALCULATE_FORCE(attacking_item, attack_modifiers) * demo_mod var/damage = take_damage(total_force, attacking_item.damtype, MELEE, TRUE, get_dir(src, user), attacking_item.armour_penetration) - var/damage_verb = "hit" - - if(demo_mod > 1 && prob(damage * 5)) - if(HAS_TRAIT(src, TRAIT_INVERTED_DEMOLITION)) - damage_verb = "shred" - else - damage_verb = "pulverise" - - if(demo_mod < 1) - damage_verb = "ineffectively pierce" + if(!LAZYACCESS(attack_modifiers, SILENCE_DEFAULT_MESSAGES)) + // Sanity in case one is null for some reason + var/picked_index = rand(max(length(attacking_item.attack_verb_simple), length(attacking_item.attack_verb_continuous))) + + var/message_verb_continuous = "attacks" + var/message_verb_simple = "attack" + // Sanity in case one is... longer than the other? + if (picked_index && length(attacking_item.attack_verb_continuous) >= picked_index) + message_verb_continuous = attacking_item.attack_verb_continuous[picked_index] + if (picked_index && length(attacking_item.attack_verb_simple) >= picked_index) + message_verb_simple = attacking_item.attack_verb_simple[picked_index] + + if(demo_mod > 1 && prob(damage * 5)) + if(HAS_TRAIT(src, TRAIT_INVERTED_DEMOLITION)) + message_verb_simple = "shred" + message_verb_continuous = "shreds" + else + message_verb_simple = "pulverise" + message_verb_continuous = "pulverises" + + if(demo_mod < 1) + message_verb_simple = "ineffectively " + message_verb_simple + message_verb_continuous = "ineffectively " + message_verb_continuous + + user.visible_message( + span_danger("[user] [message_verb_continuous] [src] with [attacking_item][damage ? "." : ", [no_damage_feedback]!"]"), + span_danger("You [message_verb_simple] [src] with [attacking_item][damage ? "." : ", [no_damage_feedback]!"]"), + null, + COMBAT_MESSAGE_RANGE, + ) - user.visible_message(span_danger("[user] [damage_verb][plural_s(damage_verb)] [src] with [attacking_item][damage ? "." : ", [no_damage_feedback]!"]"), \ - span_danger("You [damage_verb] [src] with [attacking_item][damage ? "." : ", [no_damage_feedback]!"]"), null, COMBAT_MESSAGE_RANGE) log_combat(user, src, "attacked", attacking_item) + return damage /obj/assume_air(datum/gas_mixture/giver) return loc?.assume_air(giver) diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 9e68a1fbf45d..c1308b556f7d 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -126,7 +126,7 @@ return FALSE return TRUE -/obj/structure/ai_core/latejoin_inactive/attackby(obj/item/tool, mob/user, list/modifiers) +/obj/structure/ai_core/latejoin_inactive/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers) if(tool.tool_behaviour == TOOL_MULTITOOL) active = !active to_chat(user, span_notice("You [active? "activate" : "deactivate"] \the [src]'s transmitters.")) @@ -156,7 +156,7 @@ balloon_alert(user, "connected neural network") return ITEM_INTERACT_SUCCESS -/obj/structure/ai_core/attackby(obj/item/tool, mob/living/user, list/modifiers) +/obj/structure/ai_core/attackby(obj/item/tool, mob/living/user, list/modifiers, list/attack_modifiers) if(!anchored) if(tool.tool_behaviour == TOOL_WELDER) if(state != EMPTY_CORE) diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index f95a84e87e34..52cf5293cbc8 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -67,6 +67,7 @@ /obj/structure/alien/resin/Initialize(mapload) . = ..() air_update_turf(TRUE, TRUE) + ADD_TRAIT(src, TRAIT_INVERTED_DEMOLITION, INNATE_TRAIT) /obj/structure/alien/resin/Destroy() air_update_turf(TRUE, FALSE) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index c5576945c982..2e7606f99442 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -208,7 +208,7 @@ . += mutable_appearance(icon, "brakes_down") . += emissive_appearance(icon, "brakes_down", src, alpha = src.alpha) -/obj/structure/bed/medical/emergency/attackby(obj/item/item, mob/user, list/modifiers) +/obj/structure/bed/medical/emergency/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/emergency_bed/silicon)) var/obj/item/emergency_bed/silicon/silicon_bed = item if(silicon_bed.loaded) @@ -254,7 +254,7 @@ righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' w_class = WEIGHT_CLASS_NORMAL // No more excuses, stop getting blood everywhere -/obj/item/emergency_bed/attackby(obj/item/item, mob/living/user, list/modifiers) +/obj/item/emergency_bed/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/emergency_bed/silicon)) var/obj/item/emergency_bed/silicon/silicon_bed = item if(silicon_bed.loaded) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index a3fc7948e5cf..9211c85a8969 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -90,7 +90,7 @@ W.setDir(dir) qdel(src) -/obj/structure/chair/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/chair/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/assembly/shock_kit) && !HAS_TRAIT(src, TRAIT_ELECTRIFIED_BUCKLE)) electrify_self(W, user) return @@ -452,7 +452,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) return TRUE return FALSE -/obj/item/chair/afterattack(atom/target, mob/user, list/modifiers) +/obj/item/chair/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) if(!prob(break_chance)) return user.visible_message(span_danger("[user] smashes [src] to pieces against [target]")) diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm index 2b1baea19c5d..facb250e6ad0 100644 --- a/code/game/objects/structures/bonfire.dm +++ b/code/game/objects/structures/bonfire.dm @@ -39,7 +39,7 @@ QDEL_NULL(burning_loop) . = ..() -/obj/structure/bonfire/attackby(obj/item/used_item, mob/living/user, list/modifiers) +/obj/structure/bonfire/attackby(obj/item/used_item, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(used_item, /obj/item/stack/rods) && !can_buckle && !grill) var/obj/item/stack/rods/rods = used_item var/choice = tgui_alert(user, "What would you like to construct?", "Bonfire", list("Stake","Grill")) diff --git a/code/game/objects/structures/cannons/cannon.dm b/code/game/objects/structures/cannons/cannon.dm index bee6649525b2..55e91c2f5bf9 100644 --- a/code/game/objects/structures/cannons/cannon.dm +++ b/code/game/objects/structures/cannons/cannon.dm @@ -53,7 +53,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/structure/cannon/attackby(obj/item/used_item, mob/user, list/modifiers) +/obj/structure/cannon/attackby(obj/item/used_item, mob/user, list/modifiers, list/attack_modifiers) if(charge_ignited) balloon_alert(user, "it's gonna fire!") return diff --git a/code/game/objects/structures/construction_console/construction_console.dm b/code/game/objects/structures/construction_console/construction_console.dm index 5c156f1375de..a59840a7e1fd 100644 --- a/code/game/objects/structures/construction_console/construction_console.dm +++ b/code/game/objects/structures/construction_console/construction_console.dm @@ -67,7 +67,7 @@ eyeobj.set_telegraph(alerts_cameras) return TRUE -/obj/machinery/computer/camera_advanced/base_construction/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/computer/camera_advanced/base_construction/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) //If we have an internal RCD, we can refill it by slapping the console with some materials if(internal_rcd && (istype(W, /obj/item/rcd_ammo) || istype(W, /obj/item/stack/sheet))) internal_rcd.attackby(W, user, modifiers) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 128b61ada153..b29854dd20a9 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -663,7 +663,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) req_access = accesses req_one_access = null -/obj/structure/closet/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/closet/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(user in src) return if(src.tool_interact(W,user)) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 5434df75be34..2e19478bfba5 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -197,7 +197,7 @@ . = ..() . += span_notice("Right-click with a Security-level ID to reset [src]'s registered ID.") -/obj/structure/closet/secure_closet/brig/genpop/attackby(obj/item/card/id/advanced/prisoner/user_id, mob/user, list/modifiers) +/obj/structure/closet/secure_closet/brig/genpop/attackby(obj/item/card/id/advanced/prisoner/user_id, mob/user, list/modifiers, list/attack_modifiers) if(!secure || !istype(user_id)) return ..() @@ -213,7 +213,7 @@ name = initial(name) update_appearance() -/obj/structure/closet/secure_closet/brig/genpop/attackby_secondary(obj/item/card/id/advanced/used_id, mob/user, list/modifiers) +/obj/structure/closet/secure_closet/brig/genpop/attackby_secondary(obj/item/card/id/advanced/used_id, mob/user, list/modifiers, list/attack_modifiers) if(!secure || !istype(used_id)) return ..() diff --git a/code/game/objects/structures/crates_lockers/crates/bins.dm b/code/game/objects/structures/crates_lockers/crates/bins.dm index c79378ccb91a..6e292dda753b 100644 --- a/code/game/objects/structures/crates_lockers/crates/bins.dm +++ b/code/game/objects/structures/crates_lockers/crates/bins.dm @@ -32,7 +32,7 @@ return . += base_icon_state + "_some" -/obj/structure/closet/crate/bin/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/closet/crate/bin/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/storage/bag/trash) && !opened) var/obj/item/storage/bag/trash/T = W to_chat(user, span_notice("You fill the bag.")) diff --git a/code/game/objects/structures/crates_lockers/crates/large.dm b/code/game/objects/structures/crates_lockers/crates/large.dm index 1ed0d1330f4b..5816bcc03dda 100644 --- a/code/game/objects/structures/crates_lockers/crates/large.dm +++ b/code/game/objects/structures/crates_lockers/crates/large.dm @@ -30,7 +30,7 @@ else to_chat(user, span_warning("You need a crowbar to pry this open!")) -/obj/structure/closet/crate/large/attackby(obj/item/W, mob/living/user, list/modifiers) +/obj/structure/closet/crate/large/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers) if(W.tool_behaviour == TOOL_CROWBAR) if(manifest) tear_manifest(user) diff --git a/code/game/objects/structures/crates_lockers/crates/syndicrate.dm b/code/game/objects/structures/crates_lockers/crates/syndicrate.dm index ad4b09895d0e..fd0a36ec2b7b 100644 --- a/code/game/objects/structures/crates_lockers/crates/syndicrate.dm +++ b/code/game/objects/structures/crates_lockers/crates/syndicrate.dm @@ -43,7 +43,7 @@ qdel(src) ///ensures that the syndicrate can only be unlocked by opening it with a syndicrate_key -/obj/structure/closet/crate/secure/syndicrate/attackby(obj/item/item, mob/user, list/modifiers) +/obj/structure/closet/crate/secure/syndicrate/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(!istype(item, /obj/item/syndicrate_key) || created_items) return ..() created_items = TRUE @@ -67,7 +67,7 @@ ) update_appearance() -/obj/structure/closet/crate/secure/syndicrate/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) +/obj/structure/closet/crate/secure/syndicrate/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/item/syndicrate_key diff --git a/code/game/objects/structures/deployable_turret.dm b/code/game/objects/structures/deployable_turret.dm index 2f9ca89629cc..7294f8ca0830 100644 --- a/code/game/objects/structures/deployable_turret.dm +++ b/code/game/objects/structures/deployable_turret.dm @@ -247,14 +247,14 @@ /obj/item/gun_control/CanItemAutoclick() return TRUE -/obj/item/gun_control/attack_atom(obj/O, mob/living/user, list/modifiers) +/obj/item/gun_control/attack_atom(obj/O, mob/living/user, list/modifiers, list/attack_modifiers) user.changeNext_move(CLICK_CD_MELEE) - O.attacked_by(src, user) + O.attacked_by(src, user, modifiers) -/obj/item/gun_control/attack(mob/living/M, mob/living/user) +/obj/item/gun_control/attack(mob/living/M, mob/living/user, list/modifiers, list/attack_modifiers) M.lastattacker = user.real_name M.lastattackerckey = user.ckey - M.attacked_by(src, user) + M.attacked_by(src, user, modifiers) add_fingerprint(user) /obj/item/gun_control/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) diff --git a/code/game/objects/structures/detectiveboard.dm b/code/game/objects/structures/detectiveboard.dm index 33a54d45e530..e191b214eeb2 100644 --- a/code/game/objects/structures/detectiveboard.dm +++ b/code/game/objects/structures/detectiveboard.dm @@ -40,7 +40,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/detectiveboard, 32) /// Attaching evidences: photo and papers -/obj/structure/detectiveboard/attackby(obj/item/item, mob/user, list/modifiers) +/obj/structure/detectiveboard/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(!cases.len) to_chat(user, span_warning("There are no cases!")) return diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 90cdb0c18a30..a4f6b59a3e06 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -125,7 +125,7 @@ . += "[initial(icon_state)]_closed" return -/obj/structure/displaycase/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/structure/displaycase/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(attacking_item.GetID() && !broken) if(allowed(user)) to_chat(user, span_notice("You [open ? "close":"open"] [src].")) @@ -272,7 +272,7 @@ qdel(src) return ITEM_INTERACT_SUCCESS -/obj/structure/displaycase_chassis/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/structure/displaycase_chassis/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(istype(attacking_item, /obj/item/electronics/airlock)) balloon_alert(user, "installing electronics...") if(do_after(user, 3 SECONDS, target = src) && user.transferItemToLoc(attacking_item, src)) @@ -359,7 +359,7 @@ holographic_showpiece = TRUE update_appearance() -/obj/structure/displaycase/trophy/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/structure/displaycase/trophy/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(istype(attacking_item, /obj/item/key/displaycase)) toggle_historian_mode(user) return @@ -609,7 +609,7 @@ return TRUE . = TRUE -/obj/structure/displaycase/forsale/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/structure/displaycase/forsale/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(isidcard(attacking_item)) //Card Registration var/obj/item/card/id/potential_acc = attacking_item diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 8beacd61f79f..84ff50be67a8 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -83,7 +83,7 @@ if(doorname) . += span_notice("There is a small paper placard on the assembly labelled \"[doorname]\".") -/obj/structure/door_assembly/attackby(obj/item/W, mob/living/user, list/modifiers) +/obj/structure/door_assembly/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers) if(IS_WRITING_UTENSIL(W) && !user.combat_mode) var/t = tgui_input_text(user, "Enter the name for the door", "Airlock Renaming", created_name, MAX_NAME_LEN) if(!t) diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 5c3db19544a8..785871dac668 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -7,7 +7,7 @@ density = TRUE anchored = TRUE -/obj/structure/dresser/attackby(obj/item/I, mob/user, list/modifiers) +/obj/structure/dresser/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(I.tool_behaviour == TOOL_WRENCH) to_chat(user, span_notice("You begin to [anchored ? "unwrench" : "wrench"] [src].")) if(I.use_tool(src, user, 20, volume=50)) diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index 2150c5af4ba1..d68457f9baec 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -13,7 +13,7 @@ export_to_component = color_atom_overlay(export_to_component) AddComponent(/datum/component/electrified_buckle, (SHOCK_REQUIREMENT_ITEM | SHOCK_REQUIREMENT_LIVE_CABLE | SHOCK_REQUIREMENT_SIGNAL_RECEIVED_TOGGLE), stored_kit, list(export_to_component)) -/obj/structure/chair/e_chair/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/chair/e_chair/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(W.tool_behaviour == TOOL_WRENCH) var/obj/structure/chair/C = new /obj/structure/chair(loc) W.play_tool_sound(src) diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index fc9ac77f14a3..3adbf133a419 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -65,7 +65,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29) stored_extinguisher = null update_appearance(UPDATE_ICON) -/obj/structure/extinguisher_cabinet/attackby(obj/item/used_item, mob/living/user, list/modifiers) +/obj/structure/extinguisher_cabinet/attackby(obj/item/used_item, mob/living/user, list/modifiers, list/attack_modifiers) if(used_item.tool_behaviour == TOOL_WRENCH && !stored_extinguisher) user.balloon_alert(user, "deconstructing cabinet...") used_item.play_tool_sound(src) diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index a1ec3f823f5a..9a4a3b32d9a1 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -123,7 +123,7 @@ return ITEM_INTERACT_SUCCESS return -/obj/structure/falsewall/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/falsewall/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(!opening) return ..() to_chat(user, span_warning("You must wait until the door has stopped moving!")) @@ -200,7 +200,7 @@ . = ..() RegisterSignal(src, COMSIG_ATOM_PROPAGATE_RAD_PULSE, PROC_REF(radiate)) -/obj/structure/falsewall/uranium/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/falsewall/uranium/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) radiate() return ..() diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 44a33f9691ba..562249158031 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -43,7 +43,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fireaxecabinet, 32) QDEL_NULL(held_item) return ..() -/obj/structure/fireaxecabinet/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/structure/fireaxecabinet/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(iscyborg(user) || attacking_item.tool_behaviour == TOOL_MULTITOOL) toggle_lock(user) else if(attacking_item.tool_behaviour == TOOL_WELDER && !user.combat_mode && !broken) diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index f5ed6826a79b..e77e135b03b9 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -52,7 +52,7 @@ /// Flags for the flora to determine what kind of sound to play when it gets hit var/flora_flags = NONE -/obj/structure/flora/attackby(obj/item/used_item, mob/living/user, list/modifiers) +/obj/structure/flora/attackby(obj/item/used_item, mob/living/user, list/modifiers, list/attack_modifiers) if(user.combat_mode) return ..() if(flags_1 & HOLOGRAM_1) diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index f01bc7a3f42b..fe6496aff3d6 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -14,7 +14,7 @@ ///If true, the structure can be deconstructed into a metal sheet with a wrench. var/deconstructible = TRUE -/obj/structure/fluff/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/structure/fluff/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(I.tool_behaviour == TOOL_WRENCH && deconstructible) user.visible_message(span_notice("[user] starts disassembling [src]..."), span_notice("You start disassembling [src]...")) I.play_tool_sound(src) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 90e9b6ea526f..39d305ab1f7a 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -38,7 +38,7 @@ if(GIRDER_TRAM) . += span_notice("[src] is designed for tram usage. Deconstructed with a screwdriver!") -/obj/structure/girder/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/girder/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) var/platingmodifier = 1 if(HAS_TRAIT(user, TRAIT_QUICK_BUILD)) platingmodifier = 0.7 @@ -427,7 +427,7 @@ icon_state= "cultgirder" can_displace = FALSE -/obj/structure/girder/cult/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/girder/cult/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if(W.tool_behaviour == TOOL_WELDER) if(!W.tool_start_check(user, amount=1)) @@ -498,7 +498,7 @@ icon_state = "wall_gear" can_displace = FALSE -/obj/structure/girder/bronze/attackby(obj/item/W, mob/living/user, list/modifiers) +/obj/structure/girder/bronze/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if(W.tool_behaviour == TOOL_WELDER) if(!W.tool_start_check(user, amount = 0)) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 61ede900cd4f..4745a85b56db 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -215,7 +215,7 @@ span_notice("You [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor.")) return ITEM_INTERACT_SUCCESS -/obj/structure/grille/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/grille/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) user.changeNext_move(CLICK_CD_MELEE) if(istype(W, /obj/item/stack/rods) && broken && do_after(user, 1 SECONDS, target = src)) if(shock(user, 90)) diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm index a9c980cb34a4..ab0f90eb44f1 100644 --- a/code/game/objects/structures/guillotine.dm +++ b/code/game/objects/structures/guillotine.dm @@ -183,7 +183,7 @@ blade_status = GUILLOTINE_BLADE_DROPPED icon_state = "guillotine" -/obj/structure/guillotine/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/guillotine/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if (istype(W, /obj/item/sharpener)) add_fingerprint(user) if (blade_status == GUILLOTINE_BLADE_SHARPENING) diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index eec60ffa8a8e..aa113b4abac6 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -31,7 +31,7 @@ . += new /mutable_appearance(gun_overlay) . += "[icon_state]_[open ? "open" : "door"]" -/obj/structure/guncase/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/structure/guncase/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(iscyborg(user) || isalien(user)) return if(istype(I, gun_category) && open) diff --git a/code/game/objects/structures/janitor.dm b/code/game/objects/structures/janitor.dm index 53c38e4b5391..2b0b580a7e59 100644 --- a/code/game/objects/structures/janitor.dm +++ b/code/game/objects/structures/janitor.dm @@ -28,14 +28,14 @@ return . -/obj/structure/mop_bucket/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/structure/mop_bucket/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(istype(weapon, /obj/item/reagent_containers)) update_appearance(UPDATE_OVERLAYS) return FALSE // skip attack animation when refilling cart return ..() -/obj/structure/mop_bucket/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) +/obj/structure/mop_bucket/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(istype(weapon, /obj/item/mop)) if(weapon.reagents.total_volume >= weapon.reagents.maximum_volume) balloon_alert(user, "already soaked!") @@ -182,7 +182,7 @@ return . || NONE -/obj/structure/mop_bucket/janitorialcart/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/structure/mop_bucket/janitorialcart/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(istype(attacking_item, /obj/item/mop)) if(mymop) balloon_alert(user, "already has \a [mymop]!") @@ -241,7 +241,7 @@ update_appearance(UPDATE_OVERLAYS) return ITEM_INTERACT_SUCCESS -/obj/structure/mop_bucket/janitorialcart/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) +/obj/structure/mop_bucket/janitorialcart/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 8916156b225e..2e7db5519f44 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -50,7 +50,7 @@ default_unfasten_wrench(user, tool) return TRUE -/obj/structure/kitchenspike_frame/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/structure/kitchenspike_frame/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if(!istype(attacking_item, /obj/item/stack/rods)) return ..() diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index f7e9e2776c9b..f26a249b444e 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -374,11 +374,11 @@ use(user, going_up = FALSE) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/structure/ladder/attackby(obj/item/item, mob/user, list/modifiers) +/obj/structure/ladder/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) use(user) return TRUE -/obj/structure/ladder/attackby_secondary(obj/item/item, mob/user, list/modifiers) +/obj/structure/ladder/attackby_secondary(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index e60d525cb58d..968413c49c26 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -48,7 +48,7 @@ /obj/structure/lattice/blob_act(obj/structure/blob/B) return -/obj/structure/lattice/attackby(obj/item/C, mob/user, list/modifiers) +/obj/structure/lattice/attackby(obj/item/C, mob/user, list/modifiers, list/attack_modifiers) if(resistance_flags & INDESTRUCTIBLE) return if(C.tool_behaviour == TOOL_WIRECUTTER) @@ -153,7 +153,7 @@ /obj/structure/lattice/lava/deconstruction_hints(mob/user) return span_notice("The rods look like they could be cut, but the heat treatment will shatter off. There's space for a tile.") -/obj/structure/lattice/lava/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/structure/lattice/lava/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(!istype(attacking_item, /obj/item/stack/tile/iron)) return diff --git a/code/game/objects/structures/lavaland/geyser.dm b/code/game/objects/structures/lavaland/geyser.dm index 632d7eff694c..5702c02a1343 100644 --- a/code/game/objects/structures/lavaland/geyser.dm +++ b/code/game/objects/structures/lavaland/geyser.dm @@ -58,7 +58,7 @@ else stop_chemming() //we're full -/obj/structure/geyser/attackby(obj/item/item, mob/user, list/modifiers) +/obj/structure/geyser/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(!istype(item, /obj/item/mining_scanner) && !istype(item, /obj/item/t_scanner/adv_mining_scanner)) playsound(src, SFX_INDUSTRIAL_SCAN, 20, TRUE, -2, TRUE, FALSE) return ..() //this runs the plunger code @@ -142,7 +142,7 @@ ///What layer we set it to var/target_layer = DUCT_LAYER_DEFAULT -/obj/item/plunger/attack_atom(obj/O, mob/living/user, list/modifiers) +/obj/item/plunger/attack_atom(obj/O, mob/living/user, list/modifiers, list/attack_modifiers) if(layer_mode) SEND_SIGNAL(O, COMSIG_MOVABLE_CHANGE_DUCT_LAYER, O, target_layer) return ..() diff --git a/code/game/objects/structures/maintenance.dm b/code/game/objects/structures/maintenance.dm index 2e648d70797e..a5bd39dff87b 100644 --- a/code/game/objects/structures/maintenance.dm +++ b/code/game/objects/structures/maintenance.dm @@ -92,7 +92,7 @@ at the cost of risking a vicious bite.**/ return to_chat(user, span_warning("You find nothing of value...")) -/obj/structure/moisture_trap/attackby(obj/item/I, mob/user, list/modifiers) +/obj/structure/moisture_trap/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(iscyborg(user) || isalien(user) || !CanReachInside(user)) return ..() add_fingerprint(user) @@ -137,7 +137,7 @@ at the cost of risking a vicious bite.**/ /// Stage of the pants making process var/status = ALTAR_INACTIVE -/obj/structure/destructible/cult/pants_altar/attackby(obj/attacking_item, mob/user, list/modifiers) +/obj/structure/destructible/cult/pants_altar/attackby(obj/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(istype(attacking_item, /obj/item/melee/cultblade/dagger) && IS_CULTIST(user) && status) to_chat(user, span_notice("[src] is creating something, you can't move it!")) return diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index cb41ef10e4cd..9824e9ec8c58 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -243,14 +243,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) return list()// no message spam return ..() -/obj/structure/mirror/attacked_by(obj/item/I, mob/living/user) +/obj/structure/mirror/attacked_by(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(broken || !istype(user) || !I.force) return ..() . = ..() - if(broken) // breaking a mirror truly gets you bad luck! - to_chat(user, span_warning("A chill runs down your spine as [src] shatters...")) - user.AddComponent(/datum/component/omen, incidents_left = 7) + if(broken || !.) // breaking a mirror truly gets you bad luck! + return + to_chat(user, span_warning("A chill runs down your spine as [src] shatters...")) + user.AddComponent(/datum/component/omen, incidents_left = 7) /obj/structure/mirror/bullet_act(obj/projectile/P) if(broken || !isliving(P.firer) || !P.damage) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index fdb105776212..0130feff8570 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -569,7 +569,7 @@ GLOBAL_LIST_EMPTY(crematoriums) INVOKE_ASYNC(clicker, TYPE_PROC_REF(/mob, ClickOn), src, params) -/obj/structure/tray/attackby(obj/P, mob/user, list/modifiers) +/obj/structure/tray/attackby(obj/P, mob/user, list/modifiers, list/attack_modifiers) if(!istype(P, /obj/item/riding_offhand)) return ..() diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 022b0df6e777..139481ccb4f0 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -29,7 +29,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/noticeboard, 32) find_and_hang_on_wall() //attaching papers!! -/obj/structure/noticeboard/attackby(obj/item/O, mob/user, list/modifiers) +/obj/structure/noticeboard/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) if(istype(O, /obj/item/paper) || istype(O, /obj/item/photo)) if(!allowed(user)) to_chat(user, span_warning("You are not authorized to add notices!")) diff --git a/code/game/objects/structures/ore_containers.dm b/code/game/objects/structures/ore_containers.dm index 75c7a03cfcfa..ba8e59cc78a9 100644 --- a/code/game/objects/structures/ore_containers.dm +++ b/code/game/objects/structures/ore_containers.dm @@ -1,7 +1,7 @@ ///structure to contain ores /obj/structure/ore_container -/obj/structure/ore_container/attackby(obj/item/ore, mob/living/carbon/human/user, list/modifiers) +/obj/structure/ore_container/attackby(obj/item/ore, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers) if(istype(ore, /obj/item/stack/ore) && !user.combat_mode) ore.forceMove(src) return diff --git a/code/game/objects/structures/plaques/_plaques.dm b/code/game/objects/structures/plaques/_plaques.dm index 5b64b8b1413c..93e336fa6ec0 100644 --- a/code/game/objects/structures/plaques/_plaques.dm +++ b/code/game/objects/structures/plaques/_plaques.dm @@ -83,7 +83,7 @@ atom_integrity = max_integrity return TRUE -/obj/structure/plaque/attackby(obj/item/I, mob/user, list/modifiers) +/obj/structure/plaque/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/pen/fountain)) if(engraved) to_chat(user, span_warning("This plaque has already been engraved.")) @@ -156,7 +156,7 @@ return TRUE -/obj/item/plaque/attackby(obj/item/I, mob/user, list/modifiers) //Same as part of the above, except for the item in hand instead of the structure. +/obj/item/plaque/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) //Same as part of the above, except for the item in hand instead of the structure. if(istype(I, /obj/item/pen/fountain)) if(engraved) to_chat(user, span_warning("This plaque has already been engraved.")) diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm index c5386de60a13..6247c8cc05a3 100644 --- a/code/game/objects/structures/railings.dm +++ b/code/game/objects/structures/railings.dm @@ -71,7 +71,7 @@ else . += span_notice("The railing is unbolted from the floor and can be deconstructed with wirecutters.") -/obj/structure/railing/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/structure/railing/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) ..() add_fingerprint(user) diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index c174c462aac4..fb05b069afef 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -132,7 +132,7 @@ return ITEM_INTERACT_SUCCESS -/obj/structure/reflector/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/reflector/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(admin) return //Finishing the frame diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 0f9ba11a888e..e4510e81b61b 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -60,7 +60,7 @@ FLOOR SAFES icon_state = "[initial(icon_state)][open ? "-open" : null]" return ..() -/obj/structure/safe/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/structure/safe/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(open) . = TRUE //no afterattack if(attacking_item.w_class + space <= maxspace) diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm index 8ca502381bb0..2599229487af 100644 --- a/code/game/objects/structures/shower.dm +++ b/code/game/objects/structures/shower.dm @@ -127,7 +127,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16)) to_chat(user, span_notice("The water temperature seems to be [current_temperature].")) return TRUE -/obj/machinery/shower/attackby(obj/item/tool, mob/user, list/modifiers) +/obj/machinery/shower/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers) if(istype(tool, /obj/item/stock_parts/water_recycler)) if(has_water_reclaimer) to_chat(user, span_warning("There is already has a water recycler installed.")) @@ -342,7 +342,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16)) . = ..() AddComponent(/datum/component/simple_rotation) -/obj/structure/showerframe/attackby(obj/item/tool, mob/living/user, list/modifiers) +/obj/structure/showerframe/attackby(obj/item/tool, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(tool, /obj/item/stock_parts/water_recycler)) qdel(tool) var/obj/machinery/shower/shower = new(loc, REVERSE_DIR(dir), TRUE) diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm index adb9a53a72d0..da15ce8b2912 100644 --- a/code/game/objects/structures/signs/_signs.dm +++ b/code/game/objects/structures/signs/_signs.dm @@ -84,7 +84,7 @@ atom_integrity = max_integrity return TRUE -/obj/structure/sign/attackby(obj/item/I, mob/user, list/modifiers) +/obj/structure/sign/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(is_editable && IS_WRITING_UTENSIL(I)) if(!length(GLOB.editable_sign_types)) CRASH("GLOB.editable_sign_types failed to populate") @@ -191,7 +191,7 @@ context[SCREENTIP_CONTEXT_LMB] = "Change design" return CONTEXTUAL_SCREENTIP_SET -/obj/item/sign/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/sign/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(is_editable && IS_WRITING_UTENSIL(I)) if(!length(GLOB.editable_sign_types)) CRASH("GLOB.editable_sign_types failed to populate") diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm index 1cf92cc09e32..a57c485f513a 100644 --- a/code/game/objects/structures/spawner.dm +++ b/code/game/objects/structures/spawner.dm @@ -39,7 +39,7 @@ else . += span_notice("It looks like you could probably scan and tag it with a [scanner_descriptor].") -/obj/structure/spawner/attackby(obj/item/item, mob/user, list/modifiers) +/obj/structure/spawner/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return TRUE diff --git a/code/game/objects/structures/stairs.dm b/code/game/objects/structures/stairs.dm index 55a4356a502f..3243bf62ff03 100644 --- a/code/game/objects/structures/stairs.dm +++ b/code/game/objects/structures/stairs.dm @@ -346,7 +346,7 @@ /obj/structure/stairs_frame/atom_deconstruct(disassembled = TRUE) new frame_stack(get_turf(src), frame_stack_amount) -/obj/structure/stairs_frame/attackby(obj/item/attacked_by, mob/user, list/modifiers) +/obj/structure/stairs_frame/attackby(obj/item/attacked_by, mob/user, list/modifiers, list/attack_modifiers) if(!isstack(attacked_by)) return ..() if(!anchored) diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 60a52b2359fb..9e831a945bc5 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -59,7 +59,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/structure/tank_dispenser/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/structure/tank_dispenser/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) var/full if(istype(I, /obj/item/tank/internals/plasma)) if(plasmatanks < TANK_DISPENSER_CAPACITY) diff --git a/code/game/objects/structures/tank_holder.dm b/code/game/objects/structures/tank_holder.dm index d942f95974ff..5a9eb683c5c2 100644 --- a/code/game/objects/structures/tank_holder.dm +++ b/code/game/objects/structures/tank_holder.dm @@ -42,7 +42,7 @@ . += "It is empty." . += span_notice("It is held together by some screws.") -/obj/structure/tank_holder/attackby(obj/item/W, mob/living/user, list/modifiers) +/obj/structure/tank_holder/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers) if(user.combat_mode) return ..() if(W.tool_behaviour == TOOL_WRENCH) diff --git a/code/game/objects/structures/toiletbong.dm b/code/game/objects/structures/toiletbong.dm index d4952de90ff5..038e8fa292a3 100644 --- a/code/game/objects/structures/toiletbong.dm +++ b/code/game/objects/structures/toiletbong.dm @@ -100,7 +100,7 @@ to_chat(user, span_boldwarning("The [emag_card] falls into the toilet. You fish it back out. Looks like you broke the toilet.")) return TRUE -/obj/structure/toiletbong/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/structure/toiletbong/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(istype(attacking_item, /obj/item/card/emag)) return return ..() diff --git a/code/game/objects/structures/training_machine.dm b/code/game/objects/structures/training_machine.dm index 1a92afc4f84d..698f1d958190 100644 --- a/code/game/objects/structures/training_machine.dm +++ b/code/game/objects/structures/training_machine.dm @@ -360,7 +360,7 @@ ///Number of hits made since the Lap button (alt-click) was last pushed var/lap_hits = 0 -/obj/item/training_toolbox/pre_attack(atom/target, mob/living/user, list/modifiers) +/obj/item/training_toolbox/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return . diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm index 32d5929ab369..9c37301ed5a1 100644 --- a/code/game/objects/structures/transit_tubes/station.dm +++ b/code/game/objects/structures/transit_tubes/station.dm @@ -93,7 +93,7 @@ break -/obj/structure/transit_tube/station/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/transit_tube/station/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(W.tool_behaviour == TOOL_CROWBAR) for(var/obj/structure/transit_tube_pod/P in loc) P.deconstruct(FALSE, user) diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm index ee1193a3a320..ed73c1f0f4fc 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube.dm @@ -32,7 +32,7 @@ if(current_size >= STAGE_FIVE) deconstruct(FALSE) -/obj/structure/transit_tube/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/transit_tube/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(W.tool_behaviour == TOOL_WRENCH) if(tube_construction) for(var/obj/structure/transit_tube_pod/pod in src.loc) diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index 8832335728a1..3877f75d1bf8 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -27,7 +27,7 @@ icon_state = contents.len ? occupied_icon_state : initial(icon_state) return ..() -/obj/structure/transit_tube_pod/attackby(obj/item/I, mob/user, list/modifiers) +/obj/structure/transit_tube_pod/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(I.tool_behaviour == TOOL_CROWBAR) if(!moving) I.play_tool_sound(src) diff --git a/code/game/objects/structures/votingbox.dm b/code/game/objects/structures/votingbox.dm index fab8b2f70a78..d86a19e45b20 100644 --- a/code/game/objects/structures/votingbox.dm +++ b/code/game/objects/structures/votingbox.dm @@ -19,7 +19,7 @@ var/list/voted //List of ID's that already voted. COOLDOWN_DECLARE(vote_print_cooldown) -/obj/structure/votebox/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/structure/votebox/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(I,/obj/item/card/id)) if(!owner) register_owner(I,user) diff --git a/code/game/objects/structures/water_structures/sink.dm b/code/game/objects/structures/water_structures/sink.dm index 85d420052ec2..49b72384cef2 100644 --- a/code/game/objects/structures/water_structures/sink.dm +++ b/code/game/objects/structures/water_structures/sink.dm @@ -103,7 +103,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink, (-14)) user.visible_message(span_notice("[user] washes [user.p_their()] [washing_face ? "face" : "hands"] using [src]."), \ span_notice("You wash your [washing_face ? "face" : "hands"] using [src].")) -/obj/structure/sink/attackby(obj/item/O, mob/living/user, list/modifiers) +/obj/structure/sink/attackby(obj/item/O, mob/living/user, list/modifiers, list/attack_modifiers) if(busy) to_chat(user, span_warning("Someone's already washing here!")) return @@ -255,7 +255,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink/kitchen, (-16)) . = ..() AddComponent(/datum/component/simple_rotation) -/obj/structure/sinkframe/attackby(obj/item/tool, mob/living/user, list/modifiers) +/obj/structure/sinkframe/attackby(obj/item/tool, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(tool, /obj/item/stock_parts/water_recycler)) qdel(tool) var/obj/structure/sink/greyscale/new_sink = new(loc, REVERSE_DIR(dir), TRUE) diff --git a/code/game/objects/structures/water_structures/toilet.dm b/code/game/objects/structures/water_structures/toilet.dm index 24243921991e..d9ff870ca700 100644 --- a/code/game/objects/structures/water_structures/toilet.dm +++ b/code/game/objects/structures/water_structures/toilet.dm @@ -188,7 +188,7 @@ for(var/datum/material/M as anything in custom_materials) new M.sheet_type(loc, FLOOR(custom_materials[M] / SHEET_MATERIAL_AMOUNT, 1)) -/obj/structure/toilet/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/structure/toilet/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if(cover_open && istype(attacking_item, /obj/item/fish)) if(fishes >= 3) diff --git a/code/game/objects/structures/water_structures/urinal.dm b/code/game/objects/structures/water_structures/urinal.dm index 97db0fa26875..23795155db0c 100644 --- a/code/game/objects/structures/water_structures/urinal.dm +++ b/code/game/objects/structures/water_structures/urinal.dm @@ -51,7 +51,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/urinal, 32) return return ..() -/obj/structure/urinal/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/structure/urinal/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(exposed) if(hidden_item) to_chat(user, span_warning("There is already something in the drain enclosure!")) diff --git a/code/game/objects/structures/water_structures/water_source.dm b/code/game/objects/structures/water_structures/water_source.dm index 42c51b81c5a9..4487547b2416 100644 --- a/code/game/objects/structures/water_structures/water_source.dm +++ b/code/game/objects/structures/water_structures/water_source.dm @@ -57,7 +57,7 @@ span_notice("You wash your [washing_face ? "face" : "hands"] using [src]."), ) -/obj/structure/water_source/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/structure/water_source/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(busy) to_chat(user, span_warning("Someone's already washing here!")) return @@ -138,7 +138,7 @@ . = ..() icon_state = base_icon_state -/obj/structure/water_source/puddle/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/structure/water_source/puddle/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) icon_state = "[base_icon_state]-splash" . = ..() icon_state = base_icon_state diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 9ddd8563ab7a..e91468470ed3 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -92,7 +92,7 @@ leaving.Bump(src) return COMPONENT_ATOM_BLOCK_EXIT -/obj/structure/windoor_assembly/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/windoor_assembly/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) //I really should have spread this out across more states but thin little windoors are hard to sprite. add_fingerprint(user) switch(state) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 3c0ebaa2afe2..8e397bdab1e4 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -270,7 +270,7 @@ return ITEM_INTERACT_SUCCESS -/obj/structure/window/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/structure/window/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(!can_be_reached(user)) return TRUE //skip the afterattack @@ -468,7 +468,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/unanchored/spawner, 0) return list("delay" = 3 SECONDS, "cost" = 15) return FALSE -/obj/structure/window/reinforced/attackby_secondary(obj/item/tool, mob/user, list/modifiers) +/obj/structure/window/reinforced/attackby_secondary(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers) switch(state) if(RWINDOW_SECURE) if(tool.tool_behaviour == TOOL_WELDER) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 11c5da23f265..7755b1a3b857 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -386,7 +386,7 @@ GLOBAL_LIST_EMPTY(station_turfs) C.wiringGuiUpdate(user) C.is_empty(user) -/turf/attackby(obj/item/C, mob/user, list/modifiers) +/turf/attackby(obj/item/C, mob/user, list/modifiers, list/attack_modifiers) if(..()) return TRUE if(can_lay_cable() && istype(C, /obj/item/stack/cable_coil)) diff --git a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm index 56081a0c01c9..79289b0e5f12 100644 --- a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm +++ b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm @@ -340,7 +340,6 @@ Congratulations! You are now trained for invasive xenobiology research!"} affect_cyborg = is_stun_mode log_stun_attack = is_stun_mode // other modes have their own log entries. - stun_animation = is_stun_or_sleep on_stun_sound = is_stun_or_sleep ? 'sound/weapons/egloves.ogg' : null to_chat(usr, span_notice("You switch the baton to [txt] mode.")) @@ -362,16 +361,16 @@ Congratulations! You are now trained for invasive xenobiology research!"} icon_state = "wonderprodProbe" inhand_icon_state = "wonderprodProbe" -/obj/item/melee/baton/abductor/baton_attack(mob/target, mob/living/user, modifiers) +/obj/item/melee/baton/abductor/can_baton(mob/living/target, mob/living/user) if(!AbductorCheck(user)) - return BATON_ATTACK_DONE + return TRUE return ..() /obj/item/melee/baton/abductor/baton_effect(mob/living/target, mob/living/user, modifiers, stun_override) switch (mode) if(BATON_STUN) target.visible_message(span_danger("[user] stuns [target] with [src]!"), - span_userdanger("[user] stuns you with [src]!")) + span_userdanger("[user] stuns you with [src]!"), visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE) target.set_jitter_if_lower(40 SECONDS) target.set_confusion_if_lower(10 SECONDS) target.set_stutter_if_lower(16 SECONDS) diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm index eae5253e40ef..3e5f49d4ff7b 100644 --- a/code/modules/antagonists/abductor/machinery/console.dm +++ b/code/modules/antagonists/abductor/machinery/console.dm @@ -266,7 +266,7 @@ vest = V return TRUE -/obj/machinery/abductor/console/attackby(obj/O, mob/user, list/modifiers) +/obj/machinery/abductor/console/attackby(obj/O, mob/user, list/modifiers, list/attack_modifiers) if(istype(O, /obj/item/abductor/gizmo) && AddGizmo(O)) to_chat(user, span_notice("You link the tool to the console.")) else if(istype(O, /obj/item/clothing/suit/armor/abductor/vest) && AddVest(O)) diff --git a/code/modules/antagonists/abductor/machinery/dispenser.dm b/code/modules/antagonists/abductor/machinery/dispenser.dm index fe70d6e605aa..514ac4a1fc0f 100644 --- a/code/modules/antagonists/abductor/machinery/dispenser.dm +++ b/code/modules/antagonists/abductor/machinery/dispenser.dm @@ -61,7 +61,7 @@ Dispense(gland_id) return TRUE -/obj/machinery/abductor/gland_dispenser/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/abductor/gland_dispenser/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/organ/heart/gland)) if(!user.transferItemToLoc(W, src)) return diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm index bef38553b98d..a6ecf7a3d1a9 100644 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -241,7 +241,7 @@ /obj/structure/blob/hulk_damage() return 15 -/obj/structure/blob/attackby(obj/item/I, mob/user, list/modifiers) +/obj/structure/blob/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(I.tool_behaviour == TOOL_ANALYZER) user.changeNext_move(CLICK_CD_MELEE) to_chat(user, "The analyzer beeps once, then reports:
") diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index 5634bc8e3e38..13e934daead4 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -212,7 +212,7 @@ effectiveness = 80, \ ) -/obj/item/melee/arm_blade/afterattack(atom/target, mob/user, list/modifiers) +/obj/item/melee/arm_blade/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) if(istype(target, /obj/structure/table)) var/obj/smash = target smash.deconstruct(FALSE) diff --git a/code/modules/antagonists/clown_ops/clown_weapons.dm b/code/modules/antagonists/clown_ops/clown_weapons.dm index 43e3b4fda527..40f7d17a591b 100644 --- a/code/modules/antagonists/clown_ops/clown_weapons.dm +++ b/code/modules/antagonists/clown_ops/clown_weapons.dm @@ -133,7 +133,7 @@ var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery) slipper.Slip(src, hit_atom) -/obj/item/melee/energy/sword/bananium/attackby(obj/item/weapon, mob/living/user, list/modifiers) +/obj/item/melee/energy/sword/bananium/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers) if(COOLDOWN_FINISHED(src, next_trombone_allowed) && istype(weapon, /obj/item/melee/energy/sword/bananium)) COOLDOWN_START(src, next_trombone_allowed, 5 SECONDS) to_chat(user, span_warning("You slap the two swords together. Sadly, they do not seem to fit!")) diff --git a/code/modules/antagonists/heretic/influences.dm b/code/modules/antagonists/heretic/influences.dm index da69f5232c2f..b52fed811e13 100644 --- a/code/modules/antagonists/heretic/influences.dm +++ b/code/modules/antagonists/heretic/influences.dm @@ -254,7 +254,7 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/effect/heretic_influence/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/effect/heretic_influence/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return diff --git a/code/modules/antagonists/heretic/items/heretic_blades.dm b/code/modules/antagonists/heretic/items/heretic_blades.dm index c323ac86aa6e..22212e944690 100644 --- a/code/modules/antagonists/heretic/items/heretic_blades.dm +++ b/code/modules/antagonists/heretic/items/heretic_blades.dm @@ -24,7 +24,7 @@ attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend") var/after_use_message = "" -/obj/item/melee/sickly_blade/pre_attack(atom/A, mob/living/user, params) +/obj/item/melee/sickly_blade/pre_attack(atom/A, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return . diff --git a/code/modules/antagonists/heretic/items/heretic_necks.dm b/code/modules/antagonists/heretic/items/heretic_necks.dm index c7144f9b6b38..490e930de527 100644 --- a/code/modules/antagonists/heretic/items/heretic_necks.dm +++ b/code/modules/antagonists/heretic/items/heretic_necks.dm @@ -62,7 +62,7 @@ // How much damage does this item do to the targets sanity? var/sanity_damage = 20 -/obj/item/clothing/neck/heretic_focus/moon_amulette/attack(mob/living/target, mob/living/user, list/modifiers) +/obj/item/clothing/neck/heretic_focus/moon_amulette/attack(mob/living/target, mob/living/user, list/modifiers, list/attack_modifiers) var/mob/living/carbon/human/hit = target if(!IS_HERETIC(user)) user.balloon_alert(user, "you feel a presence watching you") diff --git a/code/modules/antagonists/heretic/knowledge/blade_lore.dm b/code/modules/antagonists/heretic/knowledge/blade_lore.dm index 49e91c588ff0..73320a195ae4 100644 --- a/code/modules/antagonists/heretic/knowledge/blade_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/blade_lore.dm @@ -370,14 +370,8 @@ offand_force_decrement += 2 hits_to_crit_on_average = ROUND_UP(100 / (blade.force * 2 - offand_force_decrement)) - // Save the force as our last weapon force - last_weapon_force = blade.force - // Subtract the decrement - blade.force -= offand_force_decrement // Perform the offhand attack - blade.melee_attack_chain(source, target) - // Restore the force. - blade.force = last_weapon_force + blade.melee_attack_chain(source, target, null, list(FORCE_MODIFIER = -offand_force_decrement)) /datum/heretic_knowledge/spell/furious_steel name = "Furious Steel" diff --git a/code/modules/antagonists/heretic/structures/carving_knife.dm b/code/modules/antagonists/heretic/structures/carving_knife.dm index 51df4fb7de9a..f0de526ec1fe 100644 --- a/code/modules/antagonists/heretic/structures/carving_knife.dm +++ b/code/modules/antagonists/heretic/structures/carving_knife.dm @@ -179,13 +179,14 @@ return return ..() -/obj/structure/trap/eldritch/attacked_by(obj/item/weapon, mob/living/user) - if(istype(weapon, /obj/item/melee/rune_carver) || istype(weapon, /obj/item/nullrod)) +/obj/structure/trap/eldritch/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(istype(tool, /obj/item/melee/rune_carver) || istype(tool, /obj/item/nullrod)) loc.balloon_alert(user, "carving dispelled") playsound(src, 'sound/items/sheath.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, ignore_walls = FALSE) qdel(src) + return ITEM_INTERACT_SUCCESS - return ..() + return NONE /obj/structure/trap/eldritch/alert name = "alert carving" diff --git a/code/modules/antagonists/heretic/structures/mawed_crucible.dm b/code/modules/antagonists/heretic/structures/mawed_crucible.dm index 666e95e5bfb2..15512ee48968 100644 --- a/code/modules/antagonists/heretic/structures/mawed_crucible.dm +++ b/code/modules/antagonists/heretic/structures/mawed_crucible.dm @@ -57,37 +57,37 @@ return span_notice("It's at [round(atom_integrity * 100 / max_integrity)]% stability.") return ..() -/obj/structure/destructible/eldritch_crucible/attacked_by(obj/item/weapon, mob/living/user) - if(!iscarbon(user)) - return ..() - - if(!IS_HERETIC_OR_MONSTER(user)) - bite_the_hand(user) - return TRUE - - if(isbodypart(weapon)) - - var/obj/item/bodypart/consumed = weapon +/obj/structure/destructible/eldritch_crucible/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(isbodypart(tool)) + var/obj/item/bodypart/consumed = tool if(!IS_ORGANIC_LIMB(consumed)) balloon_alert(user, "not organic!") - return - + return ITEM_INTERACT_BLOCKING + if(!IS_HERETIC_OR_MONSTER(user)) + if(user.combat_mode) + return ITEM_INTERACT_SKIP_TO_ATTACK + bite_the_hand(user) + return ITEM_INTERACT_SUCCESS consume_fuel(user, consumed) - return TRUE + return ITEM_INTERACT_SUCCESS - if(isorgan(weapon)) - var/obj/item/organ/consumed = weapon + if(isorgan(tool)) + var/obj/item/organ/consumed = tool if(!IS_ORGANIC_ORGAN(consumed)) balloon_alert(user, "not organic!") - return + return ITEM_INTERACT_BLOCKING if(consumed.organ_flags & ORGAN_VITAL) // Basically, don't eat organs like brains balloon_alert(user, "invalid organ!") - return - + return ITEM_INTERACT_BLOCKING + if(!IS_HERETIC_OR_MONSTER(user)) + if(user.combat_mode) + return ITEM_INTERACT_SKIP_TO_ATTACK + bite_the_hand(user) + return ITEM_INTERACT_SUCCESS consume_fuel(user, consumed) - return TRUE + return ITEM_INTERACT_SUCCESS - return ..() + return NONE /obj/structure/destructible/eldritch_crucible/item_interaction(mob/living/user, obj/item/tool, list/modifiers) if(istype(tool, /obj/item/codex_cicatrix) || istype(tool, /obj/item/melee/touch_attack/mansus_fist)) @@ -180,7 +180,7 @@ if(QDELETED(arm)) return - to_chat(user, span_userdanger("[src] grabs your [arm.name]!")) + to_chat(user, span_userdanger("[src] grabs your [arm.plaintext_zone]!")) arm.dismember() consume_fuel(consumed = arm) diff --git a/code/modules/antagonists/nightmare/nightmare_equipment.dm b/code/modules/antagonists/nightmare/nightmare_equipment.dm index 6921e752240d..9a0372716e8c 100644 --- a/code/modules/antagonists/nightmare/nightmare_equipment.dm +++ b/code/modules/antagonists/nightmare/nightmare_equipment.dm @@ -47,7 +47,7 @@ UnregisterSignal(user, COMSIG_MOB_AFTER_EXIT_JAUNT) remove_crit() -/obj/item/light_eater/attack(mob/living/target, mob/living/user, list/modifiers) +/obj/item/light_eater/attack(mob/living/target, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(!has_crit) return diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm b/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm index 2d83b12fe690..e7d0f15b60bb 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm @@ -82,7 +82,7 @@ return discover_after -/obj/item/disk/nuclear/attackby(obj/item/weapon, mob/living/user, list/modifiers) +/obj/item/disk/nuclear/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(weapon, /obj/item/claymore/highlander) && !fake) var/obj/item/claymore/highlander/claymore = weapon if(claymore.nuke_disk) diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm index d7aa4388973a..5d3da08da2da 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm @@ -87,7 +87,7 @@ GLOBAL_VAR(station_nuke_source) return TRUE -/obj/machinery/nuclearbomb/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/nuclearbomb/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if (istype(weapon, /obj/item/disk/nuclear)) if(!disk_check(weapon)) return TRUE diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm index c09b02ff2240..f2cc848a8b35 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/beer_nuke.dm @@ -27,7 +27,7 @@ else . += span_danger("It's empty.") -/obj/machinery/nuclearbomb/beer/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/nuclearbomb/beer/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(weapon.is_refillable()) weapon.interact_with_atom(keg, user) // redirect refillable containers to the keg, allowing them to be filled return TRUE // pretend we handled the attack, too. diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index 530ff29650b7..5fc3ba692920 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -65,7 +65,7 @@ qdel(src) return PROCESS_KILL -/obj/effect/rend/attackby(obj/item/I, mob/user, list/modifiers) +/obj/effect/rend/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/nullrod)) user.visible_message(span_danger("[user] seals \the [src] with \the [I].")) qdel(src) diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 2c08e2bc3961..cbeb91ed79ec 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -309,7 +309,7 @@ A Wraith, which does high damage and can jaunt through walls, though it is quite fragile.\n A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow."} -/obj/structure/constructshell/attackby(obj/item/O, mob/user, list/modifiers) +/obj/structure/constructshell/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) if(istype(O, /obj/item/soulstone)) var/obj/item/soulstone/SS = O if(!IS_CULTIST(user) && !HAS_MIND_TRAIT(user, TRAIT_MAGICALLY_GIFTED) && !SS.theme == THEME_HOLY) diff --git a/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm b/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm index 52c6e10c1b94..5652241692dd 100644 --- a/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/wizard_spellbook.dm @@ -74,7 +74,7 @@ return ..() -/obj/item/spellbook/attackby(obj/item/O, mob/user, list/modifiers) +/obj/item/spellbook/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) // This can be generalized in the future, but for now it stays if(istype(O, /obj/item/antag_spawner/contract)) var/datum/spellbook_entry/item/contract/contract_entry = locate() in entries diff --git a/code/modules/art/paintings.dm b/code/modules/art/paintings.dm index 0a48167dc1cc..909985f5a254 100644 --- a/code/modules/art/paintings.dm +++ b/code/modules/art/paintings.dm @@ -15,7 +15,7 @@ var/obj/item/canvas/painting = null //Adding canvases -/obj/structure/easel/attackby(obj/item/I, mob/user, list/modifiers) +/obj/structure/easel/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/canvas)) var/obj/item/canvas/canvas = I user.transfer_item_to_turf(canvas, get_turf(src), silent = FALSE) @@ -135,7 +135,7 @@ ui = new(user, src, "Canvas", name) ui.open() -/obj/item/canvas/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/item/canvas/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(!user.combat_mode) ui_interact(user) else @@ -721,7 +721,7 @@ . = ..() SSpersistent_paintings.painting_frames -= src -/obj/structure/sign/painting/attackby(obj/item/I, mob/user, list/modifiers) +/obj/structure/sign/painting/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(!current_canvas && istype(I, /obj/item/canvas)) frame_canvas(user,I) else if(current_canvas && current_canvas.painting_metadata.title == initial(current_canvas.painting_metadata.title) && istype(I,/obj/item/pen)) diff --git a/code/modules/art/statues.dm b/code/modules/art/statues.dm index d5d959705f8a..5c0bd756b20d 100644 --- a/code/modules/art/statues.dm +++ b/code/modules/art/statues.dm @@ -33,7 +33,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/structure/statue/attackby(obj/item/W, mob/living/user, list/modifiers) +/obj/structure/statue/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if(W.tool_behaviour == TOOL_WELDER) if(!W.tool_start_check(user, amount=1)) diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 2f0c2aa612e6..43c50fe16a1c 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -117,7 +117,7 @@ return . = ..() -/obj/item/assembly/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/assembly/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(isassembly(attacking_item)) var/obj/item/assembly/new_assembly = attacking_item // Check both our's and their's assembly flags to see if either should not duplicate diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index fc2ea4a21a81..cf9cbd6b10e4 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -289,7 +289,7 @@ ..() new /obj/effect/temp_visual/borgflash(get_turf(src)) -/obj/item/assembly/flash/cyborg/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/assembly/flash/cyborg/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) return /obj/item/assembly/flash/cyborg/screwdriver_act(mob/living/user, obj/item/I) return diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 89d416ca1621..f42f0df6f5da 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -134,7 +134,7 @@ for(var/obj/item/assembly/assembly as anything in assemblies) assembly.attack_hand(user, modifiers) // Note override in assembly.dm to prevent side effects here -/obj/item/assembly_holder/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/item/assembly_holder/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(isassembly(weapon)) try_add_assembly(weapon, user) return diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 9f9f3818f673..1ea31def3a7e 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -120,7 +120,7 @@ update_appearance() -/obj/item/assembly/signaler/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/assembly/signaler/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(issignaler(W)) var/obj/item/assembly/signaler/signaler2 = W if(secured && signaler2.secured) @@ -182,7 +182,7 @@ /obj/item/assembly/signaler/cyborg -/obj/item/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/assembly/signaler/cyborg/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) return /obj/item/assembly/signaler/cyborg/screwdriver_act(mob/living/user, obj/item/I) return @@ -193,7 +193,7 @@ /obj/item/assembly/signaler/internal/ui_state(mob/user) return GLOB.inventory_state -/obj/item/assembly/signaler/internal/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/assembly/signaler/internal/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) return /obj/item/assembly/signaler/internal/screwdriver_act(mob/living/user, obj/item/I) diff --git a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm index a8c1ebfea744..6ee1ed9482c9 100644 --- a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm +++ b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm @@ -98,7 +98,7 @@ if((buildstage == AIR_ALARM_BUILD_COMPLETE)) new /obj/item/stack/cable_coil(loc, 3) -/obj/machinery/airalarm/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/airalarm/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) update_last_used(user) switch(buildstage) if(AIR_ALARM_BUILD_COMPLETE) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index f9ca458bb39e..b83e281a39dd 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -388,7 +388,7 @@ nodes[nodes.Find(reference)] = null update_appearance() -/obj/machinery/atmospherics/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/atmospherics/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/pipe)) //lets you autodrop var/obj/item/pipe/pipe = W if(user.dropItemToGround(pipe)) diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm index f20ee606cb25..c4bcfcdcc88c 100644 --- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm +++ b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm @@ -168,7 +168,7 @@ /obj/machinery/electrolyzer/crowbar_act(mob/living/user, obj/item/tool) return default_deconstruction_crowbar(tool) -/obj/machinery/electrolyzer/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/electrolyzer/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if(istype(I, /obj/item/stock_parts/power_store/cell)) if(!panel_open) diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm index 8662baf4c2df..0eee62cdbeaf 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm @@ -34,7 +34,7 @@ . = ..() . += span_notice("[src] can be rotated by first opening the panel with a screwdriver and then using a wrench on it.") -/obj/machinery/atmospherics/components/unary/hypertorus/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/atmospherics/components/unary/hypertorus/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(!fusion_started) if(default_deconstruction_screwdriver(user, icon_state_open, icon_state_off, I)) return @@ -128,7 +128,7 @@ . = ..() . += span_notice("[src] can be rotated by first opening the panel with a screwdriver and then using a wrench on it.") -/obj/machinery/hypertorus/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/hypertorus/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(!fusion_started) if(default_deconstruction_screwdriver(user, icon_state_open, icon_state_off, I)) return diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm index b44a9f82fa07..219d7c338ca4 100644 --- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm +++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm @@ -58,7 +58,7 @@ context[SCREENTIP_CONTEXT_LMB] = "Rotate" return CONTEXTUAL_SCREENTIP_SET -/obj/machinery/atmospherics/components/binary/crystallizer/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/atmospherics/components/binary/crystallizer/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(!on) if(default_deconstruction_screwdriver(user, "[base_icon_state]-open", "[base_icon_state]-off", I)) return diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm index 6d39f350d13d..f95e5c18da55 100644 --- a/code/modules/atmospherics/machinery/components/tank.dm +++ b/code/modules/atmospherics/machinery/components/tank.dm @@ -548,7 +548,7 @@ if(TANK_PLATING_UNSECURED) icon_state = "plated_frame" -/obj/structure/tank_frame/attackby(obj/item/item, mob/living/user, list/modifiers) +/obj/structure/tank_frame/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers) if(construction_state == TANK_FRAME && isstack(item) && add_plating(user, item)) return return ..() diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index 871a5dc8f923..785a1bb8aa96 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -87,7 +87,7 @@ return air_temporary.remove(amount) return parent.air.remove(amount) -/obj/machinery/atmospherics/pipe/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/atmospherics/pipe/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/pipe_meter)) var/obj/item/pipe_meter/meter = item user.dropItemToGround(meter) diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 7a2f9424a005..26e75dfd5ad7 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -412,7 +412,7 @@ if(internal_cell) internal_cell.forceMove(drop_location()) -/obj/machinery/portable_atmospherics/canister/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/portable_atmospherics/canister/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/stock_parts/power_store/cell)) var/obj/item/stock_parts/power_store/cell/active_cell = item if(!panel_open) diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 5a5455223d35..025ff01d3b4a 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -9,6 +9,7 @@ anchored = FALSE layer = ABOVE_OBJ_LAYER interaction_flags_click = NEED_DEXTERITY + damage_deflection = 11 ///Stores the gas mixture of the portable component. Don't access this directly, use return_air() so you support the temporary processing it provides var/datum/gas_mixture/air_contents @@ -196,7 +197,7 @@ update_appearance() return TRUE -/obj/machinery/portable_atmospherics/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/portable_atmospherics/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(!istype(item, /obj/item/tank)) return ..() if(machine_stat & BROKEN) @@ -238,13 +239,20 @@ investigate_log("was connected to [possible_port] by [key_name(user)].", INVESTIGATE_ATMOS) return TRUE +/obj/machinery/portable_atmospherics/atom_break(damage_flag) + . = ..() + damage_deflection = 0 + +/obj/machinery/portable_atmospherics/atom_fix() + . = ..() + damage_deflection = initial(damage_deflection) + /obj/machinery/portable_atmospherics/attacked_by(obj/item/item, mob/user) - if(item.force < 10 && !(machine_stat & BROKEN)) - take_damage(0) + . = ..() + if(!.) return investigate_log("was smacked with \a [item] by [key_name(user)].", INVESTIGATE_ATMOS) - add_fingerprint(user) - return ..() + add_hiddenprint(user) /// Holding tanks can get to zero integrity and be destroyed without other warnings due to pressure change. /// This checks for that case and removes our reference to it. diff --git a/code/modules/awaymissions/signpost.dm b/code/modules/awaymissions/signpost.dm index b24ada67578c..4fec07484a45 100644 --- a/code/modules/awaymissions/signpost.dm +++ b/code/modules/awaymissions/signpost.dm @@ -30,7 +30,7 @@ else to_chat(user, "Nothing happens. You feel that this is a bad sign.") -/obj/structure/signpost/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/signpost/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) return interact(user) /obj/structure/signpost/attack_paw(mob/user, list/modifiers) diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm index 4f0262625a95..6d338e5ec269 100644 --- a/code/modules/awaymissions/super_secret_room.dm +++ b/code/modules/awaymissions/super_secret_room.dm @@ -90,7 +90,7 @@ speaking = FALSE times_spoken_to++ -/obj/structure/speaking_tile/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/speaking_tile/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) return interact(user) /obj/structure/speaking_tile/attack_paw(mob/user, list/modifiers) diff --git a/code/modules/basketball/basketball.dm b/code/modules/basketball/basketball.dm index 9b991169bf2d..8d58733a59e4 100644 --- a/code/modules/basketball/basketball.dm +++ b/code/modules/basketball/basketball.dm @@ -150,7 +150,7 @@ user.balloon_alert_to_viewers("fumbles the ball") -/obj/item/toy/basketball/attack(mob/living/carbon/target, mob/living/user, list/modifiers) +/obj/item/toy/basketball/attack(mob/living/carbon/target, mob/living/user, list/modifiers, list/attack_modifiers) if(!iscarbon(target) || user.combat_mode) return ..() diff --git a/code/modules/basketball/hoop.dm b/code/modules/basketball/hoop.dm index 87e336fb647d..c3379fbcaead 100644 --- a/code/modules/basketball/hoop.dm +++ b/code/modules/basketball/hoop.dm @@ -89,7 +89,7 @@ scoreboard.add_overlay(tens_overlay) scoreboard.add_overlay(emissive_tens_overlay) -/obj/structure/hoop/attackby(obj/item/ball, mob/living/baller, list/modifiers) +/obj/structure/hoop/attackby(obj/item/ball, mob/living/baller, list/modifiers, list/attack_modifiers) if(!baller.can_perform_action(src, NEED_HANDS|FORBID_TELEKINESIS_REACH)) return // TK users aren't allowed to dunk diff --git a/code/modules/bitrunning/server/_parent.dm b/code/modules/bitrunning/server/_parent.dm index c814ff839d9d..b398d8d1aa33 100644 --- a/code/modules/bitrunning/server/_parent.dm +++ b/code/modules/bitrunning/server/_parent.dm @@ -122,7 +122,7 @@ return ..() -/obj/machinery/quantum_server/item_interaction(mob/living/user, obj/item/tool, list/modifiers) +/obj/machinery/quantum_server/item_interaction(mob/living/user, obj/item/tool, list/modifiers, list/attack_modifiers) if(!istype(tool, /obj/item/bitrunning_debug)) return NONE diff --git a/code/modules/capture_the_flag/ctf_game.dm b/code/modules/capture_the_flag/ctf_game.dm index aabec89af478..36c15b8c15ae 100644 --- a/code/modules/capture_the_flag/ctf_game.dm +++ b/code/modules/capture_the_flag/ctf_game.dm @@ -171,7 +171,7 @@ player_mob.add_traits(player_traits, CAPTURE_THE_FLAG_TRAIT) return player_mob //used in medisim_game.dm -/obj/machinery/ctf/spawner/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/ctf/spawner/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/ctf_flag)) var/obj/item/ctf_flag/flag = item if(flag.team != team) @@ -268,7 +268,7 @@ user.set_anchored(TRUE) user.status_flags &= ~CANPUSH -/obj/item/ctf_flag/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/ctf_flag/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(!istype(item, /obj/item/ctf_flag)) return ..() @@ -367,7 +367,7 @@ scores += UNLINT("[ctf_team.team_color] - [ctf_team.points]/[ctf_game.points_to_win]\n") balloon_alert_to_viewers(scores) -/obj/machinery/ctf/control_point/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/ctf/control_point/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) capture(user) /obj/machinery/ctf/control_point/attack_hand(mob/user, list/modifiers) diff --git a/code/modules/cards/cardhand.dm b/code/modules/cards/cardhand.dm index 714c49ed38ef..806e56572573 100644 --- a/code/modules/cards/cardhand.dm +++ b/code/modules/cards/cardhand.dm @@ -91,7 +91,7 @@ return ..() -/obj/item/toy/cards/cardhand/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) +/obj/item/toy/cards/cardhand/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) attackby(weapon, user, modifiers, flip_card = TRUE) return SECONDARY_ATTACK_CONTINUE_CHAIN diff --git a/code/modules/cards/deck/deck.dm b/code/modules/cards/deck/deck.dm index 3d19e6888937..baa46542fee5 100644 --- a/code/modules/cards/deck/deck.dm +++ b/code/modules/cards/deck/deck.dm @@ -175,7 +175,7 @@ card.Flip(CARD_FACEDOWN) . = ..() -/obj/item/toy/cards/deck/attackby(obj/item/item, mob/living/user, list/modifiers) +/obj/item/toy/cards/deck/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/toy/singlecard) || istype(item, /obj/item/toy/cards/cardhand)) insert(item) var/card_grammar = istype(item, /obj/item/toy/singlecard) ? "card" : "cards" diff --git a/code/modules/cards/singlecard.dm b/code/modules/cards/singlecard.dm index e61de4a600dc..33b93d850dec 100644 --- a/code/modules/cards/singlecard.dm +++ b/code/modules/cards/singlecard.dm @@ -219,7 +219,7 @@ return return ..() -/obj/item/toy/singlecard/attackby_secondary(obj/item/item, mob/living/user, list/modifiers) +/obj/item/toy/singlecard/attackby_secondary(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers) attackby(item, user, modifiers, flip_card=TRUE) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN diff --git a/code/modules/cargo/coupon.dm b/code/modules/cargo/coupon.dm index 965887f44c72..f3a24a6ee7db 100644 --- a/code/modules/cargo/coupon.dm +++ b/code/modules/cargo/coupon.dm @@ -106,7 +106,7 @@ to_chat(player, span_userdanger("...The suspense is killing you!")) player.set_heartattack(status = TRUE) -/obj/item/coupon/attack_atom(obj/O, mob/living/user, list/modifiers) +/obj/item/coupon/attack_atom(obj/O, mob/living/user, list/modifiers, list/attack_modifiers) if(!istype(O, /obj/machinery/computer/cargo)) return ..() if(discount_pct_off == COUPON_OMEN) diff --git a/code/modules/cargo/materials_market.dm b/code/modules/cargo/materials_market.dm index 3621ce197beb..44660e9728c4 100644 --- a/code/modules/cargo/materials_market.dm +++ b/code/modules/cargo/materials_market.dm @@ -53,7 +53,7 @@ if(default_deconstruction_crowbar(tool)) return ITEM_INTERACT_SUCCESS -/obj/machinery/materials_market/attackby(obj/item/O, mob/user, list/modifiers) +/obj/machinery/materials_market/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) if(is_type_in_list(O, exportable_material_items)) var/amount = 0 var/value = 0 diff --git a/code/modules/cargo/universal_scanner.dm b/code/modules/cargo/universal_scanner.dm index ab8046ab3791..632a3bce3831 100644 --- a/code/modules/cargo/universal_scanner.dm +++ b/code/modules/cargo/universal_scanner.dm @@ -71,7 +71,7 @@ return ITEM_INTERACT_SUCCESS return NONE -/obj/item/universal_scanner/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/universal_scanner/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(scanning_mode == SCAN_SALES_TAG && isidcard(attacking_item)) var/obj/item/card/id/potential_acc = attacking_item diff --git a/code/modules/clothing/belts/polymorph_belt.dm b/code/modules/clothing/belts/polymorph_belt.dm index 9eb0ba89dbd9..b4cdee3ea72a 100644 --- a/code/modules/clothing/belts/polymorph_belt.dm +++ b/code/modules/clothing/belts/polymorph_belt.dm @@ -48,7 +48,7 @@ update_transform_action() playsound(src, 'sound/machines/crate_open.ogg', 50, FALSE) -/obj/item/polymorph_belt/attack(mob/living/target_mob, mob/living/user, list/modifiers) +/obj/item/polymorph_belt/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if (.) return diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 463f99fc6303..93e513d3418e 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -113,7 +113,7 @@ else qdel(src) -/obj/item/clothing/attack(mob/living/target, mob/living/user, list/modifiers) +/obj/item/clothing/attack(mob/living/target, mob/living/user, list/modifiers, list/attack_modifiers) if(user.combat_mode || !ismoth(target) || ispickedupmob(src)) return ..() if((clothing_flags & INEDIBLE_CLOTHING) || (resistance_flags & INDESTRUCTIBLE)) diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm index 514d17bd7786..248d5bac0bb8 100644 --- a/code/modules/clothing/gloves/_gloves.dm +++ b/code/modules/clothing/gloves/_gloves.dm @@ -72,7 +72,7 @@ return FALSE // We don't want to cut dyed gloves. return TRUE -/obj/item/clothing/gloves/attackby(obj/item/tool, mob/user, list/modifiers) +/obj/item/clothing/gloves/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 4266e2625e57..6a0ebbcdd860 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -45,7 +45,7 @@ . = ..() AddComponent(/datum/component/seclite_attachable, light_icon_state = "flight") -/obj/item/clothing/head/helmet/sec/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/clothing/head/helmet/sec/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(issignaler(attacking_item)) var/obj/item/assembly/signaler/attached_signaler = attacking_item // There's a flashlight in us. Remove it first, or it'll be lost forever! diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 91a90c4bf683..a3a1fd6f40de 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -297,7 +297,7 @@ return TRUE -/obj/item/clothing/head/fedora/inspector_hat/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/clothing/head/fedora/inspector_hat/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(LAZYLEN(contents) >= max_items) diff --git a/code/modules/clothing/head/tophat.dm b/code/modules/clothing/head/tophat.dm index cb0fd3da3fe0..05b1f2d7bd6a 100644 --- a/code/modules/clothing/head/tophat.dm +++ b/code/modules/clothing/head/tophat.dm @@ -10,7 +10,7 @@ /// Cooldown for how often we can pull rabbits out of here COOLDOWN_DECLARE(rabbit_cooldown) -/obj/item/clothing/head/hats/tophat/attackby(obj/item/hitby_item, mob/user, list/modifiers) +/obj/item/clothing/head/hats/tophat/attackby(obj/item/hitby_item, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(istype(hitby_item, /obj/item/gun/magic/wand)) abracadabra(hitby_item, user) diff --git a/code/modules/clothing/masks/muzzle.dm b/code/modules/clothing/masks/muzzle.dm index 5d22f66ec27b..d0de59f0ae49 100644 --- a/code/modules/clothing/masks/muzzle.dm +++ b/code/modules/clothing/masks/muzzle.dm @@ -77,7 +77,7 @@ INVOKE_ASYNC(user, TYPE_PROC_REF(/mob, emote), "scream") to_chat(user, span_userdanger("You feel a massive pain as hundreds of tiny spikes tear free from your face!")) -/obj/item/clothing/mask/muzzle/tape/attack(mob/living/carbon/victim, mob/living/carbon/attacker, list/modifiers) +/obj/item/clothing/mask/muzzle/tape/attack(mob/living/carbon/victim, mob/living/carbon/attacker, list/modifiers, list/attack_modifiers) if(attacker.combat_mode) return ..() if(victim.is_mouth_covered(ITEM_SLOT_HEAD)) diff --git a/code/modules/clothing/neck/collar_bomb.dm b/code/modules/clothing/neck/collar_bomb.dm index 69f1c4094171..77c23516bffc 100644 --- a/code/modules/clothing/neck/collar_bomb.dm +++ b/code/modules/clothing/neck/collar_bomb.dm @@ -38,7 +38,7 @@ return . += span_tinynotice("It has a [EXAMINE_HINT("wire")] panel that could be interacted with...") -/obj/item/clothing/neck/collar_bomb/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/clothing/neck/collar_bomb/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(is_wire_tool(item)) wires.interact(user) else diff --git a/code/modules/clothing/shoes/sneakers.dm b/code/modules/clothing/shoes/sneakers.dm index ce6dccb400aa..63f7cd40d1d8 100644 --- a/code/modules/clothing/shoes/sneakers.dm +++ b/code/modules/clothing/shoes/sneakers.dm @@ -153,13 +153,13 @@ return return ..() -/obj/item/clothing/shoes/sneakers/orange/pre_attack(atom/movable/attacking_movable, mob/living/user, list/modifiers) +/obj/item/clothing/shoes/sneakers/orange/pre_attack(atom/movable/attacking_movable, mob/living/user, list/modifiers, list/attack_modifiers) if(attached_cuffs || attacking_movable.type != /obj/item/restraints/handcuffs) return ..() attacking_movable.forceMove(src) return TRUE -/obj/item/clothing/shoes/sneakers/orange/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/clothing/shoes/sneakers/orange/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(attached_cuffs || attacking_item.type != /obj/item/restraints/handcuffs) // Note: not using istype here because we want to ignore all subtypes return ..() attacking_item.forceMove(src) diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index fd6b5ca3f7e1..c86cca85d829 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -213,7 +213,7 @@ return ITEM_INTERACT_SUCCESS // object handling for accessing features of the suit -/obj/item/clothing/suit/space/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/clothing/suit/space/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(!cell_cover_open || !istype(I, /obj/item/stock_parts/power_store/cell)) return ..() if(cell) diff --git a/code/modules/clothing/spacesuits/softsuit.dm b/code/modules/clothing/spacesuits/softsuit.dm index b4f31942e5d7..2f07001ac555 100644 --- a/code/modules/clothing/spacesuits/softsuit.dm +++ b/code/modules/clothing/spacesuits/softsuit.dm @@ -52,7 +52,7 @@ . = ..() . += span_notice("You can start constructing a critter sized mecha with a [span_bold("cyborg leg")].") -/obj/item/clothing/head/helmet/space/eva/attackby(obj/item/attacked_with, mob/user, list/modifiers) +/obj/item/clothing/head/helmet/space/eva/attackby(obj/item/attacked_with, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index ffb60bab4062..4570957c0b2f 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -105,7 +105,7 @@ if(accessory_overlay) . += accessory_overlay -/obj/item/clothing/under/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/clothing/under/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(has_sensor == BROKEN_SENSORS && istype(attacking_item, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/cabling = attacking_item to_chat(user, span_notice("You repair the suit sensors on [src] with [cabling].")) diff --git a/code/modules/economy/holopay.dm b/code/modules/economy/holopay.dm index e35d265ddbb6..52219bb61aa1 100644 --- a/code/modules/economy/holopay.dm +++ b/code/modules/economy/holopay.dm @@ -74,7 +74,7 @@ linked_card = null return ..() -/obj/structure/holopay/attackby(obj/item/held_item, mob/item_holder, list/modifiers) +/obj/structure/holopay/attackby(obj/item/held_item, mob/item_holder, list/modifiers, list/attack_modifiers) var/mob/living/user = item_holder if(!isliving(user)) return ..() @@ -115,7 +115,7 @@ return TRUE return ..() -/obj/structure/holopay/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) +/obj/structure/holopay/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) /// Can kill it by right-clicking with ID because it seems useful and intuitive, to me, at least if(!isidcard(weapon)) return ..() diff --git a/code/modules/events/space_vines/vine_structure.dm b/code/modules/events/space_vines/vine_structure.dm index a7b9aa2fce51..6bd89ac255a5 100644 --- a/code/modules/events/space_vines/vine_structure.dm +++ b/code/modules/events/space_vines/vine_structure.dm @@ -30,6 +30,7 @@ /obj/structure/spacevine/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_CHASM_DESTROYED, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_INVERTED_DEMOLITION, INNATE_TRAIT) add_atom_colour("#ffffff", FIXED_COLOUR_PRIORITY) var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = PROC_REF(on_entered), @@ -76,16 +77,14 @@ if(!override) qdel(src) -/obj/structure/spacevine/attacked_by(obj/item/item, mob/living/user) - var/damage_dealt = item.force - if(item.get_sharpness()) - damage_dealt *= 4 +/obj/structure/spacevine/attacked_by(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers) + LAZYSET(attack_modifiers, SILENCE_DEFAULT_MESSAGES, TRUE) + LAZYSET(attack_modifiers, FORCE_MULTIPLIER, 1) if(item.damtype == BURN) - damage_dealt *= 4 - - for(var/datum/spacevine_mutation/mutation in mutations) - damage_dealt = mutation.on_hit(src, user, item, damage_dealt) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further - take_damage(damage_dealt, item.damtype, MELEE, 1) + MODIFY_ATTACK_FORCE_MULTIPLIER(attack_modifiers, 4) + if(item.get_sharpness()) + MODIFY_ATTACK_FORCE_MULTIPLIER(attack_modifiers, 4) + return ..() /obj/structure/spacevine/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) diff --git a/code/modules/events/wizard/rpgloot.dm b/code/modules/events/wizard/rpgloot.dm index 077c644d2b5d..43517ec26dd4 100644 --- a/code/modules/events/wizard/rpgloot.dm +++ b/code/modules/events/wizard/rpgloot.dm @@ -35,7 +35,7 @@ return ..() -/obj/item/upgradescroll/pre_attack(obj/item/target, mob/living/user, list/modifiers) +/obj/item/upgradescroll/pre_attack(obj/item/target, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(. || !istype(target) || !user.combat_mode) return diff --git a/code/modules/experisci/destructive_scanner.dm b/code/modules/experisci/destructive_scanner.dm index 5c37c5a2a279..415a33289d6e 100644 --- a/code/modules/experisci/destructive_scanner.dm +++ b/code/modules/experisci/destructive_scanner.dm @@ -102,7 +102,7 @@ . = ..() icon_state = scanning ? "tube_on" : "tube_open" -/obj/machinery/destructive_scanner/attackby(obj/item/object, mob/user, list/modifiers) +/obj/machinery/destructive_scanner/attackby(obj/item/object, mob/user, list/modifiers, list/attack_modifiers) if (!scanning && default_deconstruction_screwdriver(user, "tube_open", "tube_open", object) || default_deconstruction_crowbar(object)) update_icon() return diff --git a/code/modules/explorer_drone/exodrone.dm b/code/modules/explorer_drone/exodrone.dm index 16e4f4eb1d01..1989548dd756 100644 --- a/code/modules/explorer_drone/exodrone.dm +++ b/code/modules/explorer_drone/exodrone.dm @@ -359,7 +359,7 @@ GLOBAL_LIST_EMPTY(exodrone_launchers) if(fuel_canister) . += span_notice("You can remove the [fuel_canister] with a prying tool.") -/obj/machinery/exodrone_launcher/attackby(obj/item/weapon, mob/living/user, list/modifiers) +/obj/machinery/exodrone_launcher/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(weapon, /obj/item/fuel_pellet)) if(fuel_canister) to_chat(user, span_warning("There's already fuel loaded inside [src]!")) diff --git a/code/modules/explorer_drone/loot.dm b/code/modules/explorer_drone/loot.dm index da0432b5af85..5f60c613eee2 100644 --- a/code/modules/explorer_drone/loot.dm +++ b/code/modules/explorer_drone/loot.dm @@ -162,7 +162,7 @@ GLOBAL_LIST_INIT(adventure_loot_generator_index,generate_generator_index()) cell = new /obj/item/stock_parts/power_store/cell(src) AddComponent(/datum/component/two_handed) -/obj/item/firelance/attack(mob/living/M, mob/living/user, list/modifiers) +/obj/item/firelance/attack(mob/living/M, mob/living/user, list/modifiers, list/attack_modifiers) if(!user.combat_mode) return . = ..() diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index 22e72b7b60e3..4513f51b414e 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -402,7 +402,7 @@ icon_state = base_icon_state return ..() -/obj/item/fish/attackby(obj/item/item, mob/living/user, list/modifiers) +/obj/item/fish/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers) if(!istype(item, /obj/item/fish_feed)) return ..() if(!item.reagents.total_volume) diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index 53f633da9307..1ae5bede48cb 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -354,7 +354,7 @@ . += line_overlay . += mutable_appearance(icon_file, "hook_overlay") -/obj/item/fishing_rod/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/fishing_rod/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(slot_check(attacking_item,ROD_SLOT_LINE)) use_slot(ROD_SLOT_LINE, user, attacking_item) SStgui.update_uis(src) diff --git a/code/modules/food_and_drinks/machinery/coffeemaker.dm b/code/modules/food_and_drinks/machinery/coffeemaker.dm index aaef02f51a1d..9a05451323e0 100644 --- a/code/modules/food_and_drinks/machinery/coffeemaker.dm +++ b/code/modules/food_and_drinks/machinery/coffeemaker.dm @@ -179,7 +179,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/coffeemaker/attackby(obj/item/attack_item, mob/living/user, list/modifiers) +/obj/machinery/coffeemaker/attackby(obj/item/attack_item, mob/living/user, list/modifiers, list/attack_modifiers) //You can only screw open empty grinder if(!coffeepot && default_deconstruction_screwdriver(user, icon_state, icon_state, attack_item)) return FALSE @@ -581,7 +581,7 @@ return FALSE return TRUE -/obj/machinery/coffeemaker/impressa/attackby(obj/item/attack_item, mob/living/user, list/modifiers) +/obj/machinery/coffeemaker/impressa/attackby(obj/item/attack_item, mob/living/user, list/modifiers, list/attack_modifiers) //You can only screw open empty grinder if(!coffeepot && default_deconstruction_screwdriver(user, icon_state, icon_state, attack_item)) return diff --git a/code/modules/food_and_drinks/machinery/deep_fryer.dm b/code/modules/food_and_drinks/machinery/deep_fryer.dm index 839fc36d6b3f..df72bf46c16a 100644 --- a/code/modules/food_and_drinks/machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/machinery/deep_fryer.dm @@ -88,7 +88,7 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/deepfryer/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/deepfryer/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) // Dissolving pills into the frier if(istype(weapon, /obj/item/reagent_containers/pill)) if(!reagents.total_volume) diff --git a/code/modules/food_and_drinks/machinery/gibber.dm b/code/modules/food_and_drinks/machinery/gibber.dm index bd5721a99770..b3adf8e31f30 100644 --- a/code/modules/food_and_drinks/machinery/gibber.dm +++ b/code/modules/food_and_drinks/machinery/gibber.dm @@ -113,7 +113,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/gibber/attackby(obj/item/P, mob/user, list/modifiers) +/obj/machinery/gibber/attackby(obj/item/P, mob/user, list/modifiers, list/attack_modifiers) if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", P)) return diff --git a/code/modules/food_and_drinks/machinery/griddle.dm b/code/modules/food_and_drinks/machinery/griddle.dm index 6552c20c6f58..abc7d9ba3d05 100644 --- a/code/modules/food_and_drinks/machinery/griddle.dm +++ b/code/modules/food_and_drinks/machinery/griddle.dm @@ -62,7 +62,7 @@ return default_deconstruction_crowbar(I, ignore_panel = TRUE) -/obj/machinery/griddle/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/griddle/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(griddled_objects.len >= max_items) to_chat(user, span_notice("[src] can't fit more items!")) diff --git a/code/modules/food_and_drinks/machinery/icecream_vat.dm b/code/modules/food_and_drinks/machinery/icecream_vat.dm index f76587b4494b..0b74183b8a6f 100644 --- a/code/modules/food_and_drinks/machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/machinery/icecream_vat.dm @@ -106,7 +106,7 @@ context[SCREENTIP_CONTEXT_RMB] = "Change mode to flavors" return CONTEXTUAL_SCREENTIP_SET -/obj/machinery/icecream_vat/attackby(obj/item/reagent_containers/beaker, mob/user, list/modifiers) +/obj/machinery/icecream_vat/attackby(obj/item/reagent_containers/beaker, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return @@ -126,7 +126,7 @@ balloon_alert(user, "beaker inserted") custom_ice_cream_beaker = beaker -/obj/machinery/icecream_vat/attackby_secondary(obj/item/reagent_containers/beaker, mob/user, list/modifiers) +/obj/machinery/icecream_vat/attackby_secondary(obj/item/reagent_containers/beaker, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return diff --git a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/machinery/monkeyrecycler.dm index d06ff096e025..9767a74823ed 100644 --- a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm +++ b/code/modules/food_and_drinks/machinery/monkeyrecycler.dm @@ -47,7 +47,7 @@ GLOBAL_LIST_EMPTY(monkey_recyclers) power_change() return ITEM_INTERACT_SUCCESS -/obj/machinery/monkey_recycler/attackby(obj/item/O, mob/user, list/modifiers) +/obj/machinery/monkey_recycler/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", O)) return diff --git a/code/modules/food_and_drinks/machinery/oven.dm b/code/modules/food_and_drinks/machinery/oven.dm index d870efbe2648..b8fa80e7d2b3 100644 --- a/code/modules/food_and_drinks/machinery/oven.dm +++ b/code/modules/food_and_drinks/machinery/oven.dm @@ -96,7 +96,7 @@ update_appearance() use_energy(active_power_usage) -/obj/machinery/oven/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/oven/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(!open || used_tray || !istype(item, /obj/item/plate/oven_tray)) return ..() diff --git a/code/modules/food_and_drinks/machinery/processor.dm b/code/modules/food_and_drinks/machinery/processor.dm index de670496aed7..9e96c637d5af 100644 --- a/code/modules/food_and_drinks/machinery/processor.dm +++ b/code/modules/food_and_drinks/machinery/processor.dm @@ -87,7 +87,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/processor/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/machinery/processor/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(processing) to_chat(user, span_warning("[src] is in the process of processing!")) return TRUE diff --git a/code/modules/food_and_drinks/machinery/smartfridge.dm b/code/modules/food_and_drinks/machinery/smartfridge.dm index 7e52d747fd0c..cf5ad45d3ba7 100644 --- a/code/modules/food_and_drinks/machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/machinery/smartfridge.dm @@ -261,7 +261,7 @@ playsound(src, SFX_SHATTER, 50, TRUE) return ..() -/obj/machinery/smartfridge/attackby(obj/item/weapon, mob/living/user, list/modifiers) +/obj/machinery/smartfridge/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers) if(!machine_stat) var/shown_contents_length = visible_items() if(shown_contents_length >= max_n_of_items) diff --git a/code/modules/food_and_drinks/machinery/stove.dm b/code/modules/food_and_drinks/machinery/stove.dm index c50ef1b1431c..e39e3c3b7f50 100644 --- a/code/modules/food_and_drinks/machinery/stove.dm +++ b/code/modules/food_and_drinks/machinery/stove.dm @@ -148,7 +148,7 @@ update_appearance(UPDATE_OVERLAYS) return TRUE -/obj/item/reagent_containers/cup/soup_pot/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/reagent_containers/cup/soup_pot/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return diff --git a/code/modules/food_and_drinks/plate.dm b/code/modules/food_and_drinks/plate.dm index 6c3bb9c0b3cf..22909b67bf56 100644 --- a/code/modules/food_and_drinks/plate.dm +++ b/code/modules/food_and_drinks/plate.dm @@ -29,7 +29,7 @@ if(fragile) AddElement(/datum/element/can_shatter) -/obj/item/plate/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/plate/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(!IS_EDIBLE(I)) balloon_alert(user, "not food!") return @@ -50,7 +50,7 @@ else return ..() -/obj/item/plate/pre_attack(atom/target, mob/living/user, list/modifiers) +/obj/item/plate/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) if(!iscarbon(target)) return if(!contents.len) diff --git a/code/modules/food_and_drinks/restaurant/_venue.dm b/code/modules/food_and_drinks/restaurant/_venue.dm index 59d82878b463..0a968e3351f8 100644 --- a/code/modules/food_and_drinks/restaurant/_venue.dm +++ b/code/modules/food_and_drinks/restaurant/_venue.dm @@ -223,15 +223,14 @@ linked_venue.toggle_open() update_icon() -/obj/machinery/restaurant_portal/attacked_by(obj/item/I, mob/living/user) - if(!istype(I, /obj/item/card/id)) - return ..() - - var/obj/item/card/id/used_id = I +/obj/machinery/restaurant_portal/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + var/obj/item/card/id/used_id = tool.GetID() + if(!istype(used_id)) + return NONE - if(!(linked_venue.req_access in used_id.GetAccess())) - to_chat(user, span_warning("This card lacks the access to change this venues status.")) - return + if(!check_access(used_id)) + balloon_alert(user, "insufficient access!") + return ITEM_INTERACT_BLOCKING var/list/radial_items = list() var/list/radial_results = list() @@ -244,7 +243,7 @@ var/choice = show_radial_menu(user, src, radial_items, null, require_near = TRUE) if(!choice) - return + return ITEM_INTERACT_BLOCKING var/venue_type = radial_results[choice] var/obj/item/circuitboard/machine/restaurant_portal/board = circuit @@ -253,11 +252,7 @@ turned_on_portal = WEAKREF(user) - if(!(chosen_venue.req_access in used_id.GetAccess())) - to_chat(user, span_warning("This card lacks the access to change this venues status.")) - return - - to_chat(user, span_notice("You change the portal's linked venue.")) + balloon_alert(user, "venue changed to [chosen_venue.name]") if(linked_venue && (src in linked_venue.restaurant_portals)) //We're already linked, unlink us. linked_venue.restaurant_portals -= src @@ -267,6 +262,7 @@ linked_venue = chosen_venue linked_venue.restaurant_portals += src + return ITEM_INTERACT_SUCCESS /obj/machinery/restaurant_portal/screwdriver_act(mob/user, obj/item/tool) if (default_deconstruction_screwdriver(user, "[base_icon_state]-open", base_icon_state, tool)) diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm index 25d7dfb56f3c..2765092a5e3a 100644 --- a/code/modules/holodeck/items.dm +++ b/code/modules/holodeck/items.dm @@ -93,7 +93,7 @@ to_chat(user, span_warning("You are too primitive to use this device!")) return -/obj/machinery/readybutton/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/readybutton/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) to_chat(user, span_warning("The device is a solid button, there's nothing you can do with it!")) /obj/machinery/readybutton/attack_hand(mob/user, list/modifiers) @@ -148,7 +148,7 @@ /obj/machinery/conveyor/holodeck -/obj/machinery/conveyor/holodeck/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/conveyor/holodeck/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(!user.transferItemToLoc(I, drop_location())) return ..() diff --git a/code/modules/hydroponics/beekeeping/bee_smoker.dm b/code/modules/hydroponics/beekeeping/bee_smoker.dm index f3eae4dc41c7..b6e1f86571c2 100644 --- a/code/modules/hydroponics/beekeeping/bee_smoker.dm +++ b/code/modules/hydroponics/beekeeping/bee_smoker.dm @@ -71,7 +71,7 @@ return . -/obj/item/bee_smoker/attackby(obj/item/herb, mob/living/carbon/human/user, list/modifiers) +/obj/item/bee_smoker/attackby(obj/item/herb, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index 0250fe6ffe10..f808a794026c 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -147,7 +147,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/structure/beebox/attackby(obj/item/I, mob/user, list/modifiers) +/obj/structure/beebox/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/honey_frame)) var/obj/item/honey_frame/HF = I if(honey_frames.len < BEEBOX_MAX_FRAMES) diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 9b20046cd725..78396c6c43c4 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -202,7 +202,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/biogenerator/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/machinery/biogenerator/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(user.combat_mode) return ..() diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm index f9a82473e712..6ff5ea9a03ba 100644 --- a/code/modules/hydroponics/fermenting_barrel.dm +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -50,7 +50,7 @@ else . += span_notice("It is currently closed, letting it ferment fruits or draw reagents from its tap.") -/obj/structure/fermenting_barrel/attackby(obj/item/object, mob/user, list/modifiers) +/obj/structure/fermenting_barrel/attackby(obj/item/object, mob/user, list/modifiers, list/attack_modifiers) if(open) if(istype(object, /obj/item/food/grown) && insert_fruit(user, object)) balloon_alert(user, "added fruit") diff --git a/code/modules/hydroponics/grown/corn.dm b/code/modules/hydroponics/grown/corn.dm index 3fc026a60e38..a55ae42e449c 100644 --- a/code/modules/hydroponics/grown/corn.dm +++ b/code/modules/hydroponics/grown/corn.dm @@ -47,7 +47,7 @@ throw_range = 7 grind_results = list(/datum/reagent/cellulose = 10) //really partially hemicellulose -/obj/item/grown/corncob/attackby(obj/item/grown/W, mob/user, list/modifiers) +/obj/item/grown/corncob/attackby(obj/item/grown/W, mob/user, list/modifiers, list/attack_modifiers) if(W.get_sharpness()) to_chat(user, span_notice("You use [W] to fashion a pipe out of the corn cob!")) new /obj/item/cigarette/pipe/cobpipe (user.loc) diff --git a/code/modules/hydroponics/grown/hedges.dm b/code/modules/hydroponics/grown/hedges.dm index b61033f0e5ff..bbee00c82985 100644 --- a/code/modules/hydroponics/grown/hedges.dm +++ b/code/modules/hydroponics/grown/hedges.dm @@ -47,14 +47,15 @@ opacity = FALSE max_integrity = 80 -/obj/structure/hedge/attacked_by(obj/item/I, mob/living/user) - if(opacity && HAS_TRAIT(user, TRAIT_BONSAI) && I.get_sharpness()) - to_chat(user,span_notice("You start trimming \the [src].")) - if(do_after(user, 3 SECONDS,target=src)) - to_chat(user,span_notice("You finish trimming \the [src].")) - opacity = FALSE - else - return ..() +/obj/structure/hedge/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!opacity || !HAS_TRAIT(user, TRAIT_BONSAI) || !tool.get_sharpness()) + return NONE + balloon_alert(user, "trimming...") + if(!do_after(user, 3 SECONDS, target=src)) + return ITEM_INTERACT_BLOCKING + opacity = FALSE + return ITEM_INTERACT_SUCCESS + /** * useful for mazes and such */ diff --git a/code/modules/hydroponics/grown/potato.dm b/code/modules/hydroponics/grown/potato.dm index e91e55a62fd7..a9be7fc2c2f8 100644 --- a/code/modules/hydroponics/grown/potato.dm +++ b/code/modules/hydroponics/grown/potato.dm @@ -37,7 +37,7 @@ icon_state = "potato_wedges" bite_consumption_mod = 100 -/obj/item/food/grown/potato/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/food/grown/potato/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(W.get_sharpness()) to_chat(user, span_notice("You cut the potato into wedges with [W].")) var/obj/item/food/grown/potato/wedges/Wedges = new /obj/item/food/grown/potato/wedges diff --git a/code/modules/hydroponics/grown/pumpkin.dm b/code/modules/hydroponics/grown/pumpkin.dm index 59f2ba67a935..256abeced65b 100644 --- a/code/modules/hydroponics/grown/pumpkin.dm +++ b/code/modules/hydroponics/grown/pumpkin.dm @@ -29,7 +29,7 @@ ///Which type of lantern this gourd produces when carved. var/carved_type = /obj/item/clothing/head/utility/hardhat/pumpkinhead -/obj/item/food/grown/pumpkin/attackby(obj/item/W as obj, mob/user as mob, list/modifiers) +/obj/item/food/grown/pumpkin/attackby(obj/item/W as obj, mob/user as mob, list/modifiers, list/attack_modifiers) if(W.get_sharpness()) user.show_message(span_notice("You carve a face into [src]!"), MSG_VISUAL) new carved_type(user.loc) diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm index c3c84c37cdda..de3b8cf956c2 100644 --- a/code/modules/hydroponics/grown/root.dm +++ b/code/modules/hydroponics/grown/root.dm @@ -25,7 +25,7 @@ juice_typepath = /datum/reagent/consumable/carrotjuice wine_power = 30 -/obj/item/food/grown/carrot/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/food/grown/carrot/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(I.get_sharpness()) var/carrot_blade var/carrot_sword_chance = (max(0, seed.potency - 50) / 50) diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index a6b3ba5b10c6..53eebcf4f874 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -81,7 +81,7 @@ return NONE -/obj/item/grown/log/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/grown/log/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(W.get_sharpness()) user.show_message(span_notice("You make [plank_name] out of \the [src]!"), MSG_VISUAL) var/seed_modifier = 0 diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index 976c0247cb97..cfe7eb0c8383 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -194,7 +194,7 @@ playsound(src, SFX_DESECRATION ,50, TRUE, -1) return BRUTELOSS -/obj/item/scythe/pre_attack(atom/target, mob/living/user, list/modifiers) +/obj/item/scythe/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) if(!istype(target, /obj/structure/alien/resin/flower_bud) && !istype(target, /obj/structure/spacevine)) return ..() if(swiping || get_turf(target) == get_turf(user)) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 3cc7d81a54ee..7579a879be79 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -207,7 +207,7 @@ if(!QDELETED(src) && gone == myseed) set_seed(null, FALSE) -/obj/machinery/hydroponics/constructable/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/machinery/hydroponics/constructable/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if (!user.combat_mode) // handle opening the panel if(default_deconstruction_screwdriver(user, icon_state, icon_state, I)) @@ -856,7 +856,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/hydroponics/attackby(obj/item/O, mob/user, list/modifiers) +/obj/machinery/hydroponics/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) //Called when mob user "attacks" it with object O if(IS_EDIBLE(O) || is_reagent_container(O)) // Syringe stuff (and other reagent containers now too) var/obj/item/reagent_containers/reagent_source = O @@ -1078,7 +1078,7 @@ else return ..() -/obj/machinery/hydroponics/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/hydroponics/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if (istype(weapon, /obj/item/reagent_containers/syringe)) to_chat(user, span_warning("You can't get any extract out of this plant.")) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN @@ -1200,7 +1200,7 @@ /obj/machinery/hydroponics/soil/update_status_light_overlays() return // Has no lights -/obj/machinery/hydroponics/soil/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/hydroponics/soil/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(weapon.tool_behaviour != TOOL_SHOVEL) //Spades can still uproot plants on left click return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN balloon_alert(user, "clearing up soil...") diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index fbb5dd54c5c4..ab74f9aebeb0 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -94,7 +94,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/seed_extractor/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/machinery/seed_extractor/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(!isliving(user) || user.combat_mode) return ..() diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 2a1dcdea7695..1b75baf77ebd 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -475,7 +475,7 @@ /obj/item/seeds/proc/on_chem_reaction(datum/reagents/reagents) return -/obj/item/seeds/attackby(obj/item/O, mob/user, list/modifiers) +/obj/item/seeds/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) if(IS_WRITING_UTENSIL(O)) var/choice = tgui_input_list(usr, "What would you like to change?", "Seed Alteration", list("Plant Name", "Seed Description", "Product Description")) if(isnull(choice)) diff --git a/code/modules/instruments/items.dm b/code/modules/instruments/items.dm index 9e51bb5d2e0e..2f512867639b 100644 --- a/code/modules/instruments/items.dm +++ b/code/modules/instruments/items.dm @@ -124,7 +124,7 @@ . = ..() AddElement(/datum/element/spooky) -/obj/item/instrument/trumpet/spectral/attack(mob/living/target_mob, mob/living/user, list/modifiers) +/obj/item/instrument/trumpet/spectral/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers) playsound(src, 'sound/runtime/instruments/trombone/En4.mid', 1000, 1, -1) return ..() @@ -148,7 +148,7 @@ . = ..() AddElement(/datum/element/spooky) -/obj/item/instrument/saxophone/spectral/attack(mob/living/target_mob, mob/living/user, list/modifiers) +/obj/item/instrument/saxophone/spectral/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers) playsound(src, 'sound/runtime/instruments/trombone/En4.mid', 1000, 1, -1) return ..() @@ -172,7 +172,7 @@ . = ..() AddElement(/datum/element/spooky) -/obj/item/instrument/trombone/spectral/attack(mob/living/target_mob, mob/living/user, list/modifiers) +/obj/item/instrument/trombone/spectral/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers) playsound(src, 'sound/runtime/instruments/trombone/Cn4.mid', 1000, 1, -1) return ..() diff --git a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm index de49ed272c75..76da9ef69a44 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm @@ -85,7 +85,7 @@ user.visible_message(span_suicide("[user] is killing [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to get closer to god!")) return (BRUTELOSS|FIRELOSS) -/obj/item/nullrod/attack(mob/living/target_mob, mob/living/user, list/modifiers) +/obj/item/nullrod/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers) if(!user.mind?.holy_role) return ..() if(!IS_CULTIST(target_mob) || istype(target_mob, /mob/living/carbon/human/cult_ghost)) @@ -241,11 +241,9 @@ force = 15 menu_description = "An odd sharp blade which provides a low chance of blocking incoming melee attacks and deals a random amount of damage, which can range from almost nothing to very high. Can be worn on the back." -/obj/item/nullrod/claymore/multiverse/melee_attack_chain(mob/user, atom/target, list/modifiers) - var/old_force = force - force += rand(-14, 15) - . = ..() - force = old_force +/obj/item/nullrod/claymore/multiverse/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) + SET_ATTACK_FORCE(attack_modifiers, rand(max(force - 15, 1), force + 15)) + return ..() /obj/item/nullrod/claymore/saber name = "light energy sword" diff --git a/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm b/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm index 1e06109a81da..bd7242689506 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm @@ -94,7 +94,7 @@ If the scythe isn't empowered when you sheath it, you take a heap of damage and ) AddElement(/datum/element/bane, mob_biotypes = MOB_PLANT, damage_multiplier = 0.5, requires_combat_mode = FALSE) //less good at killing revenants, much better at killing plants -/obj/item/vorpalscythe/attack(mob/living/target, mob/living/user, list/modifiers) +/obj/item/vorpalscythe/attack(mob/living/target, mob/living/user, list/modifiers, list/attack_modifiers) if(ismonkey(target) && !target.mind) //Don't empower from hitting monkeys. Hit a corgi or something, I don't know. return ..() diff --git a/code/modules/library/book.dm b/code/modules/library/book.dm index 6b72f0e3b512..0bec2f42fe4f 100644 --- a/code/modules/library/book.dm +++ b/code/modules/library/book.dm @@ -98,7 +98,7 @@ user.visible_message(span_notice("[user] opens a book titled \"[book_data.title]\" and begins reading intently.")) display_content(user) -/obj/item/book/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/item/book/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(IS_WRITING_UTENSIL(attacking_item)) if(!user.can_perform_action(src) || !user.can_write(attacking_item)) return diff --git a/code/modules/library/bookcase.dm b/code/modules/library/bookcase.dm index 961bbc9f07a8..762985a69594 100644 --- a/code/modules/library/bookcase.dm +++ b/code/modules/library/bookcase.dm @@ -94,7 +94,7 @@ I.forceMove(Tsec) update_appearance() -/obj/structure/bookcase/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/structure/bookcase/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(state == BOOKCASE_UNANCHORED) if(attacking_item.tool_behaviour == TOOL_WRENCH) if(attacking_item.use_tool(src, user, 20, volume=50)) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 7fb0509d3bd5..5842d6c47a8e 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -539,7 +539,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0) set_screen_state(MIN_LIBRARY) return TRUE -/obj/machinery/computer/libraryconsole/bookmanagement/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/computer/libraryconsole/bookmanagement/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(!istype(weapon, /obj/item/barcodescanner)) return ..() var/obj/item/barcodescanner/scanner = weapon @@ -705,7 +705,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0) cache = null return ..() -/obj/machinery/libraryscanner/attackby(obj/hitby, mob/user, list/modifiers) +/obj/machinery/libraryscanner/attackby(obj/hitby, mob/user, list/modifiers, list/attack_modifiers) if(istype(hitby, /obj/item/book)) user.transferItemToLoc(hitby, src) if(held_book) @@ -786,7 +786,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0) if(default_deconstruction_crowbar(tool)) return ITEM_INTERACT_SUCCESS -/obj/machinery/bookbinder/attackby(obj/hitby, mob/user, list/modifiers) +/obj/machinery/bookbinder/attackby(obj/hitby, mob/user, list/modifiers, list/attack_modifiers) if(istype(hitby, /obj/item/paper)) prebind_book(user, hitby) return TRUE diff --git a/code/modules/library/skill_learning/skill_station.dm b/code/modules/library/skill_learning/skill_station.dm index e28dda41b1d0..b55d67996936 100644 --- a/code/modules/library/skill_learning/skill_station.dm +++ b/code/modules/library/skill_learning/skill_station.dm @@ -83,7 +83,7 @@ else toggle_open() -/obj/machinery/skill_station/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/machinery/skill_station/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(I,/obj/item/skillchip)) if(inserted_skillchip) to_chat(user,span_notice("There's already a skillchip inside.")) diff --git a/code/modules/mapfluff/ruins/lavaland_ruin_code.dm b/code/modules/mapfluff/ruins/lavaland_ruin_code.dm index be0fbd85f67e..18db493cf845 100644 --- a/code/modules/mapfluff/ruins/lavaland_ruin_code.dm +++ b/code/modules/mapfluff/ruins/lavaland_ruin_code.dm @@ -40,7 +40,7 @@ /// Type of shell to create var/shell_type = /obj/effect/mob_spawn/ghost_role/human/golem -/obj/item/golem_shell/attackby(obj/item/potential_food, mob/user, list/modifiers) +/obj/item/golem_shell/attackby(obj/item/potential_food, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(!isstack(potential_food)) balloon_alert(user, "not a mineral!") diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm index fbfdeda4c996..7f4b417bd270 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm @@ -105,7 +105,7 @@ reagents.expose(user, TOUCH, 20) //Covers target in 20u of oil. to_chat(user, span_notice("You touch the pool of oil, only to get oil all over yourself. It would be wise to wash this off with water.")) -/obj/structure/sink/oil_well/attackby(obj/item/O, mob/living/user, list/modifiers) +/obj/structure/sink/oil_well/attackby(obj/item/O, mob/living/user, list/modifiers, list/attack_modifiers) flick("puddle-oil-splash",src) if(O.tool_behaviour == TOOL_SHOVEL) //attempt to deconstruct the puddle with a shovel to_chat(user, "You fill in the oil well with soil.") diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm b/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm index fec863153d49..3ff54df736c4 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm @@ -49,7 +49,7 @@ warning_channel = "Syndicate" include_in_cims = FALSE -/obj/machinery/power/supermatter_crystal/shard/syndicate/attackby(obj/item/item, mob/living/user, list/modifiers) +/obj/machinery/power/supermatter_crystal/shard/syndicate/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/scalpel/supermatter)) //You can already yoink the docs as a free objective win, another would be just gross to_chat(user, span_danger("This shard's already in Syndicate custody, taking it again could cause more harm than good.")) return diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm index ccc2ebab6c2f..2025c7614d71 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/sin_ruins.dm @@ -36,7 +36,7 @@ w_class = WEIGHT_CLASS_NORMAL hitsound = 'sound/weapons/bladeslice.ogg' -/obj/item/knife/envy/afterattack(atom/target, mob/living/carbon/human/user, list/modifiers) +/obj/item/knife/envy/afterattack(atom/target, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers) if(!istype(user) || !ishuman(target)) return diff --git a/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm b/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm index 087ce994df4f..15e644cd1392 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm @@ -98,7 +98,7 @@ . = ..() stored_organ = pick_weight(allowed_organs) -/obj/structure/meateor_fluff/flesh_pod/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/structure/meateor_fluff/flesh_pod/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if (attacking_item.sharpness & SHARP_EDGED) cut_open(user) return diff --git a/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm b/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm index 8a002f4a8186..7d285f4069d7 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm @@ -23,7 +23,7 @@ . += span_notice("Insert [EXAMINE_HINT("Research Notes")] to generate points.") -/obj/machinery/rnd/server/oldstation/item_interaction(mob/living/user, obj/item/tool, list/modifiers) +/obj/machinery/rnd/server/oldstation/item_interaction(mob/living/user, obj/item/tool, list/modifiers, list/attack_modifiers) if(istype(tool, /obj/item/research_notes) && stored_research) var/obj/item/research_notes/research_notes = tool stored_research.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = research_notes.value)) diff --git a/code/modules/meteors/meteor_types.dm b/code/modules/meteors/meteor_types.dm index 8cc20152c562..ff60b4a41402 100644 --- a/code/modules/meteors/meteor_types.dm +++ b/code/modules/meteors/meteor_types.dm @@ -116,7 +116,7 @@ check_examine_award(user) -/obj/effect/meteor/attackby(obj/item/I, mob/user, list/modifiers) +/obj/effect/meteor/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(I.tool_behaviour == TOOL_MINING) make_debris() qdel(src) diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index 8ac8275de9dd..5a50bc540628 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -135,7 +135,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, sort_list(list( /obj/structure/marker_beacon/attack_tk(mob/user) return -/obj/structure/marker_beacon/attackby(obj/item/I, mob/user, list/modifiers) +/obj/structure/marker_beacon/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/stack/marker_beacon)) var/obj/item/stack/marker_beacon/M = I to_chat(user, span_notice("You start picking [src] up...")) diff --git a/code/modules/mining/equipment/resonator.dm b/code/modules/mining/equipment/resonator.dm index a08fbf437536..1a7f8664d709 100644 --- a/code/modules/mining/equipment/resonator.dm +++ b/code/modules/mining/equipment/resonator.dm @@ -42,7 +42,7 @@ new /obj/effect/temp_visual/resonance(target_turf, user, src, mode, adding_failure) user.changeNext_move(CLICK_CD_MELEE) -/obj/item/resonator/pre_attack(atom/target, mob/user, list/modifiers) +/obj/item/resonator/pre_attack(atom/target, mob/user, list/modifiers, list/attack_modifiers) if(check_allowed_items(target, not_inside = TRUE)) create_resonance(target, user) return ..() diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 058103e83e1e..d578116e6b95 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -180,7 +180,7 @@ GLOBAL_LIST(labor_sheet_values) return user.examinate(src) -/obj/machinery/mineral/labor_points_checker/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/mineral/labor_points_checker/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(!istype(weapon, /obj/item/card/id/advanced/prisoner)) return ..() var/obj/item/card/id/advanced/prisoner/prisoner_id = weapon diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index cfbc06e77398..1ab04396d938 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -15,7 +15,7 @@ /// var to check if it got opened by a key var/spawned_loot = FALSE -/obj/structure/closet/crate/necropolis/tendril/attackby(obj/item/item, mob/user, list/modifiers) +/obj/structure/closet/crate/necropolis/tendril/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(!istype(item, /obj/item/skeleton_key) || spawned_loot) return ..() var/loot = rand(1,21) diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index ee7846f91c29..0ab13f399fe1 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -282,7 +282,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ /obj/item/gibtonite/IsSpecialAssembly() return TRUE -/obj/item/gibtonite/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/gibtonite/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/assembly_holder) && !rig) var/obj/item/assembly_holder/holder = I if(!(locate(/obj/item/assembly/igniter) in holder.assemblies)) @@ -477,7 +477,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ . = ..() . += span_info("It's worth [value] credit\s.") -/obj/item/coin/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/coin/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/CC = W if(string_attached) diff --git a/code/modules/mob/living/basic/bots/_bots.dm b/code/modules/mob/living/basic/bots/_bots.dm index 156515204142..0ef3d87d3b92 100644 --- a/code/modules/mob/living/basic/bots/_bots.dm +++ b/code/modules/mob/living/basic/bots/_bots.dm @@ -427,7 +427,7 @@ GLOBAL_LIST_INIT(command_strings, list( heal_overall_damage(10) user.visible_message(span_notice("[user] repairs [src]!"),span_notice("You repair [src].")) -/mob/living/basic/bot/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/mob/living/basic/bot/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(attacking_item.GetID()) unlock_with_id(user) return diff --git a/code/modules/mob/living/basic/clown/clown.dm b/code/modules/mob/living/basic/clown/clown.dm index e99a6092e44e..4cf055ee606f 100644 --- a/code/modules/mob/living/basic/clown/clown.dm +++ b/code/modules/mob/living/basic/clown/clown.dm @@ -408,20 +408,16 @@ AddComponent(/datum/component/tameable, food_types = list(/obj/item/food/cheesiehonkers, /obj/item/food/cornchips), tame_chance = 30, bonus_tame_chance = 0, after_tame = CALLBACK(src, PROC_REF(tamed))) AddElement(/datum/element/damage_threshold, 10) //lots of fat to cushion blows. -/mob/living/basic/clown/mutant/glutton/attacked_by(obj/item/item, mob/living/user) - if(!check_edible(item)) +/mob/living/basic/clown/mutant/glutton/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!check_edible(tool)) + return NONE + eat_atom(tool) + return ITEM_INTERACT_SUCCESS + +/mob/living/basic/clown/mutant/glutton/resolve_unarmed_attack(atom/attack_target, list/modifiers) + if(!check_edible(attack_target)) return ..() - eat_atom(item) - -/mob/living/basic/clown/mutant/glutton/melee_attack(atom/target, list/modifiers, ignore_cooldown = FALSE) - if(!check_edible(target)) - return ..() - eat_atom(target) - -/mob/living/basic/clown/mutant/glutton/UnarmedAttack(atom/victim, proximity_flag, list/modifiers) - if(!check_edible(victim)) - return ..() - eat_atom(victim) + eat_atom(attack_target) ///Returns whether or not the supplied movable atom is edible. /mob/living/basic/clown/mutant/glutton/proc/check_edible(atom/movable/potential_food) diff --git a/code/modules/mob/living/basic/cult/shade.dm b/code/modules/mob/living/basic/cult/shade.dm index 6233a959aeb9..d5f5b7c6655b 100644 --- a/code/modules/mob/living/basic/cult/shade.dm +++ b/code/modules/mob/living/basic/cult/shade.dm @@ -71,7 +71,7 @@ SSblackbox.record_feedback("tally", "cult_shade_suicided", 1) ..() -/mob/living/basic/shade/attackby(obj/item/item, mob/user, list/modifiers) +/mob/living/basic/shade/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/soulstone)) var/obj/item/soulstone/stone = item stone.capture_shade(src, user) diff --git a/code/modules/mob/living/basic/jungle/seedling/seedling.dm b/code/modules/mob/living/basic/jungle/seedling/seedling.dm index 0f0b7f9ad59b..c6f41f522a92 100644 --- a/code/modules/mob/living/basic/jungle/seedling/seedling.dm +++ b/code/modules/mob/living/basic/jungle/seedling/seedling.dm @@ -140,7 +140,7 @@ combatant_state = state update_appearance() -/mob/living/basic/seedling/attackby(obj/item/can, mob/living/carbon/human/user, list/modifiers) +/mob/living/basic/seedling/attackby(obj/item/can, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers) if(istype(can, /obj/item/reagent_containers/cup/watering_can) && isnull(held_can)) can.forceMove(src) return diff --git a/code/modules/mob/living/basic/jungle/venus_human_trap.dm b/code/modules/mob/living/basic/jungle/venus_human_trap.dm index 854afafef7c2..4b7ecb8f980d 100644 --- a/code/modules/mob/living/basic/jungle/venus_human_trap.dm +++ b/code/modules/mob/living/basic/jungle/venus_human_trap.dm @@ -59,14 +59,14 @@ damage_amount = 0 . = ..() -/obj/structure/alien/resin/flower_bud/attacked_by(obj/item/item, mob/living/user) - var/damage_dealt = item.force +/obj/structure/alien/resin/flower_bud/attacked_by(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers) + LAZYSET(attack_modifiers, SILENCE_DEFAULT_MESSAGES, TRUE) + LAZYSET(attack_modifiers, FORCE_MULTIPLIER, 1) if(item.damtype == BURN) - damage_dealt *= 4 + MODIFY_ATTACK_FORCE_MULTIPLIER(attack_modifiers, 4) if(item.get_sharpness()) - damage_dealt *= 16 // alien resin applies 75% reduction to brute damage so this actually x4 damage - - take_damage(damage_dealt, item.damtype, MELEE, 1) + MODIFY_ATTACK_FORCE_MULTIPLIER(attack_modifiers, 16) // alien resin applies 75% reduction to brute damage so this actually x4 damage + return ..() /obj/structure/alien/resin/flower_bud/Destroy() QDEL_LIST(vines) diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm index 1ee623084266..69a8d105f961 100644 --- a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm +++ b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm @@ -108,7 +108,7 @@ if (tentacles.cooldown_time > 1 SECONDS) tentacles.cooldown_time -= 1 SECONDS -/mob/living/basic/mining/goliath/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/mob/living/basic/mining/goliath/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if (!istype(attacking_item, /obj/item/goliath_saddle)) return ..() if (!tameable) diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm b/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm index c5b6705fdeff..356d9a49fedc 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm @@ -56,7 +56,7 @@ stage = 0 elapsed_time = 0 -/obj/item/organ/legion_tumour/attack(mob/living/target, mob/living/user, list/modifiers) +/obj/item/organ/legion_tumour/attack(mob/living/target, mob/living/user, list/modifiers, list/attack_modifiers) if (try_apply(target, user)) qdel(src) return diff --git a/code/modules/mob/living/basic/minebots/minebot.dm b/code/modules/mob/living/basic/minebots/minebot.dm index fa7b5bd41878..2cb5cc44aa9a 100644 --- a/code/modules/mob/living/basic/minebots/minebot.dm +++ b/code/modules/mob/living/basic/minebots/minebot.dm @@ -113,7 +113,7 @@ user.balloon_alert(user, "successfully repaired!") return TRUE -/mob/living/basic/mining_drone/attackby(obj/item/item_used, mob/user, list/modifiers) +/mob/living/basic/mining_drone/attackby(obj/item/item_used, mob/user, list/modifiers, list/attack_modifiers) if(item_used.tool_behaviour == TOOL_CROWBAR || istype(item_used, /obj/item/borg/upgrade/modkit)) item_used.melee_attack_chain(user, stored_gun, modifiers) return diff --git a/code/modules/mob/living/basic/pets/dog/_dog.dm b/code/modules/mob/living/basic/pets/dog/_dog.dm index 2ae7288f9c5c..15e4b58d959e 100644 --- a/code/modules/mob/living/basic/pets/dog/_dog.dm +++ b/code/modules/mob/living/basic/pets/dog/_dog.dm @@ -85,7 +85,7 @@ attack_verb_continuous = list("attacks", "bashes", "batters", "bludgeons", "whacks") attack_verb_simple = list("attack", "bash", "batter", "bludgeon", "whack") -/obj/item/dog_bone/pre_attack(atom/target, mob/living/user, list/modifiers) +/obj/item/dog_bone/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) if (!isdog(target) || user.combat_mode) return ..() var/mob/living/basic/pet/dog/dog_target = target diff --git a/code/modules/mob/living/basic/pets/dog/corgi.dm b/code/modules/mob/living/basic/pets/dog/corgi.dm index a6c3389d09b8..c8a47bf9e21d 100644 --- a/code/modules/mob/living/basic/pets/dog/corgi.dm +++ b/code/modules/mob/living/basic/pets/dog/corgi.dm @@ -104,7 +104,7 @@ armorval += inventory_back.get_armor_rating(type) return armorval * 0.5 -/mob/living/basic/pet/dog/corgi/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/mob/living/basic/pet/dog/corgi/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(istype(attacking_item, /obj/item/razor)) if(shaved) to_chat(user, span_warning("You can't shave this corgi, [p_they()] has already been shaved!")) diff --git a/code/modules/mob/living/basic/ruin_defender/living_floor.dm b/code/modules/mob/living/basic/ruin_defender/living_floor.dm index 9fad5ec6bde6..29b4abdbd9d5 100644 --- a/code/modules/mob/living/basic/ruin_defender/living_floor.dm +++ b/code/modules/mob/living/basic/ruin_defender/living_floor.dm @@ -80,7 +80,7 @@ /mob/living/basic/living_floor/med_hud_set_status() return -/mob/living/basic/living_floor/attackby(obj/item/weapon, mob/user, list/modifiers) +/mob/living/basic/living_floor/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(weapon.tool_behaviour != TOOL_CROWBAR) return ..() balloon_alert(user, "prying...") diff --git a/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm b/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm index b952b53b5f9a..3040b0143506 100644 --- a/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm +++ b/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm @@ -76,7 +76,7 @@ qdel(attack_target) return TRUE -/mob/living/basic/eyeball/attackby(obj/item/weapon, mob/living/carbon/human/user, list/modifiers) +/mob/living/basic/eyeball/attackby(obj/item/weapon, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers) . = ..() if(!weapon.force && !user.combat_mode) return diff --git a/code/modules/mob/living/basic/space_fauna/mushroom.dm b/code/modules/mob/living/basic/space_fauna/mushroom.dm index b2e655a5c5f1..fcd0468d2631 100644 --- a/code/modules/mob/living/basic/space_fauna/mushroom.dm +++ b/code/modules/mob/living/basic/space_fauna/mushroom.dm @@ -161,7 +161,7 @@ melee_damage_upper += (level_gain * rand(1,5)) maxHealth += (level_gain * rand(1,5)) -/mob/living/basic/mushroom/attackby(obj/item/mush, mob/living/carbon/human/user, list/modifiers) +/mob/living/basic/mushroom/attackby(obj/item/mush, mob/living/carbon/human/user, list/modifiers, list/attack_modifiers) if(istype(mush, /obj/item/food/grown/mushroom)) recover(mush) return diff --git a/code/modules/mob/living/basic/vermin/mothroach.dm b/code/modules/mob/living/basic/vermin/mothroach.dm index 1ffeb7bc8d26..43e987ce1b0d 100644 --- a/code/modules/mob/living/basic/vermin/mothroach.dm +++ b/code/modules/mob/living/basic/vermin/mothroach.dm @@ -57,7 +57,7 @@ else playsound(loc, 'sound/voice/moth/scream_moth.ogg', 50, TRUE) -/mob/living/basic/mothroach/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/mob/living/basic/mothroach/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(src.stat == DEAD) return diff --git a/code/modules/mob/living/basic/vermin/mouse.dm b/code/modules/mob/living/basic/vermin/mouse.dm index 1582388b99ee..80ae60978654 100644 --- a/code/modules/mob/living/basic/vermin/mouse.dm +++ b/code/modules/mob/living/basic/vermin/mouse.dm @@ -334,7 +334,7 @@ qdel(src) return LAZARUS_INJECTOR_USED -/obj/item/food/deadmouse/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/food/deadmouse/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) var/mob/living/living_user = user if(istype(living_user) && attacking_item.get_sharpness() && living_user.combat_mode) if(!isturf(loc)) diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 35fe35b428e9..f14e0c7e3b1d 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -49,7 +49,7 @@ if(brain) . += "mmi_dead" -/obj/item/mmi/attackby(obj/item/O, mob/user, list/modifiers) +/obj/item/mmi/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) user.changeNext_move(CLICK_CD_MELEE) if(istype(O, /obj/item/organ/brain)) //Time to stick a brain in it --NEO var/obj/item/organ/brain/newbrain = O diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index bdc9a1772405..5a8f25431fa8 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -166,7 +166,7 @@ L.mind.transfer_to(brainmob) to_chat(brainmob, span_notice("You feel slightly disoriented. That's normal when you're just a brain.")) -/obj/item/organ/brain/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/organ/brain/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) user.changeNext_move(CLICK_CD_MELEE) if(istype(item, /obj/item/borg/apparatus/organ_storage)) diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index 365787bdeefd..32fa3281ab49 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -212,7 +212,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) icon_state = "[base_icon_state]" return -/obj/item/mmi/posibrain/attackby(obj/item/O, mob/user, list/modifiers) +/obj/item/mmi/posibrain/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) return /obj/item/mmi/posibrain/add_mmi_overlay() diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index e5db03ae49c3..4806c4f87c73 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -49,7 +49,7 @@ if(atom_integrity < 90) Die() -/obj/item/clothing/mask/facehugger/attackby(obj/item/O, mob/user, list/modifiers) +/obj/item/clothing/mask/facehugger/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) return O.attack_atom(src, user, modifiers) /obj/item/clothing/mask/facehugger/proc/react_to_mob(datum/source, mob/user) diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index 5dd5ef780f27..bede86590c14 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -1,5 +1,5 @@ -/mob/living/silicon/ai/attackby(obj/item/W, mob/user, list/modifiers) +/mob/living/silicon/ai/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/ai_module)) var/obj/item/ai_module/MOD = W if(!mind) //A player mind is required for law procs to run antag checks. diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index a61470c56552..f2291c110484 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -473,7 +473,7 @@ user.visible_message(span_notice("[user] repairs [src]!"),span_notice("You repair [src].")) return ITEM_INTERACT_SUCCESS -/mob/living/simple_animal/bot/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/mob/living/simple_animal/bot/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(attacking_item.GetID()) unlock_with_id(user) return diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 3769ef1710fb..52230f3c3bcc 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -10,7 +10,7 @@ var/build_step = ASSEMBLY_FIRST_STEP var/robot_arm = /obj/item/bodypart/arm/right/robot -/obj/item/bot_assembly/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/bot_assembly/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) ..() if(IS_WRITING_UTENSIL(I)) rename_bot() @@ -73,7 +73,7 @@ return ..() -/obj/item/bot_assembly/cleanbot/attackby(obj/item/item_attached, mob/user, list/modifiers) +/obj/item/bot_assembly/cleanbot/attackby(obj/item/item_attached, mob/user, list/modifiers, list/attack_modifiers) ..() if(!istype(item_attached, /obj/item/bodypart/arm/left/robot) && !istype(item_attached, /obj/item/bodypart/arm/right/robot)) return @@ -98,7 +98,7 @@ var/lasercolor = "" var/vest_type = /obj/item/clothing/suit/armor/vest -/obj/item/bot_assembly/ed209/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/bot_assembly/ed209/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) ..() switch(build_step) if(ASSEMBLY_FIRST_STEP, ASSEMBLY_SECOND_STEP) @@ -228,7 +228,7 @@ if(ASSEMBLY_SECOND_STEP) icon_state = "[toolbox_color]toolbox_tiles_sensor" -/obj/item/bot_assembly/floorbot/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/bot_assembly/floorbot/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) ..() switch(build_step) if(ASSEMBLY_FIRST_STEP) @@ -268,7 +268,7 @@ if(skin) icon_state = "[base_icon_state]_[skin]" // NON-MODULE CHANGE -/obj/item/bot_assembly/medbot/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/bot_assembly/medbot/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) ..() switch(build_step) if(ASSEMBLY_FIRST_STEP) @@ -305,7 +305,7 @@ icon_state = "honkbot_arm" created_name = "Honkbot" -/obj/item/bot_assembly/honkbot/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/bot_assembly/honkbot/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) ..() switch(build_step) if(ASSEMBLY_FIRST_STEP) @@ -344,7 +344,7 @@ var/swordamt = 0 //If you're converting it into a grievousbot, how many swords have you attached var/toyswordamt = 0 //honk -/obj/item/bot_assembly/secbot/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/bot_assembly/secbot/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) ..() var/atom/Tsec = drop_location() switch(build_step) @@ -478,7 +478,7 @@ icon_state = "firebot_arm" created_name = "Firebot" -/obj/item/bot_assembly/firebot/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/bot_assembly/firebot/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) ..() switch(build_step) if(ASSEMBLY_FIRST_STEP) @@ -508,7 +508,7 @@ icon_state = "hygienebot" created_name = "Hygienebot" -/obj/item/bot_assembly/hygienebot/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/bot_assembly/hygienebot/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) . = ..() var/atom/Tsec = drop_location() switch(build_step) @@ -563,7 +563,7 @@ icon_state = "vim_0" created_name = "\improper Vim" -/obj/item/bot_assembly/vim/attackby(obj/item/part, mob/user, list/modifiers) +/obj/item/bot_assembly/vim/attackby(obj/item/part, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index ee999baf4852..b979f8ee1985 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -177,7 +177,7 @@ diag_hud_set_mulebotcell() return ITEM_INTERACT_SUCCESS -/mob/living/simple_animal/bot/mulebot/attackby(obj/item/I, mob/living/user, list/modifiers) +/mob/living/simple_animal/bot/mulebot/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/stock_parts/power_store/cell) && bot_cover_flags & BOT_COVER_OPEN) if(cell) to_chat(user, span_warning("[src] already has a power cell!")) diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 545e3701b532..ebea7f12a239 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -252,7 +252,7 @@ return ..() -/mob/living/simple_animal/bot/secbot/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/mob/living/simple_animal/bot/secbot/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) ..() if(!(bot_mode_flags & BOT_MODE_ON)) // Bots won't remember if you hit them while they're off. return diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 7406dea77c1a..cdd33ecc5f7e 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -152,7 +152,7 @@ Difficulty: Hard * * mob/user The user of the item * * params, extra parameters */ -/mob/living/simple_animal/hostile/megafauna/bubblegum/attackby(obj/item/W, mob/user, list/modifiers) +/mob/living/simple_animal/hostile/megafauna/bubblegum/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(istype(W, /obj/item/organ/tongue)) user.client?.give_award(/datum/award/achievement/jobs/frenching, user) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index b9b61641136c..c1612866ae43 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -749,7 +749,7 @@ Difficulty: Hard layer = LOW_OBJ_LAYER anchored = TRUE -/obj/effect/hierophant/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/effect/hierophant/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(istype(attacking_item, /obj/item/hierophant_club)) var/obj/item/hierophant_club/club = attacking_item if(club.beacon == src) diff --git a/code/modules/mob/living/simple_animal/hostile/ooze.dm b/code/modules/mob/living/simple_animal/hostile/ooze.dm index 1b3cbb8c164a..98d3177383b0 100644 --- a/code/modules/mob/living/simple_animal/hostile/ooze.dm +++ b/code/modules/mob/living/simple_animal/hostile/ooze.dm @@ -44,13 +44,15 @@ grant_actions_by_list(get_innate_actions()) -/mob/living/simple_animal/hostile/ooze/attacked_by(obj/item/I, mob/living/user) - if(!eat_atom(I, TRUE)) - return ..() +/mob/living/simple_animal/hostile/ooze/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(eat_atom(tool, TRUE)) + return ITEM_INTERACT_SUCCESS + return ..() -/mob/living/simple_animal/hostile/ooze/AttackingTarget(atom/attacked_target) - if(!eat_atom(attacked_target)) - return ..() +/mob/living/simple_animal/hostile/ooze/resolve_unarmed_attack(atom/attack_target, list/modifiers) + if(eat_atom(attack_target)) + return ITEM_INTERACT_SUCCESS + return ..() ///Handles nutrition gain/loss of mob and also makes it take damage if it's too low on nutrition, only happens for sentient mobs. /mob/living/simple_animal/hostile/ooze/Life(seconds_per_tick = SSMOBS_DT, times_fired) @@ -86,12 +88,13 @@ ///Tries to transfer the atoms reagents then delete it /mob/living/simple_animal/hostile/ooze/proc/eat_atom(atom/eat_target, silent) if(isnull(eat_target)) - return + return FALSE if(SEND_SIGNAL(eat_target, COMSIG_OOZE_EAT_ATOM, src, edible_food_types) & COMPONENT_ATOM_EATEN) - return + return TRUE if(silent || !isitem(eat_target)) //Don't bother reporting it for everything - return + return FALSE to_chat(src, span_warning("[eat_target] cannot be eaten!")) + return FALSE ///Updates the display that shows the mobs nutrition /mob/living/simple_animal/hostile/ooze/proc/updateNutritionDisplay() diff --git a/code/modules/mod/mod_construction.dm b/code/modules/mod/mod_construction.dm index f152af190a95..fd41c1c7f304 100644 --- a/code/modules/mod/mod_construction.dm +++ b/code/modules/mod/mod_construction.dm @@ -67,7 +67,7 @@ . = ..() . += span_notice("You could probably attach some wires to it...") -/obj/item/mod/construction/lavalandcore/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/item/mod/construction/lavalandcore/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(!istype(weapon, /obj/item/stack/cable_coil)) return ..() if(!weapon.tool_start_check(user, amount=2)) @@ -155,7 +155,7 @@ display_text = "All it's missing is external plating..." . += span_notice(display_text) -/obj/item/mod/construction/shell/attackby(obj/item/part, mob/user, list/modifiers) +/obj/item/mod/construction/shell/attackby(obj/item/part, mob/user, list/modifiers, list/attack_modifiers) . = ..() switch(step) if(START_STEP) diff --git a/code/modules/mod/mod_link.dm b/code/modules/mod/mod_link.dm index 9a1bfdd30420..fe85048a9da0 100644 --- a/code/modules/mod/mod_link.dm +++ b/code/modules/mod/mod_link.dm @@ -205,7 +205,7 @@ return cell.use(0.02 * STANDARD_CELL_RATE * seconds_per_tick, force = TRUE) -/obj/item/clothing/neck/link_scryer/attackby(obj/item/attacked_by, mob/user, list/modifiers) +/obj/item/clothing/neck/link_scryer/attackby(obj/item/attacked_by, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(cell || !istype(attacked_by, /obj/item/stock_parts/power_store/cell)) return diff --git a/code/modules/mod/modules/_module.dm b/code/modules/mod/modules/_module.dm index f9c792a74ae1..afa811e3e5b9 100644 --- a/code/modules/mod/modules/_module.dm +++ b/code/modules/mod/modules/_module.dm @@ -510,7 +510,7 @@ return FALSE return TRUE -/obj/item/mod/module/anomaly_locked/attackby(obj/item/item, mob/living/user, list/modifiers) +/obj/item/mod/module/anomaly_locked/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers) if(item.type in accepted_anomalies) if(core) balloon_alert(user, "core already in!") diff --git a/code/modules/mod/modules/module_pathfinder.dm b/code/modules/mod/modules/module_pathfinder.dm index 9e79c968e36c..9f1cec7e9fab 100644 --- a/code/modules/mod/modules/module_pathfinder.dm +++ b/code/modules/mod/modules/module_pathfinder.dm @@ -43,7 +43,7 @@ else . += span_warning("The implant is missing.") -/obj/item/mod/module/pathfinder/attack(mob/living/target, mob/living/user, list/modifiers) +/obj/item/mod/module/pathfinder/attack(mob/living/target, mob/living/user, list/modifiers, list/attack_modifiers) if(!ishuman(target) || !implant) return if(!do_after(user, 1.5 SECONDS, target = target)) diff --git a/code/modules/modular_computers/computers/item/disks/virus_disk.dm b/code/modules/modular_computers/computers/item/disks/virus_disk.dm index 39536b0ed4d1..585e7d315587 100644 --- a/code/modules/modular_computers/computers/item/disks/virus_disk.dm +++ b/code/modules/modular_computers/computers/item/disks/virus_disk.dm @@ -109,7 +109,7 @@ ///How much progression should be shown in the uplink, set on purchase of the item. var/current_progression = 0 -/obj/item/computer_disk/virus/frame/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/computer_disk/virus/frame/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(!istype(attacking_item, /obj/item/stack/telecrystal)) return diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm index 25edd47a51b9..1ba0f25b3ff4 100644 --- a/code/modules/modular_computers/computers/item/pda.dm +++ b/code/modules/modular_computers/computers/item/pda.dm @@ -107,7 +107,7 @@ return ..() -/obj/item/modular_computer/pda/pre_attack(atom/target, mob/living/user, list/modifiers) +/obj/item/modular_computer/pda/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) if(!inserted_disk || !ismachinery(target)) return ..() diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm index 48cbc57d7455..3d7aaed374f5 100644 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -157,8 +157,8 @@ /obj/machinery/modular_computer/item_interaction(mob/living/user, obj/item/tool, list/modifiers) return (CPU_INTERACTABLE(user) && !user.combat_mode) ? cpu.item_interaction(user, tool, modifiers) : ..() -/obj/machinery/modular_computer/attacked_by(obj/item/attacking_item, mob/living/user) - return CPU_INTERACTABLE(user) ? cpu.attacked_by(attacking_item, user) : ..() +/obj/machinery/modular_computer/attacked_by(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) + return CPU_INTERACTABLE(user) ? cpu.attacked_by(attacking_item, user, modifiers, attack_modifiers) : ..() // Stronger explosions cause serious damage to internal components // Minor explosions are mostly mitigitated by casing. diff --git a/code/modules/pai/card.dm b/code/modules/pai/card.dm index 7106d35c0f3f..d5ac23f5a324 100644 --- a/code/modules/pai/card.dm +++ b/code/modules/pai/card.dm @@ -30,7 +30,7 @@ SSpai.pai_card_list += src ADD_TRAIT(src, TRAIT_CASTABLE_LOC, INNATE_TRAIT) -/obj/item/pai_card/attackby(obj/item/used, mob/user, list/modifiers) +/obj/item/pai_card/attackby(obj/item/used, mob/user, list/modifiers, list/attack_modifiers) if(pai && istype(used, /obj/item/encryptionkey)) if(!pai.encrypt_mod) to_chat(user, span_alert("Encryption Key ports not configured.")) diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 50e73a241c52..37435e1264a4 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -113,7 +113,7 @@ return TRUE . = ..() -/obj/item/clipboard/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/item/clipboard/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) var/obj/item/paper/toppaper = toppaper_ref?.resolve() if(istype(weapon, /obj/item/paper)) //Add paper into the clipboard diff --git a/code/modules/paperwork/desk_bell.dm b/code/modules/paperwork/desk_bell.dm index 9fc22eeac911..8b760bd8d7eb 100644 --- a/code/modules/paperwork/desk_bell.dm +++ b/code/modules/paperwork/desk_bell.dm @@ -59,7 +59,7 @@ /obj/structure/desk_bell/attack_paw(mob/user, list/modifiers) return attack_hand(user, modifiers) -/obj/structure/desk_bell/attackby(obj/item/weapon, mob/living/user, list/modifiers) +/obj/structure/desk_bell/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() times_rang += weapon.force ring_bell(user) diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index 83374a720b67..afa3448c64e3 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -152,7 +152,7 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department fax_name = new_fax_name return ITEM_INTERACT_SUCCESS -/obj/machinery/fax/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/fax/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if (jammed && clear_jam(item, user)) return if (panel_open) diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 13613b2c8647..1e229217f7ac 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -42,7 +42,7 @@ for(var/obj/item/obj in src) obj.forceMove(loc) -/obj/structure/filingcabinet/attackby(obj/item/P, mob/living/user, list/modifiers) +/obj/structure/filingcabinet/attackby(obj/item/P, mob/living/user, list/modifiers, list/attack_modifiers) if(P.tool_behaviour == TOOL_WRENCH && LAZYACCESS(modifiers, RIGHT_CLICK)) to_chat(user, span_notice("You begin to [anchored ? "unwrench" : "wrench"] [src].")) if(P.use_tool(src, user, 20, volume=50)) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 2b97f1a9e43c..f4d7daadca73 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -81,7 +81,7 @@ paper_overlay = contents[1].color_atom_overlay(paper_overlay) return paper_overlay -/obj/item/folder/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/item/folder/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(is_type_in_typecache(weapon, folder_insertables)) //Add paper, photo or documents into the folder if(!user.transferItemToLoc(weapon, src)) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 675a4206b704..a5517034573a 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -417,7 +417,7 @@ user.put_in_hands(new_plane) return new_plane -/obj/item/paper/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/item/paper/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) // Enable picking paper up by clicking on it with the clipboard or folder if(istype(attacking_item, /obj/item/clipboard) || istype(attacking_item, /obj/item/folder) || istype(attacking_item, /obj/item/paper_bin)) attacking_item.attackby(src, user) diff --git a/code/modules/paperwork/paper_biscuit.dm b/code/modules/paperwork/paper_biscuit.dm index 20e4f9d85f44..e0ee61e69e79 100644 --- a/code/modules/paperwork/paper_biscuit.dm +++ b/code/modules/paperwork/paper_biscuit.dm @@ -73,7 +73,7 @@ return ..() -/obj/item/folder/biscuit/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/item/folder/biscuit/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if (is_type_in_typecache(weapon, folder_insertables) && !crack_check(user)) return diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm index bcee2af4bc3a..b0b7bb2d4294 100644 --- a/code/modules/paperwork/paper_cutter.dm +++ b/code/modules/paperwork/paper_cutter.dm @@ -110,7 +110,7 @@ blade_secured = !blade_secured return ITEM_INTERACT_SUCCESS -/obj/item/papercutter/attackby(obj/item/inserted_item, mob/user, list/modifiers) +/obj/item/papercutter/attackby(obj/item/inserted_item, mob/user, list/modifiers, list/attack_modifiers) if(istype(inserted_item, /obj/item/paper)) if(is_type_in_list(inserted_item, list( /obj/item/paper/fake_report, diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 29618e313051..40824b1ba77c 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -116,7 +116,7 @@ add_fingerprint(user) return ..() -/obj/item/paper_bin/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/paper_bin/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(at_overlay_limit()) dump_contents(drop_location(), TRUE) return diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index f3f713b7a95e..c746e5d56bdc 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -80,7 +80,7 @@ user.put_in_hands(released_paper) -/obj/item/paperplane/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/paperplane/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(IS_WRITING_UTENSIL(attacking_item)) to_chat(user, span_warning("You should unfold [src] before changing it!")) return diff --git a/code/modules/paperwork/paperwork.dm b/code/modules/paperwork/paperwork.dm index d8403354fdad..94a121556f97 100644 --- a/code/modules/paperwork/paperwork.dm +++ b/code/modules/paperwork/paperwork.dm @@ -39,7 +39,7 @@ detailed_desc = span_notice("As you sift through the papers, you slowly start to piece together what you're reading.") -/obj/item/paperwork/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/paperwork/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return @@ -234,7 +234,7 @@ else . += span_notice("These appear to just be a photocopy of the original documents.") -/obj/item/paperwork/photocopy/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/paperwork/photocopy/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(istype(attacking_item, /obj/item/stamp/void) && !stamped && !voided) to_chat(user, span_notice("You plant the [attacking_item] firmly onto the front of the documents.")) stamp_overlay = mutable_appearance('icons/obj/service/bureaucracy.dmi', "paper_stamp-void") diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index e8d4fb118f28..e4715058cd19 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -244,7 +244,7 @@ SEND_SIGNAL(src, COMSIG_PEN_ROTATED, deg, user) return CLICK_ACTION_SUCCESS -/obj/item/pen/attack(mob/living/M, mob/user, list/modifiers) +/obj/item/pen/attack(mob/living/M, mob/user, list/modifiers, list/attack_modifiers) if(force) // If the pen has a force value, call the normal attack procs. Used for e-daggers and captain's pen mostly. return ..() if(!M.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE)) @@ -268,7 +268,7 @@ * Sleepypens */ -/obj/item/pen/sleepy/attack(mob/living/M, mob/user, list/modifiers) +/obj/item/pen/sleepy/attack(mob/living/M, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(!.) return diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 88e2c27e13f9..891fe49f0aaa 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -675,7 +675,7 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks()) default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/photocopier/item_interaction(mob/living/user, obj/item/tool, list/modifiers) +/obj/machinery/photocopier/item_interaction(mob/living/user, obj/item/tool, list/modifiers, list/attack_modifiers) // No infinite paper chain. You need the original paperwork to make more copies. if(istype(tool, /obj/item/paperwork/photocopy)) balloon_alert(user, "too blurry!") diff --git a/code/modules/paperwork/ticketmachine.dm b/code/modules/paperwork/ticketmachine.dm index 44ddecad5476..7f5f5bcd7071 100644 --- a/code/modules/paperwork/ticketmachine.dm +++ b/code/modules/paperwork/ticketmachine.dm @@ -177,7 +177,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/ticket_machine, 32) maptext_x = 4 maptext = MAPTEXT(current_number) //Finally, apply the maptext -/obj/machinery/ticket_machine/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/ticket_machine/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) ..() if(istype(I, /obj/item/hand_labeler_refill)) if(!(ticket_number >= max_number)) diff --git a/code/modules/photography/photos/frame.dm b/code/modules/photography/photos/frame.dm index 394465400713..2df077a2b51d 100644 --- a/code/modules/photography/photos/frame.dm +++ b/code/modules/photography/photos/frame.dm @@ -147,7 +147,7 @@ return ITEM_INTERACT_SUCCESS -/obj/structure/sign/picture_frame/attackby(obj/item/I, mob/user, list/modifiers) +/obj/structure/sign/picture_frame/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/photo)) if(framed) diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm index 1759fd6c815a..09f8d02796a3 100644 --- a/code/modules/photography/photos/photo.dm +++ b/code/modules/photography/photos/photo.dm @@ -80,7 +80,7 @@ /obj/item/photo/attack_self(mob/user) user.examinate(src) -/obj/item/photo/attackby(obj/item/P, mob/user, list/modifiers) +/obj/item/photo/attackby(obj/item/P, mob/user, list/modifiers, list/attack_modifiers) if(IS_WRITING_UTENSIL(P)) if(!user.can_write(P)) return diff --git a/code/modules/plumbing/plumbers/plumbing_buffer.dm b/code/modules/plumbing/plumbers/plumbing_buffer.dm index 9c43d09522b3..18a018750825 100644 --- a/code/modules/plumbing/plumbers/plumbing_buffer.dm +++ b/code/modules/plumbing/plumbers/plumbing_buffer.dm @@ -84,7 +84,7 @@ to_chat(user, span_notice("New activation threshold is now [activation_volume].")) return -/obj/machinery/plumbing/buffer/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/plumbing/buffer/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(item.tool_behaviour == TOOL_SCREWDRIVER) to_chat(user, span_notice("You reset the automatic buffer.")) diff --git a/code/modules/plumbing/plumbers/teleporter.dm b/code/modules/plumbing/plumbers/teleporter.dm index b0ed573f7602..e0720d9fc07e 100644 --- a/code/modules/plumbing/plumbers/teleporter.dm +++ b/code/modules/plumbing/plumbers/teleporter.dm @@ -98,7 +98,7 @@ senders = list() -/obj/machinery/plumbing/receiver/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/plumbing/receiver/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(default_deconstruction_screwdriver(user, icon_state + "_open", initial(icon_state), I)) update_appearance() return diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 1f910cca525f..c7fbb72d364d 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -204,7 +204,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri // - Wirecutters : cut it duh ! // - Multitool : get the power currently passing through the cable // -/obj/structure/cable/attackby(obj/item/item, mob/user, list/modifiers) +/obj/structure/cable/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) handlecable(item, user, modifiers) diff --git a/code/modules/power/floodlight.dm b/code/modules/power/floodlight.dm index 8bf4fd7c1f7b..4861c3b7896c 100644 --- a/code/modules/power/floodlight.dm +++ b/code/modules/power/floodlight.dm @@ -97,7 +97,7 @@ return TRUE -/obj/structure/floodlight_frame/attackby(obj/item/O, mob/user, list/modifiers) +/obj/structure/floodlight_frame/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) if(istype(O, /obj/item/stack/cable_coil) && state == FLOODLIGHT_NEEDS_WIRES) var/obj/item/stack/S = O if(S.use(5)) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 1d35c683fe8a..3c1aa5eefa43 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -82,7 +82,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) main_part = null return ..() -/obj/machinery/gravity_generator/part/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/gravity_generator/part/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(!main_part) return return main_part.attackby(weapon, user) @@ -234,7 +234,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) . += span_notice("The new plating just needs to be bolted into place now.") // Fixing the gravity generator. -/obj/machinery/gravity_generator/main/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/gravity_generator/main/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(machine_stat & BROKEN) switch(broken_state) if(GRAV_NEEDS_SCREWDRIVER) diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm index 996fa6c990b7..056dedd09831 100644 --- a/code/modules/power/lighting/light.dm +++ b/code/modules/power/lighting/light.dm @@ -346,7 +346,7 @@ // attack with item - insert light (if right type), otherwise try to break the light -/obj/machinery/light/attackby(obj/item/tool, mob/living/user, list/modifiers) +/obj/machinery/light/attackby(obj/item/tool, mob/living/user, list/modifiers, list/attack_modifiers) // attempt to insert light if(istype(tool, /obj/item/light)) if(status == LIGHT_OK) @@ -424,14 +424,17 @@ real_cell.forceMove(new_light) cell = null -/obj/machinery/light/attacked_by(obj/item/attacking_object, mob/living/user) - ..() +/obj/machinery/light/attacked_by(obj/item/attacking_object, mob/living/user, list/modifiers, list/attack_modifiers) + . = ..() + if(!.) + return if(status != LIGHT_BROKEN && status != LIGHT_EMPTY) return if(!on || !(attacking_object.obj_flags & CONDUCTS_ELECTRICITY)) return - if(prob(12)) - electrocute_mob(user, get_area(src), src, 0.3, TRUE) + if(!prob(12)) + return + electrocute_mob(user, get_area(src), src, 0.3, TRUE) /obj/machinery/light/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0) . = ..() diff --git a/code/modules/power/lighting/light_construct.dm b/code/modules/power/lighting/light_construct.dm index 06f76ade2148..3b4ab157b0e7 100644 --- a/code/modules/power/lighting/light_construct.dm +++ b/code/modules/power/lighting/light_construct.dm @@ -75,7 +75,7 @@ cell_reference.forceMove(drop_location()) return cell_reference.attack_tk(user) -/obj/structure/light_construct/attackby(obj/item/tool, mob/user, list/modifiers) +/obj/structure/light_construct/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if(istype(tool, /obj/item/stock_parts/power_store/cell)) if(!cell_connectors) diff --git a/code/modules/power/lighting/light_items.dm b/code/modules/power/lighting/light_items.dm index 2669f208d3ac..2b4fd0b3e7df 100644 --- a/code/modules/power/lighting/light_items.dm +++ b/code/modules/power/lighting/light_items.dm @@ -32,7 +32,7 @@ AddElement(/datum/element/update_icon_updates_onmob) AddComponent(/datum/component/golem_food, golem_food_key = /obj/item/light, extra_validation = CALLBACK(src, PROC_REF(is_intact))) -/obj/item/light/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/light/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(istype(attacking_item, /obj/item/lightreplacer)) @@ -127,7 +127,7 @@ ..() shatter(M) -/obj/item/light/attack_atom(obj/O, mob/living/user, list/modifiers) +/obj/item/light/attack_atom(obj/O, mob/living/user, list/modifiers, list/attack_modifiers) ..() shatter(O) diff --git a/code/modules/power/pipecleaners.dm b/code/modules/power/pipecleaners.dm index 87230f1c0e76..009fc93e57b9 100644 --- a/code/modules/power/pipecleaners.dm +++ b/code/modules/power/pipecleaners.dm @@ -150,7 +150,7 @@ By design, d1 is the smallest direction and d2 is the highest investigate_log("was pulled up by [key_name(usr)] in [AREACOORD(src)]", INVESTIGATE_WIRES) deconstruct() -/obj/structure/pipe_cleaner/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/pipe_cleaner/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) handlecable(W, user, modifiers) /obj/structure/pipe_cleaner/singularity_pull(S, current_size) diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 46fa7ff7b3cf..be671627b533 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -175,7 +175,7 @@ else disconnect_from_network() -/obj/machinery/power/port_gen/pacman/attackby(obj/item/O, mob/user, list/modifiers) +/obj/machinery/power/port_gen/pacman/attackby(obj/item/O, mob/user, list/modifiers, list/attack_modifiers) if(istype(O, sheet_path)) var/obj/item/stack/addstack = O var/amount = min((max_sheets - sheets), addstack.amount) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 988394c89202..142b54865a64 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -326,7 +326,7 @@ // attach a wire to a power machine - leads from the turf you are standing on //almost never called, overwritten by all power machines but terminal and generator -/obj/machinery/power/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/power/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/coil = W var/turf/T = user.loc diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm index 98efc280f4f8..122d13d18d9a 100644 --- a/code/modules/power/rtg.dm +++ b/code/modules/power/rtg.dm @@ -37,7 +37,7 @@ if(in_range(user, src) || isobserver(user)) . += span_notice("The status display reads: Power generation at [display_power(power_gen, convert = FALSE)].") -/obj/machinery/power/rtg/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/power/rtg/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-open", initial(icon_state), I)) return else if(default_deconstruction_crowbar(I)) @@ -142,7 +142,7 @@ power_gen = 750 anchored = TRUE -/obj/machinery/power/rtg/old_station/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/power/rtg/old_station/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-open", initial(icon_state), I)) to_chat(user,span_warning("You feel it crumbling under your hands!")) return diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index c66a977ad271..7bbec1e91916 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -50,7 +50,7 @@ yeet_shock(user) return TRUE -/obj/machinery/field/containment/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/field/containment/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) yeet_shock(user) return TRUE diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index f1a489389753..acede021c5ed 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -332,7 +332,7 @@ locked = !locked to_chat(user, span_notice("You [src.locked ? "lock" : "unlock"] the controls.")) -/obj/machinery/power/emitter/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/power/emitter/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(item.GetID()) togglelock(user) return diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 2017603ae1c9..1963abdc597b 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -312,7 +312,7 @@ return randomise_offset(anchored ? 0 : random_offset) -/obj/item/solar_assembly/attackby(obj/item/item_used, mob/user, list/modifiers) +/obj/item/solar_assembly/attackby(obj/item/item_used, mob/user, list/modifiers, list/attack_modifiers) if(item_used.tool_behaviour == TOOL_WRENCH && isturf(loc)) if(isinspace()) to_chat(user, span_warning("You can't secure [src] here.")) @@ -566,7 +566,7 @@ return TRUE return FALSE -/obj/machinery/power/solar_control/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/machinery/power/solar_control/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(I.tool_behaviour == TOOL_SCREWDRIVER) if(I.use_tool(src, user, 20, volume=50)) if (src.machine_stat & BROKEN) diff --git a/code/modules/power/supermatter/supermatter_hit_procs.dm b/code/modules/power/supermatter/supermatter_hit_procs.dm index 95497a058c38..0b6daae76a39 100644 --- a/code/modules/power/supermatter/supermatter_hit_procs.dm +++ b/code/modules/power/supermatter/supermatter_hit_procs.dm @@ -65,7 +65,7 @@ qdel(rip_u) return COMPONENT_CANCEL_ATTACK_CHAIN -/obj/machinery/power/supermatter_crystal/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/power/supermatter_crystal/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/scalpel/supermatter)) var/obj/item/scalpel/supermatter/scalpel = item to_chat(user, span_notice("You carefully begin to scrape \the [src] with \the [scalpel]...")) diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 6125483432ba..21443f265738 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -74,7 +74,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/power/energy_accumulator/tesla_coil/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/power/energy_accumulator/tesla_coil/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(default_deconstruction_screwdriver(user, "coil_open[anchored]", "coil[anchored]", W)) return @@ -156,7 +156,7 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/power/energy_accumulator/grounding_rod/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/power/energy_accumulator/grounding_rod/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(default_deconstruction_screwdriver(user, "grounding_rod_open[anchored]", "grounding_rod[anchored]", W)) return diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm index 9b6c0478d7b3..0a89b6679e17 100644 --- a/code/modules/projectiles/ammunition/_ammunition.dm +++ b/code/modules/projectiles/ammunition/_ammunition.dm @@ -105,7 +105,7 @@ if(!loaded_projectile) loaded_projectile = new projectile_type(src, src) -/obj/item/ammo_casing/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/ammo_casing/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/ammo_box)) var/obj/item/ammo_box/box = I if(isturf(loc)) diff --git a/code/modules/projectiles/ammunition/ballistic/foam.dm b/code/modules/projectiles/ammunition/ballistic/foam.dm index f02e88b85a39..9925139a0b13 100644 --- a/code/modules/projectiles/ammunition/ballistic/foam.dm +++ b/code/modules/projectiles/ammunition/ballistic/foam.dm @@ -39,7 +39,7 @@ [length(type_initial_names) ? ", such as [english_list(type_initial_names, and_text = "or ", final_comma_text = ", ")]" : ""].") -/obj/item/ammo_casing/foam_dart/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/ammo_casing/foam_dart/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) var/obj/projectile/bullet/foam_dart/dart = loaded_projectile if (attacking_item.tool_behaviour == TOOL_SCREWDRIVER && !modified) modified = TRUE diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 4c9da1487e4e..6556b41ed5d1 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -340,7 +340,7 @@ return ..() -/obj/item/gun/ballistic/automatic/l6_saw/attackby(obj/item/A, mob/user, list/modifiers) +/obj/item/gun/ballistic/automatic/l6_saw/attackby(obj/item/A, mob/user, list/modifiers, list/attack_modifiers) if(!cover_open && istype(A, accepted_magazine_type)) balloon_alert(user, "open the cover!") return diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index a861eb322a07..902b66bb69b4 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -16,7 +16,7 @@ /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted pin = /obj/item/firing_pin -/obj/item/gun/ballistic/revolver/grenadelauncher/attackby(obj/item/A, mob/user, list/modifiers) +/obj/item/gun/ballistic/revolver/grenadelauncher/attackby(obj/item/A, mob/user, list/modifiers, list/attack_modifiers) ..() if(istype(A, /obj/item/ammo_box) || isammocasing(A)) chamber_round() diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 5f1918efc15f..087ae33f406d 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -90,7 +90,7 @@ return underbarrel.try_fire_gun(target, user, params) return ..() -/obj/item/gun/ballistic/automatic/pistol/clandestine/fisher/afterattack(atom/target, mob/user, list/modifiers) +/obj/item/gun/ballistic/automatic/pistol/clandestine/fisher/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) var/obj/projectile/energy/fisher/melee/simulated_hit = new simulated_hit.firer = user simulated_hit.on_hit(target) diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm index 12047025e848..e92df87d50e9 100644 --- a/code/modules/projectiles/guns/energy/dueling.dm +++ b/code/modules/projectiles/guns/energy/dueling.dm @@ -165,7 +165,7 @@ setting_overlay = mutable_appearance(icon,setting_iconstate()) add_overlay(setting_overlay) -/obj/item/gun/energy/dueling/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/gun/energy/dueling/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(istype(W, /obj/item/gun/energy/dueling)) var/obj/item/gun/energy/dueling/other_gun = W diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm index 1829c9351532..f09527dec9e2 100644 --- a/code/modules/projectiles/guns/energy/laser_gatling.dm +++ b/code/modules/projectiles/guns/energy/laser_gatling.dm @@ -53,7 +53,7 @@ else ..() -/obj/item/minigunpack/attackby(obj/item/W, mob/user, list/modifiers) +/obj/item/minigunpack/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(W == gun) //Don't need armed check, because if you have the gun assume its armed. user.dropItemToGround(gun, TRUE) else diff --git a/code/modules/projectiles/guns/energy/recharge.dm b/code/modules/projectiles/guns/energy/recharge.dm index bdbc30e40e53..a54131bca794 100644 --- a/code/modules/projectiles/guns/energy/recharge.dm +++ b/code/modules/projectiles/guns/energy/recharge.dm @@ -168,7 +168,7 @@ Caveat emptor." \ ) -/obj/item/gun/energy/recharge/fisher/attack(mob/living/target_mob, mob/living/user, list/modifiers) +/obj/item/gun/energy/recharge/fisher/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(.) return diff --git a/code/modules/projectiles/guns/special/grenade_launcher.dm b/code/modules/projectiles/guns/special/grenade_launcher.dm index 41ce1e6cb8b8..b375f1affa49 100644 --- a/code/modules/projectiles/guns/special/grenade_launcher.dm +++ b/code/modules/projectiles/guns/special/grenade_launcher.dm @@ -28,7 +28,7 @@ max_grenades = reset_fantasy_variable("max_syringes", max_grenades) return ..() -/obj/item/gun/grenadelauncher/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/gun/grenadelauncher/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/grenade/c4)) return diff --git a/code/modules/projectiles/guns/special/hand_of_midas.dm b/code/modules/projectiles/guns/special/hand_of_midas.dm index d0e2af708ce5..67729f07844e 100644 --- a/code/modules/projectiles/guns/special/hand_of_midas.dm +++ b/code/modules/projectiles/guns/special/hand_of_midas.dm @@ -78,7 +78,7 @@ return ITEM_INTERACT_SUCCESS // If we botch a shot, we have to start over again by inserting gold coins into the gun. Can only be done if it has no charges or gold. -/obj/item/gun/magic/midas_hand/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/item/gun/magic/midas_hand/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(charges || gold_timer) balloon_alert(user, "already loaded") diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index 0187dbc8981f..1a9815f9f3bd 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -266,7 +266,7 @@ gun.desc = initial(desc) ..() -/obj/item/firing_pin/paywall/attackby(obj/item/M, mob/living/user, list/modifiers) +/obj/item/firing_pin/paywall/attackby(obj/item/M, mob/living/user, list/modifiers, list/attack_modifiers) if(isidcard(M)) var/obj/item/card/id/id = M if(!id.registered_account) diff --git a/code/modules/reagents/chemistry/items.dm b/code/modules/reagents/chemistry/items.dm index ca4a8b07e8ca..c3ef1e6f0952 100644 --- a/code/modules/reagents/chemistry/items.dm +++ b/code/modules/reagents/chemistry/items.dm @@ -163,7 +163,7 @@ if(reagent_type) reagents.add_reagent(reagent_type, 15) -/obj/item/burner/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/item/burner/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(is_reagent_container(I)) if(lit) diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 23b3ddbaacb9..8dcf53e05a69 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -79,8 +79,8 @@ beaker = null update_appearance() -/obj/machinery/computer/pandemic/attackby(obj/item/held_item, mob/user, list/modifiers) - //Advanced science! Percision instruments (eg droppers and syringes) are precise enough to modify the loaded sample! +/obj/machinery/computer/pandemic/attackby(obj/item/held_item, mob/user, list/modifiers, list/attack_modifiers) + //Advanced science! Precision instruments (eg droppers and syringes) are precise enough to modify the loaded sample! if(istype(held_item, /obj/item/reagent_containers/dropper) || istype(held_item, /obj/item/reagent_containers/syringe)) if(!beaker) balloon_alert(user, "no beaker!") diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 8c9bcf7071b8..a3f165e44493 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -84,7 +84,7 @@ RegisterSignals(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_REM_REAGENT), PROC_REF(on_reagent_change)) RegisterSignal(reagents, COMSIG_QDELETING, PROC_REF(on_reagents_del)) -/obj/item/reagent_containers/attack(mob/living/target_mob, mob/living/user, list/modifiers) +/obj/item/reagent_containers/attack(mob/living/target_mob, mob/living/user, list/modifiers, list/attack_modifiers) if (!user.combat_mode) return return ..() @@ -125,7 +125,7 @@ balloon_alert(user, "transferring [amount_per_transfer_from_this]u") mode_change_message(user) -/obj/item/reagent_containers/pre_attack_secondary(atom/target, mob/living/user, list/modifiers) +/obj/item/reagent_containers/pre_attack_secondary(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) if(HAS_TRAIT(target, TRAIT_DO_NOT_SPLASH)) return ..() if(!user.combat_mode) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 0aefe25c7167..be2874596b24 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -99,7 +99,7 @@ /obj/item/reagent_containers/blood/universal blood_type = /datum/blood_type/universal -/obj/item/reagent_containers/blood/attackby(obj/item/tool, mob/user, list/modifiers) +/obj/item/reagent_containers/blood/attackby(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers) if (IS_WRITING_UTENSIL(tool)) if(!user.can_write(tool)) return diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index dcbc7ce95f83..eecd2cda8192 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -186,7 +186,7 @@ target.update_appearance() return ITEM_INTERACT_SUCCESS -/obj/item/reagent_containers/cup/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/reagent_containers/cup/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) var/hotness = attacking_item.get_temperature() if(hotness && reagents) reagents.expose_temperature(hotness) @@ -431,7 +431,7 @@ melee = 10 acid = 50 -/obj/item/reagent_containers/cup/bucket/attackby(obj/O, mob/user, list/modifiers) +/obj/item/reagent_containers/cup/bucket/attackby(obj/O, mob/user, list/modifiers, list/attack_modifiers) if(istype(O, /obj/item/mop)) if(reagents.total_volume < 1) user.balloon_alert(user, "empty!") diff --git a/code/modules/reagents/reagent_containers/cups/glassbottle.dm b/code/modules/reagents/reagent_containers/cups/glassbottle.dm index b9c34f4e19a3..cc1c8b2a41fb 100644 --- a/code/modules/reagents/reagent_containers/cups/glassbottle.dm +++ b/code/modules/reagents/reagent_containers/cups/glassbottle.dm @@ -674,7 +674,7 @@ if(do_after(user, 1 SECONDS, src)) return pop_cork(user, sabrage = FALSE, froth_severity = pick(0, 1)) -/obj/item/reagent_containers/cup/glass/bottle/champagne/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/item/reagent_containers/cup/glass/bottle/champagne/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(spillable) @@ -911,7 +911,7 @@ target.fire_act() new /obj/effect/hotspot(get_turf(target)) -/obj/item/reagent_containers/cup/glass/bottle/molotov/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/reagent_containers/cup/glass/bottle/molotov/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(I.get_temperature() && !active) active = TRUE log_bomber(user, "has primed a", src, "for detonation") diff --git a/code/modules/reagents/reagent_containers/misc.dm b/code/modules/reagents/reagent_containers/misc.dm index f19d78c6ffb5..1228d2ed57b6 100644 --- a/code/modules/reagents/reagent_containers/misc.dm +++ b/code/modules/reagents/reagent_containers/misc.dm @@ -73,7 +73,7 @@ to_chat(user, span_notice("You screw the battery case on [src] [open ? "open" : "closed"] .")) update_appearance() -/obj/item/reagent_containers/cup/maunamug/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/reagent_containers/cup/maunamug/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if(!istype(I, /obj/item/stock_parts/power_store/cell)) return ..() diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 131fb82afe47..b1d7feb4eebc 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -135,7 +135,7 @@ current_range = spray_range to_chat(user, span_notice("You switch the nozzle setting to [stream_mode ? "\"stream\"":"\"spray\""].")) -/obj/item/reagent_containers/spray/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/reagent_containers/spray/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) var/hotness = I.get_temperature() if(hotness && reagents) reagents.expose_temperature(hotness) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 49935dfdf77c..b3a74f675c54 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -24,7 +24,7 @@ . = ..() AddElement(/datum/element/update_icon_updates_onmob) -/obj/item/reagent_containers/syringe/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/reagent_containers/syringe/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) return /obj/item/reagent_containers/syringe/proc/try_syringe(atom/target, mob/user) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 839885aebb45..2b4e88b5e42e 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -82,7 +82,7 @@ if(tank_volume && (damage_flag == BULLET || damage_flag == LASER)) boom() -/obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(W.is_refillable()) return FALSE //so we can refill them via their afterattack. if(istype(W, /obj/item/assembly_holder) && accepts_rig) @@ -294,7 +294,7 @@ // if this sucks, feel free to change it, but make sure the damn thing will log. thanks. return ..() -/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/living/user, params) +/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(I.tool_behaviour == TOOL_WELDER) if(!reagents.has_reagent(/datum/reagent/fuel)) to_chat(user, span_warning("[src] is out of fuel!")) diff --git a/code/modules/recycling/conveyor.dm b/code/modules/recycling/conveyor.dm index 36b0708a16c9..c4267dc1fc27 100644 --- a/code/modules/recycling/conveyor.dm +++ b/code/modules/recycling/conveyor.dm @@ -266,7 +266,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) SSmove_manager.stop_looping(thing, SSconveyors) // attack with item, place item on conveyor -/obj/machinery/conveyor/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/machinery/conveyor/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(attacking_item.tool_behaviour == TOOL_CROWBAR) user.visible_message(span_notice("[user] struggles to pry up [src] with [attacking_item]."), \ span_notice("You struggle to pry up [src] with [attacking_item].")) @@ -310,7 +310,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) else return ..() -/obj/machinery/conveyor/attackby_secondary(obj/item/attacking_item, mob/living/user, list/modifiers) +/obj/machinery/conveyor/attackby_secondary(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) if(attacking_item.tool_behaviour == TOOL_SCREWDRIVER) attacking_item.play_tool_sound(src) flipped = !flipped @@ -468,7 +468,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/machinery/conveyor_switch/attack_robot_secondary(mob/user, list/modifiers) return attack_hand_secondary(user, modifiers) -/obj/machinery/conveyor_switch/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/machinery/conveyor_switch/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(is_wire_tool(attacking_item)) wires.interact(user) return TRUE @@ -583,7 +583,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) use(1) return ITEM_INTERACT_SUCCESS -/obj/item/stack/conveyor/attackby(obj/item/item_used, mob/user, list/modifiers) +/obj/item/stack/conveyor/attackby(obj/item/item_used, mob/user, list/modifiers, list/attack_modifiers) ..() if(istype(item_used, /obj/item/conveyor_switch_construct)) to_chat(user, span_notice("You link the switch to the conveyor belt assembly.")) diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 188d05a710a9..4c8256b90038 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -114,7 +114,7 @@ air_contents.merge(removed) trunk_check() -/obj/machinery/disposal/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/machinery/disposal/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) if(!pressure_charging && !full_pressure && !flush) if(I.tool_behaviour == TOOL_SCREWDRIVER) @@ -361,7 +361,7 @@ interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_IGNORE_MOBILITY // attack by item places it in to disposal -/obj/machinery/disposal/bin/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/disposal/bin/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/storage/bag/trash)) //Not doing component overrides because this is a specific type. var/obj/item/storage/bag/trash/bag = I to_chat(user, span_warning("You empty the bag.")) diff --git a/code/modules/recycling/disposal/pipe_sorting.dm b/code/modules/recycling/disposal/pipe_sorting.dm index abf001f47dc5..9a7002d122cf 100644 --- a/code/modules/recycling/disposal/pipe_sorting.dm +++ b/code/modules/recycling/disposal/pipe_sorting.dm @@ -55,7 +55,7 @@ else . += "It has no sorting tags set." -/obj/structure/disposalpipe/sorting/mail/attackby(obj/item/I, mob/user, list/modifiers) +/obj/structure/disposalpipe/sorting/mail/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/dest_tagger)) var/obj/item/dest_tagger/O = I diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 46e49c7ed5c3..68eb30cf3b0b 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -103,7 +103,7 @@ if(sticker) . += "[base_icon_state]_tag" -/obj/item/delivery/attackby(obj/item/item, mob/user, list/modifiers) +/obj/item/delivery/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/dest_tagger)) var/obj/item/dest_tagger/dest_tagger = item @@ -356,7 +356,7 @@ if(payments_acc) . += span_notice("Ctrl-click to clear the registered account.") -/obj/item/sales_tagger/attackby(obj/item/item, mob/living/user, list/modifiers) +/obj/item/sales_tagger/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(isidcard(item)) var/obj/item/card/id/potential_acc = item diff --git a/code/modules/religion/burdened/psyker.dm b/code/modules/religion/burdened/psyker.dm index 14bf4d484db2..fabb9e649b2c 100644 --- a/code/modules/religion/burdened/psyker.dm +++ b/code/modules/religion/burdened/psyker.dm @@ -229,7 +229,7 @@ /obj/item/gun/ballistic/revolver/chaplain/attack_self(mob/living/user) pray_refill(user) -/obj/item/gun/ballistic/revolver/chaplain/attackby(obj/item/possibly_ammo, mob/user, list/modifiers) +/obj/item/gun/ballistic/revolver/chaplain/attackby(obj/item/possibly_ammo, mob/user, list/modifiers, list/attack_modifiers) if (isammocasing(possibly_ammo) || istype(possibly_ammo, /obj/item/ammo_box)) user.balloon_alert(user, "no manual reloads!") return diff --git a/code/modules/research/anomaly/anomaly_core.dm b/code/modules/research/anomaly/anomaly_core.dm index 1028b7d4dcb0..292db329a5fd 100644 --- a/code/modules/research/anomaly/anomaly_core.dm +++ b/code/modules/research/anomaly/anomaly_core.dm @@ -29,7 +29,7 @@ /obj/item/assembly/signaler/anomaly/attack_self() return -/obj/item/assembly/signaler/anomaly/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/assembly/signaler/anomaly/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(I.tool_behaviour == TOOL_ANALYZER) to_chat(user, span_notice("Analyzing... [src]'s stabilized field is fluctuating along frequency [format_frequency(frequency)], code [code].")) return ..() diff --git a/code/modules/research/anomaly/anomaly_refinery.dm b/code/modules/research/anomaly/anomaly_refinery.dm index 12ca241dc6b6..6eb6eda00382 100644 --- a/code/modules/research/anomaly/anomaly_refinery.dm +++ b/code/modules/research/anomaly/anomaly_refinery.dm @@ -71,7 +71,7 @@ var/radius = clamp(round(MIN_RADIUS_REQUIRED + radius_increase_per_core * already_made, 1), MIN_RADIUS_REQUIRED, MAX_RADIUS_REQUIRED) return radius -/obj/machinery/research/anomaly_refinery/attackby(obj/item/tool, mob/living/user, list/modifiers) +/obj/machinery/research/anomaly_refinery/attackby(obj/item/tool, mob/living/user, list/modifiers, list/attack_modifiers) if(active) to_chat(user, span_warning("You can't insert [tool] into [src] while [p_theyre()] currently active.")) return diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 074cb47f16c2..f3ccf2d39eb8 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -116,7 +116,7 @@ if(in_range(user, src) || isobserver(user)) . += span_notice("The status display reads: Malfunction probability reduced by [malfunction_probability_coeff]%.
Cooldown interval between experiments at [resetTime*0.1] seconds.") -/obj/machinery/rnd/experimentor/attackby(obj/item/weapon, mob/living/user, list/modifiers) +/obj/machinery/rnd/experimentor/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers) if(user.combat_mode) return ..() if(!is_insertion_ready(user)) diff --git a/code/modules/research/ordnance/doppler_array.dm b/code/modules/research/ordnance/doppler_array.dm index 52cb2d0d0910..1c59c654c70d 100644 --- a/code/modules/research/ordnance/doppler_array.dm +++ b/code/modules/research/ordnance/doppler_array.dm @@ -49,7 +49,7 @@ . = ..() . += span_notice("It is currently facing [dir2text(dir)]") -/obj/machinery/doppler_array/attackby(obj/item/item, mob/user, list/modifiers) +/obj/machinery/doppler_array/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) if(istype(item, /obj/item/computer_disk)) var/obj/item/computer_disk/disk = item eject_disk(user) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index d42604835149..38a01c648f8c 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -64,7 +64,7 @@ Nothing else in the console has ID requirements. d_disk = null return ..() -/obj/machinery/computer/rdconsole/attackby(obj/item/D, mob/user, list/modifiers) +/obj/machinery/computer/rdconsole/attackby(obj/item/D, mob/user, list/modifiers, list/attack_modifiers) //Loading a disk into it. if(istype(D, /obj/item/disk)) if(istype(D, /obj/item/disk/tech_disk)) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 68022cc372a1..70c37d3d0669 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -165,7 +165,7 @@ return ITEM_INTERACT_BLOCKING return ..() -/obj/machinery/rnd/server/master/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/machinery/rnd/server/master/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(istype(attacking_item, /obj/item/computer_disk/hdd_theft)) switch(deconstruction_state) if(HDD_PANEL_CLOSED) diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index 1f81056ba0c1..1b21c5756396 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -27,7 +27,7 @@ Slimecrossing Weapons throwforce = 15 damtype = BRUTE -/obj/item/knife/rainbowknife/afterattack(atom/target, mob/user, list/modifiers) +/obj/item/knife/rainbowknife/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) if(isliving(target)) damtype = pick(BRUTE, BURN, TOX, OXY) switch(damtype) diff --git a/code/modules/research/xenobiology/vatgrowing/petri_dish.dm b/code/modules/research/xenobiology/vatgrowing/petri_dish.dm index 68600e246523..08e88b1e4818 100644 --- a/code/modules/research/xenobiology/vatgrowing/petri_dish.dm +++ b/code/modules/research/xenobiology/vatgrowing/petri_dish.dm @@ -26,7 +26,7 @@ var/datum/micro_organism/MO = i . += MO.get_details() -/obj/item/petri_dish/pre_attack(atom/A, mob/living/user, list/modifiers) +/obj/item/petri_dish/pre_attack(atom/A, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(!sample || !istype(A, /obj/structure/sink)) return FALSE diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index f195c09232aa..b23108f0bb6c 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -124,7 +124,7 @@ user.hud_used.show_hud(user.hud_used.hud_version) return ..() -/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/used_item, mob/user, list/modifiers) +/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/used_item, mob/user, list/modifiers, list/attack_modifiers) if(istype(used_item, /obj/item/food/monkeycube)) monkeys++ to_chat(user, span_notice("You feed [used_item] to [src]. It now has [monkeys] monkey cubes stored.")) diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 859d2bbd2bd8..28320849ada9 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -62,7 +62,7 @@ active = FALSE update_appearance() -/obj/machinery/power/emitter/energycannon/magical/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/power/emitter/energycannon/magical/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) return /obj/machinery/power/emitter/energycannon/magical/ex_act(severity) @@ -283,7 +283,7 @@ /obj/machinery/scanner_gate/luxury_shuttle/auto_scan(atom/movable/AM) return -/obj/machinery/scanner_gate/luxury_shuttle/attackby(obj/item/W, mob/user, list/modifiers) +/obj/machinery/scanner_gate/luxury_shuttle/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) return /obj/machinery/scanner_gate/luxury_shuttle/emag_act(mob/user, obj/item/card/emag/emag_card) diff --git a/code/modules/spells/spell_types/self/spacetime_distortion.dm b/code/modules/spells/spell_types/self/spacetime_distortion.dm index ab276cd7c837..e0d59774133b 100644 --- a/code/modules/spells/spell_types/self/spacetime_distortion.dm +++ b/code/modules/spells/spell_types/self/spacetime_distortion.dm @@ -149,7 +149,7 @@ if(!busy) walk_link(AM) -/obj/effect/cross_action/spacetime_dist/attackby(obj/item/W, mob/user, list/modifiers) +/obj/effect/cross_action/spacetime_dist/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) if(user.temporarilyRemoveItemFromInventory(W)) walk_link(W) else diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 79c571b8ac0a..52ae175e3f86 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -577,7 +577,7 @@ // NON-MODULE CHANGE END return ..() -/obj/item/bodypart/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/item/bodypart/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) SHOULD_CALL_PARENT(TRUE) if(weapon.get_sharpness()) diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm index cdfbf46eb51c..064daf66a940 100644 --- a/code/modules/surgery/bodyparts/robot_bodyparts.dm +++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm @@ -318,7 +318,7 @@ TRAIT_RESISTHIGHPRESSURE, ), AUGMENTATION_TRAIT) -/obj/item/bodypart/chest/robot/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/item/bodypart/chest/robot/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(istype(weapon, /obj/item/stock_parts/power_store/cell)) if(cell) to_chat(user, span_warning("You have already inserted a cell!")) @@ -471,7 +471,7 @@ . += "It has two eye sockets occupied by flashes." . += span_notice("You can remove the seated flash[single_flash ? "":"es"] with a crowbar.") -/obj/item/bodypart/head/robot/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/item/bodypart/head/robot/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(istype(weapon, /obj/item/assembly/flash/handheld)) var/obj/item/assembly/flash/handheld/flash = weapon if(flash1 && flash2) diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm index 045401fe64c0..f8324214bf23 100644 --- a/code/modules/surgery/organs/autosurgeon.dm +++ b/code/modules/surgery/organs/autosurgeon.dm @@ -119,11 +119,11 @@ /obj/item/autosurgeon/attack_self(mob/user)//when the object it used... use_autosurgeon(user, user) -/obj/item/autosurgeon/attack(mob/living/target, mob/living/user, list/modifiers) +/obj/item/autosurgeon/attack(mob/living/target, mob/living/user, list/modifiers, list/attack_modifiers) add_fingerprint(user) use_autosurgeon(target, user, 8 SECONDS) -/obj/item/autosurgeon/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/item/autosurgeon/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(isorgan(attacking_item)) load_organ(attacking_item, user) else diff --git a/code/modules/transport/tram/tram_controller.dm b/code/modules/transport/tram/tram_controller.dm index b01c48cd524d..e7ffdb059c3e 100644 --- a/code/modules/transport/tram/tram_controller.dm +++ b/code/modules/transport/tram/tram_controller.dm @@ -770,7 +770,7 @@ . += span_notice("The cabinet can be opened with a [EXAMINE_HINT("Left-click.")]") -/obj/machinery/transport/tram_controller/attackby(obj/item/weapon, mob/living/user, list/modifiers) +/obj/machinery/transport/tram_controller/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers) if(user.combat_mode || cover_open) return ..() diff --git a/code/modules/transport/tram/tram_signals.dm b/code/modules/transport/tram/tram_signals.dm index eb30b636e471..5776ba5ecc18 100644 --- a/code/modules/transport/tram/tram_signals.dm +++ b/code/modules/transport/tram/tram_signals.dm @@ -118,7 +118,7 @@ SStransport.crossing_signals -= src . = ..() -/obj/machinery/transport/crossing_signal/attackby(obj/item/weapon, mob/living/user, list/modifiers) +/obj/machinery/transport/crossing_signal/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers) if(!user.combat_mode) if(default_deconstruction_screwdriver(user, icon_state, icon_state, weapon)) return @@ -180,7 +180,7 @@ find_uplink() return CLICK_ACTION_SUCCESS -/obj/machinery/transport/crossing_signal/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/transport/crossing_signal/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(weapon.tool_behaviour == TOOL_WRENCH && panel_open) @@ -538,7 +538,7 @@ . += span_notice("The red [EXAMINE_HINT("local fault")] light is on.") . += span_notice("The status display reads: Repair required.") -/obj/machinery/transport/guideway_sensor/attackby(obj/item/weapon, mob/living/user, list/modifiers) +/obj/machinery/transport/guideway_sensor/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers) if (!user.combat_mode) if(default_deconstruction_screwdriver(user, icon_state, icon_state, weapon)) return diff --git a/code/modules/transport/tram/tram_structures.dm b/code/modules/transport/tram/tram_structures.dm index 7c4ec09babe9..504d606aa91b 100644 --- a/code/modules/transport/tram/tram_structures.dm +++ b/code/modules/transport/tram/tram_structures.dm @@ -163,7 +163,7 @@ update_appearance() return ITEM_INTERACT_SUCCESS -/obj/structure/tram/attackby_secondary(obj/item/tool, mob/user, list/modifiers) +/obj/structure/tram/attackby_secondary(obj/item/tool, mob/user, list/modifiers, list/attack_modifiers) switch(state) if(TRAM_SCREWED_TO_FRAME) if(tool.tool_behaviour == TOOL_SCREWDRIVER) @@ -218,7 +218,7 @@ for(var/i in 1 to mineral_amount) new mineral(loc) -/obj/structure/tram/attackby(obj/item/item, mob/user, list/modifiers) +/obj/structure/tram/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(istype(item, /obj/item/wallframe/tram)) @@ -353,7 +353,7 @@ /// The last time a radiation pulse was performed var/last_event = 0 -/obj/structure/tram/alt/uranium/attackby(obj/item/W, mob/user, list/modifiers) +/obj/structure/tram/alt/uranium/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers) radiate() return ..() diff --git a/code/modules/transport/transport_module.dm b/code/modules/transport/transport_module.dm index 528257bee84a..33e1afd7c462 100644 --- a/code/modules/transport/transport_module.dm +++ b/code/modules/transport/transport_module.dm @@ -729,7 +729,7 @@ return open_lift_radial(user) -/obj/structure/transport/linear/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/structure/transport/linear/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(!radial_travel) return ..() diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm index c9a0b011e741..8f8451a1200e 100644 --- a/code/modules/vehicles/cars/clowncar.dm +++ b/code/modules/vehicles/cars/clowncar.dm @@ -100,14 +100,14 @@ foam.set_up(4, holder = src, location = loc, carry = foamreagent) foam.start() -/obj/vehicle/sealed/car/clowncar/attacked_by(obj/item/I, mob/living/user) - . = ..() - if(!istype(I, /obj/item/food/grown/banana)) +/obj/vehicle/sealed/car/clowncar/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!istype(tool, /obj/item/food/grown/banana)) return - var/obj/item/food/grown/banana/banana = I - atom_integrity += min(banana.seed.potency, max_integrity-atom_integrity) - to_chat(user, span_danger("You use the [banana] to repair [src]!")) + var/obj/item/food/grown/banana/banana = tool + repair_damage(banana.seed.potency) + to_chat(user, span_danger("You use [banana] to repair [src]!")) qdel(banana) + return ITEM_INTERACT_SUCCESS /obj/vehicle/sealed/car/clowncar/Bump(atom/bumped) . = ..() diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm index 84dff137faa1..bf6de9afa6bf 100644 --- a/code/modules/vehicles/mecha/combat/durand.dm +++ b/code/modules/vehicles/mecha/combat/durand.dm @@ -124,7 +124,7 @@ Expects a turf. Returns true if the attack should be blocked, false if not.*/ else . = ..() -/obj/vehicle/sealed/mecha/durand/attackby(obj/item/W as obj, mob/user as mob, list/modifiers) +/obj/vehicle/sealed/mecha/durand/attackby(obj/item/W as obj, mob/user as mob, list/modifiers, list/attack_modifiers) if(defense_check(user.loc)) log_message("Attack absorbed by defense field. Attacker - [user], with [W]", LOG_MECHA, color="orange") shield.attackby(W, user, modifiers) diff --git a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm index a94a0cb2518f..944ed221a49b 100644 --- a/code/modules/vehicles/mecha/equipment/tools/other_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm @@ -318,7 +318,7 @@ log_message("Deactivated.", LOG_MECHA) return TRUE -/obj/item/mecha_parts/mecha_equipment/generator/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/item/mecha_parts/mecha_equipment/generator/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(!istype(weapon, fuel)) return FALSE diff --git a/code/modules/vehicles/mecha/mech_bay.dm b/code/modules/vehicles/mecha/mech_bay.dm index a0c1914ee65c..fefa0ecbb46a 100644 --- a/code/modules/vehicles/mecha/mech_bay.dm +++ b/code/modules/vehicles/mecha/mech_bay.dm @@ -76,7 +76,7 @@ recharge_console.update_appearance() -/obj/machinery/mech_bay_recharge_port/attackby(obj/item/I, mob/user, list/modifiers) +/obj/machinery/mech_bay_recharge_port/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(default_deconstruction_screwdriver(user, "recharge_port-o", "recharge_port", I)) return diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm index 16d0a739762e..3d943284d62c 100644 --- a/code/modules/vehicles/mecha/mecha_defense.dm +++ b/code/modules/vehicles/mecha/mecha_defense.dm @@ -209,14 +209,14 @@ cookedalive.adjust_fire_stacks(1) cookedalive.ignite_mob() -/obj/vehicle/sealed/mecha/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) +/obj/vehicle/sealed/mecha/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if(istype(weapon, /obj/item/mecha_parts)) var/obj/item/mecha_parts/parts = weapon parts.try_attach_part(user, src, TRUE) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN return ..() -/obj/vehicle/sealed/mecha/attackby(obj/item/weapon, mob/living/user, list/modifiers) +/obj/vehicle/sealed/mecha/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers) if(user.combat_mode) return ..() if(istype(weapon, /obj/item/mmi)) @@ -318,13 +318,14 @@ balloon_alert(user, "already installed!") return -/obj/vehicle/sealed/mecha/attacked_by(obj/item/attacking_item, mob/living/user) - if(!attacking_item.force) - return +/obj/vehicle/sealed/mecha/attacked_by(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers) + var/final_force = CALCULATE_FORCE(attacking_item, attack_modifiers) * attacking_item.get_demolition_modifier(src) + if(!final_force) + return 0 var/old_internals = internal_damage - var/damage_taken = take_damage(attacking_item.force * attacking_item.get_demolition_modifier(src), attacking_item.damtype, MELEE, 1, get_dir(src, user)) + var/damage_taken = take_damage(final_force, attacking_item.damtype, MELEE, 1, get_dir(src, user)) try_damage_component(damage_taken, user.zone_selected) var/hit_verb = length(attacking_item.attack_verb_simple) ? "[pick(attacking_item.attack_verb_simple)]" : "hit" @@ -342,6 +343,8 @@ spray_blood(get_dir(user, src), rand(2, 4), list("[oil_name]" = oil_type)) oil_pool -= 2 + return damage_taken + /obj/vehicle/sealed/mecha/attack_generic(mob/user, damage_amount, damage_type, damage_flag, effects, armor_penetration) var/old_internals = internal_damage diff --git a/code/modules/vehicles/mecha/mecha_parts.dm b/code/modules/vehicles/mecha/mecha_parts.dm index 2501ef1b36ab..a2a2900914ec 100644 --- a/code/modules/vehicles/mecha/mecha_parts.dm +++ b/code/modules/vehicles/mecha/mecha_parts.dm @@ -252,7 +252,7 @@ name = "\improper Phazon chassis" construct_type = /datum/component/construction/unordered/mecha_chassis/phazon -/obj/item/mecha_parts/chassis/phazon/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/mecha_parts/chassis/phazon/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) . = ..() if(istype(I, /obj/item/assembly/signaler/anomaly) && !istype(I, /obj/item/assembly/signaler/anomaly/bluespace)) to_chat(user, "The anomaly core socket only accepts bluespace anomaly cores!") diff --git a/code/modules/vehicles/motorized_wheelchair.dm b/code/modules/vehicles/motorized_wheelchair.dm index 84111f51bada..24d31de6ac70 100644 --- a/code/modules/vehicles/motorized_wheelchair.dm +++ b/code/modules/vehicles/motorized_wheelchair.dm @@ -101,7 +101,7 @@ user.put_in_hands(power_cell) power_cell = null -/obj/vehicle/ridden/wheelchair/motorized/attackby(obj/item/attacking_item, mob/user, list/modifiers) +/obj/vehicle/ridden/wheelchair/motorized/attackby(obj/item/attacking_item, mob/user, list/modifiers, list/attack_modifiers) if(!panel_open) return ..() diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm index 71de2a9685b8..88582410dcde 100644 --- a/code/modules/vehicles/pimpin_ride.dm +++ b/code/modules/vehicles/pimpin_ride.dm @@ -34,7 +34,7 @@ if (installed_upgrade) . += "It has been upgraded with [installed_upgrade], which can be removed with a screwdriver." -/obj/vehicle/ridden/janicart/attackby(obj/item/I, mob/user, list/modifiers) +/obj/vehicle/ridden/janicart/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/storage/bag/trash)) if(trash_bag) to_chat(user, span_warning("[src] already has a trashbag hooked!")) diff --git a/code/modules/vehicles/ridden.dm b/code/modules/vehicles/ridden.dm index 7771133727dd..1bcf91301b1b 100644 --- a/code/modules/vehicles/ridden.dm +++ b/code/modules/vehicles/ridden.dm @@ -29,7 +29,7 @@ add_occupant(M) return ..() -/obj/vehicle/ridden/attackby(obj/item/I, mob/user, list/modifiers) +/obj/vehicle/ridden/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(!key_type || is_key(inserted_key) || !is_key(I)) return ..() if(!user.transferItemToLoc(I, src)) diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm index b00246ab8443..9d417bb20830 100644 --- a/code/modules/vehicles/scooter.dm +++ b/code/modules/vehicles/scooter.dm @@ -227,7 +227,7 @@ icon_state = "scooter_frame" w_class = WEIGHT_CLASS_NORMAL -/obj/item/scooter_frame/attackby(obj/item/I, mob/user, list/modifiers) +/obj/item/scooter_frame/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(!istype(I, /obj/item/stack/sheet/iron)) return ..() if(!I.tool_start_check(user, amount=5)) @@ -250,7 +250,7 @@ /obj/vehicle/ridden/scooter/skateboard/wrench_act(mob/living/user, obj/item/I) return -/obj/vehicle/ridden/scooter/skateboard/improvised/attackby(obj/item/I, mob/user, list/modifiers) +/obj/vehicle/ridden/scooter/skateboard/improvised/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(!istype(I, /obj/item/stack/rods)) return ..() if(!I.tool_start_check(user, amount=2)) diff --git a/code/modules/vehicles/sealed.dm b/code/modules/vehicles/sealed.dm index 83ef89ee88ce..96b1a4b52f52 100644 --- a/code/modules/vehicles/sealed.dm +++ b/code/modules/vehicles/sealed.dm @@ -105,7 +105,7 @@ /obj/vehicle/sealed/proc/exit_location(M) return drop_location() -/obj/vehicle/sealed/attackby(obj/item/I, mob/user, list/modifiers) +/obj/vehicle/sealed/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) if(key_type && !is_key(inserted_key) && is_key(I)) if(user.transferItemToLoc(I, src)) to_chat(user, span_notice("You insert [I] into [src].")) diff --git a/code/modules/vehicles/secway.dm b/code/modules/vehicles/secway.dm index ce2a3d23cdb3..dc90de8471c1 100644 --- a/code/modules/vehicles/secway.dm +++ b/code/modules/vehicles/secway.dm @@ -61,7 +61,7 @@ else user.balloon_alert_to_viewers("stopped welding [src]", "interrupted the repair!") -/obj/vehicle/ridden/secway/attackby(obj/item/W, mob/living/user, list/modifiers) +/obj/vehicle/ridden/secway/attackby(obj/item/W, mob/living/user, list/modifiers, list/attack_modifiers) if(!istype(W, /obj/item/food/grown/banana)) return ..() // ignore the occupants because they're presumably too distracted to notice the guy stuffing fruit into their vehicle's exhaust. do segways have exhausts? they do now! diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index ea2644c7e506..26183c44ef0d 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -716,7 +716,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) to_chat(user, span_warning("You must first secure [src].")) return TRUE -/obj/machinery/vending/attackby(obj/item/attack_item, mob/living/user, list/modifiers) +/obj/machinery/vending/attackby(obj/item/attack_item, mob/living/user, list/modifiers, list/attack_modifiers) if(panel_open && is_wire_tool(attack_item)) wires.interact(user) return @@ -1754,7 +1754,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) vend_ready = TRUE return TRUE -/obj/machinery/vending/custom/attackby(obj/item/attack_item, mob/user, list/modifiers) +/obj/machinery/vending/custom/attackby(obj/item/attack_item, mob/user, list/modifiers, list/attack_modifiers) if(!linked_account && isliving(user)) var/mob/living/living_user = user var/obj/item/card/id/card_used = living_user.get_idcard(TRUE) diff --git a/code/modules/wiremod/components/abstract/module.dm b/code/modules/wiremod/components/abstract/module.dm index a87bd8ebd22c..01c37c88c9ac 100644 --- a/code/modules/wiremod/components/abstract/module.dm +++ b/code/modules/wiremod/components/abstract/module.dm @@ -229,7 +229,7 @@ . = list() .["global_port_types"] = GLOB.wiremod_basic_types -/obj/item/circuit_component/module/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/item/circuit_component/module/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) if(istype(I, /obj/item/circuit_component)) internal_circuit.attackby(I, user, modifiers) return diff --git a/code/modules/wiremod/components/action/mmi.dm b/code/modules/wiremod/components/action/mmi.dm index ddb29e190d51..0a3114bababc 100644 --- a/code/modules/wiremod/components/action/mmi.dm +++ b/code/modules/wiremod/components/action/mmi.dm @@ -149,7 +149,7 @@ return TRUE -/obj/item/circuit_component/mmi/proc/handle_mmi_attack(mob/living/source, atom/target, list/modifiers) +/obj/item/circuit_component/mmi/proc/handle_mmi_attack(mob/living/source, atom/target, list/modifiers, list/attack_modifiers) SIGNAL_HANDLER if(modifiers[RIGHT_CLICK]) clicked_atom.set_output(target) diff --git a/code/modules/wiremod/core/component_printer.dm b/code/modules/wiremod/core/component_printer.dm index 2ba92f68d465..13ab32649e31 100644 --- a/code/modules/wiremod/core/component_printer.dm +++ b/code/modules/wiremod/core/component_printer.dm @@ -205,7 +205,7 @@ return data -/obj/machinery/component_printer/attackby(obj/item/weapon, mob/living/user, list/modifiers) +/obj/machinery/component_printer/attackby(obj/item/weapon, mob/living/user, list/modifiers, list/attack_modifiers) if (user.combat_mode) return ..() @@ -435,7 +435,7 @@ created_atom.pixel_x = created_atom.base_pixel_x + rand(-5, 5) created_atom.pixel_y = created_atom.base_pixel_y + rand(-5, 5) -/obj/machinery/module_duplicator/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/module_duplicator/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) var/list/data = list() if(istype(weapon, /obj/item/circuit_component/module)) diff --git a/code/modules/wiremod/core/integrated_circuit.dm b/code/modules/wiremod/core/integrated_circuit.dm index 9b50c7ff914b..800237a0ede5 100644 --- a/code/modules/wiremod/core/integrated_circuit.dm +++ b/code/modules/wiremod/core/integrated_circuit.dm @@ -146,7 +146,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) SEND_SIGNAL(src, COMSIG_CIRCUIT_SET_LOCKED, new_value) locked = new_value -/obj/item/integrated_circuit/attackby(obj/item/I, mob/living/user, list/modifiers) +/obj/item/integrated_circuit/attackby(obj/item/I, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if(istype(I, /obj/item/circuit_component)) add_component_manually(I, user) diff --git a/code/modules/wiremod/core/usb_cable.dm b/code/modules/wiremod/core/usb_cable.dm index 73e42e8494a2..d350df2ac2b1 100644 --- a/code/modules/wiremod/core/usb_cable.dm +++ b/code/modules/wiremod/core/usb_cable.dm @@ -36,7 +36,7 @@ if (!check_in_range()) return PROCESS_KILL -/obj/item/usb_cable/pre_attack(atom/target, mob/living/user, list/modifiers) +/obj/item/usb_cable/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() if (.) return diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm index 4a3c95e9a9f7..f75a43864705 100644 --- a/code/modules/wiremod/shell/brain_computer_interface.dm +++ b/code/modules/wiremod/shell/brain_computer_interface.dm @@ -354,7 +354,7 @@ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/machinery/bci_implanter/attackby(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/bci_implanter/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) var/obj/item/organ/cyberimp/bci/new_bci = weapon if (istype(new_bci)) if (!(locate(/obj/item/integrated_circuit) in new_bci)) @@ -376,7 +376,7 @@ return ..() -/obj/machinery/bci_implanter/attackby_secondary(obj/item/weapon, mob/user, list/modifiers) +/obj/machinery/bci_implanter/attackby_secondary(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) if (!occupant && default_deconstruction_screwdriver(user, icon_state, icon_state, weapon)) update_appearance() return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN diff --git a/code/modules/wiremod/shell/dispenser.dm b/code/modules/wiremod/shell/dispenser.dm index 57ae4acd56ee..d31a5cb04c0a 100644 --- a/code/modules/wiremod/shell/dispenser.dm +++ b/code/modules/wiremod/shell/dispenser.dm @@ -60,7 +60,7 @@ new /obj/item/circuit_component/dispenser_bot() ), SHELL_CAPACITY_LARGE) -/obj/structure/dispenser_bot/attackby(obj/item/item, mob/living/user, list/modifiers) +/obj/structure/dispenser_bot/attackby(obj/item/item, mob/living/user, list/modifiers, list/attack_modifiers) if(user.combat_mode) return ..() if(istype(item, /obj/item/wrench) || istype(item, /obj/item/multitool) || istype(item, /obj/item/integrated_circuit)) diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm index aa0dcfcb494a..a415e4feec92 100644 --- a/code/modules/zombie/items.dm +++ b/code/modules/zombie/items.dm @@ -11,7 +11,7 @@ bare_wound_bonus = 15 sharpness = SHARP_EDGED -/obj/item/mutant_hand/zombie/afterattack(atom/target, mob/user, list/modifiers) +/obj/item/mutant_hand/zombie/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) if(ishuman(target)) try_to_zombie_infect(target, user, user.zone_selected) else if(isliving(target)) From f4bf7c477c3fa7acf780745188d5f9648e988d17 Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Thu, 22 May 2025 02:03:19 -0500 Subject: [PATCH 3/3] Adds an `isliving` check to baton afterattack (#91254) ## About The Pull Request Very simple fix, afterattack is called for atom attacks - I forgot to isliving here Fixes #91253 ## Changelog :cl: Melbert fix: You (can't) baton furniture /:cl: --- code/game/objects/items/melee/baton.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm index 6dbbc508a057..3ecd38e6648b 100644 --- a/code/game/objects/items/melee/baton.dm +++ b/code/game/objects/items/melee/baton.dm @@ -150,7 +150,7 @@ // This is where stun gets applied /obj/item/melee/baton/afterattack(atom/target, mob/user, list/modifiers, list/attack_modifiers) - if(!active || !COOLDOWN_FINISHED(src, cooldown_check) || HAS_TRAIT_FROM(target, TRAIT_IWASBATONED, REF(user))) + if(!isliving(target) || !active || !COOLDOWN_FINISHED(src, cooldown_check) || HAS_TRAIT_FROM(target, TRAIT_IWASBATONED, REF(user))) return // worst check in the chain but - right click = harmbaton if(LAZYACCESS(modifiers, RIGHT_CLICK) && !stun_on_harmbaton)