From 67dc33ac3f90ea648ef4734c40b6300e892fbc6e Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Sat, 5 Oct 2019 02:08:11 -0400 Subject: [PATCH] for-the-strength-from-which-he-gives-is-unerring --- .../MetaStation/MetaStation.v41A.II.dmm | 1 - _maps/map_files/templates/shelter_2.dmm | 2 +- .../components/binary_devices/circulator.dm | 4 +- .../components/binary_devices/valve.dm | 4 +- code/datums/wires/wires.dm | 6 + code/game/dna/dna_modifier.dm | 44 +-- code/game/gamemodes/cult/cult_structures.dm | 41 +-- code/game/gamemodes/cult/runes.dm | 31 +- code/game/gamemodes/meteor/meteors.dm | 3 +- .../miniantags/abduction/abduction_gear.dm | 4 +- .../abduction/machinery/experiment.dm | 2 + code/game/gamemodes/nuclear/nuclearbomb.dm | 5 +- code/game/gamemodes/wizard/artefact.dm | 5 +- code/game/gamemodes/wizard/spellbook.dm | 4 + code/game/machinery/Freezer.dm | 8 +- code/game/machinery/ai_slipper.dm | 25 +- code/game/machinery/atmo_control.dm | 10 +- .../atmoalter/portable_atmospherics.dm | 12 +- code/game/machinery/atmoalter/scrubber.dm | 4 +- code/game/machinery/buttons.dm | 5 +- code/game/machinery/computer/aifixer.dm | 2 +- .../game/machinery/computer/buildandrepair.dm | 22 +- code/game/machinery/computer/camera.dm | 12 +- code/game/machinery/computer/cloning.dm | 7 +- code/game/machinery/computer/honkputer.dm | 3 +- code/game/machinery/computer/medical.dm | 3 +- code/game/machinery/computer/message.dm | 4 +- code/game/machinery/computer/salvage_ship.dm | 4 - code/game/machinery/computer/security.dm | 3 +- code/game/machinery/computer/skills.dm | 3 +- .../machinery/computer/specops_shuttle.dm | 2 +- .../computer/syndicate_specops_shuttle.dm | 5 +- code/game/machinery/constructable_frame.dm | 17 +- code/game/machinery/cryo.dm | 7 +- code/game/machinery/cryopod.dm | 5 +- code/game/machinery/dance_machine.dm | 2 +- code/game/machinery/door_control.dm | 16 +- code/game/machinery/doors/airlock_control.dm | 2 +- code/game/machinery/doppler_array.dm | 5 +- code/game/machinery/dye_generator.dm | 4 +- code/game/machinery/firealarm.dm | 4 +- code/game/machinery/flasher.dm | 3 - code/game/machinery/floodlight.dm | 12 +- code/game/machinery/gameboard.dm | 3 +- code/game/machinery/guestpass.dm | 4 +- code/game/machinery/hologram.dm | 3 +- code/game/machinery/holosign.dm | 2 +- code/game/machinery/igniter.dm | 4 +- code/game/machinery/lightswitch.dm | 2 +- code/game/machinery/mass_driver.dm | 7 +- code/game/machinery/newscaster.dm | 1 + code/game/machinery/pipe/construction.dm | 5 - code/game/machinery/portable_turret.dm | 70 +++- code/game/machinery/suit_storage_unit.dm | 3 + code/game/machinery/telecomms/logbrowser.dm | 5 +- .../telecomms/machine_interactions.dm | 6 + code/game/machinery/telecomms/telemonitor.dm | 5 +- .../machinery/telecomms/traffic_control.dm | 7 +- code/game/machinery/washing_machine.dm | 12 +- code/game/mecha/mecha_parts.dm | 2 +- code/game/mecha/mecha_wreckage.dm | 3 +- .../game/objects/effects/decals/contraband.dm | 2 + code/game/objects/items/bodybag.dm | 4 +- code/game/objects/items/candle.dm | 12 +- code/game/objects/items/flag.dm | 6 +- .../items/mountable_frames/apc_frame.dm | 37 +- code/game/objects/structures/barsign.dm | 5 +- code/game/objects/structures/coathanger.dm | 1 - .../structures/crates_lockers/closets.dm | 5 +- .../crates_lockers/closets/secure/personal.dm | 2 +- .../closets/secure/secure_closets.dm | 6 +- .../structures/crates_lockers/crates.dm | 7 +- .../structures/crates_lockers/largecrate.dm | 14 +- code/game/objects/structures/curtains.dm | 2 +- code/game/objects/structures/electricchair.dm | 1 + code/game/objects/structures/extinguisher.dm | 8 +- code/game/objects/structures/fluff.dm | 2 +- code/game/objects/structures/girders.dm | 2 + code/game/objects/structures/kitchen_spike.dm | 20 +- code/game/objects/structures/misc.dm | 8 - code/game/objects/structures/mop_bucket.dm | 4 +- code/game/objects/structures/morgue.dm | 10 +- code/game/objects/structures/noticeboard.dm | 2 + code/game/objects/structures/plasticflaps.dm | 2 +- code/game/objects/structures/reflector.dm | 4 + code/game/objects/structures/signs.dm | 6 +- code/game/objects/structures/statues.dm | 6 +- .../structures/stool_bed_chair_nest/bed.dm | 2 + code/game/objects/structures/tables_racks.dm | 4 +- .../game/objects/structures/tank_dispenser.dm | 4 + code/game/objects/structures/target_stake.dm | 7 +- code/modules/arcade/arcade_base.dm | 4 +- .../arcade/mob_hunt/battle_computer.dm | 4 + code/modules/arcade/prize_counter.dm | 2 + code/modules/assembly/assembly.dm | 4 +- code/modules/awaymissions/gateway.dm | 4 +- .../mission_code/UO71-terrorspiders.dm | 3 +- code/modules/clothing/clothing.dm | 6 +- code/modules/economy/ATM.dm | 2 +- code/modules/economy/EFTPOS.dm | 2 +- code/modules/economy/POS.dm | 3 +- .../kitchen_machinery/gibber.dm | 4 +- .../kitchen_machinery/icecream_vat.dm | 2 + .../kitchen_machinery/icecream_vat_2.dm | 2 +- .../kitchen_machinery/monkeyrecycler.dm | 7 +- code/modules/hydroponics/gene_modder.dm | 2 +- code/modules/hydroponics/hydroponics.dm | 2 +- code/modules/library/computers/public.dm | 1 + code/modules/logic/converter.dm | 2 +- code/modules/logic/logic_base.dm | 1 + code/modules/mining/laborcamp/laborstacker.dm | 6 +- .../mining/lavaland/loot/colossus_loot.dm | 2 +- code/modules/mining/machine_vending.dm | 6 +- code/modules/mining/satchel_ore_boxdm.dm | 7 +- code/modules/paperwork/filingcabinet.dm | 4 +- code/modules/paperwork/photocopier.dm | 2 + code/modules/power/apc.dm | 327 +++++++++--------- code/modules/power/generator.dm | 2 +- code/modules/power/gravitygenerator.dm | 13 +- code/modules/power/port_gen.dm | 2 + code/modules/power/singularity/collector.dm | 3 +- code/modules/power/singularity/emitter.dm | 6 +- .../particle_accelerator.dm | 5 +- code/modules/power/smes.dm | 4 +- code/modules/power/solar.dm | 17 +- code/modules/power/terminal.dm | 41 +++ code/modules/power/tesla/coil.dm | 2 +- code/modules/power/treadmill.dm | 2 +- code/modules/power/turbine.dm | 8 +- .../chemistry/machinery/chem_heater.dm | 2 + .../reagents/chemistry/machinery/pandemic.dm | 6 +- code/modules/reagents/reagent_dispenser.dm | 4 +- code/modules/recycling/sortingmachinery.dm | 4 + code/modules/research/server.dm | 2 + .../research/xenobiology/xenobio_camera.dm | 6 +- .../security_levels/keycard authentication.dm | 2 + code/modules/spacepods/construction.dm | 3 +- code/modules/spacepods/equipment.dm | 4 +- code/modules/telesci/telepad.dm | 7 +- code/modules/telesci/telesci_computer.dm | 2 +- icons/obj/power.dmi | Bin 35163 -> 35196 bytes 141 files changed, 722 insertions(+), 542 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index 3065afcb9c9..3b3270fe6c0 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -33441,7 +33441,6 @@ "bgD" = ( /obj/item/book/manual/security_space_law, /obj/machinery/newscaster{ - hitstaken = 1; pixel_y = -32 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ diff --git a/_maps/map_files/templates/shelter_2.dmm b/_maps/map_files/templates/shelter_2.dmm index 281a1f43433..9bed101da97 100644 --- a/_maps/map_files/templates/shelter_2.dmm +++ b/_maps/map_files/templates/shelter_2.dmm @@ -126,8 +126,8 @@ dir = 1 }, /obj/structure/displaycase{ + alert = 0; desc = "A display case containing an expensive forgery, probably."; - locked = 1; pixel_y = -4; req_access_txt = "48"; start_showpiece_type = /obj/item/fakeartefact diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm index 6bb16cb36c9..e2dd952213a 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm @@ -107,11 +107,11 @@ to_chat(user, "You reverse the circulator's valve settings. The inlet of the circulator is now on the [get_inlet_side(dir)] side.") desc = "A gas circulator pump and heat exchanger. Its input port is on the [get_inlet_side(dir)] side, and its output port is on the [get_outlet_side(dir)] side." else - ..() + return ..() /obj/machinery/atmospherics/binary/circulator/update_icon() ..() - + if(stat & (BROKEN|NOPOWER)) icon_state = "circ[side]-p" else if(last_pressure_delta > 0) diff --git a/code/ATMOSPHERICS/components/binary_devices/valve.dm b/code/ATMOSPHERICS/components/binary_devices/valve.dm index f9da99544b5..0f36a749722 100644 --- a/code/ATMOSPHERICS/components/binary_devices/valve.dm +++ b/code/ATMOSPHERICS/components/binary_devices/valve.dm @@ -17,7 +17,7 @@ /obj/machinery/atmospherics/binary/valve/update_icon(animation) ..() - + if(animation) flick("valve[src.open][!src.open]",src) else @@ -146,7 +146,7 @@ if(istype(W, /obj/item/multitool)) update_multitool_menu(user) return 1 - ..() + return ..() /obj/machinery/atmospherics/binary/valve/digital/multitool_menu(var/mob/user,var/obj/item/multitool/P) return {" diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index a201617682d..5220fd83a6d 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -5,6 +5,12 @@ #define MAX_FLAG 65535 +/proc/is_wire_tool(obj/item/I) + if(ismultitool(I)) + return TRUE + if(iswirecutter(I)) + return TRUE + var/list/same_wires = list() // 12 colours, if you're adding more than 12 wires then add more colours here var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown", "gold", "gray", "cyan", "navy", "purple", "pink") diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index de5f6a65a8e..77771d48596 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -210,7 +210,7 @@ to_chat(user, "The maintenance panel is locked.") return default_deconstruction_screwdriver(user, "[icon_state]_maintenance", "[initial(icon_state)]", item) - + return if(exchange_parts(user, item)) return @@ -233,27 +233,27 @@ item.forceMove(src) user.visible_message("[user] adds \a [item] to \the [src]!", "You add \a [item] to \the [src]!") return - else if(!istype(item, /obj/item/grab)) + if(istype(item, /obj/item/grab)) + var/obj/item/grab/G = item + if(!ismob(G.affecting)) + return + if(src.occupant) + to_chat(user, "The scanner is already occupied!") + return + if(G.affecting.abiotic()) + to_chat(user, "Subject cannot have abiotic items on.") + return + if(G.affecting.has_buckled_mobs()) //mob attached to us + to_chat(user, "will not fit into the [src] because [G.affecting.p_they()] [G.affecting.p_have()] a slime latched onto [G.affecting.p_their()] head.") + return + if(panel_open) + to_chat(usr, "Close the maintenance panel first.") + return + put_in(G.affecting) + src.add_fingerprint(user) + qdel(G) return - var/obj/item/grab/G = item - if(!ismob(G.affecting)) - return - if(src.occupant) - to_chat(user, "The scanner is already occupied!") - return - if(G.affecting.abiotic()) - to_chat(user, "Subject cannot have abiotic items on.") - return - if(G.affecting.has_buckled_mobs()) //mob attached to us - to_chat(user, "will not fit into the [src] because [G.affecting.p_they()] [G.affecting.p_have()] a slime latched onto [G.affecting.p_their()] head.") - return - if(panel_open) - to_chat(usr, "Close the maintenance panel first.") - return - put_in(G.affecting) - src.add_fingerprint(user) - qdel(G) - return + return ..() /obj/machinery/dna_scannernew/relaymove(mob/user as mob) if(user.incapacitated()) @@ -353,7 +353,7 @@ SSnanoui.update_uis(src) // update all UIs attached to src() return else - ..() + return ..() /obj/machinery/computer/scan_consolenew/New() ..() diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 9293bb94953..3eca8204fd3 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -29,23 +29,21 @@ //Cult versions cuase fuck map conflicts /obj/structure/cult/functional + max_integrity = 100 var/cooldowntime = 0 - var/health = 100 var/death_message = "The structure falls apart." //The message shown when the structure is destroyed var/death_sound = 'sound/items/bikehorn.ogg' var/heathen_message = "You're a huge nerd, go away. Also, a coder forgot to put a message here." var/selection_title = "Oops" var/selection_prompt = "Choose your weapon, nerdwad" var/creation_delay = 2400 - var/list/choosable_items = list( - "A coder forgot to set this" = /obj/item/grown/bananapeel - ) + var/list/choosable_items = list("A coder forgot to set this" = /obj/item/grown/bananapeel) var/creation_message = "A dank smoke comes out, and you pass out. When you come to, you notice a %ITEM%!" -/obj/structure/cult/functional/proc/destroy_structure() +/obj/structure/cult/functional/obj_destruction() visible_message(death_message) playsound(src, death_sound, 50, 1) - qdel(src) + ..() /obj/structure/cult/functional/examine(mob/user) . = ..() @@ -54,10 +52,6 @@ . += "\The [src] is [anchored ? "":"not "]secured to the floor." /obj/structure/cult/functional/attackby(obj/I, mob/user, params) - if(HULK in user.mutations) - to_chat(user, "You cannot seem to manipulate this structure with your bulky hands!") - return - if(istype(I, /obj/item/tome) && iscultist(user)) anchored = !anchored to_chat(user, "You [anchored ? "":"un"]secure \the [src] [anchored ? "to":"from"] the floor.") @@ -66,22 +60,16 @@ icon_state = "[initial(icon_state)]_off" else icon_state = initial(icon_state) - else - return ..() - -/obj/structure/cult/functional/proc/updatehealth() - if(health <= 0) - destroy_structure() - -/obj/structure/cult/functional/attackby(obj/item/I, mob/living/user) - ..() - take_damage(I.force, I.damtype) - playsound(loc, I.hitsound, 80, 1) + return + return ..() /obj/structure/cult/functional/attack_hand(mob/living/user) if(!iscultist(user)) to_chat(user, "[heathen_message]") return + if(HULK in user.mutations) + to_chat(user, "You cannot seem to manipulate this structure with your bulky hands!") + return if(!anchored) to_chat(user, "You need to anchor [src] to the floor with a tome first.") return @@ -107,7 +95,7 @@ name = "altar" desc = "A bloodstained altar dedicated to a cult." icon_state = "talismanaltar" - health = 150 //Sturdy + max_integrity = 150 //Sturdy death_message = "The altar breaks into splinters, releasing a cascade of spirits into the air!" death_sound = 'sound/effects/altar_break.ogg' heathen_message = "There is a foreboding aura to the altar and you want nothing to do with it." @@ -121,7 +109,7 @@ name = "daemon forge" desc = "A forge used in crafting the unholy weapons used by the armies of a cult." icon_state = "forge" - health = 300 //Made of metal + max_integrity = 300 //Made of metal death_message = "The forge falls apart, its lava cooling and winking away!" death_sound = 'sound/effects/forge_destroy.ogg' heathen_message = "Your hand feels like it's melting off as you try to touch the forge." @@ -155,8 +143,7 @@ C.apply_damage(30, BURN, "head") //30 fire damage because it's FUCKING LAVA head.disfigure() //Your face is unrecognizable because it's FUCKING LAVA return 1 - else - ..() + return ..() var/list/blacklisted_pylon_turfs = typecacheof(list( /turf/simulated/floor/engine/cult, @@ -174,7 +161,7 @@ var/list/blacklisted_pylon_turfs = typecacheof(list( icon_state = "pylon" light_range = 5 light_color = "#3e0000" - health = 50 //Very fragile + max_integrity = 50 //Very fragile death_message = "The pylon's crystal vibrates and glows fiercely before violently shattering!" death_sound = 'sound/effects/pylon_shatter.ogg' @@ -244,7 +231,7 @@ var/list/blacklisted_pylon_turfs = typecacheof(list( name = "archives" desc = "A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl." icon_state = "tomealtar" - health = 125 //Slightly sturdy + max_integrity = 125 //Slightly sturdy death_message = "The desk breaks apart, its books falling to the floor." death_sound = 'sound/effects/wood_break.ogg' heathen_message = "What do you hope to seek?" diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 5b34530f704..59c6ac50e15 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -63,7 +63,7 @@ To draw a rune, use an arcane tome. to_chat(user, "You carefully erase the [lowertext(cultist_name)] rune.") qdel(src) return - else if(istype(I, /obj/item/nullrod)) + if(istype(I, /obj/item/nullrod)) if(iscultist(user))//cultist..what are doing..cultist..staph... user.drop_item() user.visible_message("[I] suddenly glows with white light, forcing [user] to drop it in pain!", \ @@ -72,6 +72,7 @@ To draw a rune, use an arcane tome. to_chat(user,"You disrupt the magic of [src] with [I].") qdel(src) return + return ..() /obj/effect/rune/attack_hand(mob/living/user) if(!iscultist(user)) @@ -541,14 +542,12 @@ var/list/teleport_runes = list() if(do_after(user, 50, target = src)) //Prevents accidental erasures. log_game("Summon Narsie rune erased by [key_name(user)] with a tome") message_admins("[key_name_admin(user)] erased a Narsie rune with a tome") - ..() - return - else - if(istype(I, /obj/item/nullrod)) //Begone foul magiks. You cannot hinder me. - log_game("Summon Narsie rune erased by [key_name(user)] using a null rod") - message_admins("[key_name_admin(user)] erased a Narsie rune with a null rod") - ..() - return + return + if(istype(I, /obj/item/nullrod)) //Begone foul magiks. You cannot hinder me. + log_game("Summon Narsie rune erased by [key_name(user)] using a null rod") + message_admins("[key_name_admin(user)] erased a Narsie rune with a null rod") + return + return ..() @@ -579,14 +578,12 @@ var/list/teleport_runes = list() if(do_after(user, 50, target = src)) //Prevents accidental erasures. log_game("Summon demon rune erased by [key_name(user)] with a tome") message_admins("[key_name_admin(user)] erased a demon rune with a tome") - ..() - return - else - if(istype(I, /obj/item/nullrod)) //Begone foul magiks. You cannot hinder me. - log_game("Summon demon rune erased by [key_name(user)] using a null rod") - message_admins("[key_name_admin(user)] erased a demon rune with a null rod") - ..() - return + return + if(istype(I, /obj/item/nullrod)) //Begone foul magiks. You cannot hinder me. + log_game("Summon demon rune erased by [key_name(user)] using a null rod") + message_admins("[key_name_admin(user)] erased a demon rune with a null rod") + return + return ..() /obj/effect/rune/slaughter/invoke(var/list/invokers) diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index f55d0ef7520..5dafcee72a7 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -160,9 +160,10 @@ /obj/effect/meteor/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, /obj/item/pickaxe)) + make_debris() qdel(src) return - ..() + return ..() /obj/effect/meteor/proc/make_debris() for(var/throws = dropamt, throws > 0, throws--) diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index fbbebc3acfc..2d3ce8d0968 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -692,7 +692,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} for(var/i = 1, i <= framestackamount, i++) new framestack(get_turf(src)) qdel(src) - return + return if(istype(I, /obj/item/stack/sheet/mineral/abductor)) var/obj/item/stack/sheet/P = I if(P.get_amount() < 1) @@ -714,6 +714,8 @@ Congratulations! You are now trained for invasive xenobiology research!"} P.use(1) new /obj/machinery/optable/abductor(loc) qdel(src) + return + return ..() /obj/structure/table/abductor name = "alien table" diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm index 2128a101be2..04dda244a0c 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm @@ -200,6 +200,8 @@ icon_state = "experiment" add_fingerprint(user) qdel(G) + return + return ..() /obj/machinery/abductor/experiment/ex_act(severity) if(occupant) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 4508de4e6ba..1c4956d096e 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -88,7 +88,7 @@ var/bomb_set return attack_hand(user) else to_chat(user, "You need to deploy \the [src] first. Right click on the sprite, select 'Make Deployable' then click on \the [src] with an empty hand.") - return + return if(anchored) switch(removal_stage) @@ -157,7 +157,8 @@ var/bomb_set anchored = 0 removal_stage = 5 return - ..() + return + return ..() /obj/machinery/nuclearbomb/attack_ghost(mob/user as mob) if(extended) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 7b969089644..67f42b81285 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -172,7 +172,7 @@ user.visible_message("[user] seals \the [src] with \the [I].") qdel(src) return - ..() + return ..() /obj/effect/rend/singularity_pull() return @@ -806,7 +806,8 @@ var/global/list/multiverse = list() link = I to_chat(user, "You attach [I] to the doll.") update_targets() - ..() + return + return ..() /obj/item/voodoo/check_eye(mob/user as mob) if(loc != user) diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index d2842c21c24..2bac9aeac6a 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -614,6 +614,7 @@ to_chat(user, "You feed the contract back into the spellbook, refunding your points.") uses+=2 qdel(O) + return if(istype(O, /obj/item/antag_spawner/slaughter_demon)) to_chat(user, "On second thought, maybe summoning a demon is a bad idea. You refund your points.") @@ -628,6 +629,7 @@ if(!isnull(BB.limit)) BB.limit++ qdel(O) + return if(istype(O, /obj/item/antag_spawner/morph)) to_chat(user, "On second thought, maybe awakening a morph is a bad idea. You refund your points.") @@ -636,6 +638,8 @@ if(!isnull(OB.limit)) OB.limit++ qdel(O) + return + return ..() /obj/item/spellbook/proc/GetCategoryHeader(var/category) var/dat = "" diff --git a/code/game/machinery/Freezer.dm b/code/game/machinery/Freezer.dm index b958b9fc625..a6bf80f5fe3 100644 --- a/code/game/machinery/Freezer.dm +++ b/code/game/machinery/Freezer.dm @@ -77,8 +77,8 @@ break build_network() update_icon() - else - return ..() + return + return ..() /obj/machinery/atmospherics/unary/cold_sink/freezer/update_icon() if(panel_open) @@ -244,8 +244,8 @@ break build_network() update_icon() - else - return ..() + return + return ..() /obj/machinery/atmospherics/unary/heat_reservoir/heater/update_icon() if(panel_open) diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 2c838a110cb..12ad51c8b28 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -37,21 +37,18 @@ return if(istype(user, /mob/living/silicon)) return attack_hand(user) - else // trying to unlock the interface - if(allowed(usr)) - locked = !locked - to_chat(user, "You [locked ? "lock" : "unlock"] the device.") - if(locked) - if(user.machine == src) - user.unset_machine() - user << browse(null, "window=ai_slipper") - else - if(user.machine == src) - attack_hand(usr) + if(allowed(usr)) // trying to unlock the interface + locked = !locked + to_chat(user, "You [locked ? "lock" : "unlock"] the device.") + if(locked) + if(user.machine == src) + user.unset_machine() + user << browse(null, "window=ai_slipper") else - to_chat(user, "Access denied.") - return - return + if(user.machine == src) + attack_hand(usr) + return + return ..() /obj/machinery/ai_slipper/proc/ToggleOn() if(stat & (NOPOWER|BROKEN)) diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index e704015589c..f0c6a81820f 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -82,8 +82,8 @@ new /obj/item/pipe_gsensor(src.loc) qdel(src) return 1 - if(..()) - return 1 + return + return ..() /obj/machinery/air_sensor/process_atmos() if(on) @@ -182,8 +182,8 @@ /obj/machinery/computer/general_air_control/attackby(I as obj, user as mob, params) if(istype(I, /obj/item/multitool)) update_multitool_menu(user) - if(..()) return 1 + return ..() /obj/machinery/computer/general_air_control/receive_signal(datum/signal/signal) @@ -386,8 +386,8 @@ /obj/machinery/computer/general_air_control/large_tank_control/attackby(I as obj, user as mob) if(istype(I, /obj/item/multitool)) update_multitool_menu(user) - if(..()) return 1 + return ..() /obj/machinery/computer/general_air_control/large_tank_control/multitool_menu(mob/user, obj/item/multitool/P) @@ -598,8 +598,8 @@ /obj/machinery/computer/general_air_control/fuel_injection/attackby(I as obj, user as mob, params) if(istype(I, /obj/item/multitool)) update_multitool_menu(user) - if(..()) return 1 + return ..() /obj/machinery/computer/general_air_control/fuel_injection/process() if(automation) diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index aebfc3e5f74..b7c2dd152da 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -125,8 +125,7 @@ T.loc = src src.holding = T update_icon() - return - + return else if(istype(W, /obj/item/wrench)) if(connected_port) disconnect() @@ -145,12 +144,11 @@ return else to_chat(user, "Nothing happens.") - return - - else if((istype(W, /obj/item/analyzer)) && get_dist(user, src) <= 1) + return + if((istype(W, /obj/item/analyzer)) && get_dist(user, src) <= 1) atmosanalyzer_scan(air_contents, user) - - return + return + return ..() /obj/machinery/portable_atmospherics/attacked_by(obj/item/I, mob/user) if(I.force < 10 && !(stat & BROKEN)) diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index eea0d8c20d7..2079b8cf915 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -206,8 +206,10 @@ to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") return - else if((istype(W, /obj/item/analyzer)) && get_dist(user, src) <= 1) + if((istype(W, /obj/item/analyzer)) && get_dist(user, src) <= 1) atmosanalyzer_scan(air_contents, user) + return + return ..() /obj/machinery/portable_atmospherics/scrubber/huge/stationary name = "Stationary Air Scrubber" diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index e8da8014663..f91152b47e4 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -82,7 +82,7 @@ qdel(src) return 1 - return attack_hand(user) + return ..() /obj/machinery/driver_button/multitool_menu(var/mob/user, var/obj/item/multitool/P) return {" @@ -178,9 +178,6 @@ if(user.can_advanced_admin_interact()) return attack_hand(user) -/obj/machinery/ignition_switch/attackby(obj/item/W, mob/user, params) - return attack_hand(user) - /obj/machinery/ignition_switch/attack_hand(mob/user) if(stat & (NOPOWER|BROKEN)) return diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index e6a57f4a875..008dc26f834 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -19,7 +19,7 @@ else to_chat(user, "The screws on [name]'s screen won't budge and it emits a warning beep!.") else - ..() + return ..() /obj/machinery/computer/aifixer/attack_ai(var/mob/user as mob) ui_interact(user) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index bf7225b3fcc..ab75682aeb3 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -406,7 +406,8 @@ return else to_chat(user, "DERP! BUG! Report this (And what you were doing to cause it) to Agouri") - return + return + return ..() /obj/item/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I,/obj/item/card/id)||istype(I, /obj/item/pda)) @@ -440,7 +441,8 @@ to_chat(user, "Access protocols set to [console_choice].") else to_chat(user, "Access Denied") - return + return + return ..() /obj/structure/computerframe/attackby(obj/item/P as obj, mob/user as mob, params) switch(state) @@ -461,6 +463,7 @@ if(!src || !WT.isOn()) return to_chat(user, "You deconstruct the frame.") deconstruct(TRUE) + return if(1) if(istype(P, /obj/item/wrench)) playsound(loc, P.usesound, 50, 1) @@ -491,6 +494,7 @@ icon_state = "0" circuit.loc = loc circuit = null + return if(2) if(istype(P, /obj/item/screwdriver) && circuit) playsound(loc, P.usesound, 50, 1) @@ -512,7 +516,7 @@ return else to_chat(user, "You need five lengths of cable to wire the frame.") - return + return if(3) if(istype(P, /obj/item/wirecutters)) playsound(loc, P.usesound, 50, 1) @@ -537,7 +541,7 @@ return else to_chat(user, "You need two sheets of glass for this.") - return + return if(4) if(istype(P, /obj/item/crowbar)) playsound(loc, P.usesound, 50, 1) @@ -558,6 +562,8 @@ var/obj/item/circuitboard/supplycomp/C = circuit SC.can_order_contraband = C.contraband_enabled qdel(src) + return + return ..() @@ -585,6 +591,7 @@ if(!src || !WT.isOn()) return to_chat(user, "You deconstruct the frame.") deconstruct(TRUE) + return if(1) if(istype(P, /obj/item/wrench)) playsound(loc, P.usesound, 50, 1) @@ -615,6 +622,7 @@ icon_state = "0" circuit.loc = loc circuit = null + return if(2) if(istype(P, /obj/item/screwdriver) && circuit) playsound(loc, P.usesound, 50, 1) @@ -636,7 +644,7 @@ return else to_chat(user, "You need five lengths of cable to wire the frame.") - return + return if(3) if(istype(P, /obj/item/wirecutters)) playsound(loc, P.usesound, 50, 1) @@ -661,7 +669,7 @@ return else to_chat(user, "You need two sheets of glass for this.") - return + return if(4) if(istype(P, /obj/item/crowbar)) playsound(loc, P.usesound, 50, 1) @@ -678,3 +686,5 @@ if(circuit.records) B:records = circuit.records if(circuit.frequency) B:frequency = circuit.frequency qdel(src) + return + return ..() \ No newline at end of file diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 42c371fc4ee..45f390082a1 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -79,14 +79,6 @@ ui_interact(user) -/obj/machinery/computer/security/attackby(obj/item/I, user as mob, params) - if(isscrewdriver(I)) - ..() - else if(I.GetAccess()) // If hit by something with access. - attack_hand(user) - else - ..() - /obj/machinery/computer/security/telescreen/attackby(obj/item/I, mob/user, params) if(ismultitool(I)) var/direction = input(user, "Which direction?", "Select direction!") as null|anything in list("North", "East", "South", "West", "Centre") @@ -104,7 +96,7 @@ if("West") pixel_x = -32 else - ..() + return ..() /obj/machinery/computer/security/emag_act(user as mob) if(!emagged) @@ -116,7 +108,7 @@ /obj/machinery/computer/security/proc/get_user_access(mob/user) var/list/access = list() - + if(emagged) access = get_all_accesses() // Assume captain level access when emagged else if(ishuman(user)) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index acdbc1110f3..539d4dfc0ed 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -36,10 +36,10 @@ if(scanner.occupant && can_autoprocess()) scan_mob(scanner.occupant) - + if(!LAZYLEN(records)) return - + for(var/obj/machinery/clonepod/pod in pods) if(!(pod.occupant || pod.mess) && (pod.efficiency > 5)) for(var/datum/dna2/record/R in records) @@ -103,8 +103,7 @@ P.name = "[initial(P.name)] #[pods.len]" to_chat(user, "You connect [P] to [src].") else - ..() - return + return ..() /obj/machinery/computer/cloning/attack_ai(mob/user as mob) diff --git a/code/game/machinery/computer/honkputer.dm b/code/game/machinery/computer/honkputer.dm index 33b809bd4ac..842a65b5f50 100644 --- a/code/game/machinery/computer/honkputer.dm +++ b/code/game/machinery/computer/honkputer.dm @@ -115,5 +115,4 @@ A.icon_state = "4" qdel(src) else - src.attack_hand(user) - return + return ..() \ No newline at end of file diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index dbe766a2c44..35a5c505b5b 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -34,7 +34,8 @@ O.forceMove(src) scan = O ui_interact(user) - ..() + return + return ..() /obj/machinery/computer/med_data/attack_hand(mob/user) if(..()) diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index d6e000d660d..fef40c9f93a 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -42,9 +42,7 @@ //Stops people from just unscrewing the monitor and putting it back to get the console working again. to_chat(user, "It is too hot to mess with!") return - - ..() - return + return ..() /obj/machinery/computer/message_monitor/emag_act(user as mob) // Will create sparks and print out the console's password. You will then have to wait a while for the console to be back online. diff --git a/code/game/machinery/computer/salvage_ship.dm b/code/game/machinery/computer/salvage_ship.dm index 93583eda0e8..ba7e7200c49 100644 --- a/code/game/machinery/computer/salvage_ship.dm +++ b/code/game/machinery/computer/salvage_ship.dm @@ -36,10 +36,6 @@ moving = 0 return 1 - -/obj/machinery/computer/salvage_ship/attackby(obj/item/I as obj, mob/user as mob, params) - return attack_hand(user) - /obj/machinery/computer/salvage_ship/attack_ai(mob/user as mob) src.add_hiddenprint(user) return attack_hand(user) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index bed10bb0923..ce872e598f4 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -35,7 +35,8 @@ O.forceMove(src) scan = O ui_interact(user) - ..() + return + return ..() //Someone needs to break down the dat += into chunks instead of long ass lines. /obj/machinery/computer/secure_data/attack_hand(mob/user) diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index 5647ae73766..125b5294860 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -33,7 +33,8 @@ O.forceMove(src) scan = O ui_interact(user) - ..() + return + return ..() //Someone needs to break down the dat += into chunks instead of long ass lines. /obj/machinery/computer/skills/attack_hand(mob/user) diff --git a/code/game/machinery/computer/specops_shuttle.dm b/code/game/machinery/computer/specops_shuttle.dm index 4d53906297b..0602757944f 100644 --- a/code/game/machinery/computer/specops_shuttle.dm +++ b/code/game/machinery/computer/specops_shuttle.dm @@ -254,7 +254,7 @@ var/specops_shuttle_timeleft = 0 if(istype(I,/obj/item/card/emag)) to_chat(user, "The electronic systems in this console are far too advanced for your primitive hacking peripherals.") else - return attack_hand(user) + return ..() /obj/machinery/computer/specops_shuttle/attack_hand(var/mob/user as mob) if(!allowed(user)) diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm b/code/game/machinery/computer/syndicate_specops_shuttle.dm index 9aaf1b39517..92ed453e71e 100644 --- a/code/game/machinery/computer/syndicate_specops_shuttle.dm +++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm @@ -177,9 +177,6 @@ var/syndicate_elite_shuttle_timeleft = 0 if(syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return 0 else return 1 -/obj/machinery/computer/syndicate_elite_shuttle/attackby(I as obj, user as mob, params) - return attack_hand(user) - /obj/machinery/computer/syndicate_elite_shuttle/attack_ai(var/mob/user as mob) to_chat(user, "Access Denied.") return 1 @@ -188,7 +185,7 @@ var/syndicate_elite_shuttle_timeleft = 0 if(istype(I,/obj/item/card/emag)) to_chat(user, "The electronic systems in this console are far too advanced for your primitive hacking peripherals.") else - return attack_hand(user) + return ..() /obj/machinery/computer/syndicate_elite_shuttle/attack_hand(var/mob/user as mob) if(!allowed(user)) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index b8a2f8fa64c..57a77ecad2e 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -94,6 +94,7 @@ playsound(src.loc, P.usesound, 75, 1) to_chat(user, "You dismantle the frame.") deconstruct(TRUE) + return if(2) if(istype(P, /obj/item/circuitboard)) var/obj/item/circuitboard/B = P @@ -111,6 +112,7 @@ update_req_desc() else to_chat(user, "This frame does not accept circuit boards of this type!") + return if(istype(P, /obj/item/wirecutters)) playsound(src.loc, P.usesound, 50, 1) to_chat(user, "You remove the cables.") @@ -118,6 +120,8 @@ icon_state = "box_0" var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil(src.loc,5) A.amount = 5 + return + return if(3) if(istype(P, /obj/item/crowbar)) @@ -135,6 +139,7 @@ req_components = null components = null icon_state = "box_1" + return if(istype(P, /obj/item/screwdriver)) var/component_check = 1 @@ -155,7 +160,7 @@ circuit.loc = null new_machine.RefreshParts() qdel(src) - return + return if(istype(P, /obj/item/storage/part_replacer) && P.contents.len && get_req_components_amt()) var/obj/item/storage/part_replacer/replacer = P @@ -208,6 +213,8 @@ if(!success) to_chat(user, "You cannot add that to the machine!") return 0 + return + return ..() //Machine Frame Circuit Boards /*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit, @@ -329,6 +336,8 @@ to destroy them and players will be able to make replacements. build_path = /obj/machinery/atmospherics/unary/cold_sink/freezer name = "circuit board (Freezer)" to_chat(user, "You set the board to cooling.") + return + return ..() /obj/item/circuitboard/recharger name = "circuit board (Recharger)" @@ -515,6 +524,8 @@ to destroy them and players will be able to make replacements. /obj/item/circuitboard/smartfridge/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/screwdriver)) set_type(null, user) + return + return ..() /obj/item/circuitboard/smartfridge/proc/set_type(typepath, mob/user) var/new_name = "" @@ -804,6 +815,8 @@ to destroy them and players will be able to make replacements. if(L.locked_location) target = get_turf(L.locked_location) to_chat(user, "You upload the data from [L]") + return + return ..() /obj/item/circuitboard/telesci_pad name = "Circuit board (Telepad)" @@ -1057,6 +1070,8 @@ to destroy them and players will be able to make replacements. /obj/item/circuitboard/logic_gate/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/screwdriver)) set_type(null, user) + return + return ..() /obj/item/circuitboard/logic_gate/proc/set_type(typepath, mob/user) var/new_name = "Logic Base" diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 6c3960176e1..3106e027f47 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -300,6 +300,7 @@ beaker = B add_attack_logs(user, null, "Added [B] containing [B.reagents.log_list()] to a cryo cell at [COORD(src)]") user.visible_message("[user] adds \a [B] to [src]!", "You add \a [B] to [src]!") + return if(istype(G, /obj/item/screwdriver)) @@ -312,7 +313,8 @@ if(exchange_parts(user, G)) return - default_deconstruction_crowbar(G) + if(default_deconstruction_crowbar(G)) + return if(istype(G, /obj/item/grab)) var/obj/item/grab/GG = G @@ -327,7 +329,8 @@ var/mob/M = GG.affecting if(put_mob(M)) qdel(GG) - return + return + return ..() /obj/machinery/atmospherics/unary/cryo_cell/update_icon() handle_update_icon() diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 9d6be29c84f..ae8b3f5829c 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -18,6 +18,8 @@ density = 0 interact_offline = 1 req_one_access = list(access_heads, access_armory) //Heads of staff or the warden can go here to claim recover items from their department that people went were cryodormed with. + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + flags = NODECONSTRUCT var/mode = null //Used for logging people entering cryosleep and important items they are carrying. @@ -193,7 +195,8 @@ icon_state = "body_scanner_0" density = 1 anchored = 1 - + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + flags = NODECONSTRUCT var/base_icon_state = "body_scanner_0" var/occupied_icon_state = "body_scanner_1" var/on_store_message = "has entered long-term storage." diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index a0c0d2234af..211f878231f 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -67,7 +67,7 @@ to_chat(user,"You unsecure and disconnect [src].") anchored = FALSE playsound(src, 'sound/items/deconstruct.ogg', 50, 1) - return + return return ..() /obj/machinery/disco/update_icon() diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 17d734d7d14..f6bbbb3bc02 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -37,23 +37,9 @@ to_chat(user, "Error, no route to host.") /obj/machinery/door_control/attackby(obj/item/W, mob/user as mob, params) - /* For later implementation - if(istype(W, /obj/item/screwdriver)) - { - if(wiresexposed) - icon_state = "doorctrl0" - wiresexposed = 0 - - else - icon_state = "doorctrl-open" - wiresexposed = 1 - - return - } - */ if(istype(W, /obj/item/detective_scanner)) return - return attack_hand(user) + return ..() /obj/machinery/door_control/emag_act(user as mob) if(!emagged) diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index 9b42578cb3b..8113a9caace 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -254,7 +254,7 @@ if(istype(I, /obj/item/card/id) || istype(I, /obj/item/pda)) attack_hand(user) return - ..() + return ..() /obj/machinery/access_button/attack_ghost(mob/user) if(user.can_advanced_admin_interact()) diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index fef3d7c5e5e..d4dc8f854ef 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -51,12 +51,13 @@ var/list/doppler_arrays = list() power_change() to_chat(user, "You unfasten [src].") playsound(loc, I.usesound, 50, 1) + return if(istype(I, /obj/item/disk/tech_disk)) var/obj/item/disk/tech_disk/disk = I disk.load_tech(toxins_tech) to_chat(user, "You swipe the disk into [src].") - else - return ..() + return + return ..() /obj/machinery/doppler_array/attack_hand(mob/user) if(..()) diff --git a/code/game/machinery/dye_generator.dm b/code/game/machinery/dye_generator.dm index c4e0863364e..920a111496e 100644 --- a/code/game/machinery/dye_generator.dm +++ b/code/game/machinery/dye_generator.dm @@ -46,8 +46,8 @@ user.visible_message("[user] fills the [HD] up with some dye.","You fill the [HD] up with some hair dye.") HD.dye_color = dye_color HD.update_dye_overlay() - else - return ..() + return + return ..() //Hair Dye Bottle diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 643cc500441..255d8d3cce1 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -142,8 +142,8 @@ FIRE ALARM playsound(get_turf(src), I.usesound, 50, 1) qdel(src) - else - return ..() + return + return ..() /obj/machinery/firealarm/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) . = ..() diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 0579e0ccbe7..30069ff0310 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -135,9 +135,6 @@ if(user.can_advanced_admin_interact()) return attack_hand(user) -/obj/machinery/flasher_button/attackby(obj/item/W, mob/user as mob, params) - return attack_hand(user) - /obj/machinery/flasher_button/attack_hand(mob/user as mob) if(stat & (NOPOWER|BROKEN)) return diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index 20e5c0f38e4..0cc6dda7098 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -106,6 +106,8 @@ " You have loosened \the [src]'s casters.", \ "You hear ratchet.") anchored = FALSE + updateicon() + return if(istype(W, /obj/item/screwdriver)) if(!open) if(unlocked) @@ -114,7 +116,8 @@ else unlocked = TRUE to_chat(user, "You unscrew the battery panel.") - + updateicon() + return if(istype(W, /obj/item/crowbar)) if(unlocked) if(open) @@ -125,7 +128,8 @@ if(unlocked) open = TRUE to_chat(user, "You remove the battery panel.") - + updateicon() + return if(istype(W, /obj/item/stock_parts/cell)) if(open) if(cell) @@ -135,7 +139,9 @@ W.loc = src cell = W to_chat(user, "You insert the power cell.") - updateicon() + updateicon() + return + return ..() /obj/machinery/floodlight/extinguish_light() on = 0 diff --git a/code/game/machinery/gameboard.dm b/code/game/machinery/gameboard.dm index ab93e69f36d..2df0496ae67 100644 --- a/code/game/machinery/gameboard.dm +++ b/code/game/machinery/gameboard.dm @@ -99,5 +99,4 @@ if(default_deconstruction_crowbar(I, ignore_panel = TRUE)) return - else - return ..() + return ..() diff --git a/code/game/machinery/guestpass.dm b/code/game/machinery/guestpass.dm index 4bc080fca67..35d5a6546d4 100644 --- a/code/game/machinery/guestpass.dm +++ b/code/game/machinery/guestpass.dm @@ -57,8 +57,8 @@ updateUsrDialog() else to_chat(user, "There is already ID card inside.") - else - return ..() + return + return ..() /obj/machinery/computer/guestpass/proc/get_changeable_accesses() return giver.access diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index be51ef7618a..10708ff9c0e 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -111,8 +111,7 @@ var/list/holopads = list() if(default_deconstruction_crowbar(I)) return - else - return ..() + return ..() /obj/machinery/hologram/holopad/attack_hand(mob/living/carbon/human/user) diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm index 13ed8bebc23..aca4254b517 100644 --- a/code/game/machinery/holosign.dm +++ b/code/game/machinery/holosign.dm @@ -51,7 +51,7 @@ /obj/machinery/holosign_switch/attackby(obj/item/W, mob/user as mob, params) if(istype(W, /obj/item/detective_scanner)) return - return src.attack_hand(user) + return ..() /obj/machinery/holosign_switch/attack_hand(mob/user as mob) src.add_fingerprint(usr) diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 008d6741ef1..45056369662 100755 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -90,8 +90,8 @@ icon_state = "[base_state]" else icon_state = "[base_state]-p" - else - return ..() + return + return ..() /obj/machinery/sparker/attack_ai() if(src.anchored) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index b1e335c1ce9..4d27ad6b5b5 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -160,7 +160,7 @@ qdel(src) return 1 - return src.attack_hand(user) + return ..() /obj/machinery/light_switch/multitool_menu(var/mob/user, var/obj/item/multitool/P) return {" diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index de14dce7d5b..68878e3ad13 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -122,6 +122,7 @@ build++ update_icon() return 1 + return if(1) // Fixed to the floor if(istype(W, /obj/item/wrench)) to_chat(user, "You begin to de-anchor \the [src] from the floor.") @@ -144,6 +145,7 @@ build++ update_icon() return 1 + return if(2) // Welded to the floor if(istype(W, /obj/item/weldingtool)) var/obj/item/weldingtool/WT = W @@ -165,6 +167,7 @@ to_chat(user, "You've added cables to \the [src].") build++ update_icon() + return if(3) // Wired if(istype(W, /obj/item/wirecutters)) to_chat(user, "You begin to remove the wiring from \the [src].") @@ -185,6 +188,7 @@ build++ update_icon() return 1 + return if(4) // Grille in place if(istype(W, /obj/item/crowbar)) to_chat(user, "You begin to pry off the grille from \the [src]...") @@ -201,7 +205,8 @@ M.dir = src.dir qdel(src) return 1 - ..() + return + return ..() /obj/machinery/mass_driver_frame/update_icon() icon_state = "mass_driver_b[build]" diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 1b566c95e42..fba07d684ac 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -799,6 +799,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co scribble = s attack_self(user) return + return ..() ////////////////////////////////////helper procs diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 1dc3fa70f4e..b4241b5f19d 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -324,8 +324,6 @@ return rotate() /obj/item/pipe/attackby(var/obj/item/W as obj, var/mob/user as mob, params) - ..() - if(!istype(W, /obj/item/wrench)) return ..() @@ -526,8 +524,6 @@ w_class = WEIGHT_CLASS_BULKY /obj/item/pipe_meter/attackby(var/obj/item/W as obj, var/mob/user as mob, params) - ..() - if(!istype(W, /obj/item/wrench)) return ..() if(!locate(/obj/machinery/atmospherics/pipe, src.loc)) @@ -553,7 +549,6 @@ w_class = WEIGHT_CLASS_BULKY /obj/item/pipe_gsensor/attackby(var/obj/item/W as obj, var/mob/user as mob) - ..() if(!istype(W, /obj/item/wrench)) return ..() new/obj/machinery/air_sensor( src.loc ) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index df3d13b7378..a07c639c36f 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -13,9 +13,6 @@ idle_power_usage = 50 //when inactive, this turret takes up constant 50 Equipment power active_power_usage = 300 //when active, this turret takes up constant 300 Equipment power power_channel = EQUIP //drains power from the EQUIPMENT channel - - max_integrity = 160 //the turret's health - integrity_failure = 80 armor = list(melee = 50, bullet = 30, laser = 30, energy = 30, bomb = 30, bio = 0, rad = 0, fire = 90, acid = 90) var/raised = 0 //if the turret cover is "open" and the turret is raised var/raising= 0 //if the turret is currently opening or closing its cover @@ -418,6 +415,29 @@ var/list/turret_icons ..() +/obj/machinery/porta_turret/attack_animal(mob/living/simple_animal/M) + M.changeNext_move(CLICK_CD_MELEE) + M.do_attack_animation(src) + if(M.melee_damage_upper == 0 || (M.melee_damage_type != BRUTE && M.melee_damage_type != BURN)) + return + if(!(stat & BROKEN)) + visible_message("[M] [M.attacktext] [src]!") + take_damage(M.melee_damage_upper) + else + to_chat(M, "That object is useless to you.") + return + +/obj/machinery/porta_turret/attack_alien(mob/living/carbon/alien/humanoid/M) + M.changeNext_move(CLICK_CD_MELEE) + M.do_attack_animation(src) + if(!(stat & BROKEN)) + playsound(src.loc, 'sound/weapons/slash.ogg', 25, 1, -1) + visible_message("[M] has slashed at [src]!") + take_damage(15) + else + to_chat(M, "That object is useless to you.") + return + /obj/machinery/porta_turret/emag_act(user as mob) if(!emagged) //Emagging the turret makes it go bonkers and stun everyone. It also makes @@ -432,6 +452,33 @@ var/list/turret_icons sleep(60) //6 seconds for the traitor to gtfo of the area before the turret decides to ruin his shit enabled = 1 //turns it back on. The cover popUp() popDown() are automatically called in process(), no need to define it here +/obj/machinery/porta_turret/take_damage(force) + if(!raised && !raising) + force = force / 8 + if(force < 5) + return + + health -= force + if(force > 5 && prob(45) && spark_system) + spark_system.start() + if(health <= 0) + die() //the death process :( + +/obj/machinery/porta_turret/bullet_act(obj/item/projectile/Proj) + if(Proj.damage_type == STAMINA) + return + + if(enabled) + if(!attacked && !emagged) + attacked = 1 + spawn(60) + attacked = 0 + + ..() + + if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) + take_damage(Proj.damage) + /obj/machinery/porta_turret/emp_act(severity) if(enabled && emp_vulnerable) //if the turret is on, the EMP no matter how severe disables the turret for a while @@ -451,21 +498,6 @@ var/list/turret_icons ..() -/obj/machinery/porta_turret/take_damage(damage, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) - . = ..() - if(. && obj_integrity > 0) //damage received - if(prob(30)) - spark_system.start() - if(enabled && !attacked && !emagged) - attacked = TRUE - addtimer(CALLBACK(src, .proc/reset_attacked), 60) - -/obj/machinery/porta_turret/proc/reset_attacked() - attacked = FALSE - -/obj/machinery/porta_turret/deconstruct(disassembled = TRUE) - qdel(src) - /obj/machinery/porta_turret/ex_act(severity) switch(severity) if(1) @@ -1047,4 +1079,4 @@ var/list/turret_icons desc = "Syndicate exterior defense turret chambered for 4.6x30mm rounds. Designed to be fitted to assault pods, it uses low calliber bullets to save space." health = 100 projectile = /obj/item/projectile/bullet/weakbullet3 - eprojectile = /obj/item/projectile/bullet/weakbullet3 + eprojectile = /obj/item/projectile/bullet/weakbullet3 \ No newline at end of file diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 5833ec5db38..3437bafeb3b 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -305,6 +305,7 @@ return if(panel_open) wires.Interact(user) + return if(state_open) if(store_item(I, user)) @@ -313,6 +314,8 @@ to_chat(user, "You load the [I] into the storage compartment.") else to_chat(user, "The unit already contains that item.") + return + return ..() /obj/machinery/suit_storage_unit/proc/store_item(obj/item/I, mob/user) diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm index ed8c531720b..ec5d63804f6 100644 --- a/code/game/machinery/telecomms/logbrowser.dm +++ b/code/game/machinery/telecomms/logbrowser.dm @@ -208,8 +208,9 @@ A.icon_state = "4" A.anchored = 1 qdel(src) - src.updateUsrDialog() - return + updateUsrDialog() + return + return ..() emag_act(user as mob) if(!emagged) diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 16113f5bcfe..3ce5c316ba6 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -23,6 +23,7 @@ to_chat(user, "You unfasten the bolts.") playsound(src.loc, P.usesound, 50, 1) construct_op++ + return if(1) if(istype(P, /obj/item/screwdriver)) to_chat(user, "You fasten the bolts.") @@ -32,6 +33,7 @@ to_chat(user, "You dislodge the external plating.") playsound(src.loc, P.usesound, 75, 1) construct_op++ + return if(2) if(istype(P, /obj/item/wrench)) to_chat(user, "You secure the external plating.") @@ -44,6 +46,7 @@ var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( user.loc ) A.amount = 5 stat |= BROKEN // the machine's been borked! + return if(3) if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/A = P @@ -56,6 +59,7 @@ qdel(A) construct_op-- stat &= ~BROKEN // the machine's not borked anymore! + return if(istype(P, /obj/item/crowbar)) to_chat(user, "You begin prying out the circuit board other components...") playsound(src.loc, P.usesound, 50, 1) @@ -85,6 +89,8 @@ var/obj/machinery/constructable_frame/machine_frame/F = new F.loc = src.loc qdel(src) + return + return ..() /obj/machinery/telecomms/proc/formatInput(var/label,var/varname, var/input) var/value = vars[varname] diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm index 93c8da26253..73a9261feb0 100644 --- a/code/game/machinery/telecomms/telemonitor.dm +++ b/code/game/machinery/telecomms/telemonitor.dm @@ -150,8 +150,9 @@ A.icon_state = "4" A.anchored = 1 qdel(src) - src.updateUsrDialog() - return + updateUsrDialog() + return + return ..() emag_act(user as mob) if(!emagged) diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm index d76debd7e34..1fe1490442a 100644 --- a/code/game/machinery/telecomms/traffic_control.dm +++ b/code/game/machinery/telecomms/traffic_control.dm @@ -13,10 +13,9 @@ /obj/machinery/computer/telecomms/traffic/attackby(obj/item/I, mob/user) if(ismultitool(I)) unlocked = !unlocked - to_chat(user, "This computer is now [unlocked ? "Unlocked" : "Locked"]. \ -Reopen the UI to see the difference.") + to_chat(user, "This computer is now [unlocked ? "Unlocked" : "Locked"]. Reopen the UI to see the difference.") return - . = ..() + return ..() /obj/machinery/computer/telecomms/traffic/attack_hand(mob/user) interact(user) @@ -26,7 +25,7 @@ Reopen the UI to see the difference.") return 0 if(GLOB.nttc_config.valid_languages.len == 1) - GLOB.nttc_config.update_languages() // this is silly but it has to be done because NTTC inits before languages do + GLOB.nttc_config.update_languages() // this is silly but it has to be done because NTTC inits before languages do var/datum/asset/assets = get_asset_datum(/datum/asset/simple/nttc) assets.send(user) diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index e1288a7b53d..1478016abba 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -208,10 +208,11 @@ user.drop_item() crayon = W crayon.loc = src + update_icon() else - ..() + return ..() else - ..() + return ..() else if(istype(W,/obj/item/grab)) if( (state == 1) && hacked) var/obj/item/grab/G = W @@ -219,8 +220,9 @@ G.affecting.loc = src qdel(G) state = 3 + update_icon() else - ..() + return ..() else if(istype(W,/obj/item/stack/sheet/hairlesshide) || \ istype(W,/obj/item/clothing/under) || \ istype(W,/obj/item/clothing/mask) || \ @@ -283,9 +285,9 @@ to_chat(user, "You can't put the item in right now.") else to_chat(user, "The washing machine is full.") + update_icon() else - ..() - update_icon() + return ..() /obj/machinery/washing_machine/attack_hand(mob/user as mob) switch(state) diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 75b9fc6b1b8..6aff10eb423 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -23,7 +23,7 @@ /obj/item/mecha_parts/chassis/attackby(obj/item/W, mob/user, params) if(!construct || !construct.action(W, user)) - ..() + return ..() /obj/item/mecha_parts/chassis/attack_hand() return diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index 60605045b22..ebda1140c4b 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -76,8 +76,7 @@ else to_chat(user, "You don't see anything that can be pried with [W].") else - ..() - return + return ..() /obj/effect/decal/mecha_wreckage/gygax diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm index 50d0a8f690e..88821ae34c6 100644 --- a/code/game/objects/effects/decals/contraband.dm +++ b/code/game/objects/effects/decals/contraband.dm @@ -94,6 +94,8 @@ else to_chat(user, "You carefully remove the poster from the wall.") roll_and_drop(user.loc) + return + return ..() /obj/structure/sign/poster/attack_hand(mob/user) if(ruined) diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 01f8f2f2057..e68251f09bd 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -39,13 +39,13 @@ src.overlays += image(src.icon, "bodybag_label") else src.name = "body bag" - //..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri return - else if(istype(W, /obj/item/wirecutters)) + if(istype(W, /obj/item/wirecutters)) to_chat(user, "You cut the tag off the bodybag") src.name = "body bag" src.overlays.Cut() return + return ..() /obj/structure/closet/body_bag/close() diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm index 6ef0338dd37..7b6d3612351 100644 --- a/code/game/objects/items/candle.dm +++ b/code/game/objects/items/candle.dm @@ -32,23 +32,27 @@ /obj/item/candle/attackby(obj/item/W, mob/user, params) - ..() if(istype(W, /obj/item/weldingtool)) var/obj/item/weldingtool/WT = W if(WT.isOn()) //Badasses dont get blinded by lighting their candle with a welding tool light("[user] casually lights [src] with [WT], what a badass.") - else if(istype(W, /obj/item/lighter)) + return + if(istype(W, /obj/item/lighter)) var/obj/item/lighter/L = W if(L.lit) light("After some fiddling, [user] manages to light [src] with [L].") - else if(istype(W, /obj/item/match)) + return + if(istype(W, /obj/item/match)) var/obj/item/match/M = W if(M.lit) light("[user] lights [src] with [M]") - else if(istype(W, /obj/item/candle)) + return + if(istype(W, /obj/item/candle)) var/obj/item/candle/C = W if(C.lit) light("[user] tilts [C] and lights [src] with it.") + return + return ..() /obj/item/candle/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) diff --git a/code/game/objects/items/flag.dm b/code/game/objects/items/flag.dm index 81ea26c2cf9..d0118d815fb 100644 --- a/code/game/objects/items/flag.dm +++ b/code/game/objects/items/flag.dm @@ -11,7 +11,7 @@ var/rolled = FALSE /obj/item/flag/attackby(obj/item/W, mob/user, params) - ..() + . = ..() if(is_hot(W) && !(resistance_flags & ON_FIRE)) user.visible_message("[user] lights [src] with [W].", "You light [src] with [W].", "You hear a low whoosh.") fire_act() @@ -251,7 +251,7 @@ boobytrap = null trapper = null else - ..() + return ..() /obj/item/flag/chameleon/attackby(obj/item/W, mob/user, params) if(is_hot(W) && !(resistance_flags & ON_FIRE) && boobytrap && trapper) @@ -260,7 +260,7 @@ message_admins("[key_name_admin(user)] has lit the [src] trapped with [boobytrap] by [key_name_admin(trapper)] at [A.name] (JMP).") log_game("[key_name_admin(user)] has lit the [src] trapped with [boobytrap] by [key_name_admin(trapper)] at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).") investigate_log("[key_name_admin(user)] has lit the [src] trapped with [boobytrap] by [key_name_admin(trapper)] at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).", INVESTIGATE_BOMB) - ..() + return ..() /obj/item/flag/chameleon/burn() if(boobytrap) diff --git a/code/game/objects/items/mountable_frames/apc_frame.dm b/code/game/objects/items/mountable_frames/apc_frame.dm index fbdab5584f1..f6707775fb2 100644 --- a/code/game/objects/items/mountable_frames/apc_frame.dm +++ b/code/game/objects/items/mountable_frames/apc_frame.dm @@ -6,23 +6,26 @@ mount_reqs = list("simfloor", "nospace") /obj/item/mounted/frame/apc_frame/try_build(turf/on_wall, mob/user) - if(..()) - var/turf/turf_loc = get_turf(user) - var/area/area_loc = turf_loc.loc - if(area_loc.get_apc()) - to_chat(user, "This area already has an APC.") - return //only one APC per area - for(var/obj/machinery/power/terminal/T in turf_loc) - if(T.master) - to_chat(user, "There is another network terminal here.") - return - else - var/obj/item/stack/cable_coil/C = new /obj/item/stack/cable_coil(turf_loc) - C.amount = 10 - to_chat(user, "You cut the cables and disassemble the unused power terminal.") - qdel(T) - return 1 - return + if(!..()) + return + var/turf/T = get_turf(user) + var/area/A = get_area(T) + if(A.get_apc()) + to_chat(user, "This area already has an APC!") + return //only one APC per area + if(!A.requires_power) + to_chat(user, "You cannot place [src] in this area!") + return //can't place apcs in areas with no power requirement + for(var/obj/machinery/power/terminal/E in T) + if(E.master) + to_chat(user, "There is another network terminal here!") + return + else + var/obj/item/stack/cable_coil/C = new /obj/item/stack/cable_coil(T) + C.amount = 10 + to_chat(user, "You cut the cables and disassemble the unused power terminal.") + qdel(E) + return TRUE /obj/item/mounted/frame/apc_frame/do_build(turf/on_wall, mob/user) new /obj/machinery/power/apc(get_turf(src), get_dir(user, on_wall), 1) diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index 58a26d2b0da..604d80bb7a4 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -74,9 +74,6 @@ /obj/structure/sign/barsign/attackby(var/obj/item/I, var/mob/user) - if(!allowed(user)) - to_chat(user, "Access denied.") - return if( istype(I, /obj/item/screwdriver)) if(!panel_open) to_chat(user, "You open the maintenance panel.") @@ -106,6 +103,8 @@ broken = 0 else to_chat(user, "You need at least two lengths of cable!") + else + return ..() diff --git a/code/game/objects/structures/coathanger.dm b/code/game/objects/structures/coathanger.dm index 36b33965cc1..5a0a47150ca 100644 --- a/code/game/objects/structures/coathanger.dm +++ b/code/game/objects/structures/coathanger.dm @@ -25,7 +25,6 @@ coat.loc = src update_icon() else - to_chat(user, "You cannot hang [W] on [src]") return ..() /obj/structure/coatrack/CanPass(atom/movable/mover, turf/target, height=0) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index a0f578b7061..b58aecc7c78 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -213,6 +213,7 @@ else to_chat(user, "Out of charges.") return + return if(opened) if(istype(W, /obj/item/grab)) @@ -258,8 +259,10 @@ update_icon() for(var/mob/M in viewers(src)) M.show_message("[src] has been [welded?"welded shut":"unwelded"] by [user.name].", 3, "You hear welding.", 2) - else + else if(user.a_intent != INTENT_HARM) attack_hand(user) + else + return ..() /obj/structure/closet/MouseDrop_T(atom/movable/O, mob/user) ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index 39ccdd14d5d..d8bc213f1cf 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -86,4 +86,4 @@ else if((istype(W, /obj/item/card/emag) || istype(W, /obj/item/melee/energy/blade)) && !broken) emag_act(user) else - to_chat(user, "Access Denied") + return ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index dd8b1a4c08a..3ab0d94317b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -86,9 +86,11 @@ else if((istype(W, /obj/item/card/emag)||istype(W, /obj/item/melee/energy/blade)) && !broken) emag_act(user) else if(istype(W,/obj/item/stack/packageWrap) || istype(W,/obj/item/weldingtool)) - return ..(W,user) - else + return ..(W, user) + else if(user.a_intent != INTENT_HARM) togglelock(user) + else + return ..() /obj/structure/closet/secure_closet/emag_act(mob/user) if(!broken) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 1490385fb9a..1b116678151 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -176,7 +176,10 @@ playsound(loc, W.usesound, 100, 1) rigged = FALSE return - else return attack_hand(user) + else if(user.a_intent != INTENT_HARM) + attack_hand(user) + else + return ..() /obj/structure/closet/singularity_act() dump_contents() @@ -464,7 +467,7 @@ "You have secured [src]'s floor casters.") anchored = TRUE else - ..() + return ..() /obj/structure/closet/crate/radiation desc = "A crate with a radiation sign on it." diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index f54a0459b16..7b30dee1f73 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -45,8 +45,10 @@ "You pry open \the [src].", \ "You hear splitting wood.") qdel(src) + else if(user.a_intent != INTENT_HARM) + attack_hand(user) else - return attack_hand(user) + return ..() /obj/structure/largecrate/mule @@ -56,7 +58,7 @@ /obj/structure/largecrate/lisa/attackby(obj/item/W as obj, mob/user as mob) //ugly but oh well if(istype(W, /obj/item/crowbar)) new /mob/living/simple_animal/pet/dog/corgi/Lisa(loc) - ..() + return ..() /obj/structure/largecrate/cow name = "cow crate" @@ -65,7 +67,7 @@ /obj/structure/largecrate/cow/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, /obj/item/crowbar)) new /mob/living/simple_animal/cow(loc) - ..() + return ..() /obj/structure/largecrate/goat name = "goat crate" @@ -74,7 +76,7 @@ /obj/structure/largecrate/goat/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, /obj/item/crowbar)) new /mob/living/simple_animal/hostile/retaliate/goat(loc) - ..() + return ..() /obj/structure/largecrate/chick name = "chicken crate" @@ -85,7 +87,7 @@ var/num = rand(4, 6) for(var/i = 0, i < num, i++) new /mob/living/simple_animal/chick(loc) - ..() + return ..() /obj/structure/largecrate/cat name = "cat crate" @@ -94,4 +96,4 @@ /obj/structure/largecrate/cat/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, /obj/item/crowbar)) new /mob/living/simple_animal/pet/cat(loc) - ..() \ No newline at end of file + return ..() \ No newline at end of file diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index b9f4e828892..7a3f787b91e 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -68,7 +68,7 @@ to_chat(user, "You cut apart [src].") deconstruct() else - . = ..() + return ..() /obj/structure/curtain/deconstruct(disassembled = TRUE) new /obj/item/stack/sheet/cloth(loc, 2) diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index b8f0d6c5cb5..995e86b5dfb 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -31,6 +31,7 @@ part = null qdel(src) return + return ..() /obj/structure/chair/e_chair/verb/activate_e_chair() set name = "Activate Electric Chair" diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index e7f6cce19df..0a8be5854ab 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -76,6 +76,7 @@ else playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) opened = !opened + update_icon() else if(istype(O, /obj/item/weldingtool)) if(has_extinguisher) to_chat(user, "You need to remove the extinguisher before deconstructing the cabinet!") @@ -95,10 +96,13 @@ "You cut [src] apart with [WT].", "You hear welding.") deconstruct(TRUE) - else + else if(user.a_intent != INTENT_HARM) playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) opened = !opened - update_icon() + update_icon() + else + return ..() + /obj/structure/extinguisher_cabinet/attack_hand(mob/user) if(isrobot(user) || isalien(user)) diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index a6a4f699314..c81b350f745 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -20,7 +20,7 @@ new/obj/item/stack/sheet/metal(drop_location()) qdel(src) return - ..() + return ..() /obj/structure/fluff/empty_terrarium //Empty terrariums are created when a preserved terrarium in a lavaland seed vault is activated. name = "empty terrarium" diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 71ea97cb92f..de1d712b0a4 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -451,6 +451,8 @@ var/turf/T = get_turf(src) T.ChangeTurf(/turf/simulated/wall/cult) qdel(src) + else + return ..() /obj/structure/girder/cult/narsie_act() return diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 9eb8f8b3184..6281d589c70 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -27,6 +27,9 @@ new /obj/structure/kitchenspike(loc) add_fingerprint(user) qdel(src) + return + else + return ..() /obj/structure/kitchenspike @@ -62,16 +65,15 @@ return if(has_buckled_mobs()) to_chat(user, "The spike already has something on it, finish collecting its meat first!") - else - if(isliving(G.affecting)) - if(!has_buckled_mobs()) - if(do_mob(user, src, 120)) - if(spike(G.affecting)) - G.affecting.visible_message("[user] slams [G.affecting] onto the meat spike!", "[user] slams you onto the meat spike!", "You hear a squishy wet noise.") - qdel(G) - return - to_chat(user, "You can't use that on the spike!") return + if(isliving(G.affecting)) + if(!has_buckled_mobs()) + if(do_mob(user, src, 120)) + if(spike(G.affecting)) + G.affecting.visible_message("[user] slams [G.affecting] onto the meat spike!", "[user] slams you onto the meat spike!", "You hear a squishy wet noise.") + qdel(G) + return + return ..() /obj/structure/kitchenspike/proc/spike(mob/living/victim) diff --git a/code/game/objects/structures/misc.dm b/code/game/objects/structures/misc.dm index 01fab63dd57..b6da99bf6dc 100644 --- a/code/game/objects/structures/misc.dm +++ b/code/game/objects/structures/misc.dm @@ -11,9 +11,6 @@ anchored = 1 density = 1 - attackby(obj/item/W as obj, mob/user as mob, params) - return attack_hand(user) - attack_hand(mob/user as mob) to_chat(user, "Civilians: NT is recruiting! Please head SOUTH to the NT Recruitment office to join the station's crew!") @@ -26,11 +23,6 @@ anchored = 1 density = 0 - attackby(obj/item/W as obj, mob/user as mob, params) - - return attack_hand(user) - - attack_hand(mob/user as mob) diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index f11193acb2f..05c6a66c733 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -32,4 +32,6 @@ to_chat(user, "You wet the mop") playsound(src.loc, 'sound/effects/slosh.ogg', 25, 1) if(src.reagents.total_volume < 1) - to_chat(user, "Out of water!") \ No newline at end of file + to_chat(user, "Out of water!") + return + return ..() \ No newline at end of file diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 1b73feef730..b847657e5f5 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -133,8 +133,9 @@ else name = "Morgue" overlays.Cut() - add_fingerprint(user) - return + add_fingerprint(user) + return + return ..() /obj/structure/morgue/relaymove(mob/user as mob) if(user.stat) @@ -325,8 +326,9 @@ name = text("Crematorium- '[]'", t) else name = "Crematorium" - add_fingerprint(user) - return + add_fingerprint(user) + return + return ..() /obj/structure/crematorium/relaymove(mob/user as mob) if(user.stat || locked) diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 381b904d4ae..aa6528ee118 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -30,6 +30,8 @@ to_chat(user, "You pin the paper to the noticeboard.") else to_chat(user, "You reach to pin your paper to the board but hesitate. You are certain your paper will not be seen among the many others already attached.") + return + return ..() /obj/structure/noticeboard/attack_hand(user as mob) var/dat = "Noticeboard
" diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index 7449112993d..2ce0918ac16 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -53,7 +53,7 @@ P.add_fingerprint(user) qdel(src) else - . = ..() + return ..() /obj/structure/plasticflaps/CanPass(atom/A, turf/T) if(istype(A) && A.checkpass(PASSGLASS)) diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index 9e50af57473..e3ebb0579a4 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -46,6 +46,7 @@ to_chat(user, "You dismantle [src].") new /obj/item/stack/sheet/metal(src.loc, 5) qdel(src) + return if(istype(W, /obj/item/weldingtool)) var/obj/item/weldingtool/WT = W if(!anchored) @@ -70,6 +71,7 @@ return anchored = 0 to_chat(user, "You cut [src] free from the floor.") + return //Finishing the frame if(istype(W,/obj/item/stack/sheet)) if(finished) @@ -96,6 +98,8 @@ S.use(1) new /obj/structure/reflector/box (src.loc) qdel(src) + return + return ..() /obj/structure/reflector/proc/get_reflection(srcdir,pdir) return 0 diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 8d323fececb..707d30dbcfa 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -28,7 +28,8 @@ //S.icon = I.Scale(24, 24) S.sign_state = icon_state qdel(src) - else ..() + else + return ..() /obj/item/sign name = "sign" @@ -62,7 +63,8 @@ S.icon_state = sign_state to_chat(user, "You fasten \the [S] with your [tool].") qdel(src) - else ..() + else + return ..() /obj/structure/sign/double/map name = "station map" diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 44a5cbc665b..6af52d6999b 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -80,7 +80,7 @@ /obj/structure/statue/uranium/attackby(obj/item/W, mob/user, params) radiate() - ..() + return ..() /obj/structure/statue/uranium/Bumped(atom/user) radiate() @@ -137,7 +137,7 @@ investigate_log("[key_name(user)] ignited a plasma statue at [COORD(loc)]", "atmos") ignite(is_hot(W)) return - ..() + return ..() /obj/structure/statue/plasma/proc/PlasmaBurn() atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 160) @@ -230,7 +230,7 @@ /obj/structure/statue/bananium/attackby(obj/item/W, mob/user, params) honk() - ..() + return ..() /obj/structure/statue/bananium/attack_hand(mob/user) honk() diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 380ddf2e6c0..23802cf56a5 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -78,6 +78,8 @@ user.visible_message("[user] collapses \the [name].", "You collapse \the [name].") new/obj/item/roller(get_turf(src)) qdel(src) + else + return ..() /obj/structure/bed/roller/post_buckle_mob(mob/living/M) density = TRUE diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 50b62451c74..2d8c44c2a48 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -542,7 +542,7 @@ to_chat(user, "You weaken the table.") deconstruction_ready = TRUE else - . = ..() + return ..() /obj/structure/table/reinforced/brass name = "brass table" @@ -753,7 +753,7 @@ new /obj/item/stack/sheet/metal(user.loc) qdel(src) else - . = ..() + return ..() /obj/item/rack_parts/attack_self(mob/user) if(building) diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 0a23f204e22..6a16305a299 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -63,6 +63,7 @@ else to_chat(user, "[src] is full.") SSnanoui.update_uis(src) + return if(istype(I, /obj/item/tank/plasma)) if(plasmatanks < 10) user.drop_item() @@ -74,6 +75,7 @@ else to_chat(user, "[src] is full.") SSnanoui.update_uis(src) + return if(istype(I, /obj/item/wrench)) if(anchored) to_chat(user, "You lean down and unwrench [src].") @@ -81,6 +83,8 @@ else to_chat(user, "You wrench [src] into place.") anchored = 1 + return + return ..() /obj/structure/dispenser/Topic(href, href_list) if(..()) diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index 591157e8bd6..79e9c6cfab1 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -24,10 +24,7 @@ /obj/structure/target_stake/attackby(obj/item/W, mob/user, params) // Putting objects on the stake. Most importantly, targets - if(pinned_target) - return // get rid of that pinned target first! - - if(istype(W, /obj/item/target)) + if(istype(W, /obj/item/target) && !pinned_target) density = 0 W.density = 1 user.drop_item(src) @@ -35,6 +32,8 @@ W.layer = 3.1 pinned_target = W to_chat(user, "You slide the target into the stake.") + return + return ..() /obj/structure/target_stake/attack_hand(mob/user) // taking pinned targets off! diff --git a/code/modules/arcade/arcade_base.dm b/code/modules/arcade/arcade_base.dm index 38c034927bc..80d6cad031a 100644 --- a/code/modules/arcade/arcade_base.dm +++ b/code/modules/arcade/arcade_base.dm @@ -76,9 +76,11 @@ var/obj/item/stack/spacecash/C = O if(pay_with_cash(C, user)) tokens += 1 - return + return if(panel_open && component_parts && istype(O, /obj/item/crowbar)) default_deconstruction_crowbar(O) + return + return ..() /obj/machinery/arcade/update_icon() return diff --git a/code/modules/arcade/mob_hunt/battle_computer.dm b/code/modules/arcade/mob_hunt/battle_computer.dm index 4942f25ffbd..0d6e91b60d9 100644 --- a/code/modules/arcade/mob_hunt/battle_computer.dm +++ b/code/modules/arcade/mob_hunt/battle_computer.dm @@ -54,6 +54,8 @@ /obj/machinery/computer/mob_battle_terminal/attackby(obj/item/O, mob/user) if(istype(O, /obj/item/nanomob_card)) insert_card(O, user) + return + return ..() /obj/machinery/computer/mob_battle_terminal/proc/insert_card(obj/item/nanomob_card/new_card, mob/user) if(!new_card) @@ -287,6 +289,8 @@ /obj/machinery/computer/mob_healer_terminal/attackby(obj/item/O, mob/user) if(istype(O, /obj/item/nanomob_card)) heal_card(O, user) + return + return ..() /obj/machinery/computer/mob_healer_terminal/proc/heal_card(obj/item/nanomob_card/patient, mob/user) if(!patient) diff --git a/code/modules/arcade/prize_counter.dm b/code/modules/arcade/prize_counter.dm index d8666c36617..ca1a06d2a65 100644 --- a/code/modules/arcade/prize_counter.dm +++ b/code/modules/arcade/prize_counter.dm @@ -53,6 +53,8 @@ if(tickets) //save the tickets! print_tickets() default_deconstruction_crowbar(O) + return + return ..() /obj/machinery/prize_counter/attack_hand(mob/user as mob) if(..()) diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index d8ee727f2f8..d94e3243013 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -115,14 +115,14 @@ var/obj/item/assembly/A = W if(!A.secured && !secured) attach_assembly(A, user) - return + return if(isscrewdriver(W)) if(toggle_secure()) to_chat(user, "[src] is ready!") else to_chat(user, "[src] can now be attached!") return - ..() + return ..() /obj/item/assembly/process() STOP_PROCESSING(SSobj, src) diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index daa9788abcd..8bacd9a839c 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -162,6 +162,7 @@ var/obj/machinery/gateway/centerstation/the_gateway = null if(istype(W,/obj/item/multitool)) to_chat(user, "The gate is already calibrated, there is no work for you to do here.") return + return ..() /////////////////////////////////////Away//////////////////////// @@ -290,4 +291,5 @@ var/obj/machinery/gateway/centerstation/the_gateway = null else to_chat(user, "Recalibration successful!: This gate's systems have been fine tuned. Travel to this gate will now be on target.") calibrated = 1 - return + return + return ..() \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/UO71-terrorspiders.dm b/code/modules/awaymissions/mission_code/UO71-terrorspiders.dm index 7d045f0afcb..63dfd3f5e4d 100644 --- a/code/modules/awaymissions/mission_code/UO71-terrorspiders.dm +++ b/code/modules/awaymissions/mission_code/UO71-terrorspiders.dm @@ -256,4 +256,5 @@ to_chat(user, "Activating the machine has unlocked a way forward!") else to_chat(user, "Your ID card already has all the access this machine can give.") - . = 1 + return + return ..() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index c2c74a8e9f0..a6fe3789aae 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -276,7 +276,7 @@ BLIND // can't see anything to_chat(user, "[src] have already been clipped!") return else - ..() + return ..() /obj/item/clothing/under/proc/set_sensors(mob/user as mob) var/mob/M = user @@ -474,9 +474,9 @@ BLIND // can't see anything update_icon() else to_chat(user, "[src] have already had [p_their()] toes cut open!") - return + return else - ..() + return ..() /obj/item/clothing/shoes/proc/step_action(var/mob/living/carbon/human/H) //squeek squeek SEND_SIGNAL(src, COMSIG_SHOES_STEP_ACTION) diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index e0dd80a1e6e..eafd038977d 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -105,7 +105,7 @@ log transactions SSnanoui.update_uis(src) C.use(C.amount) else - ..() + return ..() /obj/machinery/atm/attack_hand(mob/user) if(..()) diff --git a/code/modules/economy/EFTPOS.dm b/code/modules/economy/EFTPOS.dm index f3df3027780..98d99e667aa 100644 --- a/code/modules/economy/EFTPOS.dm +++ b/code/modules/economy/EFTPOS.dm @@ -71,7 +71,7 @@ else to_chat(user, "[bicon(src)]Unable to connect to accounts database.") else - ..() + return ..() /obj/item/eftpos/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open) diff --git a/code/modules/economy/POS.dm b/code/modules/economy/POS.dm index 1164ead6c19..047c1636ece 100644 --- a/code/modules/economy/POS.dm +++ b/code/modules/economy/POS.dm @@ -533,4 +533,5 @@ var/const/POS_HEADER = {" if(credits_held) new /obj/item/stack/spacecash(loc, credits_held) credits_held=0 - ..() + return + return ..() \ No newline at end of file diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index edcb85e0d15..2aee35c225d 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -108,7 +108,9 @@ if(default_unfasten_wrench(user, P)) return - default_deconstruction_crowbar(P) + if(default_deconstruction_crowbar(P)) + return + return ..() /obj/machinery/gibber/MouseDrop_T(mob/target, mob/user) if(user.incapacitated() || !ishuman(user)) diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm index 274605e554b..345bada5151 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm @@ -50,6 +50,8 @@ I.desc += ". This also has sprinkles." else to_chat(user, "This [I] already has sprinkles.") + return + return ..() /obj/machinery/icemachine/proc/validexchange(reag) diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm index d39df221d8d..1554dbb0211 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat_2.dm @@ -137,7 +137,7 @@ var/list/ingredients_source = list( R.reagents.clear_reagents() return 1 else - ..() + return ..() /obj/machinery/icecream_vat/proc/add(var/add_type, var/amount) if(add_type <= ingredients.len) diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm index 1b8f61bb7bf..22394eaa9f9 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm @@ -54,7 +54,8 @@ GLOBAL_LIST_EMPTY(monkey_recyclers) power_change() return - default_deconstruction_crowbar(O) + if(default_deconstruction_crowbar(O)) + return if(istype(O, /obj/item/multitool)) if(!panel_open) @@ -76,6 +77,7 @@ GLOBAL_LIST_EMPTY(monkey_recyclers) var/obj/item/multitool/M = O M.buffer = src to_chat(user, "You log [src] in the [M]'s buffer.") + return if(stat != 0) //NOPOWER etc return if(istype(O, /obj/item/grab)) @@ -102,7 +104,8 @@ GLOBAL_LIST_EMPTY(monkey_recyclers) to_chat(user, "The machine only accepts monkeys!") else to_chat(user, "The machine only accepts monkeys!") - return + return + return ..() /obj/machinery/monkey_recycler/attack_hand(mob/user) if(stat != 0) //NOPOWER etc diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 17246d6cba1..d9ab7ddb749 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -126,7 +126,7 @@ to_chat(user, "You add [I] to the machine.") interact(user) else - ..() + return ..() /obj/machinery/plantgenes/attack_hand(mob/user) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 6411935596b..620e69e97cb 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -1023,4 +1023,4 @@ to_chat(user, "You clear up [src]!") qdel(src) else - ..() + return ..() diff --git a/code/modules/library/computers/public.dm b/code/modules/library/computers/public.dm index c0f61d26eff..d0a6272970c 100644 --- a/code/modules/library/computers/public.dm +++ b/code/modules/library/computers/public.dm @@ -10,6 +10,7 @@ if(default_unfasten_wrench(user, W)) power_change() return + return ..() /obj/machinery/computer/library/public/interact(var/mob/user) if(interact_check(user)) diff --git a/code/modules/logic/converter.dm b/code/modules/logic/converter.dm index 76f5fb37d7b..c54e3fe4882 100644 --- a/code/modules/logic/converter.dm +++ b/code/modules/logic/converter.dm @@ -56,7 +56,7 @@ S.toggle_secure() to_chat(user, "You unsecure and detach \the [S] from the I/O connection port.") return - ..() + return ..() /obj/machinery/logic_gate/convert/multitool_menu(var/mob/user, var/obj/item/multitool/P) var/logic_state_string diff --git a/code/modules/logic/logic_base.dm b/code/modules/logic/logic_base.dm index e0e5f1265eb..50aecd79283 100644 --- a/code/modules/logic/logic_base.dm +++ b/code/modules/logic/logic_base.dm @@ -212,6 +212,7 @@ if(panel_open && istype(O, /obj/item/crowbar)) default_deconstruction_crowbar(O) return 1 + return ..() ////////////////////////////////////// // Attack procs // diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 51f22097643..cf2076ecc6f 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -49,6 +49,7 @@ GLOBAL_LIST(labor_sheet_values) return else to_chat(user, "There's an ID inserted already.") + return return ..() /obj/machinery/mineral/labor_claim_console/attack_hand(mob/user) @@ -154,6 +155,7 @@ GLOBAL_LIST(labor_sheet_values) if(istype(I, /obj/item/stack/sheet) && user.canUnEquip(I)) var/obj/item/stack/sheet/inp = I points += inp.point_value * inp.amount + return return ..() /**********************Point Lookup Console**************************/ @@ -180,5 +182,5 @@ GLOBAL_LIST(labor_sheet_values) to_chat(user, "Collect points by bringing smelted minerals to the Labor Shuttle stacking machine. Reach your quota to earn your release.") else to_chat(user, "Error: Invalid ID") - else - return ..() \ No newline at end of file + return + return ..() \ No newline at end of file diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm index 5a771aeb1d4..7b321474880 100644 --- a/code/modules/mining/lavaland/loot/colossus_loot.dm +++ b/code/modules/mining/lavaland/loot/colossus_loot.dm @@ -138,7 +138,7 @@ /obj/machinery/anomalous_crystal/attackby(obj/item/I, mob/user, params) ActivationReaction(user,"weapon") - ..() + return ..() /obj/machinery/anomalous_crystal/bullet_act(obj/item/projectile/P, def_zone) ..() diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index b6106499eff..3c94d84985f 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -194,7 +194,7 @@ return else RedeemVoucher(I, user) - return + return if(istype(I,/obj/item/card/id)) if(!powered()) return @@ -206,8 +206,8 @@ C.forceMove(src) inserted_id = C interact(user) - return - ..() + return + return ..() /obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/mining_voucher/voucher, mob/redeemer) var/items = list("Survival Capsule and Explorer's Webbing", "Resonator Kit", "Minebot Kit", "Extraction and Rescue Kit", "Crusher Kit", "Mining Conscription Kit") diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 77b270a7f76..ec7afa6e58a 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -10,10 +10,7 @@ pressure_resistance = 5 * ONE_ATMOSPHERE /obj/structure/ore_box/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/t_scanner/adv_mining_scanner)) - attack_hand(user) - return - else if(istype(W, /obj/item/stack/ore)) + if(istype(W, /obj/item/stack/ore)) if(!user.drop_item()) return W.forceMove(src) @@ -30,6 +27,8 @@ if(do_after(user, 50 * C.toolspeed, target = src)) user.visible_message("[user] pries [src] apart.", "You pry apart [src].", "You hear splitting wood.") deconstruct(TRUE, user) + else + return ..() /obj/structure/ore_box/attack_hand(mob/user) if(Adjacent(user)) diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index f6e52eb2fc2..7d6144bee1b 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -50,8 +50,10 @@ playsound(loc, P.usesound, 50, 1) anchored = !anchored to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") + else if(user.a_intent != INTENT_HARM) + to_chat(user, "You can't put [P] in [src]!") else - to_chat(user, "You can't put [P] in [src]!") + return ..() /obj/structure/filingcabinet/deconstruct(disassembled = TRUE) if(!(flags & NODECONSTRUCT)) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index f1487e2e7d2..5a09e1a55a9 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -182,6 +182,8 @@ copyitem.forceMove(get_turf(src)) copyitem = null updateUsrDialog() + else + return ..() /obj/machinery/photocopier/proc/copy(var/obj/item/paper/copy) var/obj/item/paper/c = new /obj/item/paper (loc) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 54ef828936f..23b51fc899b 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -149,7 +149,7 @@ terminal.connect_to_network() /obj/machinery/power/apc/New(turf/loc, ndir, building = 0) - if (!armor) + if(!armor) armor = list("melee" = 20, "bullet" = 20, "laser" = 10, "energy" = 100, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50) ..() GLOB.apcs += src @@ -435,227 +435,242 @@ //attack with an item - open/close cover, insert cell, or (un)lock interface /obj/machinery/power/apc/attackby(obj/item/W, mob/living/user, params) - if(istype(user, /mob/living/silicon) && get_dist(src,user)>1) + if(issilicon(user) && get_dist(src,user)>1) return src.attack_hand(user) - if(istype(W, /obj/item/crowbar) && opened) - if(has_electronics==1) - if(terminal) - to_chat(user, "Disconnect wires first.") + if(istype(W, /obj/item/crowbar)) //Using crowbar + if(opened) // a) on open apc + if(has_electronics==1) + if(terminal) + to_chat(user, "Disconnect the wires first!") + return + playsound(src.loc, W.usesound, 50, 1) + to_chat(user, "You are trying to remove the power control board..." ) + if(do_after(user, 50*W.toolspeed, target = src)) + if(has_electronics==1) + has_electronics = 0 + if(stat & BROKEN) + user.visible_message(\ + "[user.name] has broken the power control board inside [src.name]!", + "You break the charred power control board and remove the remains.", + "You hear a crack.") + return + //SSticker.mode:apcs-- //XSI said no and I agreed. -rastaf0 + else if(emagged) // We emag board, not APC's frame + emagged = FALSE + user.visible_message( + "[user.name] has discarded emaged power control board from [src.name]!", + "You discarded shorten board.") + return + else if(malfhack) // AI hacks board, not APC's frame + user.visible_message(\ + "[user.name] has discarded strangely programmed power control board from [src.name]!", + "You discarded strangely programmed board.") + malfai = null + malfhack = 0 + return + else + user.visible_message(\ + "[user.name] has removed the power control board from [src.name]!", + "You remove the power control board.") + new /obj/item/apc_electronics(loc) + return + else if(opened!=2) //cover isn't removed + opened = 0 + coverlocked = TRUE //closing cover relocks it + update_icon() + return + else if(!(stat & BROKEN)) // b) on closed and not broken APC + if(coverlocked && !(stat & MAINT)) // locked... + to_chat(user, "The cover is locked and cannot be opened!") + return + else if(panel_open) // wires are exposed + to_chat(user, "Exposed wires prevents you from opening it!") + return + else + opened = 1 + update_icon() return - playsound(src.loc, W.usesound, 50, 1) - to_chat(user, "You are trying to remove the power control board...")//lpeters - fixed grammar issues - if(do_after(user, 50 * W.toolspeed, target = src)) - if(has_electronics==1) - has_electronics = 0 - if((stat & BROKEN) || malfhack) - user.visible_message(\ - "[user.name] has broken the power control board inside [src.name]!",\ - "You broke the charred power control board and remove the remains.", - "You hear a crack!") - //ticker.mode:apcs-- //XSI said no and I agreed. -rastaf0 - else - user.visible_message(\ - "[user.name] has removed the power control board from [src.name]!",\ - "You remove the power control board.") - new /obj/item/apc_electronics(loc) - else if(opened!=2) //cover isn't removed - opened = 0 - update_icon() - else if(istype(W, /obj/item/crowbar) && !((stat & BROKEN) || malfhack) ) - if(coverlocked && !(stat & MAINT)) - to_chat(user, "The cover is locked and cannot be opened.") - return - else - opened = 1 - update_icon() - else if(istype(W, /obj/item/stock_parts/cell) && opened) // trying to put a cell inside + else if (istype(W, /obj/item/stock_parts/cell) && opened) // trying to put a cell inside if(cell) - to_chat(user, "There is a power cell already installed.") + to_chat(user, "There is a power cell already installed!") return else if(stat & MAINT) - to_chat(user, "There is no connector for your power cell.") + to_chat(user, "There is no connector for your power cell!") return - user.drop_item() - W.loc = src + if(!user.drop_item()) + return + W.forceMove(src) cell = W user.visible_message(\ - "[user.name] has inserted the power cell to [src.name]!",\ - "You insert the power cell.") - playsound(loc, W.usesound, 50, 1) + "[user.name] has inserted the power cell to [src.name]!",\ + "You insert the power cell.") chargecount = 0 update_icon() + else if(istype(W, /obj/item/screwdriver)) // haxing if(opened) if(cell) - to_chat(user, "Close the APC first.")//Less hints more mystery! - + to_chat(user, "Close the APC first!") //Less hints more mystery! return else - if(has_electronics==1 && terminal) + if(has_electronics==1) has_electronics = 2 stat &= ~MAINT playsound(src.loc, W.usesound, 50, 1) - to_chat(user, "You screw the circuit electronics into place.") + to_chat(user, "You screw the circuit electronics into place.") else if(has_electronics==2) has_electronics = 1 stat |= MAINT playsound(src.loc, W.usesound, 50, 1) - to_chat(user, "You unfasten the electronics.") + to_chat(user, "You unfasten the electronics.") else /* has_electronics==0 */ - to_chat(user, "There is nothing to secure.") + to_chat(user, "There is nothing to secure!") return update_icon() else if(emagged) - to_chat(user, "The interface is broken.") + to_chat(user, "The interface is broken!") + else if((stat & MAINT) && !opened) + ..() //its an empty closed frame... theres no wires to expose! else - wiresexposed = !wiresexposed - to_chat(user, "The wires have been [wiresexposed ? "exposed" : "unexposed"].") + panel_open = !panel_open + to_chat(user, "The wires have been [panel_open ? "exposed" : "unexposed"]") update_icon() - else if(istype(W, /obj/item/card/id)||istype(W, /obj/item/pda)) // trying to unlock the interface with an ID card - if(emagged) - to_chat(user, "The interface is broken.") - else if(opened) - to_chat(user, "You must close the cover to swipe an ID card.") - else if(wiresexposed) - to_chat(user, "You must close the panel.") - else if(stat & (BROKEN|MAINT)) - to_chat(user, "Nothing happens.") - else - if(src.allowed(usr) && !isWireCut(APC_WIRE_IDSCAN)) - locked = !locked - to_chat(user, "You [ locked ? "lock" : "unlock"] the APC interface.") - update_icon() - else - to_chat(user, "Access denied.") - else if(istype(W, /obj/item/stack/cable_coil) && !terminal && opened && has_electronics!=2) - if(src.loc:intact) - to_chat(user, "You must remove the floor plating in front of the APC first.") + else if(W.GetID()) // trying to unlock the interface with an ID card + togglelock(user) + + else if(istype(W, /obj/item/stack/cable_coil) && opened) + var/turf/host_turf = get_turf(src) + if(!host_turf) + throw EXCEPTION("attackby on APC when it's not on a turf") return + if(host_turf.intact) + to_chat(user, "You must remove the floor plating in front of the APC first!") + return + else if(terminal) // it already have terminal + to_chat(user, "This APC is already wired!") + return + else if(has_electronics == 0) + to_chat(user, "There is nothing to wire!") + return + var/obj/item/stack/cable_coil/C = W - if(C.amount < 10) - to_chat(user, "You need more wires.") + if(C.get_amount() < 10) + to_chat(user, "You need ten lengths of cable for APC!") return - to_chat(user, "You start adding cables to the APC frame...") - playsound(src.loc, C.usesound, 50, 1) - if(do_after(user, 20 * C.toolspeed, target = src)) - if(C.amount >= 10 && !terminal && opened && has_electronics != 2) + user.visible_message("[user.name] adds cables to the APC frame.", \ + "You start adding cables to the APC frame...") + playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1) + if(do_after(user, 20, target = src)) + if(C.get_amount() < 10 || !C) + return + if(C.get_amount() >= 10 && !terminal && opened && has_electronics > 0) var/turf/T = get_turf(src) var/obj/structure/cable/N = T.get_cable_node() if(prob(50) && electrocute_mob(usr, N, N, 1, TRUE)) - do_sparks(5, 1, src) + do_sparks(5, TRUE, src) return C.use(10) - user.visible_message(\ - "[user.name] has added cables to the APC frame!",\ - "You add cables to the APC frame.") + to_chat(user, "You add cables to the APC frame.") make_terminal() terminal.connect_to_network() - else if(istype(W, /obj/item/wirecutters) && terminal && opened && has_electronics!=2) - if(src.loc:intact) - to_chat(user, "You must remove the floor plating in front of the APC first.") + + else if(istype(W, /obj/item/wirecutters) && terminal && opened) + terminal.dismantle(user, W) + + else if(istype(W, /obj/item/apc_electronics) && opened) + if(has_electronics!=0) // there are already electronicks inside + to_chat(user, "You cannot put the board inside, there already is one!") return - to_chat(user, "You begin to cut the cables...") - playsound(src.loc, W.usesound, 50, 1) - if(do_after(user, 50 * W.toolspeed, target = src)) - if(terminal && opened && has_electronics!=2) - if(prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) - do_sparks(5, 1, src) - return - new /obj/item/stack/cable_coil(loc,10) - to_chat(user, "You cut the cables and dismantle the power terminal.") - qdel(terminal) // qdel - else if(istype(W, /obj/item/apc_electronics) && opened && has_electronics==0 && !((stat & BROKEN) || malfhack)) - to_chat(user, "You trying to insert the power control board into the frame...") - playsound(src.loc, W.usesound, 50, 1) - if(do_after(user, 10 * W.toolspeed, target = src)) + else if(stat & BROKEN) + to_chat(user, "You cannot put the board inside, the frame is damaged!") + return + + user.visible_message("[user.name] inserts the power control board into [src].", \ + "You start to insert the power control board into the frame...") + playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1) + if(do_after(user, 10, target = src)) if(has_electronics==0) has_electronics = 1 - locked = 0 + locked = FALSE to_chat(user, "You place the power control board inside the frame.") - qdel(W) // qdel - else if(istype(W, /obj/item/apc_electronics) && opened && has_electronics==0 && ((stat & BROKEN) || malfhack)) - to_chat(user, "You cannot put the board inside, the frame is damaged.") - return + qdel(W) + else if(istype(W, /obj/item/weldingtool) && opened && has_electronics==0 && !terminal) var/obj/item/weldingtool/WT = W if(WT.get_fuel() < 3) - to_chat(user, "You need more welding fuel to complete this task.") + to_chat(user, "You need more welding fuel to complete this task!") return - user.visible_message("[user.name] welds [src].", \ - "You start welding the APC frame...", \ - "You hear welding.") + user.visible_message("[user.name] welds [src].", \ + "You start welding the APC frame...", \ + "You hear welding.") playsound(src.loc, WT.usesound, 50, 1) - if(do_after(user, 50 * WT.toolspeed, target = src)) - if(!src || !WT.remove_fuel(3, user)) return - if(emagged || malfhack || (stat & BROKEN) || opened==2) + if(do_after(user, 50*W.toolspeed, target = src)) + if(!src || !WT.remove_fuel(3, user)) + return + if((stat & BROKEN) || opened==2) new /obj/item/stack/sheet/metal(loc) user.visible_message(\ - "[src] has been cut apart by [user.name] with the weldingtool.",\ - "You disassembled the broken APC frame.",\ - "You hear welding.") + "[user.name] has cut [src] apart with [W].",\ + "You disassembled the broken APC frame.") else new /obj/item/mounted/frame/apc_frame(loc) user.visible_message(\ - "[src] has been cut from the wall by [user.name] with the weldingtool.",\ - "You cut the APC frame from the wall.",\ - "You hear welding.") - qdel(src) // qdel + "[user.name] has cut [src] from the wall with [W].",\ + "You cut the APC frame from the wall.") + qdel(src) + return + + else if(istype(W, /obj/item/mounted/frame/apc_frame) && opened) + if(!(stat & BROKEN || opened==2 || obj_integrity < max_integrity)) // There is nothing to repair + to_chat(user, "You found no reason for repairing this APC") + return + if(!(stat & BROKEN) && opened==2) // Cover is the only thing broken, we do not need to remove elctronicks to replace cover + user.visible_message("[user.name] replaces missing APC's cover.",\ + "You begin to replace APC's cover...") + if(do_after(user, 20, target = src)) // replacing cover is quicker than replacing whole frame + to_chat(user, "You replace missing APC's cover.") + qdel(W) + opened = 1 + update_icon() return - else if(istype(W, /obj/item/mounted/frame/apc_frame) && opened && emagged) - emagged = 0 - if(opened==2) - opened = 1 - user.visible_message(\ - "[user.name] has replaced the damaged APC frontal panel with a new one.",\ - "You replace the damaged APC frontal panel with a new one.") - qdel(W) - update_icon() - else if(istype(W, /obj/item/mounted/frame/apc_frame) && opened && ((stat & BROKEN) || malfhack)) if(has_electronics) - to_chat(user, "You cannot repair this APC until you remove the electronics still inside.") + to_chat(user, "You cannot repair this APC until you remove the electronics still inside!") return - to_chat(user, "You begin to replace the damaged APC frame...") - if(do_after(user, 50 * W.toolspeed, target = src)) - user.visible_message(\ - "[user.name] has replaced the damaged APC frame with new one.",\ - "You replace the damaged APC frame with new one.") + user.visible_message("[user.name] replaces the damaged APC frame with a new one.",\ + "You begin to replace the damaged APC frame...") + if(do_after(user, 50, target = src)) + to_chat(user, "You replace the damaged APC frame with a new one.") qdel(W) stat &= ~BROKEN - malfai = null - malfhack = 0 + obj_integrity = max_integrity if(opened==2) opened = 1 update_icon() + return + else if(panel_open && !opened && is_wire_tool(W)) + wires.Interact(user) else - if(((stat & BROKEN) || malfhack) \ - && !opened \ - && ( \ - (W.force >= 5 && W.w_class >= WEIGHT_CLASS_NORMAL) \ - || istype(W,/obj/item/crowbar) \ - ) \ - && prob(20) ) - opened = 2 - user.visible_message("The APC cover was knocked down with the [W.name] by [user.name]!", \ - "You knock down the APC cover with your [W.name]!", \ - "You hear a bang.") + return ..() + +/obj/machinery/power/apc/proc/togglelock(mob/living/user) + if(emagged) + to_chat(user, "The interface is broken!") + else if(opened) + to_chat(user, "You must close the cover to swipe an ID card!") + else if(panel_open) + to_chat(user, "You must close the panel!") + else if(stat & (BROKEN|MAINT)) + to_chat(user, "Nothing happens!") + else + if(allowed(usr) && !isWireCut(APC_WIRE_IDSCAN) && !malfhack) + locked = !locked + to_chat(user, "You [ locked ? "lock" : "unlock"] the APC interface.") update_icon() else - if(istype(user, /mob/living/silicon)) - return src.attack_hand(user) - if(!opened && wiresexposed && \ - (istype(W, /obj/item/multitool) || \ - istype(W, /obj/item/wirecutters) || istype(W, /obj/item/assembly/signaler))) - return src.attack_hand(user) - if(W.flags & NOBLUDGEON) - return - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - user.visible_message("The [src.name] has been hit with the [W.name] by [user.name]!", \ - "You hit the [src.name] with your [W.name]!", \ - "You hear a bang.") + to_chat(user, "Access denied.") /obj/machinery/power/apc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) if((!(stat & BROKEN) || malfai)) diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 7bbb5ac20f9..3d137a3c298 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -185,7 +185,7 @@ to_chat(user, "You reverse the generator's circulator settings. The cold circulator is now on the [dir2text(cold_dir)] side, and the heat circulator is now on the [dir2text(hot_dir)] side.") update_desc() else - ..() + return ..() /obj/machinery/power/generator/proc/get_menu(include_link = 1) var/t = "" diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 255ffd98adc..08464600487 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -179,13 +179,14 @@ var/const/GRAV_NEEDS_WRENCH = 3 // Fixing the gravity generator. /obj/machinery/gravity_generator/main/attackby(obj/item/I as obj, mob/user as mob, params) - var/old_broken_state = broken_state switch(broken_state) if(GRAV_NEEDS_SCREWDRIVER) if(istype(I, /obj/item/screwdriver)) to_chat(user, "You secure the screws of the framework.") playsound(src.loc, I.usesound, 50, 1) broken_state++ + update_icon() + return if(GRAV_NEEDS_WELDING) if(istype(I, /obj/item/weldingtool)) var/obj/item/weldingtool/WT = I @@ -193,6 +194,8 @@ var/const/GRAV_NEEDS_WRENCH = 3 to_chat(user, "You mend the damaged framework.") playsound(src.loc, WT.usesound, 50, 1) broken_state++ + update_icon() + return if(GRAV_NEEDS_PLASTEEL) if(istype(I, /obj/item/stack/sheet/plasteel)) var/obj/item/stack/sheet/plasteel/PS = I @@ -201,17 +204,17 @@ var/const/GRAV_NEEDS_WRENCH = 3 to_chat(user, "You add the plating to the framework.") playsound(src.loc, PS.usesound, 75, 1) broken_state++ + update_icon() else to_chat(user, "You need 10 sheets of plasteel.") + return if(GRAV_NEEDS_WRENCH) if(istype(I, /obj/item/wrench)) to_chat(user, "You secure the plating to the framework.") playsound(src.loc, I.usesound, 75, 1) set_fix() - else - ..() - if(old_broken_state != broken_state) - update_icon() + return + return ..() /obj/machinery/gravity_generator/main/attack_hand(mob/user as mob) if(!..()) diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 203fbd9b734..ee0924578ff 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -307,6 +307,8 @@ return else if(istype(O, /obj/item/crowbar) && panel_open) default_deconstruction_crowbar(O) + else + return ..() /obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob) ..() diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 45fa6fa06cd..efdd6ab2681 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -95,8 +95,7 @@ var/global/list/rad_collectors = list() to_chat(user, "Access denied!") return 1 else - ..() - return 1 + return ..() /obj/machinery/power/rad_collector/obj_break(damage_flag) if(!(stat & BROKEN) && !(flags & NODECONSTRUCT)) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 1726d5bd43b..8977062c947 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -342,10 +342,10 @@ if(exchange_parts(user, W)) return - default_deconstruction_crowbar(W) + if(default_deconstruction_crowbar(W)) + return - ..() - return + return ..() /obj/machinery/power/emitter/emag_act(var/mob/living/user as mob) if(!emagged) diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 5c07f662baa..2942acfdb35 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -140,8 +140,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin if(istool(W)) if(process_tool_hit(W,user)) return - ..() - return + return..() /obj/structure/particle_accelerator/deconstruct(disassembled = TRUE) if(!(flags & NODECONSTRUCT)) @@ -310,7 +309,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin if(istool(W)) if(process_tool_hit(W,user)) return - ..() + return ..() /obj/machinery/particle_accelerator/proc/update_state() return 0 diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 2c59a0a5b22..4773df11395 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -224,7 +224,9 @@ return //crowbarring it ! - default_deconstruction_crowbar(I) + if(default_deconstruction_crowbar(I)) + return + return ..() /obj/machinery/power/smes/disconnect_terminal() if(terminal) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index f9d290438d4..f3ca60effda 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -243,14 +243,14 @@ qdel(W) user.visible_message("[user] inserts the electronics into the solar assembly.", "You insert the electronics into the solar assembly.") return 1 + else if(istype(W, /obj/item/crowbar)) + new /obj/item/tracker_electronics(src.loc) + tracker = 0 + playsound(loc, W.usesound, 50, 1) + user.visible_message("[user] takes out the electronics from the solar assembly.", "You take out the electronics from the solar assembly.") + return 1 else - if(istype(W, /obj/item/crowbar)) - new /obj/item/tracker_electronics(src.loc) - tracker = 0 - playsound(loc, W.usesound, 50, 1) - user.visible_message("[user] takes out the electronics from the solar assembly.", "You take out the electronics from the solar assembly.") - return 1 - ..() + return ..() // // Solar Control Computer @@ -425,8 +425,7 @@ A.anchored = 1 qdel(src) else - src.attack_hand(user) - return + return ..() /obj/machinery/power/solar_control/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index 80c38e0a9fe..058872cde6d 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -33,3 +33,44 @@ invisibility = 0 icon_state = "term" +/obj/machinery/power/proc/can_terminal_dismantle() + . = 0 + +/obj/machinery/power/apc/can_terminal_dismantle() + . = 0 + if(opened) + . = 1 + +/obj/machinery/power/smes/can_terminal_dismantle() + . = 0 + if(panel_open) + . = 1 + + +/obj/machinery/power/terminal/proc/dismantle(mob/living/user, obj/item/W) + if(isturf(loc)) + var/turf/T = loc + if(T.intact) + to_chat(user, "You must first expose the power terminal!") + return + + if(!master || master.can_terminal_dismantle()) + user.visible_message("[user.name] dismantles the power terminal from [master].", \ + "You begin to cut the cables...") + + playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1) + if(do_after(user, 50*W.toolspeed, target = src)) + if(!master || master.can_terminal_dismantle()) + if(prob(50) && electrocute_mob(user, powernet, src, 1, TRUE)) + do_sparks(5, TRUE, master) + return + new /obj/item/stack/cable_coil(loc, 10) + to_chat(user, "You cut the cables and dismantle the power terminal.") + qdel(src) + + +/obj/machinery/power/terminal/attackby(obj/item/W, mob/living/user, params) + if(istype(W, /obj/item/wirecutters)) + dismantle(user, W) + else + return ..() \ No newline at end of file diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index cc564c98d4c..6f1e84da526 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -54,7 +54,7 @@ wires.Interact(user) else - ..() + return ..() /obj/machinery/power/tesla_coil/tesla_act(var/power) if(anchored && !panel_open) diff --git a/code/modules/power/treadmill.dm b/code/modules/power/treadmill.dm index 5a1cc12c701..39c5d732128 100644 --- a/code/modules/power/treadmill.dm +++ b/code/modules/power/treadmill.dm @@ -106,7 +106,7 @@ speed = 0 update_icon() return - ..() + return ..() #undef BASE_MOVE_DELAY #undef MAX_SPEED diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index c38382cb962..6f3c0856406 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -128,7 +128,9 @@ if(exchange_parts(user, I)) return - default_deconstruction_crowbar(I) + if(default_deconstruction_crowbar(I)) + return + return ..() /obj/machinery/power/compressor/CanAtmosPass(turf/T) return !density @@ -283,7 +285,9 @@ if(exchange_parts(user, I)) return - default_deconstruction_crowbar(I) + if(default_deconstruction_crowbar(I)) + return + return ..() /obj/machinery/power/turbine/interact(mob/user) diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index ec7e51b6359..c4f07385aae 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -87,6 +87,8 @@ eject_beaker() default_deconstruction_crowbar(I) return 1 + return + return ..() /obj/machinery/chem_heater/attack_hand(mob/user) ui_interact(user) diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 610778bff37..ced53381c9f 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -343,8 +343,6 @@ else if(istype(I, /obj/item/screwdriver)) if(beaker) - beaker.loc = get_turf(src) - ..() - return + beaker.forceMove(get_turf(src)) else - ..() + return ..() diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index db7a38d88e7..c1e4b89e774 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -21,7 +21,7 @@ /obj/structure/reagent_dispensers/attackby(obj/item/I, mob/user, params) if(I.is_refillable()) return FALSE //so we can refill them via their afterattack. - . = ..() + return ..() /obj/structure/reagent_dispensers/New() create_reagents(tank_volume) @@ -260,6 +260,8 @@ user.visible_message("[user] has secured [src]'s floor casters.", \ "You have secured [src]'s floor casters.") anchored = 1 + return + return ..() /obj/structure/reagent_dispensers/beerkeg name = "beer keg" diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 23d415e0e57..fd94341d93c 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -76,6 +76,8 @@ new /obj/item/c_tube( get_turf(user) ) else to_chat(user, "You need more paper.") + else + return ..() /obj/item/smallDelivery name = "small parcel" @@ -141,6 +143,8 @@ new /obj/item/c_tube( get_turf(user) ) else to_chat(user, "You need more paper.") + else + return ..() /obj/item/stack/packageWrap name = "package wrapper" diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 33fc484dba7..abb20ac091a 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -148,6 +148,8 @@ griefProtection() default_deconstruction_crowbar(O) return 1 + else + return ..() /obj/machinery/r_n_d/server/attack_hand(mob/user as mob) if(disabled) diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index f6df6ece19b..db6a195fe2d 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -131,7 +131,7 @@ monkeys++ to_chat(user, "You feed [O] to [src]. It now has [monkeys] monkey cubes stored.") qdel(O) - return + return else if(istype(O, /obj/item/slimepotion/slime)) var/replaced = FALSE if(user.drop_item()) @@ -140,7 +140,7 @@ replaced = TRUE current_potion = O to_chat(user, "You load [O] in the console's potion slot[replaced ? ", replacing the one that was there before" : ""].") - return + return else if(istype(O, /obj/item/storage/bag)) var/obj/item/storage/P = O var/loaded = 0 @@ -159,7 +159,7 @@ connected_recycler = I.buffer connected_recycler.connected += src return - ..() + return ..() /datum/action/innate/slime_place name = "Place Slimes" diff --git a/code/modules/security_levels/keycard authentication.dm b/code/modules/security_levels/keycard authentication.dm index 25083e6262b..e1e3104e643 100644 --- a/code/modules/security_levels/keycard authentication.dm +++ b/code/modules/security_levels/keycard authentication.dm @@ -48,6 +48,8 @@ broadcast_request() //This is the device making the initial event request. It needs to broadcast to other devices else to_chat(user, "Access denied.") + return + return ..() /obj/machinery/keycard_auth/power_change() if(powered(ENVIRON)) diff --git a/code/modules/spacepods/construction.dm b/code/modules/spacepods/construction.dm index 95c2f31ca56..a6a7ddb0927 100644 --- a/code/modules/spacepods/construction.dm +++ b/code/modules/spacepods/construction.dm @@ -25,8 +25,7 @@ /obj/structure/spacepod_frame/attackby(obj/item/W as obj, mob/user as mob, params) if(!construct || !construct.action(W, user)) - ..() - return + return ..() /obj/structure/spacepod_frame/attack_hand() return diff --git a/code/modules/spacepods/equipment.dm b/code/modules/spacepods/equipment.dm index d509b4f745c..c52eca0b342 100644 --- a/code/modules/spacepods/equipment.dm +++ b/code/modules/spacepods/equipment.dm @@ -159,7 +159,7 @@ enabled = 1 user.show_message("You enable \the [src]'s power.") else - ..() + return ..() /* /////////////////////////////////////// @@ -272,4 +272,4 @@ else to_chat(user, "This key is already ground!") else - ..() + return ..() diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index 8ff937eea6f..5e9de355664 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -45,11 +45,14 @@ var/obj/item/multitool/M = I M.buffer = src to_chat(user, "You save the data in the [I.name]'s buffer.") + return if(exchange_parts(user, I)) return - default_deconstruction_crowbar(I) + if(default_deconstruction_crowbar(I)) + return + return ..() //CARGO TELEPAD// @@ -87,6 +90,8 @@ new /obj/item/stack/sheet/metal(get_turf(src)) new /obj/item/stack/sheet/glass(get_turf(src)) qdel(src) + else + return ..() ///TELEPAD CALLER/// /obj/item/telepad_beacon diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 0f737823d5b..2835a445f1c 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -73,7 +73,7 @@ to_chat(user, "You upload the data from the [W.name]'s buffer.") updateUsrDialog() else - ..() + return ..() /obj/machinery/computer/telescience/emag_act(user as mob) if(!emagged) diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index 8ab87cba4bd51646f7be969a973a99c1c9843c11..7eb6484038cde262ce4a94a8650f468c8067dfc0 100644 GIT binary patch literal 35196 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 Ab^rhX literal 35163 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 OKL&cnx+U69A^#t}8iS|+