diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index 51579b4d88d..a69bfafd630 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -37,8 +37,8 @@ #define EXAMINE_POSITION_BEFORE 2 //End positions #define COMPONENT_EXNAME_CHANGED 1 -#define COMSIG_ATOM_ENTERED "atom_entered" //from base of atom/Entered(): (/atom/movable, /atom) -#define COMSIG_ATOM_EXITED "atom_exited" //from base of atom/Exited(): (/atom/movable) +#define COMSIG_ATOM_ENTERED "atom_entered" //from base of atom/Entered(): (atom/movable/entering, /atom) +#define COMSIG_ATOM_EXITED "atom_exited" //from base of atom/Exited(): (atom/movable/exiting, atom/newloc) #define COMSIG_ATOM_EX_ACT "atom_ex_act" //from base of atom/ex_act(): (severity, target) #define COMSIG_ATOM_EMP_ACT "atom_emp_act" //from base of atom/emp_act(): (severity) #define COMSIG_ATOM_FIRE_ACT "atom_fire_act" //from base of atom/fire_act(): (exposed_temperature, exposed_volume) @@ -54,19 +54,32 @@ #define COMSIG_ATOM_SET_LIGHT "atom_set_light" //from base of atom/set_light(): (l_range, l_power, l_color) #define COMSIG_ATOM_ROTATE "atom_rotate" //from base of atom/shuttleRotate(): (rotation, params) #define COMSIG_ATOM_DIR_CHANGE "atom_dir_change" //from base of atom/setDir(): (old_dir, new_dir) + #define COMSIG_ENTER_AREA "enter_area" //from base of area/Entered(): (/area) #define COMSIG_EXIT_AREA "exit_area" //from base of area/Exited(): (/area) +#define COMSIG_ATOM_CONTENTS_DEL "atom_contents_del" //from base of atom/handle_atom_del(): (atom/deleted) +///////////////// +#define COMSIG_ATOM_ATTACK_GHOST "atom_attack_ghost" //from base of atom/attack_ghost(): (mob/dead/observer/ghost) +#define COMSIG_ATOM_ATTACK_HAND "atom_attack_hand" //from base of atom/attack_hand(): (mob/user) +#define COMSIG_ATOM_ATTACK_PAW "atom_attack_paw" //from base of atom/attack_paw(): (mob/user) + #define COMPONENT_NO_ATTACK_HAND 1 //works on all 3. +///////////////// + #define COMSIG_CLICK "atom_click" //from base of atom/Click(): (location, control, params) #define COMSIG_CLICK_SHIFT "shift_click" //from base of atom/ShiftClick(): (/mob) #define COMSIG_CLICK_CTRL "ctrl_click" //from base of atom/CtrlClickOn(): (/mob) #define COMSIG_CLICK_ALT "alt_click" //from base of atom/AltClick(): (/mob) #define COMSIG_CLICK_CTRL_SHIFT "ctrl_shift_click" //from base of atom/CtrlShiftClick(/mob) +#define COMSIG_MOUSEDROP_ONTO "mousedrop_onto" //from base of atom/MouseDrop(): (/atom/over, /mob/user) + #define COMPONENT_NO_MOUSEDROP 1 +#define COMSIG_MOUSEDROPPED_ONTO "mousedropped_onto" //from base of atom/MouseDrop_T: (/atom/from, /mob/user) // /area signals #define COMSIG_AREA_ENTERED "area_entered" //from base of area/Entered(): (atom/movable/M) #define COMSIG_AREA_EXITED "area_exited" //from base of area/Exited(): (atom/movable/M) + // /atom/movable signals #define COMSIG_MOVABLE_MOVED "movable_moved" //from base of atom/movable/Moved(): (/atom, dir) #define COMSIG_MOVABLE_CROSSED "movable_crossed" //from base of atom/movable/Crossed(): (/atom/movable) @@ -74,13 +87,21 @@ #define COMSIG_MOVABLE_IMPACT "movable_impact" //from base of atom/movable/throw_impact(): (/atom, throwingdatum) #define COMSIG_MOVABLE_BUCKLE "buckle" //from base of atom/movable/buckle_mob(): (mob, force) #define COMSIG_MOVABLE_UNBUCKLE "unbuckle" //from base of atom/movable/unbuckle_mob(): (mob, force) +#define COMSIG_MOVABLE_THROW "movable_throw" //from base of atom/movable/throw_at(): (datum/thrownthing, spin) + +// /obj signals +#define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" //from base of obj/deconstruct(): (disassembled) // /obj/item signals #define COMSIG_ITEM_ATTACK "item_attack" //from base of obj/item/attack(): (/mob/living/target, /mob/living/user) #define COMSIG_ITEM_ATTACK_SELF "item_attack_self" //from base of obj/item/attack_self(): (/mob) #define COMSIG_ITEM_ATTACK_OBJ "item_attack_obj" //from base of obj/item/attack_obj(): (/obj, /mob) + #define COMPONENT_NO_ATTACK_OBJ 1 +#define COMSIG_ITEM_PRE_ATTACK "item_pre_attack" //from base of obj/item/pre_attack(): (atom/target, mob/user, params) + #define COMPONENT_NO_ATTACK 1 #define COMSIG_ITEM_EQUIPPED "item_equip" //from base of obj/item/equipped(): (/mob/equipper, slot) #define COMSIG_ITEM_DROPPED "item_drop" //from base of obj/item/dropped(): (/mob/dropper) +#define COMSIG_ITEM_PICKUP "item_pickup" //from base of obj/item/pickup(): (/mob/taker) // /obj/item/clothing signals #define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): () diff --git a/code/__DEFINES/interaction_flags.dm b/code/__DEFINES/interaction_flags.dm new file mode 100644 index 00000000000..cb41247d4f8 --- /dev/null +++ b/code/__DEFINES/interaction_flags.dm @@ -0,0 +1,22 @@ + +#define INTERACT_ATOM_REQUIRES_ANCHORED 1 //whether can_interact() checks for anchored. only works on movables. +#define INTERACT_ATOM_ATTACK_HAND 2 //calls try_interact() on attack_hand() and returns that. +#define INTERACT_ATOM_UI_INTERACT 4 //automatically calls and returns ui_interact() on interact(). +#define INTERACT_ATOM_REQUIRES_DEXTERITY 8 //user must be dextrous +#define INTERACT_ATOM_IGNORE_INCAPACITATED 16 //ignores incapacitated check +#define INTERACT_ATOM_IGNORE_RESTRAINED 32 //incapacitated check ignores restrained +#define INTERACT_ATOM_CHECK_GRAB 64 //incapacitated check checks grab +#define INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND 128//prevents leaving fingerprints automatically on attack_hand +#define INTERACT_ATOM_NO_FINGERPRINT_INTERACT 256 //adds hiddenprints instead of fingerprints on interact + +#define INTERACT_ITEM_ATTACK_HAND_PICKUP 1 //attempt pickup on attack_hand for items + +#define INTERACT_MACHINE_OPEN 1 //can_interact() while open +#define INTERACT_MACHINE_OFFLINE 2 //can_interact() while offline +#define INTERACT_MACHINE_WIRES_IF_OPEN 4 //try to interact with wires if open +#define INTERACT_MACHINE_ALLOW_SILICON 8 //let silicons interact +#define INTERACT_MACHINE_OPEN_SILICON 16 //let silicons interact while open +#define INTERACT_MACHINE_REQUIRES_SILICON 32 //must be silicon to interact +#define INTERACT_MACHINE_SET_MACHINE 64 //MACHINES HAVE THIS BY DEFAULT, SOMEONE SHOULD RUN THROUGH MACHINES AND REMOVE IT FROM THINGS LIKE LIGHT SWITCHES WHEN POSSIBLE!!-------------------------- + //This flag determines if a machine set_machine's the user when the user uses it, making updateUsrDialog make the user re-call interact() on it. + //THIS FLAG IS ON ALL MACHINES BY DEFAULT, NEEDS TO BE RE-EVALUATED LATER!! diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index b1a065822d5..5fe3df511b1 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -90,6 +90,8 @@ //Silicon mobs #define issilicon(A) (istype(A, /mob/living/silicon)) +#define issiliconoradminghost(A) (istype(A, /mob/living/silicon) || IsAdminGhost(A)) + #define iscyborg(A) (istype(A, /mob/living/silicon/robot)) #define isAI(A) (istype(A, /mob/living/silicon/ai)) diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index ba326b7c912..e491c58cbf6 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -8,6 +8,7 @@ #define DANGEROUS_POSSESSION 16 //Admin possession yes/no #define ON_BLUEPRINTS 32 //Are we visible on the station blueprints at roundstart? #define UNIQUE_RENAME 64 // can you customize the description/name of the thing? +#define USES_TGUI 128 //put on things that use tgui on ui_interact instead of custom/old UI. // If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support diff --git a/code/__DEFINES/wires.dm b/code/__DEFINES/wires.dm index 762beb9c006..35fa37257bc 100644 --- a/code/__DEFINES/wires.dm +++ b/code/__DEFINES/wires.dm @@ -1,3 +1,8 @@ +//retvals for attempt_wires_interaction +#define WIRE_INTERACTION_FAIL 0 +#define WIRE_INTERACTION_SUCCESSFUL 1 +#define WIRE_INTERACTION_BLOCK 2 //don't do anything else rather than open wires and whatever else. + #define WIRE_DUD_PREFIX "__dud" #define WIRE_ACTIVATE "Activate" #define WIRE_AI "AI Connection" diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 0a212e36a1f..d4cc983805d 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -539,7 +539,7 @@ Turf and target are separate in case you want to teleport some distance from a t return assembled /atom/proc/GetAllContentsIgnoring(list/ignore_typecache) - if(!ignore_typecache) + if(!length(ignore_typecache)) return GetAllContents() var/list/processing = list(src) var/list/assembled = list() diff --git a/code/__HELPERS/view.dm b/code/__HELPERS/view.dm index 85819a5ef09..48e68be20fb 100644 --- a/code/__HELPERS/view.dm +++ b/code/__HELPERS/view.dm @@ -9,4 +9,10 @@ var/list/viewrangelist = splittext(view,"x") viewX = text2num(viewrangelist[1]) viewY = text2num(viewrangelist[2]) - return list(viewX, viewY) \ No newline at end of file + return list(viewX, viewY) + +/proc/in_view_range(mob/user, atom/A) + var/list/view_range = getviewsize(user.client.view) + var/turf/source = get_turf(user) + var/turf/target = get_turf(A) + return ISINRANGE(target.x, source.x - view_range[1], source.x + view_range[1]) && ISINRANGE(target.y, source.y - view_range[1], source.y + view_range[1]) diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 8e973adf281..18ac7c34d85 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -1,7 +1,11 @@ //#define TESTING //By using the testing("message") proc you can create debug-feedback for people with this //uncommented, but not visible in the release version) +//#define DATUMVAR_DEBUGGING_MODE //Enables the ability to cache datum vars and retrieve later for debugging which vars changed. + #ifdef TESTING +#define DATUMVAR_DEBUGGING_MODE + //#define GC_FAILURE_HARD_LOOKUP //makes paths that fail to GC call find_references before del'ing. //implies FIND_REF_NO_CHECK_TICK diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm new file mode 100644 index 00000000000..90c747e1d1f --- /dev/null +++ b/code/_globalvars/bitfields.dm @@ -0,0 +1,111 @@ +GLOBAL_LIST_INIT(bitfields, list( + "obj_flags" = list( + "EMAGGED" = EMAGGED, + "IN_USE" = IN_USE, + "CAN_BE_HIT" = CAN_BE_HIT, + "BEING_SHOCKED" = BEING_SHOCKED, + "DANGEROUS_POSSESSION" = DANGEROUS_POSSESSION, + "ON_BLUEPRINTS" = ON_BLUEPRINTS, + "UNIQUE_RENAME" = UNIQUE_RENAME, + "USES_TGUI" = USES_TGUI + ), + "datum_flags" = list( + "DF_USE_TAG" = DF_USE_TAG, + "DF_VAR_EDITED" = DF_VAR_EDITED + ), + "item_flags" = list( + "BEING_REMOVED" = BEING_REMOVED, + "IN_INVENTORY" = IN_INVENTORY, + "FORCE_STRING_OVERRIDE" = FORCE_STRING_OVERRIDE, + "NEEDS_PERMIT" = NEEDS_PERMIT + ), + "admin_flags" = list( + "BUILDMODE" = R_BUILDMODE, + "ADMIN" = R_ADMIN, + "BAN" = R_BAN, + "FUN" = R_FUN, + "SERVER" = R_SERVER, + "DEBUG" = R_DEBUG, + "POSSESS" = R_POSSESS, + "PERMISSIONS" = R_PERMISSIONS, + "STEALTH" = R_STEALTH, + "POLL" = R_POLL, + "VAREDIT" = R_VAREDIT, + "SOUNDS" = R_SOUNDS, + "SPAWN" = R_SPAWN, + "AUTOLOGIN" = R_AUTOLOGIN, + "DBRANKS" = R_DBRANKS + ), + "interaction_flags_atom" = list( + "INTERACT_ATOM_REQUIRES_ANCHORED" = INTERACT_ATOM_REQUIRES_ANCHORED, + "INTERACT_ATOM_ATTACK_HAND" = INTERACT_ATOM_ATTACK_HAND, + "INTERACT_ATOM_UI_INTERACT" = INTERACT_ATOM_UI_INTERACT, + "INTERACT_ATOM_REQUIRES_DEXTERITY" = INTERACT_ATOM_REQUIRES_DEXTERITY, + "INTERACT_ATOM_IGNORE_INCAPACITATED" = INTERACT_ATOM_IGNORE_INCAPACITATED, + "INTERACT_ATOM_IGNORE_RESTRAINED" = INTERACT_ATOM_IGNORE_RESTRAINED, + "INTERACT_ATOM_CHECK_GRAB" = INTERACT_ATOM_CHECK_GRAB, + "INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND" = INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND, + "INTERACT_ATOM_NO_FINGERPRINT_INTERACT" = INTERACT_ATOM_NO_FINGERPRINT_INTERACT + ), + "interaction_flags_machine" = list( + "INTERACT_MACHINE_OPEN" = INTERACT_MACHINE_OPEN, + "INTERACT_MACHINE_OFFLINE" = INTERACT_MACHINE_OFFLINE, + "INTERACT_MACHINE_WIRES_IF_OPEN" = INTERACT_MACHINE_WIRES_IF_OPEN, + "INTERACT_MACHINE_ALLOW_SILICON" = INTERACT_MACHINE_ALLOW_SILICON, + "INTERACT_MACHINE_OPEN_SILICON" = INTERACT_MACHINE_OPEN_SILICON, + "INTERACT_MACHINE_REQUIRES_SILICON" = INTERACT_MACHINE_REQUIRES_SILICON + ), + "pass_flags" = list( + "PASSTABLE" = PASSTABLE, + "PASSGLASS" = PASSGLASS, + "PASSGRILLE" = PASSGRILLE, + "PASSBLOB" = PASSBLOB, + "PASSMOB" = PASSMOB, + "PASSCLOSEDTURF" = PASSCLOSEDTURF, + "LETPASSTHROW" = LETPASSTHROW + ), + "movement_type" = list( + "GROUND" = GROUND, + "FLYING" = FLYING + ), + "resistance_flags" = list( + "LAVA_PROOF" = LAVA_PROOF, + "FIRE_PROOF" = FIRE_PROOF, + "FLAMMABLE" = FLAMMABLE, + "ON_FIRE" = ON_FIRE, + "UNACIDABLE" = UNACIDABLE, + "ACID_PROOF" = ACID_PROOF, + "INDESTRUCTIBLE" = INDESTRUCTIBLE, + "FREEZE_PROOF" = FREEZE_PROOF + ), + "reagents_holder_flags" = list( + "REAGENT_NOREACT" = REAGENT_NOREACT + ), + "flags_1" = list( + "STOPSPRESSUREDMAGE_1 / NOJAUNT_1 (turfs)" = STOPSPRESSUREDMAGE_1, + "NODROP_1 / UNUSED_TRANSIT_TURF_1 (turfs)" = NODROP_1, + "NOBLUDGEON_1 / CAN_BE_DIRTY_1 (turfs)" = NOBLUDGEON_1, + "MASKINTERNALS_1" = MASKINTERNALS_1, + "HEAR_1 / NO_DEATHRATTLE_1 (turfs)" = HEAR_1, + "CHECK_RICOCHET_1 / NO_RUINS_1 (turfs)" = CHECK_RICOCHET_1, + "CONDUCT_1 / NO_LAVA_GEN_1" = CONDUCT_1, + "ABSTRACT_1" = ABSTRACT_1, + "NODECONSTRUCT_1" = NODECONSTRUCT_1, + "OVERLAY_QUEUED_1" = OVERLAY_QUEUED_1, + "NOSLIP_1" = NOSLIP_1 + ), + "flags_2" = list( + "SLOWS_WHILE_IN_HAND_2" = SLOWS_WHILE_IN_HAND_2, + "NO_EMP_WIRES_2" = NO_EMP_WIRES_2, + "HOLOGRAM_2" = HOLOGRAM_2, + "FRONZE_2" = FROZEN_2, + "STATIONLOVING_2" = STATIONLOVING_2, + "INFORM_ADMINS_ON_RELOCATE_2" = INFORM_ADMINS_ON_RELOCATE_2, + "BANG_PROTECT_2" = BANG_PROTECT_2, + "HEALS_EARS_2" = HEALS_EARS_2, + "OMNITONGUE_2" = OMNITONGUE_2, + "TESLA_IGNORE_2" = TESLA_IGNORE_2, + "NO_MAT_REDEMPTION_2" = NO_MAT_REDEMPTION_2, + "LAVA_PROTECT_2" = LAVA_PROTECT_2 + ) + )) diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index 7a5c95d690c..2415c1fea39 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -18,10 +18,3 @@ GLOBAL_LIST_EMPTY(powernets) GLOBAL_VAR_INIT(bsa_unlock, FALSE) //BSA unlocked by head ID swipes GLOBAL_LIST_EMPTY(player_details) // ckey -> /datum/player_details - -GLOBAL_LIST_INIT(bitfields, list( - "obj_flags" = list("EMAGGED" = EMAGGED, "IN_USE" = IN_USE, "CAN_BE_HIT" = CAN_BE_HIT, "BEING_SHOCKED" = BEING_SHOCKED, "DANGEROUS_POSSESSION" = DANGEROUS_POSSESSION, "ON_BLUEPRINTS" = ON_BLUEPRINTS, "UNIQUE_RENAME" = UNIQUE_RENAME), - "datum_flags" = list("DF_USE_TAG" = DF_USE_TAG, "DF_VAR_EDITED" = DF_VAR_EDITED), - "item_flags" = list("BEING_REMOVED" = BEING_REMOVED, "IN_INVENTORY" = IN_INVENTORY, "FORCE_STRING_OVERRIDE" = FORCE_STRING_OVERRIDE, "NEEDS_PERMIT" = NEEDS_PERMIT), - "admin_flags" = list("BUILDMODE" = R_BUILDMODE, "ADMIN" = R_ADMIN, "BAN" = R_BAN, "FUN" = R_FUN, "SERVER" = R_SERVER, "DEBUG" = R_DEBUG, "POSSESS" = R_POSSESS, "PERMISSIONS" = R_PERMISSIONS, "STEALTH" = R_STEALTH, "POLL" = R_POLL, "VAREDIT" = R_VAREDIT, "SOUNDS" = R_SOUNDS, "SPAWN" = R_SPAWN, "AUTOLOGIN" = R_AUTOLOGIN, "DBRANKS" = R_DBRANKS) - )) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index f72754566d5..b94d75859e0 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -189,23 +189,13 @@ return FALSE /atom/movable/proc/DirectAccess(atom/target) - if(target == src) - return TRUE - if(target == loc) - return TRUE + return (target == src || target == loc) /mob/DirectAccess(atom/target) - if(..()) - return TRUE - if(target in contents) //This could probably use moving down and restricting to inventory only - return TRUE - return FALSE + return (..() || (target in contents)) /mob/living/DirectAccess(atom/target) - if(..()) //Lightweight checks first - return TRUE - if(target in GetAllContents()) - return TRUE + return (..() || (target in GetAllContents())) /atom/proc/AllowClick() return FALSE @@ -497,7 +487,7 @@ if(client && client.click_intercept) if(call(client.click_intercept, "InterceptClickOn")(src, params, A)) return TRUE - + //Mob level intercept if(click_intercept) if(call(click_intercept, "InterceptClickOn")(src, params, A)) diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 95f1a509683..36b363db561 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -55,35 +55,35 @@ var/obj/item/W = get_active_held_item() - if(!W && get_dist(src,A) <= remote_range) + if(!W && get_dist(src,A) <= interaction_range) A.attack_robot(src) return - // buckled cannot prevent machine interlinking but stops arm movement - if( buckled || incapacitated()) - return + if(W) + // buckled cannot prevent machine interlinking but stops arm movement + if( buckled || incapacitated()) + return - if(W == A) - W.attack_self(src) - return + if(W == A) + W.attack_self(src) + return - // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents) - if(A == loc || (A in loc) || (A in contents)) - W.melee_attack_chain(src, A, params) - return - - if(!isturf(loc)) - return - - // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc && isturf(A.loc.loc)) - if(isturf(A) || isturf(A.loc)) - if(A.Adjacent(src)) // see adjacent.dm + // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents) + if(A == loc || (A in loc) || (A in contents)) W.melee_attack_chain(src, A, params) return - else - W.afterattack(A, src, 0, params) + + if(!isturf(loc)) return - return + + // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc && isturf(A.loc.loc)) + if(isturf(A) || isturf(A.loc)) + if(A.Adjacent(src)) // see adjacent.dm + W.melee_attack_chain(src, A, params) + return + else + W.afterattack(A, src, 0, params) + return //Middle click cycles through selected modules. /mob/living/silicon/robot/MiddleClickOn(atom/A) @@ -105,7 +105,7 @@ CtrlShiftClick(user) /obj/machinery/door/airlock/BorgCtrlShiftClick(mob/living/silicon/robot/user) // Sets/Unsets Emergency Access Override Forwards to AI code. - if(get_dist(src,user) <= user.remote_range) + if(get_dist(src,user) <= user.interaction_range) AICtrlShiftClick() else ..() @@ -115,7 +115,7 @@ ShiftClick(user) /obj/machinery/door/airlock/BorgShiftClick(mob/living/silicon/robot/user) // Opens and closes doors! Forwards to AI code. - if(get_dist(src,user) <= user.remote_range) + if(get_dist(src,user) <= user.interaction_range) AIShiftClick() else ..() @@ -125,19 +125,19 @@ CtrlClick(user) /obj/machinery/door/airlock/BorgCtrlClick(mob/living/silicon/robot/user) // Bolts doors. Forwards to AI code. - if(get_dist(src,user) <= user.remote_range) + if(get_dist(src,user) <= user.interaction_range) AICtrlClick() else ..() /obj/machinery/power/apc/BorgCtrlClick(mob/living/silicon/robot/user) // turns off/on APCs. Forwards to AI code. - if(get_dist(src,user) <= user.remote_range) + if(get_dist(src,user) <= user.interaction_range) AICtrlClick() else ..() /obj/machinery/turretid/BorgCtrlClick(mob/living/silicon/robot/user) //turret control on/off. Forwards to AI code. - if(get_dist(src,user) <= user.remote_range) + if(get_dist(src,user) <= user.interaction_range) AICtrlClick() else ..() @@ -147,13 +147,13 @@ return /obj/machinery/door/airlock/BorgAltClick(mob/living/silicon/robot/user) // Eletrifies doors. Forwards to AI code. - if(get_dist(src,user) <= user.remote_range) + if(get_dist(src,user) <= user.interaction_range) AIAltClick() else ..() /obj/machinery/turretid/BorgAltClick(mob/living/silicon/robot/user) //turret lethal on/off. Forwards to AI code. - if(get_dist(src,user) <= user.remote_range) + if(get_dist(src,user) <= user.interaction_range) AIAltClick() else ..() diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm index 3d62cdd0ac0..94537bd9e4f 100644 --- a/code/_onclick/drag_drop.dm +++ b/code/_onclick/drag_drop.dm @@ -8,6 +8,8 @@ /atom/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) if(!usr || !over) return + if(SendSignal(COMSIG_MOUSEDROP_ONTO, over, usr) & COMPONENT_NO_MOUSEDROP) //Whatever is recieving will verify themselves for adjacency. + return if(over == src) return usr.client.Click(src, src_location, src_control, params) if(!Adjacent(usr) || !over.Adjacent(usr)) @@ -18,4 +20,5 @@ // recieve a mousedrop /atom/proc/MouseDrop_T(atom/dropping, mob/user) + SendSignal(COMSIG_MOUSEDROPPED_ONTO, dropping, user) return diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 1fc40d3007b..6ca2ff847b8 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -1,6 +1,6 @@ /obj/item/proc/melee_attack_chain(mob/user, atom/target, params) - if(!tool_attack_chain(user, target) && pre_attackby(target, user, params)) + if(!tool_attack_chain(user, target) && pre_attack(target, user, params)) // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example) var/resolved = target.attackby(src, user, params) if(!resolved && target && !QDELETED(src)) @@ -20,7 +20,9 @@ SendSignal(COMSIG_ITEM_ATTACK_SELF, user) interact(user) -/obj/item/proc/pre_attackby(atom/A, mob/living/user, params) //do stuff before attackby! +/obj/item/proc/pre_attack(atom/A, mob/living/user, params) //do stuff before attackby! + if(SendSignal(COMSIG_ITEM_PRE_ATTACK, A, user, params) & COMPONENT_NO_ATTACK) + return FALSE return TRUE //return FALSE to avoid calling attackby after this proc does stuff // No comment @@ -75,7 +77,8 @@ //the equivalent of the standard version of attack() but for object targets. /obj/item/proc/attack_obj(obj/O, mob/living/user) - SendSignal(COMSIG_ITEM_ATTACK_OBJ, O, user) + if(SendSignal(COMSIG_ITEM_ATTACK_OBJ, O, user) & COMPONENT_NO_ATTACK_OBJ) + return if(flags_1 & NOBLUDGEON_1) return user.changeNext_move(CLICK_CD_MELEE) diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index 19c933952c9..e7ec2255ae0 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -48,17 +48,19 @@ // Oh by the way this didn't work with old click code which is why clicking shit didn't spam you /atom/proc/attack_ghost(mob/dead/observer/user) + if(SendSignal(COMSIG_ATOM_ATTACK_GHOST, user) & COMPONENT_NO_ATTACK_HAND) + return TRUE if(user.client) if(IsAdminGhost(user)) attack_ai(user) else if(user.client.prefs.inquisitive_ghost) user.examinate(src) + return FALSE /mob/living/attack_ghost(mob/dead/observer/user) if(user.client && user.health_scan) healthscan(user, src, 1, TRUE) - return - ..() + return ..() // --------------------------------------- // And here are some good things for free: @@ -69,17 +71,16 @@ user.forceMove(awaygate.loc) else to_chat(user, "[src] has no destination.") + return ..() /obj/machinery/gateway/centeraway/attack_ghost(mob/user) if(stationgate) user.forceMove(stationgate.loc) else to_chat(user, "[src] has no destination.") - -/obj/item/storage/attack_ghost(mob/user) - orient2hud(user) - show_to(user) + return ..() /obj/machinery/teleport/hub/attack_ghost(mob/user) if(power_station && power_station.engaged && power_station.teleporter_console && power_station.teleporter_console.target) user.forceMove(get_turf(power_station.teleporter_console.target)) + return ..() diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 187fa45c455..e75501271be 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -27,13 +27,50 @@ SendSignal(COMSIG_HUMAN_MELEE_UNARMED_ATTACK, A) A.attack_hand(src) - SendSignal(COMSIG_HUMAN_MELEE_UNARMED_ATTACKBY, src) +//Return TRUE to cancel other attack hand effects that respect it. /atom/proc/attack_hand(mob/user) - return + . = FALSE + if(!(interaction_flags_atom & INTERACT_ATOM_NO_FINGERPRINT_ATTACK_HAND)) + add_fingerprint(user) + if(SendSignal(COMSIG_ATOM_ATTACK_HAND, user) & COMPONENT_NO_ATTACK_HAND) + . = TRUE + if(interaction_flags_atom & INTERACT_ATOM_ATTACK_HAND) + . = _try_interact(user) + +//Return a non FALSE value to cancel whatever called this from propagating, if it respects it. +/atom/proc/_try_interact(mob/user) + if(IsAdminGhost(user)) //admin abuse + return interact(user) + if(can_interact(user)) + return interact(user) + return FALSE + +/atom/proc/can_interact(mob/user) + if(!user.can_interact_with(src)) + return FALSE + if((interaction_flags_atom & INTERACT_ATOM_REQUIRES_DEXTERITY) && !user.IsAdvancedToolUser()) + to_chat(user, "You don't have the dexterity to do this!") + return FALSE + if(!(interaction_flags_atom & INTERACT_ATOM_IGNORE_INCAPACITATED) && user.incapacitated((interaction_flags_atom & INTERACT_ATOM_IGNORE_RESTRAINED), !(interaction_flags_atom & INTERACT_ATOM_CHECK_GRAB))) + return FALSE + return TRUE + +/atom/movable/can_interact(mob/user) + . = ..() + if(!.) + return + if(!anchored && (interaction_flags_atom & INTERACT_ATOM_REQUIRES_ANCHORED)) + return FALSE /atom/proc/interact(mob/user) - return + if(interaction_flags_atom & INTERACT_ATOM_NO_FINGERPRINT_INTERACT) + add_hiddenprint(user) + else + add_fingerprint(user) + if(interaction_flags_atom & INTERACT_ATOM_UI_INTERACT) + return ui_interact(user) + return FALSE /* /mob/living/carbon/human/RestrainedClickOn(var/atom/A) ---carbons will handle this @@ -72,8 +109,11 @@ */ /mob/living/carbon/monkey/UnarmedAttack(atom/A) A.attack_paw(src) + /atom/proc/attack_paw(mob/user) - return + if(SendSignal(COMSIG_ATOM_ATTACK_PAW, user) & COMPONENT_NO_ATTACK_HAND) + return TRUE + return FALSE /* Monkey RestrainedClickOn() was apparently the @@ -115,9 +155,11 @@ */ /mob/living/carbon/alien/UnarmedAttack(atom/A) A.attack_alien(src) + /atom/proc/attack_alien(mob/living/carbon/alien/user) attack_paw(user) return + /mob/living/carbon/alien/RestrainedClickOn(atom/A) return diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index ce07b7ebb26..eb5f623035c 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -104,9 +104,6 @@ qdel(src) return -/obj/item/tk_grab/attack_hand(mob/user) - return - /obj/item/tk_grab/attack_self(mob/user) if(!focus) return diff --git a/code/controllers/subsystem/npcpool.dm b/code/controllers/subsystem/npcpool.dm index c5c7eed93b7..67e31b6931a 100644 --- a/code/controllers/subsystem/npcpool.dm +++ b/code/controllers/subsystem/npcpool.dm @@ -31,4 +31,4 @@ SUBSYSTEM_DEF(npcpool) if(SA.stat != DEAD) SA.handle_automated_speech() if (MC_TICK_CHECK) - return \ No newline at end of file + return diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index 791a334b55c..1b17414cc38 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -171,7 +171,7 @@ SUBSYSTEM_DEF(persistence) /datum/controller/subsystem/persistence/proc/SetUpTrophies(list/trophy_items) for(var/A in GLOB.trophy_cases) var/obj/structure/displaycase/trophy/T = A - if (T.showpiece) + if (T.showpiece) continue T.added_roundstart = TRUE @@ -275,7 +275,7 @@ SUBSYSTEM_DEF(persistence) /datum/controller/subsystem/persistence/proc/CollectAntagReputation() var/ANTAG_REP_MAXIMUM = CONFIG_GET(number/antag_rep_maximum) - + for(var/p_ckey in antag_rep_change) // var/start = antag_rep[p_ckey] antag_rep[p_ckey] = max(0, min(antag_rep[p_ckey]+antag_rep_change[p_ckey], ANTAG_REP_MAXIMUM)) diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm index 301d5b086cd..0716d35ffb6 100644 --- a/code/datums/brain_damage/special.dm +++ b/code/datums/brain_damage/special.dm @@ -95,6 +95,7 @@ . = ..() QDEL_IN(src, 300) +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/effect/hallucination/simple/bluespace_stream/attack_hand(mob/user) if(user != seer || !linked_to) return diff --git a/code/datums/datum.dm b/code/datums/datum.dm index d07890275dd..793d9f2a4bf 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -10,6 +10,10 @@ var/last_find_references = 0 #endif +#ifdef DATUMVAR_DEBUGGING_MODE + var/list/cached_vars +#endif + // Default implementation of clean-up code. // This should be overridden to remove all references pointing to the object being destroyed. // Return the appropriate QDEL_HINT; in most cases this is QDEL_HINT_QUEUE. @@ -38,3 +42,30 @@ dc.Cut() return QDEL_HINT_QUEUE + +#ifdef DATUMVAR_DEBUGGING_MODE +/datum/proc/save_vars() + cached_vars = list() + for(var/i in vars) + if(i == "cached_vars") + continue + cached_vars[i] = vars[i] + +/datum/proc/check_changed_vars() + . = list() + for(var/i in vars) + if(i == "cached_vars") + continue + if(cached_vars[i] != vars[i]) + .[i] = list(cached_vars[i], vars[i]) + +/datum/proc/txt_changed_vars() + var/list/l = check_changed_vars() + var/t = "[src]([REF(src)]) changed vars:" + for(var/i in l) + t += "\"[i]\" \[[l[i][1]]\] --> \[[l[i][2]]\] " + t += "." + +/datum/proc/to_chat_check_changed_vars(target = world) + to_chat(target, txt_changed_vars()) +#endif diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 853d2dbafce..e5e13f597f2 100755 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -87,7 +87,7 @@ var/number = backpack_contents[path] if(!isnum(number))//Default to 1 number = 1 - for(var/i=0,i[src] is empty.") + else + to_chat(user, "[src] is empty.") /obj/machinery/pdapainter/verb/ejectpda() diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 7b31c502e47..b24636334d2 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -92,6 +92,8 @@ Class Procs: pressure_resistance = 15 max_integrity = 200 + interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT + var/stat = 0 var/use_power = IDLE_POWER_USE //0 = dont run the auto @@ -107,11 +109,11 @@ Class Procs: var/critical_machine = FALSE //If this machine is critical to station operation and should have the area be excempted from power failures. var/list/occupant_typecache //if set, turned into typecache in Initialize, other wise, defaults to mob/living typecache var/atom/movable/occupant = null - var/interact_open = FALSE // Can the machine be interacted with when in maint/when the panel is open. - var/interact_offline = FALSE // Can the machine be interacted with while de-powered. var/speed_process = FALSE // Process as fast as possible? var/obj/item/circuitboard/circuit // Circuit to be created and inserted when the machinery is created + var/interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_SET_MACHINE + /obj/machinery/Initialize() if(!armor) armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70) @@ -155,7 +157,7 @@ Class Procs: new /obj/effect/temp_visual/emp(loc) ..() -/obj/machinery/proc/open_machine(drop = 1) +/obj/machinery/proc/open_machine(drop = TRUE) state_open = TRUE density = FALSE if(drop) @@ -207,25 +209,29 @@ Class Procs: /obj/machinery/proc/is_operational() return !(stat & (NOPOWER|BROKEN|MAINT)) -/obj/machinery/proc/is_interactable() - if((stat & (NOPOWER|BROKEN)) && !interact_offline) +/obj/machinery/can_interact(mob/user) + var/silicon = issiliconoradminghost(user) + if((stat & (NOPOWER|BROKEN)) && !(interaction_flags_machine & INTERACT_MACHINE_OFFLINE)) return FALSE - if(panel_open && !interact_open) + if(panel_open && !(interaction_flags_machine & INTERACT_MACHINE_OPEN)) + if(!silicon || !(interaction_flags_machine & INTERACT_MACHINE_OPEN_SILICON)) + return FALSE + if(!silicon && (interaction_flags_machine & INTERACT_MACHINE_REQUIRES_SILICON)) + return FALSE + else if(silicon && !(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON)) return FALSE return TRUE - //////////////////////////////////////////////////////////////////////////////////////////// +//Return a non FALSE value to interrupt attack_hand propagation to subtypes. /obj/machinery/interact(mob/user, special_state) - add_fingerprint(user) - if(special_state) - ui_interact(user, state = special_state) - else - ui_interact(user) + if(interaction_flags_machine & INTERACT_MACHINE_SET_MACHINE) + user.set_machine(src) + . = ..() /obj/machinery/ui_status(mob/user) - if(is_interactable()) + if(can_interact(user)) return ..() return UI_CLOSE @@ -235,18 +241,15 @@ Class Procs: /obj/machinery/Topic(href, href_list) ..() - if(!is_interactable()) + if(!can_interact(usr)) return 1 if(!usr.canUseTopic(src)) return 1 add_fingerprint(usr) return 0 - //////////////////////////////////////////////////////////////////////////////////////////// - - /obj/machinery/attack_paw(mob/living/user) if(user.a_intent != INTENT_HARM) return attack_hand(user) @@ -256,32 +259,23 @@ Class Procs: user.visible_message("[user.name] smashes against \the [src.name] with its paws.", null, null, COMBAT_MESSAGE_RANGE) take_damage(4, BRUTE, "melee", 1) +/obj/machinery/attack_robot(mob/user) + if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user)) + return FALSE + return _try_interact(user) /obj/machinery/attack_ai(mob/user) + if(!(interaction_flags_machine & INTERACT_MACHINE_ALLOW_SILICON) && !IsAdminGhost(user)) + return FALSE if(iscyborg(user))// For some reason attack_robot doesn't work - var/mob/living/silicon/robot/R = user - if(R.client && R.client.eye == R && !R.low_power_mode)// This is to stop robots from using cameras to remotely control machines; and from using machines when the borg has no power. - return attack_hand(user) + return attack_robot(user) else - return attack_hand(user) + return _try_interact(user) - -//set_machine must be 0 if clicking the machinery doesn't bring up a dialog -/obj/machinery/attack_hand(mob/user, check_power = 1, set_machine = 1) - if(..())// unbuckling etc - return 1 - if((user.lying || user.stat) && !IsAdminGhost(user)) - return 1 - if(!user.IsAdvancedToolUser() && !IsAdminGhost(user)) - to_chat(usr, "You don't have the dexterity to do this!") - return 1 - if(!is_interactable()) - return 1 - if(set_machine) - user.set_machine(src) - interact(user) - add_fingerprint(user) - return 0 +/obj/machinery/_try_interact(mob/user) + if((interaction_flags_machine & INTERACT_MACHINE_WIRES_IF_OPEN) && panel_open && (attempt_wire_interaction(user) == WIRE_INTERACTION_BLOCK)) + return TRUE + return ..() /obj/machinery/CheckParts(list/parts_list) ..() @@ -431,8 +425,8 @@ Class Procs: display_parts(user) if(shouldplaysound) W.play_rped_sound() - return 1 - return 0 + return TRUE + return FALSE /obj/machinery/proc/display_parts(mob/user) to_chat(user, "It contains the following parts:") diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index c9d0eb02926..253f18f7172 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -30,12 +30,7 @@ else icon_state = "ai-slipper1" -/obj/machinery/ai_slipper/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/ai_slipper/attack_hand(mob/user) - if(stat & (NOPOWER|BROKEN)) - return +/obj/machinery/ai_slipper/interact(mob/user) if(!allowed(user)) to_chat(user, "Access denied.") return diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm index 60f87b456d0..a04b86a5d81 100644 --- a/code/game/machinery/airlock_control.dm +++ b/code/game/machinery/airlock_control.dm @@ -113,6 +113,9 @@ icon_state = "airlock_sensor_off" /obj/machinery/airlock_sensor/attack_hand(mob/user) + . = ..() + if(.) + return var/datum/signal/signal = new(list( "tag" = master_tag, "command" = "cycle" diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index 5206ac957bc..63b22a6498a 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -100,7 +100,8 @@ GLOBAL_LIST_EMPTY(announcement_systems) //config stuff -/obj/machinery/announcement_system/interact(mob/user) +/obj/machinery/announcement_system/ui_interact(mob/user) + . = ..() if(!user.canUseTopic(src, !issilicon(user))) return if(stat & BROKEN) @@ -117,6 +118,8 @@ GLOBAL_LIST_EMPTY(announcement_systems) popup.open() /obj/machinery/announcement_system/Topic(href, href_list) + if(..()) + return if(!usr.canUseTopic(src, !issilicon(usr))) return if(stat & BROKEN) diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm index 53b5277abda..8445f62d977 100644 --- a/code/game/machinery/aug_manipulator.dm +++ b/code/game/machinery/aug_manipulator.dm @@ -101,22 +101,24 @@ update_icon() /obj/machinery/aug_manipulator/attack_hand(mob/user) - if(!..()) - add_fingerprint(user) + . = ..() + if(.) + return + add_fingerprint(user) - if(storedpart) - var/augstyle = input(user, "Select style.", "Augment Custom Fitting") as null|anything in style_list_icons - if(!augstyle) - return - if(!in_range(src, user)) - return - if(!storedpart) - return - storedpart.icon = style_list_icons[augstyle] - eject_part(user) + if(storedpart) + var/augstyle = input(user, "Select style.", "Augment Custom Fitting") as null|anything in style_list_icons + if(!augstyle) + return + if(!in_range(src, user)) + return + if(!storedpart) + return + storedpart.icon = style_list_icons[augstyle] + eject_part(user) - else - to_chat(user, "\The [src] is empty.") + else + to_chat(user, "\The [src] is empty.") /obj/machinery/aug_manipulator/proc/eject_part(mob/living/user) if(storedpart) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index ff90d9f8347..c2e98193ad0 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -57,7 +57,8 @@ QDEL_NULL(wires) return ..() -/obj/machinery/autolathe/interact(mob/user) +/obj/machinery/autolathe/ui_interact(mob/user) + . = ..() if(!is_operational()) return diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm index 6be865788bf..dc79cf14061 100644 --- a/code/game/machinery/bank_machine.dm +++ b/code/game/machinery/bank_machine.dm @@ -55,10 +55,8 @@ /obj/machinery/computer/bank_machine/get_spans() . = ..() | SPAN_ROBOT -/obj/machinery/computer/bank_machine/attack_hand(mob/user) - if(..()) - return - src.add_fingerprint(usr) +/obj/machinery/computer/bank_machine/ui_interact(mob/user) + . = ..() var/dat = "[station_name()] secure vault. Authorized personnel only.
" dat += "Current Balance: [SSshuttle.points] credits.
" if(!siphoning) diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index a3168baf545..84ed3d457cc 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -16,7 +16,6 @@ idle_power_usage = 2 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - /obj/machinery/button/Initialize(mapload, ndir = 0, built = 0) . = ..() if(built) @@ -98,7 +97,7 @@ return if(user.a_intent != INTENT_HARM && !(W.flags_1 & NOBLUDGEON_1)) - return src.attack_hand(user) + return attack_hand(user) else return ..() @@ -114,6 +113,9 @@ if(!panel_open) return attack_hand(user) +/obj/machinery/button/attack_robot(mob/user) + return attack_ai(user) + /obj/machinery/button/proc/setup_device() if(id && istype(device, /obj/item/device/assembly/control)) var/obj/item/device/assembly/control/A = device @@ -121,9 +123,12 @@ initialized_button = 1 /obj/machinery/button/attack_hand(mob/user) + . = ..() + if(.) + return if(!initialized_button) setup_device() - src.add_fingerprint(user) + add_fingerprint(user) if(panel_open) if(device || board) if(device) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 6bcbf1e994b..3ccf7efef00 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -79,6 +79,9 @@ updateicon() /obj/machinery/cell_charger/attack_hand(mob/user) + . = ..() + if(.) + return if(!charging) return diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index a158957ecbb..3d827744e17 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -18,12 +18,8 @@ else return ..() -/obj/machinery/computer/aifixer/attack_hand(mob/user) - if(..()) - return - interact(user) - -/obj/machinery/computer/aifixer/interact(mob/user) +/obj/machinery/computer/aifixer/ui_interact(mob/user) + . = ..() var/dat = "" @@ -104,6 +100,7 @@ playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, 0) active = TRUE add_fingerprint(usr) + updateUsrDialog() /obj/machinery/computer/aifixer/update_icon() ..() diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index d8ee305c917..c99af5e2bb6 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -46,7 +46,8 @@ /obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/APC) return APC.z == z && !APC.malfhack && !APC.aidisabled && !(APC.obj_flags & EMAGGED) && !APC.stat && !istype(APC.area, /area/ai_monitored) && !APC.area.outdoors -/obj/machinery/computer/apc_control/interact(mob/living/user) +/obj/machinery/computer/apc_control/ui_interact(mob/living/user) + . = ..() var/dat if(authenticated) if(!checking_logs) @@ -184,7 +185,7 @@ log_activity("checked APCs") if(href_list["clear_logs"]) logs = list() - interact(usr) //Refresh the UI after a filter changes + ui_interact(usr) //Refresh the UI after a filter changes /obj/machinery/computer/apc_control/emag_act(mob/user) if(!authenticated) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 566df0b6c20..d129ebc233f 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -134,10 +134,8 @@ enemy_name = replacetext((name_part1 + name_part2), "the ", "") name = (name_action + name_part1 + name_part2) -/obj/machinery/computer/arcade/battle/attack_hand(mob/user) - if(..()) - return - user.set_machine(src) +/obj/machinery/computer/arcade/battle/ui_interact(mob/user) + . = ..() var/dat = "Close" dat += "

[enemy_name]

" @@ -404,13 +402,11 @@ spaceport_freebie = 0 last_spaceport_action = "" -/obj/machinery/computer/arcade/orion_trail/attack_hand(mob/user) - if(..()) - return +/obj/machinery/computer/arcade/orion_trail/ui_interact(mob/user) + . = ..() if(fuel <= 0 || food <=0 || settlers.len == 0) gameStatus = ORION_STATUS_GAMEOVER event = null - user.set_machine(src) var/dat = "" if(gameStatus == ORION_STATUS_GAMEOVER) dat = "

Game Over

" diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 214fff82955..30859df1600 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -51,6 +51,9 @@ return ..() /obj/machinery/computer/security/attack_hand(mob/user) + . = ..() + if(.) + return if(stat) return if (!network) diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 45bab5822e7..6112a5d7609 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -80,14 +80,25 @@ if(M == current_user) remove_eye_control(M) +/obj/machinery/computer/camera_advanced/proc/can_use(mob/living/user) + return TRUE + +/obj/machinery/computer/camera_advanced/abductor/can_use(mob/user) + if(!isabductor(user)) + return FALSE + return ..() + /obj/machinery/computer/camera_advanced/attack_hand(mob/user) + . = ..() + if(.) + return if(current_user) to_chat(user, "The console is already in use!") return - if(..()) - return var/mob/living/L = user + if(!can_use(user)) + return if(!eyeobj) CreateEye() @@ -126,7 +137,6 @@ /obj/machinery/computer/camera_advanced/attack_ai(mob/user) return //AIs would need to disable their own camera procs to use the console safely. Bugs happen otherwise. - /obj/machinery/computer/camera_advanced/proc/give_eye_control(mob/user) GrantActions(user) current_user = user @@ -289,7 +299,7 @@ warp_action.target = src actions += warp_action -/obj/machinery/computer/camera_advanced/ratvar/attack_hand(mob/living/user) +/obj/machinery/computer/camera_advanced/ratvar/can_use(mob/living/user) if(!is_servant_of_ratvar(user)) to_chat(user, "[src]'s keys are in a language foreign to you, and you don't understand anything on its screen.") return diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 1a54d6be23c..bb47a7ab328 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -133,11 +133,9 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) return -1 return 0 -/obj/machinery/computer/card/attack_hand(mob/user) - if(..()) - return +/obj/machinery/computer/card/ui_interact(mob/user) + . = ..() - user.set_machine(src) var/dat if(!SSticker) return @@ -346,8 +344,6 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() - return - /obj/machinery/computer/card/Topic(href, href_list) if(..()) @@ -426,9 +422,11 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) var/datum/job/J = new jobtype if(ckey(J.title) == ckey(t1)) jobdatum = J + updateUsrDialog() break if(!jobdatum) to_chat(usr, "No log exists for this job.") + updateUsrDialog() return modify.access = ( istype(src, /obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : jobdatum.get_access() ) @@ -451,6 +449,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) else to_chat(usr, "Invalid name entered.") + updateUsrDialog() return if ("mode") mode = text2num(href_list["mode_target"]) @@ -466,8 +465,10 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) var/edit_job_target = href_list["job"] var/datum/job/j = SSjob.GetJob(edit_job_target) if(!j) + updateUsrDialog() return 0 if(can_open_job(j) != 1) + updateUsrDialog() return 0 if(opened_positions[edit_job_target] >= 0) GLOB.time_last_changed_position = world.time / 10 @@ -481,8 +482,10 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) var/edit_job_target = href_list["job"] var/datum/job/j = SSjob.GetJob(edit_job_target) if(!j) + updateUsrDialog() return 0 if(can_close_job(j) != 1) + updateUsrDialog() return 0 //Allow instant closing without cooldown if a position has been opened before if(opened_positions[edit_job_target] <= 0) @@ -497,6 +500,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) var/priority_target = href_list["job"] var/datum/job/j = SSjob.GetJob(priority_target) if(!j) + updateUsrDialog() return 0 var/priority = TRUE if(j in SSjob.prioritized_jobs) @@ -504,6 +508,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) priority = FALSE else if(j.total_positions <= j.current_positions) to_chat(usr, "[j.title] has had all positions filled. Open up more slots before prioritizing it.") + updateUsrDialog() return else SSjob.prioritized_jobs += j @@ -525,7 +530,6 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) if (modify) modify.update_label() updateUsrDialog() - return /obj/machinery/computer/card/AltClick(mob/user) if(user.canUseTopic(src)) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 40f003ea340..db8938b5cf0 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -143,17 +143,8 @@ else return ..() -/obj/machinery/computer/cloning/attack_hand(mob/user) - if(..()) - return - interact(user) - -/obj/machinery/computer/cloning/interact(mob/user) - user.set_machine(src) - add_fingerprint(user) - - if(..()) - return +/obj/machinery/computer/cloning/ui_interact(mob/user) + . = ..() updatemodules(TRUE) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index d0f06e19c82..e2e94810886 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -45,7 +45,7 @@ /obj/machinery/computer/communications/process() if(..()) - if(state != STATE_STATUSDISPLAY) + if(state != STATE_STATUSDISPLAY && state != STATE_CALLSHUTTLE) updateDialog() @@ -428,14 +428,12 @@ to_chat(user, "You scramble the communication routing circuits!") playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0) -/obj/machinery/computer/communications/attack_hand(mob/user) - if(..()) - return +/obj/machinery/computer/communications/ui_interact(mob/user) + . = ..() if (z > 6) to_chat(user, "Unable to establish a connection: \black You're too far away from the station!") return - user.set_machine(src) var/dat = "" if(SSshuttle.emergency.mode == SHUTTLE_CALL) var/timeleft = SSshuttle.emergency.timeLeft() @@ -517,7 +515,7 @@ else aistate = STATE_MESSAGELIST attack_hand(user) - return null + return if(STATE_DELMESSAGE) if (currmsg) dat += "Are you sure you want to delete this message? \[ OK | Cancel \]" diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 40d03a8f5af..6f0294fe67c 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -15,16 +15,7 @@ /obj/machinery/computer/crew/syndie icon_keyboard = "syndie_key" -/obj/machinery/computer/crew/attack_ai(mob/user) - if(stat & (BROKEN|NOPOWER)) - return - GLOB.crewmonitor.show(user,src) - -/obj/machinery/computer/crew/attack_hand(mob/user) - if(..()) - return - if(stat & (BROKEN|NOPOWER)) - return +/obj/machinery/computer/crew/interact(mob/user) GLOB.crewmonitor.show(user,src) GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) @@ -181,10 +172,10 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) pos_y = null results[++results.len] = list("name" = name, "assignment" = assignment, "ijob" = ijob, "life_status" = life_status, "oxydam" = oxydam, "toxdam" = toxdam, "burndam" = burndam, "brutedam" = brutedam, "area" = area, "pos_x" = pos_x, "pos_y" = pos_y, "can_track" = H.can_track(null)) - + data_by_z["[z]"] = results last_update["[z]"] = world.time - + return results /datum/crewmonitor/ui_act(action,params) diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 3b6113e67b1..0b90f1df14a 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -60,12 +60,8 @@ break injectorready = world.time + INJECTOR_TIMEOUT -/obj/machinery/computer/scan_consolenew/attack_hand(mob/user) - if(..()) - return - ShowInterface(user) - -/obj/machinery/computer/scan_consolenew/proc/ShowInterface(mob/user, last_change) +/obj/machinery/computer/scan_consolenew/ui_interact(mob/user, last_change) + . = ..() if(!user) return var/datum/browser/popup = new(user, "scannernew", "DNA Modifier Console", 800, 630) // Set up the popup browser window @@ -461,7 +457,7 @@ connected.locked = TRUE current_screen = "working" - ShowInterface(usr) + ui_interact(usr) sleep(radduration*10) current_screen = "mainmenu" @@ -507,7 +503,7 @@ if(connected) connected.locked = locked_state - ShowInterface(usr,last_change) + ui_interact(usr,last_change) /obj/machinery/computer/scan_consolenew/proc/scramble(input,rs,rd) var/length = length(input) diff --git a/code/game/machinery/computer/launchpad_control.dm b/code/game/machinery/computer/launchpad_control.dm index 7408373220c..a811fa76016 100644 --- a/code/game/machinery/computer/launchpad_control.dm +++ b/code/game/machinery/computer/launchpad_control.dm @@ -30,14 +30,6 @@ else return ..() -/obj/machinery/computer/launchpad/attack_ai(mob/user) - attack_hand(user) - -/obj/machinery/computer/launchpad/attack_hand(mob/user) - if(..()) - return - interact(user) - /obj/machinery/computer/launchpad/proc/pad_exists(number) var/obj/machinery/launchpad/pad = launchpads[number] if(QDELETED(pad)) @@ -48,7 +40,8 @@ var/obj/machinery/launchpad/pad = launchpads[number] return pad -/obj/machinery/computer/launchpad/interact(mob/user) +/obj/machinery/computer/launchpad/ui_interact(mob/user) + . = ..() var/list/t = list() if(!LAZYLEN(launchpads)) obj_flags &= ~IN_USE //Yeah so if you deconstruct teleporter while its in the process of shooting it wont disable the console diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index 356c21d9f37..e761c400db6 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -36,7 +36,8 @@ circuit = /obj/item/circuitboard/computer/aiupload /obj/machinery/computer/upload/ai/attack_hand(mob/user) - if(..()) + . = ..() + if(.) return src.current = select_active_ai(user) @@ -60,7 +61,8 @@ circuit = /obj/item/circuitboard/computer/borgupload /obj/machinery/computer/upload/borg/attack_hand(mob/user) - if(..()) + . = ..() + if(.) return src.current = select_active_free_borg(user) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index f2a6353d8ad..89142579308 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -34,9 +34,8 @@ else return ..() -/obj/machinery/computer/med_data/attack_hand(mob/user) - if(..()) - return +/obj/machinery/computer/med_data/interact(mob/user) + . = ..() var/dat if(src.temp) dat = text("[src.temp]

Clear Screen") @@ -192,7 +191,6 @@ popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() - return /obj/machinery/computer/med_data/Topic(href, href_list) . = ..() diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index c13e80e48b4..ec113eb43b0 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -39,12 +39,13 @@ if(M.id == id) M.close() -/obj/machinery/computer/pod/attack_hand(mob/user) - if(..()) +/obj/machinery/computer/pod/ui_interact(mob/user) + . = ..() + if(!allowed(user)) + to_chat(user, "Access denied.") return var/dat = "" - user.set_machine(src) if(connected) var/d2 if(timing) //door controls do not need timers. @@ -69,7 +70,6 @@ popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.open() - /obj/machinery/computer/pod/process() if(!..()) return @@ -115,7 +115,6 @@ M.drive() updateUsrDialog() - /obj/machinery/computer/pod/old name = "\improper DoorMex control console" title = "Door Controls" @@ -123,21 +122,12 @@ icon_screen = "library" icon_keyboard = null - /obj/machinery/computer/pod/old/syndicate name = "\improper ProComp Executive IIc" desc = "The Syndicate operate on a tight budget. Operates external airlocks." title = "External Airlock Controls" req_access = list(ACCESS_SYNDICATE) -/obj/machinery/computer/pod/old/syndicate/attack_hand(mob/user) - if(!allowed(user)) - to_chat(user, "Access denied.") - return - else - ..() - - /obj/machinery/computer/pod/old/swf name = "\improper Magix System IV" desc = "An arcane artifact that holds much magic. Running E-Knock 2.2: Sorceror's Edition." diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index 525c474bd92..166da284354 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -15,10 +15,8 @@ light_color = LIGHT_COLOR_RED -/obj/machinery/computer/prisoner/attack_hand(mob/user) - if(..()) - return - user.set_machine(src) +/obj/machinery/computer/prisoner/ui_interact(mob/user) + . = ..() var/dat = "" if(screen == 0) dat += "
Unlock Console" diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index ef38fafd7b8..c0d514f9a59 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -22,12 +22,8 @@ return 0 return 1 -/obj/machinery/computer/robotics/attack_hand(mob/user) - if(..()) - return - interact(user) - -/obj/machinery/computer/robotics/interact(mob/user) +/obj/machinery/computer/robotics/ui_interact(mob/user) + . = ..() if (src.z > 6) to_chat(user, "Unable to establish a connection: \black You're too far away from the station!") return diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 8b08824c448..d8280945d3d 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -54,9 +54,8 @@ return ..() //Someone needs to break down the dat += into chunks instead of long ass lines. -/obj/machinery/computer/secure_data/attack_hand(mob/user) - if(..()) - return +/obj/machinery/computer/secure_data/ui_interact(mob/user) + . = ..() if(src.z > 6) to_chat(user, "Unable to establish a connection: \black You're too far away from the station!") return diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm index 6d31a9dbcd0..43f84656f9f 100644 --- a/code/game/machinery/computer/telecrystalconsoles.dm +++ b/code/game/machinery/computer/telecrystalconsoles.dm @@ -85,12 +85,8 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E /////// -/obj/machinery/computer/telecrystals/uplinker/attack_hand(mob/user) - if(..()) - return - src.add_fingerprint(user) - user.set_machine(src) - +/obj/machinery/computer/telecrystals/uplinker/ui_interact(mob/user) + . = ..() var/dat = "" if(linkedboss) dat += "[linkedboss] has [linkedboss.storedcrystals] telecrystals available for distribution.

" @@ -109,7 +105,6 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() - return /obj/machinery/computer/telecrystals/uplinker/Topic(href, href_list) if(..()) @@ -164,13 +159,8 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E ///////// -/obj/machinery/computer/telecrystals/boss/attack_hand(mob/user) - if(..()) - return - src.add_fingerprint(user) - user.set_machine(src) - - +/obj/machinery/computer/telecrystals/boss/ui_interact(mob/user) + . = ..() var/dat = "" dat += "Scan for TC stations.
" dat += "[storedcrystals] telecrystals are available for distribution.
" @@ -198,7 +188,6 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() - return /obj/machinery/computer/telecrystals/boss/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm index 9701bf67f9d..786b86605c3 100644 --- a/code/game/machinery/computer/teleporter.dm +++ b/code/game/machinery/computer/teleporter.dm @@ -45,15 +45,8 @@ else return ..() -/obj/machinery/computer/teleporter/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/computer/teleporter/attack_hand(mob/user) - if(..()) - return - interact(user) - -/obj/machinery/computer/teleporter/interact(mob/user) +/obj/machinery/computer/teleporter/ui_interact(mob/user) + . = ..() var/data = "

Teleporter Status

" if(!power_station) data += "
No power station linked.
" diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index ea9eae906a6..0dc414e3703 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -87,7 +87,8 @@ ..() -/obj/machinery/disco/interact(mob/user) +/obj/machinery/disco/ui_interact(mob/user) + . = ..() if (!anchored) to_chat(user,"This device must be anchored by a wrench!") return @@ -97,7 +98,6 @@ return if(!Adjacent(user) && !isAI(user)) return - user.set_machine(src) var/list/dat = list() dat +="
" dat += "[!active ? "BREAK IT DOWN" : "SHUT IT DOWN"]
" diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index 43644286e58..9296e0807d2 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -144,10 +144,7 @@ return ..() -/obj/machinery/dna_scannernew/attack_hand(mob/user) - if(..(user,1,0)) //don't set the machine, since there's no dialog - return - +/obj/machinery/dna_scannernew/interact(mob/user) toggle_open(user) /obj/machinery/dna_scannernew/MouseDrop_T(mob/target, mob/user) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 172869b8a29..32a4852864d 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -49,7 +49,6 @@ var/normal_integrity = AIRLOCK_INTEGRITY_N integrity_failure = 70 damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_N - interact_open = TRUE autoclose = TRUE secondsElectrified = 0 //How many seconds remain until the door is no longer electrified. -1 if it is permanently electrified until someone fixes it. assemblytype = /obj/structure/door_assembly @@ -57,6 +56,8 @@ explosion_block = 1 hud_possible = list(DIAG_AIRLOCK_HUD) + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN + var/security_level = 0 //How much are wires secured var/aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in. var/hackProof = FALSE // if true, this door can't be hacked by the AI @@ -730,9 +731,12 @@ shock(user, 100) /obj/machinery/door/airlock/attack_paw(mob/user) - return src.attack_hand(user) + return attack_hand(user) /obj/machinery/door/airlock/attack_hand(mob/user) + . = ..() + if(.) + return if(!(issilicon(user) || IsAdminGhost(user))) if(src.isElectrified()) if(src.shock(user, 100)) @@ -749,16 +753,12 @@ H.apply_damage(10, BRUTE, BODY_ZONE_HEAD) else visible_message("[user] headbutts the airlock. Good thing [user.p_theyre()] wearing a helmet.") - return - if(panel_open) - if(security_level) - to_chat(user, "Wires are protected!") - return - wires.interact(user) - else - ..() - return +/obj/machinery/door/airlock/attempt_wire_interaction(mob/user) + if(security_level) + to_chat(user, "Wires are protected!") + return WIRE_INTERACTION_FAIL + return ..() /obj/machinery/door/airlock/proc/electrified_loop() while (secondsElectrified > 0) @@ -931,8 +931,9 @@ note.forceMove(get_turf(user)) note = null update_icon() - else if(is_wire_tool(C)) - return attack_hand(user) + else if(is_wire_tool(C) && panel_open) + attempt_wire_interaction(user) + return else if(istype(C, /obj/item/pai_cable)) var/obj/item/pai_cable/cable = C cable.plugin(src, user) @@ -1411,6 +1412,7 @@ if(!ui) ui = new(user, src, ui_key, "ai_airlock", name, 550, 456, master_ui, state) ui.open() + return TRUE /obj/machinery/door/airlock/ui_data() var/list/data = list() diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 3c4dec09db9..4685097de1a 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -13,6 +13,8 @@ CanAtmosPass = ATMOS_PASS_DENSITY flags_1 = PREVENT_CLICK_UNDER_1 + interaction_flags_atom = INTERACT_ATOM_UI_INTERACT + var/secondsElectrified = 0 var/shockedby = list() var/visible = TRUE @@ -133,14 +135,12 @@ do_animate("deny") return - -/obj/machinery/door/attack_ai(mob/user) - return src.attack_hand(user) - /obj/machinery/door/attack_hand(mob/user) + . = ..() + if(.) + return return try_to_activate_door(user) - /obj/machinery/door/attack_tk(mob/user) if(requiresID() && !allowed(null)) return diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index d22ca76913f..4e20cebb12e 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -23,6 +23,7 @@ closingLayer = CLOSED_FIREDOOR_LAYER assemblytype = /obj/structure/firelock_frame armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 70) + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN var/boltslocked = TRUE var/list/affecting_areas @@ -82,6 +83,9 @@ stat |= NOPOWER /obj/machinery/door/firedoor/attack_hand(mob/user) + . = ..() + if(.) + return if(operating || !density) return user.changeNext_move(CLICK_CD_MELEE) @@ -140,14 +144,17 @@ else close() -/obj/machinery/door/firedoor/attack_ai(mob/user) +/obj/machinery/door/firedoor/interact(mob/user) + if(!issilicon(user)) + return TRUE add_fingerprint(user) if(welded || operating || stat & NOPOWER) - return + return TRUE if(density) open() else close() + return TRUE /obj/machinery/door/firedoor/attack_alien(mob/user) add_fingerprint(user) diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 466301ed83d..b2199753508 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -201,10 +201,6 @@ take_damage(round(exposed_volume / 200), BURN, 0, 0) ..() - -/obj/machinery/door/window/attack_ai(mob/user) - return src.attack_hand(user) - /obj/machinery/door/window/emag_act(mob/user) if(!operating && density && !(obj_flags & EMAGGED)) obj_flags |= EMAGGED diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm index d881d9e2235..c891dfb4e7f 100644 --- a/code/game/machinery/embedded_controller/access_controller.dm +++ b/code/game/machinery/embedded_controller/access_controller.dm @@ -14,7 +14,7 @@ var/idSelf /obj/machinery/doorButtons/attackby(obj/O, mob/user) - attack_hand(user) + return attack_hand(user) /obj/machinery/doorButtons/proc/findObjsByTag() return @@ -59,7 +59,8 @@ break /obj/machinery/doorButtons/access_button/attack_hand(mob/user) - if(..()) + . = ..() + if(.) return if(busy) return @@ -260,7 +261,8 @@ icon_state = "access_control_standby" /obj/machinery/doorButtons/airlock_controller/attack_hand(mob/user) - if(..()) + . = ..() + if(.) return var/datum/browser/popup = new(user, "computer", name) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index ee02c2c52d2..3ea730b579d 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -26,16 +26,14 @@ var/on = TRUE -/obj/machinery/embedded_controller/interact(mob/user) +/obj/machinery/embedded_controller/ui_interact(mob/user) + . = ..() user.set_machine(src) var/datum/browser/popup = new(user, "computer", name) // Set up the popup browser window popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.set_content(return_text()) popup.open() -/obj/machinery/embedded_controller/attack_hand(mob/user) - interact(user) - /obj/machinery/embedded_controller/update_icon() /obj/machinery/embedded_controller/proc/return_text() diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm index 65773aa432f..08db7b41e2d 100644 --- a/code/game/machinery/gulag_teleporter.dm +++ b/code/game/machinery/gulag_teleporter.dm @@ -47,6 +47,7 @@ The console is located at computer/gulag_teleporter.dm update_icon() /obj/machinery/gulag_teleporter/interact(mob/user) + . = ..() if(locked) to_chat(user, "[src] is locked!") return diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index bce12597ab1..f51fcdede75 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -172,7 +172,8 @@ Possible to do for anyone motivated enough: return ..() -/obj/machinery/holopad/interact(mob/living/carbon/human/user) //Carn: Hologram requests. +/obj/machinery/holopad/ui_interact(mob/living/carbon/human/user) //Carn: Hologram requests. + . = ..() if(!istype(user)) return diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 52083fe3d5f..8ee684a89a5 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -17,21 +17,15 @@ on = FALSE icon_state = "igniter0" -/obj/machinery/igniter/attack_ai(mob/user) - return src.attack_hand(user) - -/obj/machinery/igniter/attack_paw(mob/user) - return src.attack_hand(user) - /obj/machinery/igniter/attack_hand(mob/user) - if(..()) + . = ..() + if(.) return add_fingerprint(user) use_power(50) - src.on = !( src.on ) - src.icon_state = text("igniter[]", src.on) - return + on = !( on ) + icon_state = "igniter[on]" /obj/machinery/igniter/process() //ugh why is this even in process()? if (src.on && !(stat & NOPOWER) ) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 2442e409436..409e64ca7ec 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -66,6 +66,7 @@ add_overlay(filling_overlay) /obj/machinery/iv_drip/MouseDrop(mob/living/target) + . = ..() if(!ishuman(usr) || !usr.canUseTopic(src, BE_CLOSE) || !isliving(target)) return @@ -150,6 +151,9 @@ update_icon() /obj/machinery/iv_drip/attack_hand(mob/user) + . = ..() + if(.) + return if(!ishuman(user)) return if(attached) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index edf9a3035d3..fb90f1b5b45 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -37,12 +37,8 @@ ..() to_chat(user, "It is [on? "on" : "off"].") - -/obj/machinery/light_switch/attack_paw(mob/user) - src.attack_hand(user) - -/obj/machinery/light_switch/attack_hand(mob/user) - +/obj/machinery/light_switch/interact(mob/user) + . = ..() on = !on for(var/area/A in area.related) diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index bc32517fbaa..4bcb0b713dc 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -37,7 +37,8 @@ stored_research = new /datum/techweb/specialized/autounlocking/limbgrower . = ..() -/obj/machinery/limbgrower/interact(mob/user) +/obj/machinery/limbgrower/ui_interact(mob/user) + . = ..() if(!is_operational()) return diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index 7fcca578ef9..03455d5dd59 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -238,14 +238,8 @@ if(M.freq == frequency && M.code == code) magnets.Add(M) - -/obj/machinery/magnetic_controller/attack_ai(mob/user) - return src.attack_hand(user) - -/obj/machinery/magnetic_controller/attack_hand(mob/user) - if(stat & (BROKEN|NOPOWER)) - return - user.set_machine(src) +/obj/machinery/magnetic_controller/ui_interact(mob/user) + . = ..() var/dat = "Magnetic Control Console

" if(!autolink) dat += {" diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index a4a7419b344..cec54796413 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -108,10 +108,9 @@ /obj/machinery/navbeacon/attack_paw() return -/obj/machinery/navbeacon/attack_hand(mob/user) - interact(user, 0) - -/obj/machinery/navbeacon/interact(mob/user, ai = 0) +/obj/machinery/navbeacon/ui_interact(mob/user) + . = ..() + var/ai = isAI(user) var/turf/T = loc if(T.intact) return // prevent intraction when T-scanner revealed diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index d1a6eec3b09..d865265235f 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -263,12 +263,8 @@ GLOBAL_LIST_EMPTY(allCasters) . = ..() update_icon() -/obj/machinery/newscaster/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/newscaster/attack_hand(mob/user) - if(stat & (NOPOWER|BROKEN)) - return +/obj/machinery/newscaster/ui_interact(mob/user) + . = ..() if(ishuman(user) || issilicon(user)) var/mob/living/human_or_robot_user = user var/dat diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index f6e1e2549df..555f4eee1b4 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -5,15 +5,15 @@ desc = "Dispenses countless types of pipes. Very useful if you need pipes." density = TRUE anchored = TRUE + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_OFFLINE var/wait = 0 var/piping_layer = PIPING_LAYER_DEFAULT /obj/machinery/pipedispenser/attack_paw(mob/user) return attack_hand(user) -/obj/machinery/pipedispenser/attack_hand(mob/user) - if(..()) - return 1 +/obj/machinery/pipedispenser/ui_interact(mob/user) + . = ..() var/dat = "PIPING LAYER: --[piping_layer]++
" var/recipes = GLOB.atmos_pipe_recipes @@ -99,9 +99,7 @@ qdel(pipe) -/obj/machinery/pipedispenser/disposal/attack_hand(mob/user) - if(..()) - return 1 +/obj/machinery/pipedispenser/disposal/interact(mob/user) var/dat = "" var/recipes = GLOB.disposal_pipe_recipes @@ -151,9 +149,7 @@ desc = "Dispenses pipes that will move beings around." anchored = TRUE -/obj/machinery/pipedispenser/disposal/transit_tube/attack_hand(mob/user) - if(..()) - return 1 +/obj/machinery/pipedispenser/disposal/transit_tube/interact(mob/user) var/dat = {"Transit Tubes:
Straight Tube
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index a52b87f64c1..47d3ea6800a 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -162,18 +162,8 @@ remove_control() return ..() - -/obj/machinery/porta_turret/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/porta_turret/attack_hand(mob/user) +/obj/machinery/porta_turret/ui_interact(mob/user) . = ..() - if(.) - return - - interact(user) - -/obj/machinery/porta_turret/interact(mob/user) var/dat dat += "Status: [on ? "On" : "Off"]
" dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
" @@ -832,7 +822,7 @@ user << browse(null, "window=turretid") else if (user.machine==src) - src.attack_hand(user) + attack_hand(user) else to_chat(user, "Access denied.") @@ -851,7 +841,8 @@ else to_chat(user, "There seems to be a firewall preventing you from accessing this device.") -/obj/machinery/turretid/attack_hand(mob/user as mob) +/obj/machinery/turretid/ui_interact(mob/user) + . = ..() if ( get_dist(src, user) > 0 ) if ( !(issilicon(user) || IsAdminGhost(user)) ) to_chat(user, "You are too far away.") @@ -859,7 +850,6 @@ user << browse(null, "window=turretid") return - user.set_machine(src) var/t = "" if(locked && !(issilicon(user) || IsAdminGhost(user))) @@ -886,7 +876,7 @@ toggle_on() else if (href_list["toggleLethal"]) toggle_lethal() - src.attack_hand(usr) + attack_hand(usr) /obj/machinery/turretid/proc/toggle_lethal() lethal = !lethal @@ -1013,7 +1003,8 @@ if(properties["team_color"]) team_color = properties["team_color"] -/obj/machinery/porta_turret/lasertag/interact(mob/user) +/obj/machinery/porta_turret/lasertag/ui_interact(mob/user) + . = ..() if(ishuman(user)) var/mob/living/carbon/human/H = user if(team_color == "blue" && istype(H.wear_suit, /obj/item/clothing/suit/redtag)) diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm index 66e441825be..ca17490e03c 100644 --- a/code/game/machinery/porta_turret/portable_turret_construct.dm +++ b/code/game/machinery/porta_turret/portable_turret_construct.dm @@ -168,6 +168,9 @@ /obj/machinery/porta_turret_construct/attack_hand(mob/user) + . = ..() + if(.) + return switch(build_step) if(PTURRET_GUN_EQUIPPED) build_step = PTURRET_INTERNAL_ARMOUR_ON diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index 1dd683af842..91a7f6923f4 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -69,6 +69,9 @@ return ..() /obj/machinery/quantumpad/attack_hand(mob/user) + . = ..() + if(.) + return if(panel_open) to_chat(user, "The panel must be closed before operating this machine!") return @@ -102,6 +105,9 @@ s.start() /obj/machinery/quantumpad/attack_ghost(mob/dead/observer/ghost) + . = ..() + if(.) + return if(!linked_pad && map_pad_link_id) initMappedLink() if(linked_pad) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 2cca8f505c0..f95f69e2d17 100755 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -73,7 +73,8 @@ return ..() /obj/machinery/recharger/attack_hand(mob/user) - if(issilicon(user)) + . = ..() + if(.) return add_fingerprint(user) @@ -85,9 +86,6 @@ use_power = IDLE_POWER_USE update_icon() -/obj/machinery/recharger/attack_paw(mob/user) - return attack_hand(user) - /obj/machinery/recharger/attack_tk(mob/user) if(charging) charging.update_icon() diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 0fd04f63d52..790158515fa 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -10,6 +10,7 @@ req_access = list(ACCESS_ROBOTICS) state_open = TRUE circuit = /obj/item/circuitboard/machine/cyborgrecharger + occupant_typecache = list(/mob/living/silicon/robot) var/recharge_speed var/repairs @@ -47,12 +48,6 @@ open_machine() ..() -/obj/machinery/recharge_station/attack_paw(mob/user) - return attack_hand(user) - -/obj/machinery/recharge_station/attack_ai(mob/user) - return attack_hand(user) - /obj/machinery/recharge_station/attackby(obj/item/P, mob/user, params) if(state_open) if(default_deconstruction_screwdriver(user, "borgdecon2", "borgcharger0", P)) @@ -68,12 +63,9 @@ return return ..() -/obj/machinery/recharge_station/attack_hand(mob/user) - if(..(user,1,set_machine = 0)) - return - +/obj/machinery/recharge_station/interact(mob/user) toggle_open() - add_fingerprint(user) + return TRUE /obj/machinery/recharge_station/proc/toggle_open() if(state_open) @@ -82,20 +74,16 @@ open_machine() /obj/machinery/recharge_station/open_machine() - ..() - use_power = IDLE_POWER_USE + . = ..() + if(iscyborg(occupant)) + use_power = IDLE_POWER_USE /obj/machinery/recharge_station/close_machine() - if(!panel_open) - for(var/mob/living/silicon/robot/R in loc) - R.forceMove(src) - occupant = R + . = ..() + if(occupant) + if(iscyborg(occupant)) use_power = ACTIVE_POWER_USE - add_fingerprint(R) - break - state_open = FALSE - density = TRUE - update_icon() + add_fingerprint(occupant) /obj/machinery/recharge_station/update_icon() if(is_operational()) @@ -111,7 +99,7 @@ update_icon() /obj/machinery/recharge_station/proc/process_occupant() - if(occupant) + if(occupant && iscyborg(occupant)) var/mob/living/silicon/robot/R = occupant restock_modules() if(repairs) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 2ca5d833655..0d77157392f 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -129,9 +129,8 @@ GLOBAL_LIST_EMPTY(allConsoles) GLOB.allConsoles -= src return ..() -/obj/machinery/requests_console/attack_hand(mob/user) - if(..()) - return +/obj/machinery/requests_console/ui_interact(mob/user) + . = ..() var/dat = "" if(!open) switch(screen) diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm index c01c72d7a80..1fdc9b56dc2 100644 --- a/code/game/machinery/robot_fabricator.dm +++ b/code/game/machinery/robot_fabricator.dm @@ -40,13 +40,9 @@ else stat |= NOPOWER -/obj/machinery/robotic_fabricator/attack_paw(mob/user) - return src.attack_hand(user) - -/obj/machinery/robotic_fabricator/attack_hand(mob/user) +/obj/machinery/robotic_fabricator/ui_interact(mob/user) + . = ..() var/dat - if (..()) - return if (src.operating) dat = {" diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index e2c4eedc728..bda9378c993 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -120,6 +120,9 @@ update_icon() /obj/machinery/shieldgen/attack_hand(mob/user) + . = ..() + if(.) + return if(locked) to_chat(user, "The machine is locked, you are unable to use it!") return @@ -358,6 +361,9 @@ return ..() /obj/machinery/shieldwallgen/attack_hand(mob/user) + . = ..() + if(.) + return if(!anchored) to_chat(user, "\The [src] needs to be firmly secured to the floor first!") return @@ -421,9 +427,6 @@ gen_secondary = null return ..() -/obj/machinery/shieldwall/attack_hand(mob/user) - return - /obj/machinery/shieldwall/process() if(needs_power) if(!gen_primary || !gen_primary.active || !gen_secondary || !gen_secondary.active) diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 766bd49bf46..acfdeb150cb 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -108,14 +108,8 @@ spark_system.start() playsound(src, "sparks", 50, 1) -/obj/machinery/computer/slot_machine/attack_hand(mob/living/user) - . = ..() //Sanity checks. - if(.) - return . - - interact(user) - -/obj/machinery/computer/slot_machine/interact(mob/living/user) +/obj/machinery/computer/slot_machine/ui_interact(mob/living/user) + . = ..() var/reeltext = {"
/*****^*****^*****^*****^*****\\
| \[[reels[1][1]]\] | \[[reels[2][1]]\] | \[[reels[3][1]]\] | \[[reels[4][1]]\] | \[[reels[5][1]]\] |
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 3946d03495f..9fbe2b412b6 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -5,7 +5,7 @@ /obj/machinery/space_heater anchored = FALSE density = TRUE - interact_open = TRUE + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN icon = 'icons/obj/atmos.dmi' icon_state = "sheater-off" name = "space heater" diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 9d0f6c540cb..1d2276a1190 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -47,12 +47,13 @@ /obj/machinery/power/singularity_beacon/attack_hand(mob/user) + . = ..() + if(.) + return if(anchored) return active ? Deactivate(user) : Activate(user) else to_chat(user, "You need to screw the beacon to the floor first!") - return - /obj/machinery/power/singularity_beacon/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/screwdriver)) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 0d10a1ecb99..b0e0b4f8fc0 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -12,6 +12,8 @@ layer = BELOW_MOB_LAYER //so people can't hide it and it's REALLY OBVIOUS resistance_flags = FIRE_PROOF | ACID_PROOF + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_OFFLINE + var/minimum_timer = 90 var/timer_set = 90 var/maximum_timer = 60000 @@ -174,12 +176,6 @@ if((old_integ > obj_integrity) && active && !defused && (payload in src)) to_chat(user, "That seems like a really bad idea...") -/obj/machinery/syndicatebomb/attack_hand(mob/user) - interact(user) - -/obj/machinery/syndicatebomb/attack_ai() - return - /obj/machinery/syndicatebomb/interact(mob/user) wires.interact(user) if(!open_panel) diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm index 12b01614c4c..a5d9e44e811 100644 --- a/code/game/machinery/telecomms/computers/logbrowser.dm +++ b/code/game/machinery/telecomms/computers/logbrowser.dm @@ -17,10 +17,8 @@ req_access = list(ACCESS_TCOMSAT) circuit = /obj/item/circuitboard/computer/comm_server -/obj/machinery/computer/telecomms/server/attack_hand(mob/user) - if(..()) - return - user.set_machine(src) +/obj/machinery/computer/telecomms/server/ui_interact(mob/user) + . = ..() var/dat = "Telecommunication Server Monitor
Telecommunications Server Monitor
" switch(screen) diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm index 9a8bbe9e281..4408a653d46 100644 --- a/code/game/machinery/telecomms/computers/message.dm +++ b/code/game/machinery/telecomms/computers/message.dm @@ -77,9 +77,8 @@ GLOB.telecomms_list -= src . = ..() -/obj/machinery/computer/message_monitor/attack_hand(mob/living/user) - if(..()) - return +/obj/machinery/computer/message_monitor/ui_interact(mob/living/user) + . = ..() //If the computer is being hacked or is emagged, display the reboot message. if(hacking || (obj_flags & EMAGGED)) message = rebootmsg @@ -236,7 +235,6 @@ popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.open() - return /obj/machinery/computer/message_monitor/proc/BruteForce(mob/user) if(isnull(linkedServer)) diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm index c5c53888fc4..aebef711a99 100644 --- a/code/game/machinery/telecomms/computers/telemonitor.dm +++ b/code/game/machinery/telecomms/computers/telemonitor.dm @@ -19,10 +19,8 @@ var/temp = "" // temporary feedback messages circuit = /obj/item/circuitboard/computer/comm_monitor -/obj/machinery/computer/telecomms/monitor/attack_hand(mob/user) - if(..()) - return - user.set_machine(src) +/obj/machinery/computer/telecomms/monitor/ui_interact(mob/user) + . = ..() var/dat = "Telecommunications Monitor
Telecommunications Monitor
" switch(screen) diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 9eb25b9bedb..3bacd10b057 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -31,24 +31,14 @@ else return ..() - -/obj/machinery/telecomms/attack_ai(mob/user) - attack_hand(user) - -/obj/machinery/telecomms/attack_hand(mob/user) - +/obj/machinery/telecomms/ui_interact(mob/user) + . = ..() // You need a multitool to use this, or be silicon if(!issilicon(user)) // istype returns false if the value is null if(!istype(user.get_active_held_item(), /obj/item/device/multitool)) return - - if(stat & (BROKEN|NOPOWER)) - return - var/obj/item/device/multitool/P = get_multitool(user) - - user.set_machine(src) var/dat dat = "[name]

[name] Access

" dat += "
[temp]
" diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm index ca0812f1dee..fbdc385f85e 100644 --- a/code/game/machinery/telecomms/machines/allinone.dm +++ b/code/game/machinery/telecomms/machines/allinone.dm @@ -38,4 +38,4 @@ /obj/machinery/telecomms/allinone/attackby(obj/item/P, mob/user, params) if(istype(P, /obj/item/device/multitool)) - attack_hand(user) + return attack_hand(user) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index e72964c79d0..f88b3181702 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -183,32 +183,24 @@ else return ..() -/obj/machinery/teleport/station/attack_paw() - src.attack_hand() - -/obj/machinery/teleport/station/attack_ai() - src.attack_hand() - -/obj/machinery/teleport/station/attack_hand(mob/user) - if(!panel_open) - toggle(user) +/obj/machinery/teleport/station/interact(mob/user) + toggle(user) /obj/machinery/teleport/station/proc/toggle(mob/user) if(stat & (BROKEN|NOPOWER) || !teleporter_hub || !teleporter_console ) return if (teleporter_console.target) if(teleporter_hub.panel_open || teleporter_hub.stat & (BROKEN|NOPOWER)) - visible_message("The teleporter hub isn't responding.") + to_chat(user, "The teleporter hub isn't responding.") else - src.engaged = !src.engaged + engaged = !engaged use_power(5000) - visible_message("Teleporter [engaged ? "" : "dis"]engaged!") + to_chat(user, "Teleporter [engaged ? "" : "dis"]engaged!") else - visible_message("No target detected.") - src.engaged = 0 + to_chat(user, "No target detected.") + engaged = FALSE teleporter_hub.update_icon() - src.add_fingerprint(user) - return + add_fingerprint(user) /obj/machinery/teleport/station/power_change() ..() diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index b48f14e5084..cdb12eaf5c5 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -220,6 +220,9 @@ return ..() /obj/machinery/washing_machine/attack_hand(mob/user) + . = ..() + if(.) + return if(busy) to_chat(user, "[src] is busy.") return diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm index 529b0700625..aa238f93416 100644 --- a/code/game/machinery/wishgranter.dm +++ b/code/game/machinery/wishgranter.dm @@ -12,6 +12,9 @@ var/insisting = 0 /obj/machinery/wish_granter/attack_hand(mob/living/carbon/user) + . = ..() + if(.) + return if(charges <= 0) to_chat(user, "The Wish Granter lies silent.") return diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index aabf382ff20..90234b97b5f 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -78,14 +78,6 @@ var/obj/machinery/mech_bay_recharge_port/recharge_port light_color = LIGHT_COLOR_PINK -/obj/machinery/computer/mech_bay_power_console/attack_ai(mob/user) - return interact(user) - -/obj/machinery/computer/mech_bay_power_console/attack_hand(mob/user) - if(..()) - return - interact(user) - /obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index c548e0b89da..7815014891f 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -247,14 +247,9 @@ /obj/machinery/mecha_part_fabricator/proc/get_construction_time_w_coeff(datum/design/D, roundto = 1) //aran return round(initial(D.construction_time)*time_coeff, roundto) -/obj/machinery/mecha_part_fabricator/attack_hand(mob/user) - if(!(..())) - return interact(user) - -/obj/machinery/mecha_part_fabricator/interact(mob/user as mob) +/obj/machinery/mecha_part_fabricator/ui_interact(mob/user as mob) + . = ..() var/dat, left_part - if (..()) - return user.set_machine(src) var/turf/exit = get_step(src,(dir)) if(exit.density) diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index c949a8e1574..46fb5cc35af 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -9,10 +9,8 @@ var/screen = 0 var/stored_data -/obj/machinery/computer/mecha/attack_hand(mob/user) - if(..()) - return - user.set_machine(src) +/obj/machinery/computer/mecha/ui_interact(mob/user) + . = ..() var/dat = "[src.name]" if(screen == 0) dat += "

Tracking beacons data

" @@ -36,7 +34,6 @@ user << browse(dat, "window=computer;size=400x500") onclose(user, "computer") - return /obj/machinery/computer/mecha/Topic(href, href_list) if(..()) diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm index bb0eb3c2e76..d38fe376dc5 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/game/mecha/mecha_defense.dm @@ -55,6 +55,9 @@ /obj/mecha/attack_hand(mob/living/user) + . = ..() + if(.) + return user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code. user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) playsound(loc, 'sound/weapons/tap.ogg', 40, 1, -1) diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 1713b36c374..0daee249258 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -12,6 +12,7 @@ /obj/item/mecha_parts/chassis name = "Mecha Chassis" icon_state = "backbone" + interaction_flags_item = NONE //Don't pick us up!! var/construct_type /obj/item/mecha_parts/chassis/Initialize() @@ -19,9 +20,6 @@ if(construct_type) AddComponent(construct_type) -/obj/item/mecha_parts/chassis/attack_hand() - return - /////////// Ripley /obj/item/mecha_parts/chassis/ripley diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 15d3962ee46..98203e12884 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -11,6 +11,8 @@ //Interaction /atom/movable/attack_hand(mob/living/user) . = ..() + if(.) + return if(can_buckle && has_buckled_mobs()) if(buckled_mobs.len > 1) var/unbuckled = input(user, "Who do you wish to unbuckle?","Unbuckle Who?") as null|mob in buckled_mobs diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm index 4c4427e77f6..31ca7dd3073 100644 --- a/code/game/objects/effects/contraband.dm +++ b/code/game/objects/effects/contraband.dm @@ -98,6 +98,9 @@ roll_and_drop(user.loc) /obj/structure/sign/poster/attack_hand(mob/user) + . = ..() + if(.) + return if(ruined) return visible_message("[user] rips [src] in a single, decisive motion!" ) diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index bd0048a3bd4..4591d5d5677 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -109,6 +109,9 @@ beauty = -200 /obj/effect/decal/cleanable/vomit/attack_hand(mob/user) + . = ..() + if(.) + return if(ishuman(user)) var/mob/living/carbon/human/H = user if(isflyperson(H)) diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 28245e638eb..d9a7d6fb7b8 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -286,12 +286,15 @@ move_update_air(T) /obj/structure/foamedmetal/attack_paw(mob/user) - attack_hand(user) + return attack_hand(user) /obj/structure/foamedmetal/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1) /obj/structure/foamedmetal/attack_hand(mob/user) + . = ..() + if(.) + return user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) to_chat(user, "You hit [src] but bounce off it!") diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index b278ac25c1b..8ac0d578ad3 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -57,6 +57,9 @@ return /obj/effect/portal/attack_hand(mob/user) + . = ..() + if(.) + return if(get_turf(user) == get_turf(src)) teleport(user) if(Adjacent(user)) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 22337c18a33..e760712ffd2 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -49,6 +49,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) //Since any item can now be a piece of clothing, this has to be put here so all items share it. var/flags_inv //This flag is used to determine when items in someone's inventory cover others. IE helmets making it so you can't see glasses, etc. + var/interaction_flags_item = INTERACT_ITEM_ATTACK_HAND_PICKUP + var/item_color = null //this needs deprecating, soonish var/body_parts_covered = 0 //see setup.dm for appropriate bit flags @@ -237,6 +239,9 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) return ..() /obj/item/attack_hand(mob/user) + . = ..() + if(.) + return if(!user) return if(anchored) @@ -271,6 +276,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage C.update_damage_overlays() + if(!(interaction_flags_item & INTERACT_ITEM_ATTACK_HAND_PICKUP)) //See if we're supposed to auto pickup. + return if(istype(loc, /obj/item/storage)) //If the item is in a storage item, take it out @@ -280,7 +287,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(throwing) throwing.finalize(FALSE) if(loc == user) - if(!user.dropItemToGround(src)) + if(!allow_attack_hand_drop(user) || !user.dropItemToGround(src)) return pickup(user) @@ -412,9 +419,11 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) // called just as an item is picked up (loc is not yet changed) /obj/item/proc/pickup(mob/user) + SendSignal(COMSIG_ITEM_PICKUP, user) item_flags |= IN_INVENTORY - return +/obj/item/proc/allow_attack_hand_drop(mob/user) + return TRUE // called when this item is removed from a storage item, which is passed on as S. The loc variable is already set to the new destination before this is called. /obj/item/proc/on_exit_storage(obj/item/storage/S) diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm index cc72dff4e80..06bc2238ad6 100644 --- a/code/game/objects/items/RPD.dm +++ b/code/game/objects/items/RPD.dm @@ -306,7 +306,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( spark_system.start() playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0) -/obj/item/pipe_dispenser/pre_attackby(atom/A, mob/user) +/obj/item/pipe_dispenser/pre_attack(atom/A, mob/user) if(!user.IsAdvancedToolUser() || istype(A, /turf/open/space/transit)) return ..() diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index 7f58bda1890..bfbb7e67bbe 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -18,6 +18,7 @@ var/lastattacker = null +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/cardboard_cutout/attack_hand(mob/living/user) if(user.a_intent == INTENT_HELP || pushed_over) return ..() diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index e52231f64f9..47d7b1e5255 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -80,6 +80,7 @@ /obj/item/defibrillator/ui_action_click() toggle_paddles() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/defibrillator/attack_hand(mob/user) if(loc == user) if(slot_flags == SLOT_BACK) @@ -96,9 +97,10 @@ return else if(istype(loc, /obj/machinery/defibrillator_mount)) ui_action_click() //checks for this are handled in defibrillator.mount.dm - ..() + return ..() /obj/item/defibrillator/MouseDrop(obj/over_object) + . = ..() if(ismob(loc)) var/mob/M = loc if(!M.incapacitated() && istype(over_object, /obj/screen/inventory/hand)) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 2e164e98a84..ecdb8e7a921 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -167,7 +167,7 @@ GLOBAL_LIST_EMPTY(PDAs) var/mob/M = usr if((!istype(over_object, /obj/screen)) && usr.canUseTopic(src)) return attack_self(M) - return + return ..() /obj/item/device/pda/attack_self(mob/user) if(!user.IsAdvancedToolUser()) diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index 3c48a34d376..770c72ac548 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -46,8 +46,11 @@ tracking = null return ..() +/obj/item/device/camera_bug/interact(mob/user) + ui_interact(user) -/obj/item/device/camera_bug/interact(mob/user = usr) +/obj/item/device/camera_bug/ui_interact(mob/user = usr) + . = ..() var/datum/browser/popup = new(user, "camerabug","Camera Bug",nref=src) popup.set_content(menu(get_cameras())) popup.open() diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index a07d8d8d605..b07f9cd568d 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -113,6 +113,7 @@ /obj/effect/dummy/chameleon/attackby() master.disrupt() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/effect/dummy/chameleon/attack_hand() master.disrupt() diff --git a/code/game/objects/items/devices/instruments.dm b/code/game/objects/items/devices/instruments.dm index 06e8898e158..4124f77aebc 100644 --- a/code/game/objects/items/devices/instruments.dm +++ b/code/game/objects/items/devices/instruments.dm @@ -36,6 +36,9 @@ interact(user) /obj/item/device/instrument/interact(mob/user) + ui_interact(user) + +/obj/item/device/instrument/ui_interact(mob/user) if(!user) return diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index df2c7770e28..ea4236b823d 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -87,6 +87,9 @@ return /obj/item/device/powersink/attack_hand(mob/user) + . = ..() + if(.) + return switch(mode) if(DISCONNECTED) ..() diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 307b493281e..3e3a760fb36 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -27,13 +27,14 @@ SSradio.remove_object(src, frequency) return ..() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/device/electropack/attack_hand(mob/user) if(iscarbon(user)) var/mob/living/carbon/C = user if(src == C.back) to_chat(user, "You need help taking this off!") return - ..() + return ..() /obj/item/device/electropack/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/clothing/head/helmet)) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index bfba8e9838b..0ac123566f1 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -86,6 +86,9 @@ interact(user) /obj/item/device/radio/intercom/attack_hand(mob/user) + . = ..() + if(.) + return interact(user) /obj/item/device/radio/intercom/interact(mob/user) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 21809ec3bf7..1f6f97284bc 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -13,6 +13,7 @@ throw_range = 7 w_class = WEIGHT_CLASS_SMALL materials = list(MAT_METAL=75, MAT_GLASS=25) + obj_flags = USES_TGUI var/on = TRUE var/frequency = FREQ_COMMON @@ -105,6 +106,7 @@ /obj/item/device/radio/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) + . = ..() ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "radio", name, 370, 220 + channels.len * 22, master_ui, state) diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 45782f0ee84..bf7a0b8ee82 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -53,22 +53,21 @@ mytape.ruin() //Fires destroy the tape ..() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/device/taperecorder/attack_hand(mob/user) if(loc == user) if(mytape) if(!user.is_holding(src)) - ..() - return + return ..() eject(user) - return - ..() - + else + return ..() /obj/item/device/taperecorder/proc/can_use(mob/user) if(user && ismob(user)) if(!user.incapacitated()) - return 1 - return 0 + return TRUE + return FALSE /obj/item/device/taperecorder/verb/ejectverb() diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 5afc8602ffd..140075d6807 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -107,7 +107,10 @@ effective or pretty fucking useless. return round(max(10, (stealth*30 + intensity*5 - wavelength/4))) /obj/item/device/healthanalyzer/rad_laser/interact(mob/user) - user.set_machine(src) + ui_interact(user) + +/obj/item/device/healthanalyzer/rad_laser/ui_interact(mob/user) + . = ..() var/dat = "Irradiation: [irradiate ? "On" : "Off"]
" dat += "Stealth Mode (NOTE: Deactivates automatically while Irradiation is off): [stealth ? "On" : "Off"]
" diff --git a/code/game/objects/items/eightball.dm b/code/game/objects/items/eightball.dm index 50bf9b27c19..ba1bd698e8d 100644 --- a/code/game/objects/items/eightball.dm +++ b/code/game/objects/items/eightball.dm @@ -114,11 +114,13 @@ /obj/item/toy/eightball/haunted/MakeHaunted() return FALSE +//ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/item/toy/eightball/haunted/attack_ghost(mob/user) if(!shaking) to_chat(user, "[src] is not currently being shaken.") return interact(user) + return ..() /obj/item/toy/eightball/haunted/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, spans, message_mode) last_message = raw_message diff --git a/code/game/objects/items/grenades/grenade.dm b/code/game/objects/items/grenades/grenade.dm index 93349a6b3b6..929c649e4dd 100644 --- a/code/game/objects/items/grenades/grenade.dm +++ b/code/game/objects/items/grenades/grenade.dm @@ -108,10 +108,6 @@ else return ..() -/obj/item/grenade/attack_hand() - walk(src, null, null) - ..() - /obj/item/grenade/attack_paw(mob/user) return attack_hand(user) diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index c8c43bc5215..09abc25cc1f 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -310,6 +310,7 @@ /obj/item/restraints/legcuffs/beartrap/energy/attack_hand(mob/user) Crossed(user) //honk + . = ..() /obj/item/restraints/legcuffs/beartrap/energy/cyborg breakouttime = 20 // Cyborgs shouldn't have a strong restraint diff --git a/code/game/objects/items/implants/implantpad.dm b/code/game/objects/items/implants/implantpad.dm index 8a719143549..846f1119aad 100644 --- a/code/game/objects/items/implants/implantpad.dm +++ b/code/game/objects/items/implants/implantpad.dm @@ -22,6 +22,9 @@ /obj/item/implantpad/attack_hand(mob/user) + . = ..() + if(.) + return if(case && user.is_holding(src)) user.put_in_active_hand(case) @@ -30,9 +33,6 @@ add_fingerprint(user) update_icon() - else - return ..() - /obj/item/implantpad/attackby(obj/item/implantcase/C, mob/user, params) if(istype(C, /obj/item/implantcase)) diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm index fbdacfdbdad..f671e63109d 100644 --- a/code/game/objects/items/pet_carrier.dm +++ b/code/game/objects/items/pet_carrier.dm @@ -151,6 +151,7 @@ add_overlay("[locked ? "" : "un"]locked") /obj/item/pet_carrier/MouseDrop(atom/over_atom) + . = ..() if(isopenturf(over_atom) && usr.canUseTopic(src, BE_CLOSE, ismonkey(usr)) && usr.Adjacent(over_atom) && open && occupants.len) usr.visible_message("[usr] unloads [src].", \ "You unload [src] onto [over_atom].") diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index fa7d14d2369..9087d0acc54 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -32,9 +32,11 @@ return TRUE /obj/item/target/attack_hand(mob/user) + . = ..() + if(.) + return if(pinnedLoc) pinnedLoc.removeTarget(user) - ..() /obj/item/target/syndicate icon_state = "target_s" diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm index d4dc971db9c..2e98d222a67 100644 --- a/code/game/objects/items/stacks/bscrystal.dm +++ b/code/game/objects/items/stacks/bscrystal.dm @@ -70,6 +70,7 @@ /obj/item/stack/sheet/bluespace_crystal/attack_self(mob/user)// to prevent the construction menu from ever happening to_chat(user, "You cannot crush the polycrystal in-hand, try breaking one off.") +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/stack/sheet/bluespace_crystal/attack_hand(mob/user) if(user.get_inactive_held_item() == src) if(zero_amount()) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 0c4e522107f..69a713fac6b 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -99,7 +99,11 @@ /obj/item/stack/attack_self(mob/user) interact(user) -/obj/item/stack/interact(mob/user, recipes_sublist) +/obj/item/stack/interact(mob/user, sublist) + ui_interact(user, sublist) + +/obj/item/stack/ui_interact(mob/user, recipes_sublist) + . = ..() if (!recipes) return if (!src || get_amount() <= 0) @@ -222,16 +226,16 @@ to_chat(usr, "You haven't got enough [src] to build \the [R.req_amount*multiplier] [R.title]\s!") else to_chat(usr, "You haven't got enough [src] to build \the [R.title]!") - return 0 + return FALSE if(R.window_checks && !valid_window_location(usr.loc, usr.dir)) to_chat(usr, "The [R.title] won't fit here!") - return 0 + return FALSE if(R.one_per_turf && (locate(R.result_type) in usr.loc)) to_chat(usr, "There is another [R.title] here!") - return 0 + return FALSE if(R.on_floor && !isfloorturf(usr.loc)) to_chat(usr, "\The [R.title] must be constructed on the floor!") - return 0 + return FALSE if(R.placement_checks) switch(R.placement_checks) if(STACK_CHECK_CARDINALS) @@ -240,25 +244,26 @@ step = get_step(usr, direction) if(locate(R.result_type) in step) to_chat(usr, "\The [R.title] must not be built directly adjacent to another!") - return 0 + return FALSE if(STACK_CHECK_ADJACENT) if(locate(R.result_type) in range(1, usr)) to_chat(usr, "\The [R.title] must be constructed at least one tile away from others of its type!") - return 0 - return 1 + return FALSE + return TRUE -/obj/item/stack/use(used, transfer = FALSE) // return 0 = borked; return 1 = had enough - if(zero_amount()) - return 0 +/obj/item/stack/use(used, transfer = FALSE, check = TRUE) // return 0 = borked; return 1 = had enough + if(check && zero_amount()) + return FALSE if (is_cyborg) return source.use_charge(used * cost) if (amount < used) - return 0 + return FALSE amount -= used - zero_amount() + if(check) + zero_amount() update_icon() update_weight() - return 1 + return TRUE /obj/item/stack/tool_use_check(mob/living/user, amount) if(get_amount() < amount) @@ -315,13 +320,14 @@ merge(AM) . = ..() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/stack/attack_hand(mob/user) - if (user.get_inactive_held_item() == src) + if(user.get_inactive_held_item() == src) if(zero_amount()) return return change_stack(user,1) else - ..() + . = ..() /obj/item/stack/AltClick(mob/living/user) if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) @@ -332,25 +338,28 @@ if(zero_amount()) return //get amount from user - var/min = 0 var/max = get_amount() var/stackmaterial = round(input(user,"How many sheets do you wish to take out of this stack? (Maximum [max])") as num) - if(stackmaterial == null || stackmaterial <= min || stackmaterial >= get_amount() || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + max = get_amount() + stackmaterial = min(max, stackmaterial) + if(stackmaterial == null || stackmaterial <= 0 || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return else - change_stack(user,stackmaterial) + change_stack(user, stackmaterial) to_chat(user, "You take [stackmaterial] sheets out of the stack") -/obj/item/stack/proc/change_stack(mob/user,amount) - var/obj/item/stack/F = new type(user, amount, FALSE) +/obj/item/stack/proc/change_stack(mob/user, amount) + if(!use(amount, TRUE, FALSE)) + return FALSE + var/obj/item/stack/F = new type(user? user : drop_location(), amount, FALSE) . = F F.copy_evidences(src) - user.put_in_hands(F, merge_stacks=FALSE) - add_fingerprint(user) - F.add_fingerprint(user) - use(amount, TRUE) - - + if(user) + if(!user.put_in_hands(F, merge_stacks = FALSE)) + F.forceMove(user.drop_location()) + add_fingerprint(user) + F.add_fingerprint(user) + zero_amount() /obj/item/stack/attackby(obj/item/W, mob/user, params) if(istype(W, merge_type)) diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 2d54eec334a..5c7df452f0d 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -75,16 +75,18 @@ return ..() /obj/item/watertank/attack_hand(mob/user) - if(src.loc == user) - ui_action_click() + . = ..() + if(.) return - ..() + if(loc == user) + ui_action_click() /obj/item/watertank/MouseDrop(obj/over_object) - var/mob/M = src.loc + var/mob/M = loc if(istype(M) && istype(over_object, /obj/screen/inventory/hand)) var/obj/screen/inventory/hand/H = over_object M.putItemFromInventoryInHandIfPossible(src, H.held_index) + return ..() /obj/item/watertank/attackby(obj/item/W, mob/user, params) if(W == noz) diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm index a9cbb9f73d6..b2464ca3cea 100644 --- a/code/game/objects/items/teleportation.dm +++ b/code/game/objects/items/teleportation.dm @@ -136,7 +136,7 @@ . = ..() active_portal_pairs = list() -/obj/item/hand_tele/pre_attackby(atom/target, mob/user, params) +/obj/item/hand_tele/pre_attack(atom/target, mob/user, params) if(try_dispel_portal(target, user)) return FALSE return ..() diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 34cdbd646b3..4554441cf06 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -422,10 +422,11 @@ . = ..() /obj/item/toy/prize/attack_hand(mob/user) + . = ..() + if(.) + return if(loc == user) attack_self(user) - else - . = ..() /obj/item/toy/prize/ripley name = "toy Ripley" @@ -504,7 +505,7 @@ // Talking toys are language universal, and thus all species can use them /obj/item/toy/talking/attack_alien(mob/user) - . = attack_hand(user) + return attack_hand(user) /obj/item/toy/talking/attack_self(mob/user) if(!cooldown) @@ -653,7 +654,8 @@ cards += "Ace of Clubs" cards += "Ace of Diamonds" - +//ATTACK HAND IGNORING PARENT RETURN VALUE +//ATTACK HAND NOT CALLING PARENT /obj/item/toy/cards/deck/attack_hand(mob/user) if(user.lying) return @@ -721,6 +723,7 @@ return ..() /obj/item/toy/cards/deck/MouseDrop(atom/over_object) + . = ..() var/mob/living/M = usr if(!istype(M) || usr.incapacitated() || usr.lying) return @@ -753,7 +756,8 @@ user.set_machine(src) interact(user) -/obj/item/toy/cards/cardhand/interact(mob/user) +/obj/item/toy/cards/cardhand/ui_interact(mob/user) + . = ..() var/dat = "You have:
" for(var/t in currenthand) dat += "A [t].
" diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index 774ff2f7ce2..50d90684da7 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -178,9 +178,9 @@ if(H != null) to_chat(user, "[src] is too cumbersome to carry in one hand!") return - if(src.loc != user) + if(loc != user) wield(user) - ..() + . = ..() /obj/item/twohanded/required/equipped(mob/user, slot) ..() diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 5b23ea6715c..1e76bc7160c 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -240,6 +240,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e //the obj is deconstructed into pieces, whether through careful disassembly or when destroyed. /obj/proc/deconstruct(disassembled = TRUE) + SendSignal(COMSIG_OBJ_DECONSTRUCT, disassembled) qdel(src) //what happens when the obj's health is below integrity_failure level. diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index ae85b3b5794..75cef4e92c4 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -28,7 +28,6 @@ var/list/req_one_access var/req_one_access_txt = "0" - /obj/vv_edit_var(vname, vval) switch(vname) if("obj_flags") @@ -110,18 +109,18 @@ return null /obj/proc/updateUsrDialog() - if(obj_flags & IN_USE) + if((obj_flags & IN_USE) && !(obj_flags & USES_TGUI)) var/is_in_use = 0 var/list/nearby = viewers(1, src) for(var/mob/M in nearby) if ((M.client && M.machine == src)) is_in_use = 1 - src.attack_hand(M) + ui_interact(usr) if(isAI(usr) || iscyborg(usr) || IsAdminGhost(usr)) if (!(usr in nearby)) if (usr.client && usr.machine==src) // && M.machine == src is omitted because if we triggered this by using the dialog, it doesn't matter if our machine changed in between triggering it and this - the dialog is probably still supposed to refresh. is_in_use = 1 - src.attack_ai(usr) + ui_interact(usr) // check for TK users @@ -131,7 +130,7 @@ if(usr.client && usr.machine==src) if(H.dna.check_mutation(TK)) is_in_use = 1 - src.attack_hand(usr) + ui_interact(usr) if (is_in_use) obj_flags |= IN_USE else @@ -153,9 +152,10 @@ /obj/attack_ghost(mob/user) - if(ui_interact(user) != -1) + . = ..() + if(.) return - ..() + ui_interact(user) /obj/proc/container_resist(mob/living/user) return @@ -195,10 +195,7 @@ /obj/get_spans() return ..() | SPAN_ROBOT -/obj/storage_contents_dump_act(obj/item/storage/src_object, mob/user) - return - -/obj/get_dumping_location(obj/item/storage/source,mob/user) +/obj/get_dumping_location(datum/component/storage/source,mob/user) return get_turf(src) /obj/proc/CanAStarPass() diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index cd265969ebb..dab6e463950 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -2,6 +2,7 @@ icon = 'icons/obj/structures.dmi' pressure_resistance = 8 max_integrity = 300 + interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT var/climb_time = 20 var/climb_stun = 20 var/climbable = FALSE @@ -26,16 +27,13 @@ /obj/structure/attack_hand(mob/user) . = ..() - add_fingerprint(user) + if(.) + return if(structureclimber && structureclimber != user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) structureclimber.Knockdown(40) structureclimber.visible_message("[structureclimber] has been knocked off [src].", "You're knocked off [src]!", "You see [structureclimber] get knocked off [src].") - interact(user) - -/obj/structure/interact(mob/user) - ui_interact(user) /obj/structure/ui_act(action, params) ..() @@ -49,15 +47,14 @@ if(user.canmove) climb_structure(user) return - if ((!( istype(O, /obj/item) ) || user.get_active_held_item() != O)) + if(!istype(O, /obj/item) || user.get_active_held_item() != O) return if(iscyborg(user)) return - if(!user.drop_all_held_items()) + if(!user.dropItemToGround(O)) return if (O.loc != src.loc) step(O, get_dir(O, src)) - return /obj/structure/proc/do_climb(atom/movable/A) if(climbable) diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index b053b987ca9..b758b333551 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -244,12 +244,15 @@ icon_state = "[base_icon]_hatched" /obj/structure/alien/egg/attack_paw(mob/living/user) - . = attack_hand(user) + return attack_hand(user) /obj/structure/alien/egg/attack_alien(mob/living/carbon/alien/user) - . = attack_hand(user) + return attack_hand(user) /obj/structure/alien/egg/attack_hand(mob/living/user) + . = ..() + if(.) + return if(user.getorgan(/obj/item/organ/alien/plasmavessel)) switch(status) if(BURST) diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm index 41ab6478976..f0a910b6ead 100644 --- a/code/game/objects/structures/barsigns.dm +++ b/code/game/objects/structures/barsigns.dm @@ -54,12 +54,13 @@ playsound(src.loc, 'sound/items/welder.ogg', 100, 1) /obj/structure/sign/barsign/attack_ai(mob/user) - return src.attack_hand(user) - - + return attack_hand(user) /obj/structure/sign/barsign/attack_hand(mob/user) - if (!src.allowed(user)) + . = ..() + if(.) + return + if(!allowed(user)) to_chat(user, "Access denied.") return if (broken) @@ -67,9 +68,6 @@ return pick_sign() - - - /obj/structure/sign/barsign/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/screwdriver)) if(!allowed(user)) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index e59780a54af..cc447a19ad5 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -298,12 +298,13 @@ LINEN BINS to_chat(user, "You hide [I] among the sheets.") - /obj/structure/bedsheetbin/attack_paw(mob/user) return attack_hand(user) - /obj/structure/bedsheetbin/attack_hand(mob/user) + . = ..() + if(.) + return if(user.lying) return if(amount >= 1) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 8332f1b338e..9dedae8c556 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -311,13 +311,14 @@ container_resist() /obj/structure/closet/attack_hand(mob/user) - ..() + . = ..() + if(.) + return if(user.lying && get_dist(src, user) > 0) return if(!toggle(user)) togglelock(user) - return /obj/structure/closet/attack_paw(mob/user) return attack_hand(user) @@ -339,7 +340,7 @@ return if(iscarbon(usr) || issilicon(usr) || isdrone(usr)) - attack_hand(usr) + return attack_hand(usr) else to_chat(usr, "This mob type can't use this verb.") diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm index b82aaf8a2d0..502b23354c5 100644 --- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm +++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm @@ -50,7 +50,7 @@ return 0 /obj/structure/closet/body_bag/MouseDrop(over_object, src_location, over_location) - ..() + . = ..() if(over_object == usr && Adjacent(usr) && (in_range(src, usr) || usr.contents.Find(src))) if(!ishuman(usr)) return 0 @@ -74,7 +74,7 @@ max_mob_size = MOB_SIZE_LARGE /obj/structure/closet/body_bag/bluespace/MouseDrop(over_object, src_location, over_location) - ..() + . = ..() if(over_object == usr && Adjacent(usr) && (in_range(src, usr) || usr.contents.Find(src))) if(!ishuman(usr)) return 0 diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm index 84f03399fd1..ff42ce5efb9 100644 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm @@ -42,4 +42,4 @@ new /obj/item/storage/bag/bio( src ) new /obj/item/clothing/suit/bio_suit/scientist( src ) new /obj/item/clothing/head/bio_hood/scientist( src ) - + diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index 831fe57d7aa..be0303f8997 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -15,7 +15,6 @@ new /obj/item/storage/belt/military(src) new /obj/item/crowbar/red(src) new /obj/item/clothing/glasses/night(src) - return /obj/structure/closet/syndicate/nuclear desc = "It's a storage unit for a Syndicate boarding party." @@ -27,7 +26,6 @@ new /obj/item/storage/box/teargas(src) new /obj/item/storage/backpack/duffelbag/syndie/med(src) new /obj/item/device/pda/syndicate(src) - return /obj/structure/closet/syndicate/resources desc = "An old, dusty locker." @@ -92,8 +90,6 @@ if(pickednum == 50) new /obj/item/tank/jetpack/carbondioxide(src) - return - /obj/structure/closet/syndicate/resources/everything desc = "It's an emergency storage closet for repairs." @@ -117,5 +113,3 @@ for(var/res in resources) var/obj/item/stack/R = new res(src) R.amount = R.max_amount - - return diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 0696d3512a3..2889a10e1d7 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -39,10 +39,11 @@ add_overlay("manifest") /obj/structure/closet/crate/attack_hand(mob/user) + . = ..() + if(.) + return if(manifest) tear_manifest(user) - return - ..() /obj/structure/closet/crate/open(mob/living/user) . = ..() diff --git a/code/game/objects/structures/crates_lockers/crates/large.dm b/code/game/objects/structures/crates_lockers/crates/large.dm index 30da3add672..7098520ef53 100644 --- a/code/game/objects/structures/crates_lockers/crates/large.dm +++ b/code/game/objects/structures/crates_lockers/crates/large.dm @@ -7,6 +7,9 @@ delivery_icon = "deliverybox" /obj/structure/closet/crate/large/attack_hand(mob/user) + . = ..() + if(.) + return add_fingerprint(user) if(manifest) tear_manifest(user) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index ed5eb2cce9e..734b645880a 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -155,9 +155,12 @@ update_icon() /obj/structure/displaycase/attack_paw(mob/user) - return src.attack_hand(user) + return attack_hand(user) /obj/structure/displaycase/attack_hand(mob/user) + . = ..() + if(.) + return user.changeNext_move(CLICK_CD_MELEE) if (showpiece && (broken || open)) to_chat(user, "You deactivate the hover field built into the case.") @@ -173,8 +176,6 @@ user.do_attack_animation(src, ATTACK_EFFECT_KICK) take_damage(2) - - /obj/structure/displaycase_chassis anchored = TRUE density = FALSE diff --git a/code/game/objects/structures/divine.dm b/code/game/objects/structures/divine.dm index 208bc79d4fe..4ffc2fe0601 100644 --- a/code/game/objects/structures/divine.dm +++ b/code/game/objects/structures/divine.dm @@ -8,7 +8,9 @@ can_buckle = 1 /obj/structure/sacrificealtar/attack_hand(mob/living/user) - ..() + . = ..() + if(.) + return if(!has_buckled_mobs()) return var/mob/living/L = locate() in buckled_mobs @@ -29,6 +31,9 @@ var/last_process = 0 /obj/structure/healingfountain/attack_hand(mob/living/user) + . = ..() + if(.) + return if(last_process + time_between_uses > world.time) to_chat(user, "The fountain appears to be empty.") return diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 790e0d1b66d..4f914642b43 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -20,6 +20,9 @@ qdel(src) /obj/structure/dresser/attack_hand(mob/user) + . = ..() + if(.) + return if(!Adjacent(user))//no tele-grooming return if(ishuman(user)) diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 88ad6223511..f73a2067478 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -68,6 +68,9 @@ /obj/structure/extinguisher_cabinet/attack_hand(mob/user) + . = ..() + if(.) + return if(iscyborg(user) || isalien(user)) return if(stored_extinguisher) @@ -95,7 +98,7 @@ /obj/structure/extinguisher_cabinet/attack_paw(mob/user) - attack_hand(user) + return attack_hand(user) /obj/structure/extinguisher_cabinet/AltClick(mob/living/user) if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index b4c14953c5a..e7a4333b744 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -50,6 +50,9 @@ /obj/structure/falsewall/attack_hand(mob/user) if(opening) return + . = ..() + if(.) + return opening = TRUE update_icon() @@ -185,7 +188,7 @@ /obj/structure/falsewall/uranium/attack_hand(mob/user) radiate() - ..() + . = ..() /obj/structure/falsewall/uranium/proc/radiate() if(!active) diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index b9f0da2b1b2..07341d89e3a 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -104,6 +104,9 @@ qdel(src) /obj/structure/fireaxecabinet/attack_hand(mob/user) + . = ..() + if(.) + return if(open || broken) if(fireaxe) user.put_in_hands(fireaxe) @@ -121,7 +124,7 @@ return /obj/structure/fireaxecabinet/attack_paw(mob/living/user) - attack_hand(user) + return attack_hand(user) /obj/structure/fireaxecabinet/attack_ai(mob/user) toggle_lock(user) diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 7d827abbb12..079ef931188 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -66,6 +66,9 @@ var/list/ckeys_that_took = list() /obj/structure/flora/tree/pine/xmas/presents/attack_hand(mob/living/user) + . = ..() + if(.) + return if(!user.ckey) return diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index 5ac250408f4..d9a4406acda 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -104,7 +104,8 @@ icon_state = "driverseat" /obj/structure/fluff/bus/passable/seat/driver/attack_hand(mob/user) - playsound(src.loc, 'sound/items/carhorn.ogg', 50, 1) + playsound(src, 'sound/items/carhorn.ogg', 50, 1) + . = ..() /obj/structure/fluff/paper name = "dense lining of papers" diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 3806c2411b5..7e79a8842de 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -161,6 +161,9 @@ new_spawn.mind.assigned_role = "Free Golem" /obj/effect/mob_spawn/human/golem/attack_hand(mob/user) + . = ..() + if(.) + return if(isgolem(user) && can_transfer) var/transfer_choice = alert("Transfer your soul to [src]? (Warning, your old body will die!)",,"Yes","No") if(transfer_choice != "Yes") @@ -173,7 +176,6 @@ create(ckey = user.ckey,name = user.real_name) user.death() return - ..() /obj/effect/mob_spawn/human/golem/servant has_owner = TRUE diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index f9828ea52af..f1fbd1febd1 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -91,7 +91,7 @@ take_damage(rand(5,10), BRUTE, "melee", 1) /obj/structure/grille/attack_paw(mob/user) - attack_hand(user) + return attack_hand(user) /obj/structure/grille/hulk_damage() return 60 @@ -103,6 +103,9 @@ return TRUE /obj/structure/grille/attack_hand(mob/living/user) + . = ..() + if(.) + return user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src, ATTACK_EFFECT_KICK) user.visible_message("[user] hits [src].", null, null, COMBAT_MESSAGE_RANGE) @@ -268,7 +271,7 @@ C.powernet.load += C.powernet.avail * 0.0375 // you can gain up to 3.5 via the 4x upgrades power is halved by the pole so thats 2x then 1X then .5X for 3.5x the 3 bounces shock. return ..() -/obj/structure/grille/get_dumping_location(obj/item/storage/source,mob/user) +/obj/structure/grille/get_dumping_location(datum/component/storage/source,mob/user) return null /obj/structure/grille/broken // Pre-broken grilles for map placement diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index dd1f5609be1..701a4d071cc 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -54,6 +54,9 @@ return ..() /obj/structure/guncase/attack_hand(mob/user) + . = ..() + if(.) + return if(iscyborg(user) || isalien(user)) return if(contents.len && open) diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm index eafae96b8e7..ceed9cb7595 100644 --- a/code/game/objects/structures/headpike.dm +++ b/code/game/objects/structures/headpike.dm @@ -38,7 +38,9 @@ add_overlay(H) /obj/structure/headpike/attack_hand(mob/user) - ..() + . = ..() + if(.) + return to_chat(user, "You take down [src].") victim.forceMove(drop_location()) victim = null diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm index b9a750d2df8..0e803247dec 100644 --- a/code/game/objects/structures/holosign.dm +++ b/code/game/objects/structures/holosign.dm @@ -22,6 +22,9 @@ return ..() /obj/structure/holosign/attack_hand(mob/living/user) + . = ..() + if(.) + return user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) user.changeNext_move(CLICK_CD_MELEE) take_damage(5 , BRUTE, "melee", 1) @@ -112,6 +115,9 @@ shockcd = FALSE /obj/structure/holosign/barrier/cyborg/hacked/attack_hand(mob/living/user) + . = ..() + if(.) + return if(!shockcd) if(ismob(user)) var/mob/living/M = user diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index a6f9ecb68f7..63f45781875 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -16,10 +16,9 @@ var/const/max_signs = 4 -/obj/structure/janitorialcart/New() +/obj/structure/janitorialcart/Initialize() + . = ..() create_reagents(100) - ..() - /obj/structure/janitorialcart/proc/wet_mop(obj/item/mop, mob/user) if(reagents.total_volume < 1) @@ -90,6 +89,9 @@ return ..() /obj/structure/janitorialcart/attack_hand(mob/user) + . = ..() + if(.) + return user.set_machine(src) var/dat if(mybag) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 0639ce26abc..b73c6e496cb 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -47,9 +47,8 @@ can_buckle = 1 max_integrity = 250 - /obj/structure/kitchenspike/attack_paw(mob/user) - return src.attack_hand(usr) + return attack_hand(user) /obj/structure/kitchenspike/crowbar_act(mob/living/user, obj/item/I) if(has_buckled_mobs()) @@ -61,6 +60,7 @@ deconstruct(TRUE) return TRUE +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/structure/kitchenspike/attack_hand(mob/user) if(VIABLE_MOB_CHECK(user.pulling) && user.a_intent == INTENT_GRAB && !has_buckled_mobs()) var/mob/living/L = user.pulling diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index 72572db686a..1e1db4ba930 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -110,6 +110,9 @@ add_fingerprint(user) /obj/structure/ladder/attack_hand(mob/user) + . = ..() + if(.) + return use(user) /obj/structure/ladder/attack_paw(mob/user) @@ -122,8 +125,10 @@ if(R.Adjacent(src)) return use(R) +//ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/structure/ladder/attack_ghost(mob/dead/observer/user) use(user, TRUE) + return ..() /obj/structure/ladder/proc/show_fluff_message(going_up, mob/user) if(going_up) diff --git a/code/game/objects/structures/life_candle.dm b/code/game/objects/structures/life_candle.dm index 1f4c672114d..dca838ca96e 100644 --- a/code/game/objects/structures/life_candle.dm +++ b/code/game/objects/structures/life_candle.dm @@ -25,6 +25,9 @@ var/respawn_sound = 'sound/magic/staff_animation.ogg' /obj/structure/life_candle/attack_hand(mob/user) + . = ..() + if(.) + return if(!user.mind) return if(user.mind in linked_minds) diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 7ae10816a60..f2635770c62 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -53,9 +53,12 @@ return TryToSwitchState(user) /obj/structure/mineral_door/attack_paw(mob/user) - return TryToSwitchState(user) + return attack_hand(user) /obj/structure/mineral_door/attack_hand(mob/user) + . = ..() + if(.) + return return TryToSwitchState(user) /obj/structure/mineral_door/CanPass(atom/movable/mover, turf/target) @@ -131,7 +134,7 @@ to_chat(user, "You finish digging.") deconstruct(TRUE) else if(user.a_intent != INTENT_HARM) - attack_hand(user) + return attack_hand(user) else return ..() diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 23d7682792e..4468cc0ba6e 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -15,6 +15,9 @@ obj_break(null, mapload) /obj/structure/mirror/attack_hand(mob/user) + . = ..() + if(.) + return if(broken || !Adjacent(user)) return @@ -118,6 +121,9 @@ ..() /obj/structure/mirror/magic/attack_hand(mob/user) + . = ..() + if(.) + return if(!ishuman(user)) return diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 7f25aaa18f7..44f91bd980b 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -58,9 +58,12 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an open() /obj/structure/bodycontainer/attack_paw(mob/user) - return src.attack_hand(user) + return attack_hand(user) /obj/structure/bodycontainer/attack_hand(mob/user) + . = ..() + if(.) + return if(locked) to_chat(user, "It's locked.") return @@ -316,9 +319,12 @@ GLOBAL_LIST_EMPTY(crematoriums) qdel(src) /obj/structure/tray/attack_paw(mob/user) - return src.attack_hand(user) + return attack_hand(user) /obj/structure/tray/attack_hand(mob/user) + . = ..() + if(.) + return if (src.connected) connected.close() add_fingerprint(user) diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index b3b3d553810..99e0b3c6e63 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -355,18 +355,24 @@ song.tempo = song.sanitize_tempo(song.tempo) // tick_lag isn't set when the map is loaded /obj/structure/piano/attack_hand(mob/user) - if(!user.IsAdvancedToolUser()) - to_chat(user, "You don't have the dexterity to do this!") - return 1 + . = ..() + if(.) + return interact(user) /obj/structure/piano/attack_paw(mob/user) - return src.attack_hand(user) + return attack_hand(user) /obj/structure/piano/interact(mob/user) + ui_interact(user) + +/obj/structure/piano/ui_interact(mob/user) if(!user || !anchored) return + if(!user.IsAdvancedToolUser()) + to_chat(user, "You don't have the dexterity to do this!") + return 1 user.set_machine(src) song.interact(user) diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index f6678328436..b43b7292f2a 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -39,7 +39,11 @@ else return ..() -/obj/structure/noticeboard/attack_hand(mob/user) +/obj/structure/noticeboard/interact(mob/user) + ui_interact(user) + +/obj/structure/noticeboard/ui_interact(mob/user) + . = ..() var/auth = allowed(user) var/dat = "[name]
" for(var/obj/item/P in src) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 3e92dd945cb..3a10d200a15 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -84,6 +84,9 @@ FLOOR SAFES /obj/structure/safe/attack_hand(mob/user) + . = ..() + if(.) + return user.set_machine(src) var/dat = "
" dat += "[open ? "Close" : "Open"] [src] | - [dial] +" diff --git a/code/game/objects/structures/spirit_board.dm b/code/game/objects/structures/spirit_board.dm index 9ab37e4fc00..104d02858dd 100644 --- a/code/game/objects/structures/spirit_board.dm +++ b/code/game/objects/structures/spirit_board.dm @@ -15,14 +15,16 @@ ..() /obj/structure/spirit_board/attack_hand(mob/user) - if(..()) + . = ..() + if(.) return spirit_board_pick_letter(user) +//ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/structure/spirit_board/attack_ghost(mob/dead/observer/user) spirit_board_pick_letter(user) - + return ..() /obj/structure/spirit_board/proc/spirit_board_pick_letter(mob/M) if(!spirit_board_checks(M)) diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 8a58cce1b0b..1f7991e3749 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -35,6 +35,9 @@ return ..() /obj/structure/statue/attack_hand(mob/living/user) + . = ..() + if(.) + return user.changeNext_move(CLICK_CD_MELEE) add_fingerprint(user) user.visible_message("[user] rubs some dust off from the [name]'s surface.", \ @@ -80,11 +83,11 @@ /obj/structure/statue/uranium/attack_hand(mob/user) radiate() - ..() + . = ..() /obj/structure/statue/uranium/attack_paw(mob/user) radiate() - ..() + . = ..() /obj/structure/statue/uranium/proc/radiate() if(!active) @@ -239,7 +242,7 @@ /obj/structure/statue/bananium/attack_hand(mob/user) honk() - ..() + . = ..() /obj/structure/statue/bananium/attack_paw(mob/user) honk() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index c83aa0efc7f..cceed2ef174 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -57,7 +57,7 @@ new /obj/structure/table/reinforced/brass(A) /obj/structure/table/attack_paw(mob/user) - attack_hand(user) + return attack_hand(user) /obj/structure/table/attack_hand(mob/living/user) if(Adjacent(user) && user.pulling && isliving(user.pulling)) @@ -78,8 +78,7 @@ else return user.stop_pulling() - else - ..() + return ..() /obj/structure/table/attack_tk() return FALSE @@ -138,7 +137,6 @@ if(T.contents.len > 0) // If the tray isn't empty var/list/obj/item/oldContents = T.contents.Copy() T.quick_empty() - for(var/obj/item/C in oldContents) C.forceMove(drop_location()) @@ -475,6 +473,7 @@ . = . || (mover.pass_flags & PASSTABLE) /obj/structure/rack/MouseDrop_T(obj/O, mob/user) + . = ..() if ((!( istype(O, /obj/item) ) || user.get_active_held_item() != O)) return if(!user.dropItemToGround(O)) @@ -482,7 +481,6 @@ if(O.loc != src.loc) step(O, get_dir(O, src)) - /obj/structure/rack/attackby(obj/item/W, mob/user, params) if (istype(W, /obj/item/wrench) && !(flags_1&NODECONSTRUCT_1)) W.play_tool_sound(src) @@ -497,6 +495,9 @@ attack_hand(user) /obj/structure/rack/attack_hand(mob/living/user) + . = ..() + if(.) + return if(user.IsKnockdown() || user.resting || user.lying || user.get_num_legs() < 2) return user.changeNext_move(CLICK_CD_MELEE) @@ -504,7 +505,6 @@ user.visible_message("[user] kicks [src].", null, null, COMBAT_MESSAGE_RANGE) take_damage(rand(4,8), BRUTE, "melee", 1) - /obj/structure/rack/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index 7c73cefb5b2..b1ad847cc8c 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -49,6 +49,9 @@ to_chat(user, "You slide the target into the stake.") /obj/structure/target_stake/attack_hand(mob/user) + . = ..() + if(.) + return if(pinned_target) removeTarget(user) diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm index 1c2c0c326ea..e520a972916 100644 --- a/code/game/objects/structures/transit_tubes/station.dm +++ b/code/game/objects/structures/transit_tubes/station.dm @@ -59,6 +59,9 @@ /obj/structure/transit_tube/station/attack_hand(mob/user) + . = ..() + if(.) + return if(!pod_moving) if(user.pulling && user.a_intent == INTENT_GRAB && isliving(user.pulling)) if(open_status == STATION_TUBE_OPEN) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index ec07a513808..456acb6c992 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -18,6 +18,9 @@ /obj/structure/toilet/attack_hand(mob/living/user) + . = ..() + if(.) + return if(swirlie) user.changeNext_move(CLICK_CD_MELEE) playsound(src.loc, "swing_hit", 25, 1) @@ -133,6 +136,9 @@ hiddenitem = new /obj/item/reagent_containers/food/urinalcake /obj/structure/urinal/attack_hand(mob/user) + . = ..() + if(.) + return if(user.pulling && user.a_intent == INTENT_GRAB && isliving(user.pulling)) var/mob/living/GM = user.pulling if(user.grab_state >= GRAB_AGGRESSIVE) @@ -228,8 +234,10 @@ anchored = TRUE mouse_opacity = MOUSE_OPACITY_TRANSPARENT - /obj/machinery/shower/attack_hand(mob/M) + . = ..() + if(.) + return on = !on update_icon() add_fingerprint(M) @@ -249,7 +257,6 @@ var/turf/open/tile = loc tile.MakeSlippery(TURF_WET_WATER, min_wet_time = 5 SECONDS, wet_time_to_add = 1 SECONDS) - /obj/machinery/shower/attackby(obj/item/I, mob/user, params) if(I.type == /obj/item/device/analyzer) to_chat(user, "The water temperature seems to be [watertemp].") @@ -452,6 +459,9 @@ /obj/structure/sink/attack_hand(mob/living/user) + . = ..() + if(.) + return if(!user || !istype(user)) return if(!iscarbon(user)) @@ -571,9 +581,10 @@ icon_state = "puddle" resistance_flags = UNACIDABLE +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/structure/sink/puddle/attack_hand(mob/M) icon_state = "puddle-splash" - ..() + . = ..() icon_state = "puddle" /obj/structure/sink/puddle/attackby(obj/item/O, mob/user, params) @@ -643,9 +654,11 @@ /obj/structure/curtain/attack_hand(mob/user) + . = ..() + if(.) + return playsound(loc, 'sound/effects/curtain.ogg', 50, 1) toggle() - ..() /obj/structure/curtain/deconstruct(disassembled = TRUE) new /obj/item/stack/sheet/cloth (loc, 2) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index f923453f624..d50839905a1 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -157,6 +157,9 @@ . = ..() /obj/structure/window/attack_hand(mob/user) + . = ..() + if(.) + return if(!can_be_reached(user)) return user.changeNext_move(CLICK_CD_MELEE) @@ -167,7 +170,6 @@ /obj/structure/window/attack_paw(mob/user) return attack_hand(user) - /obj/structure/window/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) //used by attack_alien, attack_animal, and attack_slime if(!can_be_reached(user)) return @@ -699,6 +701,9 @@ update_icon() /obj/structure/window/paperframe/attack_hand(mob/user) + . = ..() + if(.) + return add_fingerprint(user) if(user.a_intent != INTENT_HARM) user.changeNext_move(CLICK_CD_MELEE) diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index 889638b27e5..ffb672e7733 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -52,6 +52,9 @@ return ..() /turf/open/floor/light/attack_hand(mob/user) + . = ..() + if(.) + return if(!can_modify_colour) return if(!on) @@ -63,10 +66,9 @@ if(currentcolor > coloredlights.len) on = FALSE update_icon() - ..() //I am not sure what the parent procs have for attack_hand, best to check later. /turf/open/floor/light/attack_ai(mob/user) - attack_hand(user) + return attack_hand(user) /turf/open/floor/light/attackby(obj/item/C, mob/user, params) if(..()) diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm index 9c2495f8585..bdce6535ba5 100644 --- a/code/game/turfs/simulated/floor/reinf_floor.dm +++ b/code/game/turfs/simulated/floor/reinf_floor.dm @@ -75,12 +75,14 @@ ReplaceWithLattice() /turf/open/floor/engine/attack_paw(mob/user) - return src.attack_hand(user) + return attack_hand(user) /turf/open/floor/engine/attack_hand(mob/user) + . = ..() + if(.) + return user.Move_Pulled(src) - //air filled floors; used in atmos pressure chambers /turf/open/floor/engine/n2o diff --git a/code/game/turfs/simulated/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm index dc474d449dd..73de69ce353 100644 --- a/code/game/turfs/simulated/wall/mineral_walls.dm +++ b/code/game/turfs/simulated/wall/mineral_walls.dm @@ -73,7 +73,7 @@ /turf/closed/wall/mineral/uranium/attack_hand(mob/user) radiate() - ..() + . = ..() /turf/closed/wall/mineral/uranium/attackby(obj/item/W, mob/user, params) radiate() diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index a060b030a11..a9b3d5bd8c1 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -138,7 +138,7 @@ /turf/closed/wall/attack_paw(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) - return src.attack_hand(user) + return attack_hand(user) /turf/closed/wall/attack_animal(mob/living/simple_animal/M) @@ -162,12 +162,13 @@ return TRUE /turf/closed/wall/attack_hand(mob/user) + . = ..() + if(.) + return user.changeNext_move(CLICK_CD_MELEE) to_chat(user, "You push the wall but nothing happens!") playsound(src, 'sound/weapons/genhit.ogg', 25, 1) - src.add_fingerprint(user) - ..() - + add_fingerprint(user) /turf/closed/wall/attackby(obj/item/W, mob/user, params) user.changeNext_move(CLICK_CD_MELEE) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 8f628efc5f5..4d69af1563c 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -48,6 +48,7 @@ return INITIALIZE_HINT_NORMAL +//ATTACK GHOST IGNORING PARENT RETURN VALUE /turf/open/space/attack_ghost(mob/dead/observer/user) if(destination_z) var/turf/T = locate(destination_x, destination_y, destination_z) @@ -79,7 +80,7 @@ set_light(0) /turf/open/space/attack_paw(mob/user) - return src.attack_hand(user) + return attack_hand(user) /turf/open/space/proc/CanBuildHere() return TRUE diff --git a/code/modules/NTNet/relays.dm b/code/modules/NTNet/relays.dm index 1dac5ed0fd6..ab482f1f16e 100644 --- a/code/modules/NTNet/relays.dm +++ b/code/modules/NTNet/relays.dm @@ -94,9 +94,6 @@ SSnetworks.station_network.add_log("Quantum relay manually [enabled ? "enabled" : "disabled"].") update_icon() -/obj/machinery/ntnet_relay/attack_hand(mob/living/user) - ui_interact(user) - /obj/machinery/ntnet_relay/Initialize() uid = gl_uid++ component_parts = list() diff --git a/code/modules/VR/vr_sleeper.dm b/code/modules/VR/vr_sleeper.dm index 1ef8a71cb41..415a54a3161 100644 --- a/code/modules/VR/vr_sleeper.dm +++ b/code/modules/VR/vr_sleeper.dm @@ -36,6 +36,9 @@ /obj/machinery/vr_sleeper/attack_hand(mob/user) + . = ..() + if(.) + return if(occupant) ui_interact(user) else @@ -44,15 +47,12 @@ else open_machine() - /obj/machinery/vr_sleeper/relaymove(mob/user) open_machine() - /obj/machinery/vr_sleeper/container_resist(mob/living/user) open_machine() - /obj/machinery/vr_sleeper/Destroy() open_machine() cleanup_vr_human() @@ -64,11 +64,9 @@ you_die_in_the_game_you_die_for_real = TRUE sparks.start() - /obj/machinery/vr_sleeper/update_icon() icon_state = "[initial(icon_state)][state_open ? "-open" : ""]" - /obj/machinery/vr_sleeper/open_machine() if(!state_open) if(vr_human) @@ -77,20 +75,17 @@ SStgui.close_user_uis(occupant, src) ..() - /obj/machinery/vr_sleeper/close_machine() ..() if(occupant) ui_interact(occupant) - /obj/machinery/vr_sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "vr_sleeper", "VR Sleeper", 475, 340, master_ui, state) ui.open() - /obj/machinery/vr_sleeper/ui_act(action, params) if(..()) return @@ -131,7 +126,6 @@ open_machine() . = TRUE - /obj/machinery/vr_sleeper/ui_data(mob/user) var/list/data = list() if(vr_human && !QDELETED(vr_human)) @@ -149,11 +143,9 @@ data["isoccupant"] = (user == occupant) return data - /obj/machinery/vr_sleeper/proc/get_vr_spawnpoint() //proc so it can be overriden for team games or something return safepick(available_vr_spawnpoints[vr_category]) - /obj/machinery/vr_sleeper/proc/build_virtual_human(mob/living/carbon/human/H, location, transfer = TRUE) if(H) cleanup_vr_human() @@ -176,13 +168,11 @@ /obj/machinery/vr_sleeper/proc/cleanup_vr_human() if(vr_human) - vr_human.death(0) - + vr_human.death(FALSE) /obj/effect/landmark/vr_spawn //places you can spawn in VR, auto selected by the vr_sleeper during get_vr_spawnpoint() var/vr_category = "default" //So we can have specific sleepers, eg: "Basketball VR Sleeper", etc. - /datum/outfit/vr_basic name = "basic vr" uniform = /obj/item/clothing/under/color/random diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index c41fa4c346f..5bc0e27c364 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -31,6 +31,7 @@ playsound(get_turf(src), 'sound/items/party_horn.ogg', 50, 1, -1) qdel(src) +//ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/effect/fun_balloon/attack_ghost(mob/user) if(!user.client || !user.client.holder || popped) return diff --git a/code/modules/admin/sound_emitter.dm b/code/modules/admin/sound_emitter.dm index 87024f78323..298e38f2956 100644 --- a/code/modules/admin/sound_emitter.dm +++ b/code/modules/admin/sound_emitter.dm @@ -44,6 +44,7 @@ if(user.client.holder) to_chat(user, "Alt-click it to quickly activate it!") +//ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/effect/sound_emitter/attack_ghost(mob/user) if(!check_rights_for(user.client, R_SOUNDS)) examine(user) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 2e12f536083..9e8b1853407 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -50,7 +50,7 @@ if(holder) to_chat(src, "Error: Admin-PM: Client not found.") return - + var/datum/admin_help/AH = C.current_ticket if(AH) @@ -84,7 +84,7 @@ recipient = GLOB.directory[whom] else if(istype(whom, /client)) recipient = whom - + if(irc) if(!ircreplyamount) //to prevent people from spamming irc diff --git a/code/modules/antagonists/abductor/machinery/camera.dm b/code/modules/antagonists/abductor/machinery/camera.dm index cb57658b3ae..41cfa6a954a 100644 --- a/code/modules/antagonists/abductor/machinery/camera.dm +++ b/code/modules/antagonists/abductor/machinery/camera.dm @@ -58,11 +58,6 @@ var/datum/species/abductor/S = H.dna.species return S.scientist -/obj/machinery/computer/camera_advanced/abductor/attack_hand(mob/user) - if(!isabductor(user)) - return - return ..() - /datum/action/innate/teleport_in name = "Send To" icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm index bbb224beeb0..1b11094d431 100644 --- a/code/modules/antagonists/abductor/machinery/console.dm +++ b/code/modules/antagonists/abductor/machinery/console.dm @@ -26,7 +26,8 @@ var/list/datum/icon_snapshot/disguises = list() /obj/machinery/abductor/console/attack_hand(mob/user) - if(..()) + . = ..() + if(.) return if(!isabductor(user)) to_chat(user, "You start mashing alien buttons at random!") diff --git a/code/modules/antagonists/abductor/machinery/dispenser.dm b/code/modules/antagonists/abductor/machinery/dispenser.dm index ae095c12e67..c837adf1f02 100644 --- a/code/modules/antagonists/abductor/machinery/dispenser.dm +++ b/code/modules/antagonists/abductor/machinery/dispenser.dm @@ -24,7 +24,8 @@ amounts[i] = rand(1,5) /obj/machinery/abductor/gland_dispenser/attack_hand(mob/user) - if(..()) + . = ..() + if(.) return if(!isabductor(user)) return diff --git a/code/modules/antagonists/abductor/machinery/experiment.dm b/code/modules/antagonists/abductor/machinery/experiment.dm index cf1329aec99..527913e6aa9 100644 --- a/code/modules/antagonists/abductor/machinery/experiment.dm +++ b/code/modules/antagonists/abductor/machinery/experiment.dm @@ -23,7 +23,8 @@ close_machine(target) /obj/machinery/abductor/experiment/attack_hand(mob/user) - if(..()) + . = ..() + if(.) return experimentUI(user) diff --git a/code/modules/antagonists/changeling/powers/transform.dm b/code/modules/antagonists/changeling/powers/transform.dm index a977bab3e01..84e831ff3d9 100644 --- a/code/modules/antagonists/changeling/powers/transform.dm +++ b/code/modules/antagonists/changeling/powers/transform.dm @@ -10,79 +10,86 @@ name = "flesh" flags_1 = NODROP_1 +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/glasses/changeling/attack_hand(mob/user) if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) to_chat(user, "You reabsorb [src] into your body.") qdel(src) return - ..() + . = ..() /obj/item/clothing/under/changeling name = "flesh" flags_1 = NODROP_1 +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/under/changeling/attack_hand(mob/user) if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) to_chat(user, "You reabsorb [src] into your body.") qdel(src) return - ..() + . = ..() /obj/item/clothing/suit/changeling name = "flesh" flags_1 = NODROP_1 allowed = list(/obj/item/changeling) +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/suit/changeling/attack_hand(mob/user) if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) to_chat(user, "You reabsorb [src] into your body.") qdel(src) return - ..() + . = ..() /obj/item/clothing/head/changeling name = "flesh" flags_1 = NODROP_1 +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/head/changeling/attack_hand(mob/user) if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) to_chat(user, "You reabsorb [src] into your body.") qdel(src) return - ..() + . = ..() /obj/item/clothing/shoes/changeling name = "flesh" flags_1 = NODROP_1 +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/shoes/changeling/attack_hand(mob/user) if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) to_chat(user, "You reabsorb [src] into your body.") qdel(src) return - ..() + . = ..() /obj/item/clothing/gloves/changeling name = "flesh" flags_1 = NODROP_1 +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/gloves/changeling/attack_hand(mob/user) if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) to_chat(user, "You reabsorb [src] into your body.") qdel(src) return - ..() + . = ..() /obj/item/clothing/mask/changeling name = "flesh" flags_1 = NODROP_1 +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/mask/changeling/attack_hand(mob/user) if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) to_chat(user, "You reabsorb [src] into your body.") qdel(src) return - ..() + . = ..() /obj/item/changeling name = "flesh" @@ -90,12 +97,13 @@ slot_flags = ALL allowed = list(/obj/item/changeling) +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/changeling/attack_hand(mob/user) if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) to_chat(user, "You reabsorb [src] into your body.") qdel(src) return - ..() + . = ..() //Change our DNA to that of somebody we've absorbed. /obj/effect/proc_holder/changeling/transform/sting_action(mob/living/carbon/human/user) diff --git a/code/modules/antagonists/clockcult/clock_effects/city_of_cogs_rift.dm b/code/modules/antagonists/clockcult/clock_effects/city_of_cogs_rift.dm index c0cbca14a50..b6b5ca5cd6b 100644 --- a/code/modules/antagonists/clockcult/clock_effects/city_of_cogs_rift.dm +++ b/code/modules/antagonists/clockcult/clock_effects/city_of_cogs_rift.dm @@ -36,6 +36,7 @@ return . = ..() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/effect/clockwork/city_of_cogs_rift/attack_hand(atom/movable/AM) beckon(AM) diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm index 98719a06def..2d3856f2e02 100644 --- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm +++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm @@ -26,14 +26,15 @@ /obj/effect/clockwork/sigil/attack_tk(mob/user) return //you can't tk stomp sigils, but you can hit them with something +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/effect/clockwork/sigil/attack_hand(mob/user) if(iscarbon(user) && !user.stat) if(is_servant_of_ratvar(user) && user.a_intent != INTENT_HARM) return ..() user.visible_message("[user] stamps out [src]!", "You stomp on [src], scattering it into thousands of particles.") qdel(src) - return 1 - ..() + return TRUE + . = ..() /obj/effect/clockwork/sigil/ex_act(severity) visible_message("[src] scatters into thousands of particles.") diff --git a/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm b/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm index 3d41d8aa8a5..31c58837905 100644 --- a/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm +++ b/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm @@ -57,11 +57,13 @@ if(is_servant_of_ratvar(user) || isobserver(user)) to_chat(user, "It has [uses] use\s remaining.") +//ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/effect/clockwork/spatial_gateway/attack_ghost(mob/user) if(linked_gateway) user.forceMove(get_turf(linked_gateway)) ..() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/effect/clockwork/spatial_gateway/attack_hand(mob/living/user) if(!uses) return FALSE diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm index 158a644c237..5f5bc1b58a8 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm @@ -36,10 +36,11 @@ speed_multiplier = 0 no_cost = TRUE +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clockwork/slab/debug/attack_hand(mob/living/user) - ..() if(!is_servant_of_ratvar(user)) add_servant_of_ratvar(user) + return ..() /obj/item/clockwork/slab/cyborg //three scriptures, plus a spear and fabricator clockwork_desc = "A divine link to the Celestial Derelict, allowing for limited recital of scripture." diff --git a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm index 396402584c8..ca5fe74f2e9 100644 --- a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm +++ b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm @@ -30,12 +30,14 @@ ..() clockwork_desc = initial(clockwork_desc) +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clockwork/construct_chassis/attack_hand(mob/living/user) if(w_class >= WEIGHT_CLASS_HUGE) to_chat(user, "[src] is too cumbersome to carry! Drag it around instead!") return . = ..() +//ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/item/clockwork/construct_chassis/attack_ghost(mob/user) if(!SSticker.mode) to_chat(user, "You cannot use that before the game has started.") diff --git a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm index fc11da99713..c89a04c932e 100644 --- a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm +++ b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm @@ -66,11 +66,10 @@ new/obj/item/stack/tile/brass(user.loc, 5) to_chat(user, "You use [get_clockwork_power() ? "some":"all"] of [src]'s power to produce 5 brass sheets. It now has access to [DisplayPower(get_clockwork_power())] of power.") -/obj/item/clockwork/replica_fabricator/pre_attackby(atom/target, mob/living/user, params) +/obj/item/clockwork/replica_fabricator/pre_attack(atom/target, mob/living/user, params) if(!target || !user || !is_servant_of_ratvar(user) || istype(target, /obj/item/storage)) return TRUE return fabricate(target, user) - return TRUE //A note here; return values are for if we CAN BE PUT ON A TABLE, not IF WE ARE SUCCESSFUL, unless no_table_check is TRUE /obj/item/clockwork/replica_fabricator/proc/fabricate(atom/target, mob/living/user, silent, no_table_check) diff --git a/code/modules/antagonists/clockcult/clock_structure.dm b/code/modules/antagonists/clockcult/clock_structure.dm index 6c3f3a0c0b6..a7eb192dc86 100644 --- a/code/modules/antagonists/clockcult/clock_structure.dm +++ b/code/modules/antagonists/clockcult/clock_structure.dm @@ -85,7 +85,7 @@ /obj/structure/destructible/clockwork/attack_ai(mob/user) if(is_servant_of_ratvar(user)) - attack_hand(user) + return attack_hand(user) /obj/structure/destructible/clockwork/attack_animal(mob/living/simple_animal/M) if(is_servant_of_ratvar(M)) diff --git a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm index 84ad19f6e13..dda73a70256 100644 --- a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm +++ b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm @@ -351,6 +351,7 @@ T.ratvar_act(dist) CHECK_TICK +//ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/structure/destructible/clockwork/massive/celestial_gateway/attack_ghost(mob/user) if(!IsAdminGhost(user)) return ..() diff --git a/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm b/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm index 51d42611d20..cb13fdd6165 100644 --- a/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm +++ b/code/modules/antagonists/clockcult/clock_structures/clockwork_obelisk.dm @@ -42,6 +42,9 @@ return affected /obj/structure/destructible/clockwork/powered/clockwork_obelisk/attack_hand(mob/living/user) + . = ..() + if(.) + return if(!is_servant_of_ratvar(user) || !can_access_clockwork_power(src, hierophant_cost) || !anchored) to_chat(user, "You place your hand on [src], but it doesn't react.") return diff --git a/code/modules/antagonists/clockcult/clock_structures/eminence_spire.dm b/code/modules/antagonists/clockcult/clock_structures/eminence_spire.dm index 121961e0d8e..8739cb368b7 100644 --- a/code/modules/antagonists/clockcult/clock_structures/eminence_spire.dm +++ b/code/modules/antagonists/clockcult/clock_structures/eminence_spire.dm @@ -12,6 +12,9 @@ var/kingmaking /obj/structure/destructible/clockwork/eminence_spire/attack_hand(mob/living/user) + . = ..() + if(.) + return if(!is_servant_of_ratvar(user)) to_chat(user, "You can tell how powerful [src] is; you know better than to touch it.") return @@ -42,6 +45,7 @@ to_chat(user, "You feel the omniscient gaze turn into a puzzled frown. Perhaps you should just stick to building.") return +//ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/structure/destructible/clockwork/eminence_spire/attack_ghost(mob/user) if(!IsAdminGhost(user)) return diff --git a/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm b/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm index 2be948d7caf..7654c0203b8 100644 --- a/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm +++ b/code/modules/antagonists/clockcult/clock_structures/heralds_beacon.dm @@ -59,6 +59,9 @@ to_chat(user, "There are [voters.len]/[votes_needed] votes to activate the beacon!") /obj/structure/destructible/clockwork/heralds_beacon/attack_hand(mob/living/user) + . = ..() + if(.) + return if(!is_servant_of_ratvar(user)) to_chat(user, "You can tell how powerful [src] is; you know better than to touch it.") return diff --git a/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm b/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm index 447b077d871..df1231442a2 100644 --- a/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm +++ b/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm @@ -31,6 +31,9 @@ return TRUE /obj/structure/destructible/clockwork/powered/mania_motor/attack_hand(mob/living/user) + . = ..() + if(.) + return if(user.canUseTopic(src, !issilicon(user), NO_DEXTERY) && is_servant_of_ratvar(user)) if(!can_access_clockwork_power(src, mania_cost)) to_chat(user, "[src] needs more power to function!") diff --git a/code/modules/antagonists/clockcult/clock_structures/ratvar_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ratvar_the_clockwork_justicar.dm index 06513e80f99..9fbcdfd2232 100644 --- a/code/modules/antagonists/clockcult/clock_structures/ratvar_the_clockwork_justicar.dm +++ b/code/modules/antagonists/clockcult/clock_structures/ratvar_the_clockwork_justicar.dm @@ -38,6 +38,7 @@ STOP_PROCESSING(SSobj, src) return ..() +//ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/structure/destructible/clockwork/massive/ratvar/attack_ghost(mob/dead/observer/O) var/alertresult = alert(O, "Embrace the Justiciar's light? You can no longer be cloned!",,"Yes", "No") if(alertresult == "No" || QDELETED(O) || !istype(O) || !O.key) diff --git a/code/modules/antagonists/clockcult/clock_structures/trap_triggers/lever.dm b/code/modules/antagonists/clockcult/clock_structures/trap_triggers/lever.dm index 4d11cc5f39c..12e4b62a652 100644 --- a/code/modules/antagonists/clockcult/clock_structures/trap_triggers/lever.dm +++ b/code/modules/antagonists/clockcult/clock_structures/trap_triggers/lever.dm @@ -7,6 +7,9 @@ icon_state = "lever" /obj/structure/destructible/clockwork/trap/trigger/lever/attack_hand(mob/living/user) + . = ..() + if(.) + return user.visible_message("[user] pulls [src]!", "You pull [src]. It clicks, then lifts back upwards.") if(wired_to.len) audible_message("You hear gears clanking.") diff --git a/code/modules/antagonists/clockcult/clock_structures/trap_triggers/repeater.dm b/code/modules/antagonists/clockcult/clock_structures/trap_triggers/repeater.dm index 68e8cc00e8a..41292f818df 100644 --- a/code/modules/antagonists/clockcult/clock_structures/trap_triggers/repeater.dm +++ b/code/modules/antagonists/clockcult/clock_structures/trap_triggers/repeater.dm @@ -7,6 +7,9 @@ icon_state = "repeater" /obj/structure/destructible/clockwork/trap/trigger/repeater/attack_hand(mob/living/user) + . = ..() + if(.) + return if(!is_servant_of_ratvar(user)) return if(!isprocessing) diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index 64c8ebcd99a..3e8fda9d45b 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -81,6 +81,9 @@ break_message = "The altar shatters, leaving only the wailing of the damned!" /obj/structure/destructible/cult/talisman/attack_hand(mob/living/user) + . = ..() + if(.) + return if(!iscultist(user)) to_chat(user, "You're pretty sure you know exactly what this is used for and you can't seem to touch it.") return @@ -114,6 +117,9 @@ break_message = "The force breaks apart into shards with a howling scream!" /obj/structure/destructible/cult/forge/attack_hand(mob/living/user) + . = ..() + if(.) + return if(!iscultist(user)) to_chat(user, "The heat radiating from [src] pushes you back.") return @@ -234,6 +240,9 @@ break_message = "The books and tomes of the archives burn into ash as the desk shatters!" /obj/structure/destructible/cult/tome/attack_hand(mob/living/user) + . = ..() + if(.) + return if(!iscultist(user)) to_chat(user, "These books won't open and it hurts to even try and read the covers.") return diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index 8474bd63f1e..763d9adaa89 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -67,6 +67,9 @@ Runes can either be invoked by one's self or with many different cultists. Each qdel(src) /obj/effect/rune/attack_hand(mob/living/user) + . = ..() + if(.) + return if(!iscultist(user)) to_chat(user, "You aren't able to understand the words of [src].") return diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm index ad01e1edbd0..db85b8d1396 100644 --- a/code/modules/antagonists/devil/true_devil/_true_devil.dm +++ b/code/modules/antagonists/devil/true_devil/_true_devil.dm @@ -141,6 +141,7 @@ return 0 return ..() +//ATTACK GHOST IGNORING PARENT RETURN VALUE /mob/living/carbon/true_devil/attack_ghost(mob/dead/observer/user as mob) if(ascended || user.mind.soulOwner == src.mind) var/mob/living/simple_animal/imp/S = new(get_turf(loc)) @@ -162,7 +163,8 @@ //They're immune to fire. /mob/living/carbon/true_devil/attack_hand(mob/living/carbon/human/M) - if(..()) + . = ..() + if(.) switch(M.a_intent) if ("harm") var/damage = rand(1, 5) diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index 3a4d200c59d..28df23a0b0d 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -232,9 +232,6 @@ var/volume = (get_time_left() <= 20 ? 30 : 5) playsound(loc, 'sound/items/timer.ogg', volume, 0) -/obj/machinery/nuclearbomb/attack_paw(mob/user) - return attack_hand(user) - /obj/machinery/nuclearbomb/ui_interact(mob/user, ui_key="main", datum/tgui/ui=null, force_open=0, datum/tgui/master_ui=null, datum/ui_state/state=GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) diff --git a/code/modules/antagonists/swarmer/swarmer.dm b/code/modules/antagonists/swarmer/swarmer.dm index e456dfee513..1a55afa7550 100644 --- a/code/modules/antagonists/swarmer/swarmer.dm +++ b/code/modules/antagonists/swarmer/swarmer.dm @@ -35,6 +35,9 @@ notify_ghosts("A swarmer shell has been created in [A.name].", 'sound/effects/bin_close.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE) /obj/effect/mob_spawn/swarmer/attack_hand(mob/living/user) + . = ..() + if(.) + return to_chat(user, "Picking up the swarmer may cause it to activate. You should be careful about this.") /obj/effect/mob_spawn/swarmer/attackby(obj/item/W, mob/user, params) diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 78a749033a4..5af72b4261b 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -116,5 +116,4 @@ return TRUE /obj/item/device/assembly/interact(mob/user) - return //HTML MENU FOR WIRES GOES HERE - + return ui_interact(user) diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 1e528d48242..25271c4d9b7 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -73,7 +73,8 @@ STOP_PROCESSING(SSobj, src) return -/obj/item/device/assembly/health/interact(mob/user as mob)//TODO: Change this to the wires thingy +/obj/item/device/assembly/health/ui_interact(mob/user as mob)//TODO: Change this to the wires thingy + . = ..() if(!secured) user.show_message("The [name] is unsecured!") return 0 @@ -82,8 +83,6 @@ dat += "
Health: [health_scan]" user << browse(dat, "window=hscan") onclose(user, "hscan") - return - /obj/item/device/assembly/health/Topic(href, href_list) ..() diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 439ea314bb4..79a92af527c 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -74,11 +74,12 @@ a_right.holder_movement() /obj/item/device/assembly_holder/attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess + . = ..() + if(.) + return if(a_left && a_right) a_left.holder_movement() a_right.holder_movement() - ..() - return /obj/item/device/assembly_holder/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/screwdriver)) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 8c46d305916..d18b41c68ba 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -127,7 +127,8 @@ return return refreshBeam() -/obj/item/device/assembly/infra/interact(mob/user)//TODO: change this this to the wire control panel +/obj/item/device/assembly/infra/ui_interact(mob/user)//TODO: change this this to the wire control panel + . = ..() if(is_secured(user)) user.set_machine(src) var/dat = "Infrared Laser\nStatus: [on ? "On" : "Off"]
\nVisibility: [visible ? "Visible" : "Invisible"]
\n
" diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 1798e95d4ac..97d03aa12d1 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -90,6 +90,7 @@ playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3) +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/device/assembly/mousetrap/attack_hand(mob/living/carbon/human/user) if(armed) if((user.has_trait(TRAIT_DUMB) || user.has_trait(TRAIT_CLUMSY)) && prob(50)) @@ -100,7 +101,7 @@ user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \ "You accidentally trigger [src]!") return - ..() + return ..() /obj/item/device/assembly/mousetrap/Crossed(atom/movable/AM as mob|obj) diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 81cc09243c3..df852fc135e 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -93,7 +93,8 @@ holder.update_icon() return -/obj/item/device/assembly/prox_sensor/interact(mob/user)//TODO: Change this to the wires thingy +/obj/item/device/assembly/prox_sensor/ui_interact(mob/user)//TODO: Change this to the wires thingy + . = ..() if(is_secured(user)) var/second = time % 60 var/minute = (time - second) / 60 diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 4f6b3effecc..e7a21ad1cdd 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -48,7 +48,8 @@ holder.update_icon() return -/obj/item/device/assembly/signaler/interact(mob/user, flag1) +/obj/item/device/assembly/signaler/ui_interact(mob/user, flag1) + . = ..() if(is_secured(user)) var/t1 = "-------" var/dat = {" diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index b434cc6b438..3d9d782a165 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -79,7 +79,8 @@ holder.update_icon() -/obj/item/device/assembly/timer/interact(mob/user)//TODO: Have this use the wires +/obj/item/device/assembly/timer/ui_interact(mob/user)//TODO: Have this use the wires + . = ..() if(is_secured(user)) var/second = time % 60 var/minute = (time - second) / 60 diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm index 79578b290de..1e6dc1756c8 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm @@ -18,6 +18,8 @@ It's like a regular ol' straight pipe, but you can turn it on and off. construction_type = /obj/item/pipe/binary pipe_state = "mvalve" + var/switching = FALSE + /obj/machinery/atmospherics/components/binary/valve/open open = TRUE @@ -50,13 +52,20 @@ It's like a regular ol' straight pipe, but you can turn it on and off. return /obj/machinery/atmospherics/components/binary/valve/attack_hand(mob/user) + . = ..() + if(.) + return add_fingerprint(usr) update_icon_nopipes(1) + if(switching) + return + switching = TRUE sleep(10) if(open) close() - return - open() + else + open() + switching = FALSE /obj/machinery/atmospherics/components/binary/valve/digital // can be controlled by AI name = "digital valve" @@ -66,7 +75,7 @@ It's like a regular ol' straight pipe, but you can turn it on and off. pipe_state = "dvalve" /obj/machinery/atmospherics/components/binary/valve/digital/attack_ai(mob/user) - return src.attack_hand(user) + return attack_hand(user) /obj/machinery/atmospherics/components/binary/valve/digital/update_icon_nopipes(animation) if(!is_operational()) diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index 3eb38fd2990..a0a3db2fa20 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -100,7 +100,6 @@ ..() to_chat(user, status()) - /obj/machinery/meter/wrench_act(mob/user, obj/item/I) to_chat(user, "You begin to unfasten \the [src]...") if (I.use_tool(src, user, 40, volume=50)) @@ -116,19 +115,11 @@ new /obj/item/pipe_meter(loc) qdel(src) -/obj/machinery/meter/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/meter/attack_paw(mob/user) - return attack_hand(user) - -/obj/machinery/meter/attack_hand(mob/user) - +/obj/machinery/meter/interact(mob/user) if(stat & (NOPOWER|BROKEN)) - return 1 + return else - to_chat(usr, status()) - return 1 + to_chat(user, status()) /obj/machinery/meter/singularity_pull(S, current_size) ..() diff --git a/code/modules/awaymissions/bluespaceartillery.dm b/code/modules/awaymissions/bluespaceartillery.dm index d98be456ff4..87b97367221 100644 --- a/code/modules/awaymissions/bluespaceartillery.dm +++ b/code/modules/awaymissions/bluespaceartillery.dm @@ -25,8 +25,8 @@ /obj/structure/artilleryplaceholder/decorative density = FALSE -/obj/machinery/artillerycontrol/attack_hand(mob/user) - user.set_machine(src) +/obj/machinery/artillerycontrol/ui_interact(mob/user) + . = ..() var/dat = "Bluespace Artillery Control:
" dat += "Locked on
" dat += "Charge progress: [reload]/[reload_cooldown]:
" @@ -34,7 +34,6 @@ dat += "Deployment of weapon authorized by
Nanotrasen Naval Command

Remember, friendly fire is grounds for termination of your contract and life.
" user << browse(dat, "window=scroll") onclose(user, "scroll") - return /obj/machinery/artillerycontrol/Topic(href, href_list) if(..()) diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index 7fd4e8ba19e..728068d3302 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -49,6 +49,7 @@ to_chat(M, "\The [src] has been returned to base!") STOP_PROCESSING(SSobj, src) +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/twohanded/ctf/attack_hand(mob/living/user) if(!is_ctf_target(user) && !anyonecanpickup) to_chat(user, "Non players shouldn't be moving the flag!") @@ -70,6 +71,7 @@ if(istype(mob_area, /area/ctf)) to_chat(M, "\The [src] has been taken!") STOP_PROCESSING(SSobj, src) + ..() /obj/item/twohanded/ctf/dropped(mob/user) ..() @@ -204,6 +206,7 @@ ctf_gear = /datum/outfit/ctf/blue instagib_gear = /datum/outfit/ctf/blue/instagib +//ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/machinery/capture_the_flag/attack_ghost(mob/user) if(ctf_enabled == FALSE) if(user.client && user.client.holder) @@ -663,6 +666,9 @@ capture(user) /obj/machinery/control_point/attack_hand(mob/user) + . = ..() + if(.) + return capture(user) /obj/machinery/control_point/proc/capture(mob/user) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 3f25bce2ae7..21a613845d4 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -27,6 +27,7 @@ var/show_flavour = TRUE var/banType = "lavaland" +//ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/effect/mob_spawn/attack_ghost(mob/user) if(!SSticker.HasRoundStarted() || !loc) return @@ -527,6 +528,7 @@ outfit = /datum/outfit/spacebartender assignedrole = "Space Bar Patron" +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/effect/mob_spawn/human/alive/space_bar_patron/attack_hand(mob/user) var/despawn = alert("Return to cryosleep? (Warning, Your mob will be deleted!)",,"Yes","No") if(despawn == "No" || !loc || !Adjacent(user)) diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 90b2e3a02ec..80a543a0214 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -61,6 +61,9 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) icon_state = "off" /obj/machinery/gateway/attack_hand(mob/user) + . = ..() + if(.) + return if(!detect()) return if(!active) diff --git a/code/modules/awaymissions/mission_code/Cabin.dm b/code/modules/awaymissions/mission_code/Cabin.dm index 7b0a3121b64..a13fecd11c4 100644 --- a/code/modules/awaymissions/mission_code/Cabin.dm +++ b/code/modules/awaymissions/mission_code/Cabin.dm @@ -28,12 +28,10 @@ ..() toggleFirepit() -/obj/structure/firepit/attack_hand(mob/living/user) +/obj/structure/firepit/interact(mob/living/user) if(active) - active = 0 + active = FALSE toggleFirepit() - else - ..() /obj/structure/firepit/attackby(obj/item/W,mob/living/user,params) if(!active) @@ -48,6 +46,7 @@ W.fire_act() /obj/structure/firepit/proc/toggleFirepit() + active = !active if(active) set_light(8) icon_state = "firepit-active" diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index b8d6b87f840..ba06b969599 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -70,9 +70,7 @@ var/chargesa = 1 var/insistinga = 0 -/obj/machinery/wish_granter_dark/attack_hand(mob/living/carbon/human/user) - usr.set_machine(src) - +/obj/machinery/wish_granter_dark/interact(mob/living/carbon/human/user) if(chargesa <= 0) to_chat(user, "The Wish Granter lies silent.") return diff --git a/code/modules/awaymissions/signpost.dm b/code/modules/awaymissions/signpost.dm index cbf4dea9063..fb542d92b97 100644 --- a/code/modules/awaymissions/signpost.dm +++ b/code/modules/awaymissions/signpost.dm @@ -16,6 +16,9 @@ return attack_hand(user) /obj/structure/signpost/attack_hand(mob/user) + . = ..() + if(.) + return switch(alert(question,name,"Yes","No")) if("Yes") var/turf/T = find_safe_turf(zlevels=zlevels) diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm index ce9a3ca1dbf..419a7252d73 100644 --- a/code/modules/clothing/shoes/colour.dm +++ b/code/modules/clothing/shoes/colour.dm @@ -104,10 +104,10 @@ src.icon_state = "orange1" return -/obj/item/clothing/shoes/sneakers/orange/attack_hand(mob/user) +/obj/item/clothing/shoes/sneakers/orange/allow_attack_hand_drop(mob/user) if(ishuman(user)) var/mob/living/carbon/human/C = user - if(C.shoes == src && src.chained == 1) + if(C.shoes == src && chained == 1) to_chat(user, "You need help taking these off!") return - ..() + return ..() diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index a4c9a8563c6..d8fa4379eb9 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -355,11 +355,12 @@ for(var/datum/spacevine_mutation/SM in mutations) SM.on_cross(src, crosser) +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/structure/spacevine/attack_hand(mob/user) for(var/datum/spacevine_mutation/SM in mutations) SM.on_hit(src, user) user_unbuckle_mob(user, user) - + . = ..() /obj/structure/spacevine/attack_paw(mob/living/user) for(var/datum/spacevine_mutation/SM in mutations) diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index c8b9a2bd175..4cf1cec6eb9 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -361,4 +361,4 @@ if(TB) TB.MouseDrop(over) else - ..() + return ..() diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index a008be2f221..f5d851260d5 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -146,4 +146,4 @@ God bless America. reagents.remove_any((reagents.total_volume/2)) C.Knockdown(60) user.changeNext_move(CLICK_CD_MELEE) - ..() + return ..() diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm index 40f99b363ac..7b67129dba4 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm @@ -29,11 +29,7 @@ QDEL_NULL(mixer) return ..() -/obj/machinery/food_cart/attack_hand(mob/user) - user.set_machine(src) - interact(user) - -/obj/machinery/food_cart/interact(mob/user) +/obj/machinery/food_cart/ui_interact(mob/user) var/dat dat += "
STORED INGREDIENTS AND DRINKS
" dat += "Remaining glasses: [glasses]
" diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 27fdf1951ab..5da7975a05b 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -45,7 +45,7 @@ add_overlay("gridle") /obj/machinery/gibber/attack_paw(mob/user) - return src.attack_hand(user) + return attack_hand(user) /obj/machinery/gibber/container_resist(mob/living/user) go_out() @@ -54,6 +54,9 @@ go_out() /obj/machinery/gibber/attack_hand(mob/user) + . = ..() + if(.) + return if(stat & (NOPOWER|BROKEN)) return if(operating) 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 1788626b0d3..46c9907cef7 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm @@ -70,11 +70,8 @@ for(var/reagent in icecream_vat_reagents) reagents.add_reagent(reagent, icecream_vat_reagents[reagent]) -/obj/machinery/icecream_vat/attack_hand(mob/user) - user.set_machine(src) - interact(user) - -/obj/machinery/icecream_vat/interact(mob/user) +/obj/machinery/icecream_vat/ui_interact(mob/user) + . = ..() var/dat dat += "ICE CREAM
" dat += "Dispensing: [flavour_name] icecream

" diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index b91a848421d..7139f20d91e 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -156,18 +156,6 @@ ..() updateUsrDialog() -/obj/machinery/microwave/attack_paw(mob/user) - return src.attack_hand(user) - -/obj/machinery/microwave/attack_ai(mob/user) - return 0 - -/obj/machinery/microwave/attack_hand(mob/user) - if(..()) - return - user.set_machine(src) - interact(user) - /obj/machinery/microwave/AltClick(mob/user) if(user.canUseTopic(src, BE_CLOSE) && !(operating || broken > 0 || panel_open || !anchored || dirty == 100)) cook() @@ -176,7 +164,7 @@ * Microwave Menu ********************/ -/obj/machinery/microwave/interact(mob/user) // The microwave Menu +/obj/machinery/microwave/ui_interact(mob/user) // The microwave Menu if(panel_open || !anchored) return var/dat = "
" diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm index 2caf268e1fd..d1896c03fcb 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm @@ -75,7 +75,10 @@ /obj/machinery/monkey_recycler/attack_hand(mob/user) - if (src.stat != 0) //NOPOWER etc + . = ..() + if(.) + return + if(stat != 0) //NOPOWER etc return if(grinded >= required_grind) to_chat(user, "The machine hisses loudly as it condenses the grinded monkey meat. After a moment, it dispenses a brand new monkey cube.") diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index 6d8797b7a8e..1937ee26954 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -122,6 +122,9 @@ return ..() /obj/machinery/processor/attack_hand(mob/user) + . = ..() + if(.) + return if(stat & (NOPOWER|BROKEN)) return if(src.processing) diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index d816504bc53..8be93e88bf3 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -132,18 +132,9 @@ S.remove_from_storage(O,src) O.forceMove(src) -/obj/machinery/smartfridge/attack_paw(mob/user) - return src.attack_hand(user) - /obj/machinery/smartfridge/attack_ai(mob/user) return FALSE -/obj/machinery/smartfridge/attack_hand(mob/user) - user.set_machine(src) - interact(user) - - - /obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index 928cc52fa8b..34868a5000c 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -106,17 +106,16 @@ START_PROCESSING(SSobj, src) update_icon() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/pizzabox/attack_hand(mob/user) if(user.get_inactive_held_item() != src) - ..() - return + return ..() if(open) if(pizza) user.put_in_hands(pizza) to_chat(user, "You take [pizza] out of [src].") pizza = null update_icon() - return else if(bomb) if(wires.is_all_cut() && bomb_defused) user.put_in_hands(bomb) @@ -137,7 +136,6 @@ to_chat(user, "You trap [src] with [bomb].") update_icon() - return else if(boxes.len) var/obj/item/pizzabox/topbox = boxes[boxes.len] boxes -= topbox @@ -146,8 +144,6 @@ topbox.update_icon() update_icon() user.regenerate_icons() - return - ..() /obj/item/pizzabox/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/pizzabox)) diff --git a/code/modules/games/cas.dm b/code/modules/games/cas.dm index 39772b12162..9197e3d0445 100644 --- a/code/modules/games/cas.dm +++ b/code/modules/games/cas.dm @@ -59,6 +59,9 @@ shuffle_inplace(cards) // distribute blank cards throughout deck /obj/item/toy/cards/deck/cas/attack_hand(mob/user) + . = ..() + if(.) + return if(user.lying) return if(cards.len == 0) diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm index 4acedb4780e..fee60605e3e 100644 --- a/code/modules/holodeck/area_copy.dm +++ b/code/modules/holodeck/area_copy.dm @@ -1,9 +1,9 @@ //Vars that will not be copied when using /DuplicateObject -GLOBAL_LIST_INIT(duplicate_forbidden_vars,list("tag","area","type","loc","locs","vars", "parent","parent_type", "verbs","ckey","key","power_supply","contents","reagents","stat","x","y","z","group","atmos_adjacent_turfs")) +GLOBAL_LIST_INIT(duplicate_forbidden_vars,list("tag", "datum_components", "area","type","loc","locs","vars", "parent","parent_type", "verbs","ckey","key","power_supply","contents","reagents","stat","x","y","z","group","atmos_adjacent_turfs")) /proc/DuplicateObject(atom/original, perfectcopy = TRUE, sameloc = FALSE, atom/newloc = null, nerf = FALSE, holoitem=FALSE) if(!original) - return null + return var/atom/O if(sameloc) diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm index 1dcab21e16f..d967eebd594 100644 --- a/code/modules/holodeck/items.dm +++ b/code/modules/holodeck/items.dm @@ -108,6 +108,9 @@ visible_message(" [user] dunks [W] into \the [src]!") /obj/structure/holohoop/attack_hand(mob/user) + . = ..() + if(.) + return if(user.pulling && user.a_intent == INTENT_GRAB && isliving(user.pulling)) var/mob/living/L = user.pulling if(user.grab_state < GRAB_AGGRESSIVE) @@ -165,6 +168,9 @@ to_chat(user, "The device is a solid button, there's nothing you can do with it!") /obj/machinery/readybutton/attack_hand(mob/user as mob) + . = ..() + if(.) + return if(user.stat || stat & (NOPOWER|BROKEN)) to_chat(user, "This device is not powered!") return diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index cf12ccb3ce2..7075b8502e2 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -192,8 +192,8 @@ ..() - -/obj/structure/beebox/attack_hand(mob/user) +/obj/structure/beebox/interact(mob/user) + . = ..() if(!user.bee_friendly()) //Time to get stung! var/bees = FALSE diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 8939b601381..b69e5e6302d 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -151,10 +151,10 @@ else to_chat(user, "You cannot put this in [src.name]!") -/obj/machinery/biogenerator/interact(mob/user) +/obj/machinery/biogenerator/ui_interact(mob/user) if(stat & BROKEN || panel_open) return - user.set_machine(src) + . = ..() var/dat if(processing) dat += "
Biogenerator is processing! Please wait...

" @@ -202,15 +202,11 @@ var/datum/browser/popup = new(user, "biogen", name, 350, 520) popup.set_content(dat) popup.open() - return - -/obj/machinery/biogenerator/attack_hand(mob/user) - interact(user) /obj/machinery/biogenerator/proc/activate() - if (usr.stat != 0) + if (usr.stat != CONSCIOUS) return - if (src.stat != 0) //NOPOWER etc + if (src.stat != NONE) //NOPOWER etc return if(processing) to_chat(usr, "The biogenerator is in the process of working.") @@ -233,7 +229,6 @@ update_icon() else menustat = "void" - return /obj/machinery/biogenerator/proc/check_cost(list/materials, multiplier = 1, remove_points = 1) if(materials.len != 1 || materials[1] != MAT_BIOMASS) diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 70f6f225ecf..6bb000ebe20 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -98,14 +98,8 @@ else ..() - -/obj/machinery/plantgenes/attack_hand(mob/user) - if(..()) - return - interact(user) - -/obj/machinery/plantgenes/interact(mob/user) - user.set_machine(src) +/obj/machinery/plantgenes/ui_interact(mob/user) + . = ..() if(!user) return diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm index 419ab3abadb..c01f3ba6efd 100644 --- a/code/modules/hydroponics/grown/chili.dm +++ b/code/modules/hydroponics/grown/chili.dm @@ -78,7 +78,9 @@ foodtype = FRUIT /obj/item/reagent_containers/food/snacks/grown/ghost_chili/attack_hand(mob/user) - ..() + . = ..() + if(.) + return if( ismob(loc) ) held_mob = loc START_PROCESSING(SSobj, src) diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 1a3db5ef031..73a2ba14f37 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -161,6 +161,9 @@ /obj/structure/bonfire/attack_hand(mob/user) + . = ..() + if(.) + return if(burning) to_chat(user, "You need to extinguish [src] before removing the logs!") return @@ -173,8 +176,6 @@ new /obj/item/stack/rods(loc, 1) qdel(src) return - ..() - /obj/structure/bonfire/proc/CheckOxygen() if(isopenturf(loc)) diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index c471ba8bb1a..1c3509fa4e1 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -131,7 +131,7 @@ playsound(src,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1) return (BRUTELOSS) -/obj/item/scythe/pre_attackby(atom/A, mob/living/user, params) +/obj/item/scythe/pre_attack(atom/A, mob/living/user, params) if(swiping || !istype(A, /obj/structure/spacevine) || get_turf(A) == get_turf(user)) return ..() else diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 2bcf03c5957..c3d1b725b8c 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -847,6 +847,9 @@ return ..() /obj/machinery/hydroponics/attack_hand(mob/user) + . = ..() + if(.) + return if(issilicon(user)) //How does AI know what plant is? return if(harvest) diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index b79d0652aa4..9c1cbb4a11a 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -119,13 +119,9 @@ src.potency = poten src.amount = am -/obj/machinery/seed_extractor/attack_hand(mob/user) - user.set_machine(src) - interact(user) - -/obj/machinery/seed_extractor/interact(mob/user) +/obj/machinery/seed_extractor/ui_interact(mob/user) if (stat) - return 0 + return FALSE var/dat = "Stored seeds:
" diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index e62e26d576d..5226c275eeb 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -106,8 +106,11 @@ if(!draw_power(IC.power_draw_idle)) IC.power_fail() - /obj/item/device/electronic_assembly/interact(mob/user) + ui_interact(user) + +/obj/item/device/electronic_assembly/ui_interact(mob/user) + . = ..() if(!check_interactivity(user)) return diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm index 1b99b007650..2f309956f99 100644 --- a/code/modules/integrated_electronics/core/integrated_circuit.dm +++ b/code/modules/integrated_electronics/core/integrated_circuit.dm @@ -118,6 +118,10 @@ a creative player the means to solve many problems. Circuits are held inside an displayed_name = input /obj/item/integrated_circuit/interact(mob/user) + ui_interact(user) + +/obj/item/integrated_circuit/ui_interact(mob/user) + . = ..() if(!check_interactivity(user)) return diff --git a/code/modules/integrated_electronics/core/special_pins/list_pin.dm b/code/modules/integrated_electronics/core/special_pins/list_pin.dm index 8a6f80ea631..e70927fbddb 100644 --- a/code/modules/integrated_electronics/core/special_pins/list_pin.dm +++ b/code/modules/integrated_electronics/core/special_pins/list_pin.dm @@ -7,6 +7,7 @@ interact(user) /datum/integrated_io/lists/proc/interact(mob/user) + . = ..() var/list/my_list = data var/t = "

[src]


" t += "List length: [my_list.len]
" diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 25b091d2c7c..de7edc69b17 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -117,6 +117,9 @@ /obj/structure/bookcase/attack_hand(mob/user) + . = ..() + if(.) + return if(contents.len) var/obj/item/book/choice = input("Which book would you like to remove from the shelf?") as null|obj in contents if(choice) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 269c6ad13f9..9a1fa4ae503 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -28,13 +28,8 @@ var/SQLquery clockwork = TRUE //it'd look weird -/obj/machinery/computer/libraryconsole/attack_hand(mob/user) - if(..()) - return - interact(user) - -/obj/machinery/computer/libraryconsole/interact(mob/user) - user.set_machine(src) +/obj/machinery/computer/libraryconsole/ui_interact(mob/user) + . = ..() var/dat = "" // switch(screenstate) if(0) @@ -201,8 +196,8 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums circuit.name = "Book Inventory Management Console (Machine Board)" circuit.build_path = /obj/machinery/computer/libraryconsole/bookmanagement -/obj/machinery/computer/libraryconsole/bookmanagement/interact(mob/user) - user.set_machine(src) +/obj/machinery/computer/libraryconsole/bookmanagement/ui_interact(mob/user) + . = ..() var/dat = "" // switch(screenstate) if(0) @@ -511,6 +506,9 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums return ..() /obj/machinery/libraryscanner/attack_hand(mob/user) + . = ..() + if(.) + return usr.set_machine(src) var/dat = "" // if(cache) diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index 174fada464c..3afbb42420e 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -150,6 +150,7 @@ if(100) new /obj/item/clothing/head/bearpelt(src) +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/structure/closet/crate/secure/loot/attack_hand(mob/user) if(locked) to_chat(user, "The crate is locked with a Deca-code lock.") @@ -182,7 +183,7 @@ /obj/structure/closet/crate/secure/loot/AltClick(mob/living/user) if(!user.canUseTopic(src, BE_CLOSE)) return - attack_hand(user) //this helps you not blow up so easily by overriding unlocking which results in an immediate boom. + return attack_hand(user) //this helps you not blow up so easily by overriding unlocking which results in an immediate boom. /obj/structure/closet/crate/secure/loot/attackby(obj/item/W, mob/user) if(locked) diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm index fcb8dc9d1d0..ccd97844480 100644 --- a/code/modules/mining/aux_base.dm +++ b/code/modules/mining/aux_base.dm @@ -31,11 +31,8 @@ interface with the mining shuttle at the landing site if a mobile beacon is also . = ..() locator = new(src) -/obj/machinery/computer/auxillary_base/attack_hand(mob/user) - if(..(user)) - return - add_fingerprint(usr) - +/obj/machinery/computer/auxillary_base/ui_interact(mob/user) + . = ..() var/list/options = params2list(possible_destinations) var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId) var/dat = "[is_station_level(z) ? "Docking clamps engaged. Standing by." : "Mining Shuttle Uplink: [M ? M.getStatusText() : "*OFFLINE*"]"]
" @@ -280,6 +277,9 @@ obj/docking_port/stationary/public_mining_dock var/console_range = 15 //Wifi range of the beacon to find the aux base console /obj/structure/mining_shuttle_beacon/attack_hand(mob/user) + . = ..() + if(.) + return if(anchored) to_chat(user, "Landing zone already set.") return diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index b1a4d522de2..c735c9d637b 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -103,6 +103,9 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( set_light(light_range, light_power, GLOB.marker_beacon_colors[picked_color]) /obj/structure/marker_beacon/attack_hand(mob/living/user) + . = ..() + if(.) + return to_chat(user, "You start picking [src] up...") if(do_after(user, remove_speed, target = src)) var/obj/item/stack/marker_beacon/M = new(loc) diff --git a/code/modules/mining/equipment/resonator.dm b/code/modules/mining/equipment/resonator.dm index ebc48161559..57efc0f7f5e 100644 --- a/code/modules/mining/equipment/resonator.dm +++ b/code/modules/mining/equipment/resonator.dm @@ -42,7 +42,7 @@ new /obj/effect/temp_visual/resonance(T, user, src, burst_time) user.changeNext_move(CLICK_CD_MELEE) -/obj/item/resonator/pre_attackby(atom/target, mob/user, params) +/obj/item/resonator/pre_attack(atom/target, mob/user, params) if(check_allowed_items(target, 1)) CreateResonance(target, user) return TRUE diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 632c9e1cba3..09ce1c0761a 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -150,6 +150,9 @@ return TRUE /obj/item/device/gps/computer/attack_hand(mob/user) + . = ..() + if(.) + return attack_self(user) //Bed diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 78417a56d1f..a5b69b18564 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -150,6 +150,9 @@ anchored = TRUE /obj/machinery/mineral/labor_points_checker/attack_hand(mob/user) + . = ..() + if(.) + return user.examinate(src) /obj/machinery/mineral/labor_points_checker/attackby(obj/item/I, mob/user, params) diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index be12f87fe8a..988c2242796 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -63,12 +63,13 @@ return ..() /obj/structure/flora/ash/attack_hand(mob/user) + . = ..() + if(.) + return if(!harvested && !needs_sharp_harvest) user.visible_message("[user] starts to harvest from [src].","You begin to harvest from [src].") if(do_after(user, harvest_time, target = src)) harvest(user) - else - ..() /obj/structure/flora/ash/tall_shroom //exists only so that the spawning check doesn't allow these spawning near other things regrowth_time_low = 4200 diff --git a/code/modules/mining/lavaland/ruins/gym.dm b/code/modules/mining/lavaland/ruins/gym.dm index a10735f6bbd..634c2df859f 100644 --- a/code/modules/mining/lavaland/ruins/gym.dm +++ b/code/modules/mining/lavaland/ruins/gym.dm @@ -8,10 +8,15 @@ var/list/hit_sounds = list('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg',\ 'sound/weapons/punch1.ogg', 'sound/weapons/punch2.ogg', 'sound/weapons/punch3.ogg', 'sound/weapons/punch4.ogg') -/obj/structure/punching_bag/attack_hand(mob/living/user) +/obj/structure/punching_bag/attack_hand(mob/user as mob) + . = ..() + if(.) + return flick("[icon_state]2", src) - playsound(src.loc, pick(src.hit_sounds), 25, 1, -1) - user.apply_status_effect(STATUS_EFFECT_EXERCISED) + playsound(loc, pick(hit_sounds), 25, 1, -1) + if(isliving(user)) + var/mob/living/L = user + L.apply_status_effect(STATUS_EFFECT_EXERCISED) /obj/structure/stacklifter name = "Weight Machine" @@ -22,6 +27,9 @@ anchored = TRUE /obj/structure/stacklifter/attack_hand(mob/living/user) + . = ..() + if(.) + return if(obj_flags & IN_USE) to_chat(user, "It's already in use - wait a bit.") return @@ -61,6 +69,9 @@ anchored = TRUE /obj/structure/weightlifter/attack_hand(mob/living/user) + . = ..() + if(.) + return if(obj_flags & IN_USE) to_chat(user, "It's already in use - wait a bit.") return diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index e991fc65aad..bb5347a1523 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -30,8 +30,8 @@ else return INITIALIZE_HINT_QDEL -/obj/machinery/mineral/processing_unit_console/attack_hand(mob/user) - +/obj/machinery/mineral/processing_unit_console/ui_interact(mob/user) + . = ..() if(!machine) return diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index a9cec0a01b7..2b6cacc348e 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -189,11 +189,6 @@ materials.retrieve_all() ..() -/obj/machinery/mineral/ore_redemption/attack_hand(mob/user) - if(..()) - return - interact(user) - /obj/machinery/mineral/ore_redemption/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm index 44f13d0a4ff..e658f69395d 100644 --- a/code/modules/mining/machine_stacking.dm +++ b/code/modules/mining/machine_stacking.dm @@ -19,8 +19,8 @@ else qdel(src) -/obj/machinery/mineral/stacking_unit_console/attack_hand(mob/user) - +/obj/machinery/mineral/stacking_unit_console/ui_interact(mob/user) + . = ..() var/obj/item/stack/sheet/s var/dat @@ -35,8 +35,6 @@ user << browse(dat, "window=console_stacking_machine") - return - /obj/machinery/mineral/stacking_unit_console/Topic(href, href_list) if(..()) return diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index e06e4d844af..1fd1ff3e38e 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -80,14 +80,9 @@ icon_state = initial(icon_state) else icon_state = "[initial(icon_state)]-off" - return -/obj/machinery/mineral/equipment_vendor/attack_hand(mob/user) - if(..()) - return - interact(user) - -/obj/machinery/mineral/equipment_vendor/interact(mob/user) +/obj/machinery/mineral/equipment_vendor/ui_interact(mob/user) + . = ..() var/dat dat +="
" if(istype(inserted_id)) @@ -283,8 +278,7 @@ name = "mining conscription kit" desc = "A kit containing everything a crewmember needs to support a shaft miner in the field." -/obj/item/storage/backpack/duffelbag/mining_conscript/Initialize() - . = ..() +/obj/item/storage/backpack/duffelbag/mining_conscript/PopulateContents() new /obj/item/pickaxe/mini(src) new /obj/item/clothing/glasses/meson(src) new /obj/item/device/t_scanner/adv_mining_scanner/lesser(src) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index ba4850eb476..d188ce26aa9 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -74,12 +74,13 @@ no_destination_swap = 1 var/global/list/dumb_rev_heads = list() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/machinery/computer/shuttle/mining/attack_hand(mob/user) if(is_station_level(user.z) && user.mind && is_head_revolutionary(user) && !(user.mind in dumb_rev_heads)) to_chat(user, "You get a feeling that leaving the station might be a REALLY dumb idea...") dumb_rev_heads += user.mind return - ..() + . = ..() /**********************Mining car (Crate like thing, not the rail car)**************************/ diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 11046990066..c2fe407442f 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -115,6 +115,9 @@ ..() /mob/living/simple_animal/hostile/mining_drone/attack_hand(mob/living/carbon/human/M) + . = ..() + if(.) + return if(M.a_intent == INTENT_HELP) toggle_mode() switch(mode) @@ -123,7 +126,6 @@ if(MINEDRONE_ATTACK) to_chat(M, "[src] has been set to attack hostile wildlife.") return - ..() /mob/living/simple_animal/hostile/mining_drone/CanPass(atom/movable/O) if(istype(O, /obj/item/projectile/kinetic)) diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm index ca214561631..ec4c9bd7146 100644 --- a/code/modules/mining/mint.dm +++ b/code/modules/mining/mint.dm @@ -28,6 +28,9 @@ materials.insert_stack(O, O.amount) /obj/machinery/mineral/mint/attack_hand(mob/user) + . = ..() + if(.) + return var/dat = "Coin Press
" GET_COMPONENT(materials, /datum/component/material_container) diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index a9c660e5548..a12d56fbbb2 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -34,6 +34,9 @@ . = ..() /obj/structure/ore_box/attack_hand(mob/user) + . = ..() + if(.) + return if(Adjacent(user)) show_contents(user) diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index b49f8a25707..dbe9e03d09d 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -68,6 +68,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) else visible_message(fail_message) +//ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/item/device/mmi/posibrain/attack_ghost(mob/user) activate(user) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 20036f2fb2a..a5368fc7c05 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -53,14 +53,14 @@ return O.attack_obj(src, user) /obj/item/clothing/mask/facehugger/attack_alien(mob/user) //can be picked up by aliens - attack_hand(user) - return + return attack_hand(user) +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/mask/facehugger/attack_hand(mob/user) if((stat == CONSCIOUS && !sterile) && !isalien(user)) if(Leap(user)) return - ..() + . = ..() /obj/item/clothing/mask/facehugger/attack(mob/living/M, mob/user) ..() diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 293c21c8ceb..ba782008526 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -108,6 +108,7 @@ /mob/living/carbon/attack_drone(mob/living/simple_animal/drone/user) return //so we don't call the carbon's attack_hand(). +//ATTACK HAND IGNORING PARENT RETURN VALUE /mob/living/carbon/attack_hand(mob/living/carbon/human/user) for(var/thing in diseases) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 31df48e5e54..100790b64e8 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -319,6 +319,10 @@ if(C) C.post_status("shuttle") +/mob/living/silicon/ai/can_interact_with(atom/A) + . = ..() + return . || (istype(loc, /obj/item/device/aicard))? (ISINRANGE(A.x, x - interaction_range, x + interaction_range) && ISINRANGE(A.y, y - interaction_range, y + interaction_range)): GLOB.cameranet.checkTurfVis(get_turf(A)) + /mob/living/silicon/ai/cancel_camera() view_core() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 2b1ff82af75..fdb6583a785 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -90,8 +90,6 @@ /obj/item/clothing/head/sombrero, /obj/item/clothing/head/witchunter_hat) - var/remote_range = 7 //How far can you interact with machines. - can_buckle = TRUE buckle_lying = FALSE var/static/list/can_ride_typecache = typecacheof(/mob/living/carbon/human) @@ -190,6 +188,9 @@ cell = null return ..() +/mob/living/silicon/robot/can_interact_with(atom/A) + . = ..() + return . || in_view_range(src, A) /mob/living/silicon/robot/proc/pick_module() if(module.type != /obj/item/robot_module) @@ -351,6 +352,9 @@ queueAlarm("--- [class] alarm in [A.name] has been cleared.", class, 0) return !cleared +/mob/living/silicon/robot/can_interact_with(atom/A) + return !low_power_mode && ISINRANGE(A.x, x - interaction_range, x + interaction_range) && ISINRANGE(A.y, y - interaction_range, y + interaction_range) + /mob/living/silicon/robot/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weldingtool) && (user.a_intent != INTENT_HARM || user == src)) user.changeNext_move(CLICK_CD_MELEE) diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 38cce8a2777..e44eede9565 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -52,6 +52,7 @@ return +//ATTACK HAND IGNORING PARENT RETURN VALUE /mob/living/silicon/robot/attack_hand(mob/living/carbon/human/user) add_fingerprint(user) if(opened && !wiresexposed && !issilicon(user)) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 92aff74e6a8..083ad38caa9 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -40,6 +40,7 @@ var/updating = FALSE //portable camera camerachunk update var/hack_software = FALSE //Will be able to use hacking actions + var/interaction_range = 7 //wireless control range /mob/living/silicon/Initialize() . = ..() @@ -152,17 +153,17 @@ /mob/living/silicon/can_inject(mob/user, error_msg) if(error_msg) to_chat(user, "Their outer shell is too tough.") - return 0 + return FALSE /mob/living/silicon/IsAdvancedToolUser() - return 1 + return TRUE /proc/islinked(mob/living/silicon/robot/bot, mob/living/silicon/ai/ai) if(!istype(bot) || !istype(ai)) - return 0 - if (bot.connected_ai == ai) - return 1 - return 0 + return FALSE + if(bot.connected_ai == ai) + return TRUE + return FALSE /mob/living/silicon/Topic(href, href_list) if (href_list["lawc"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index 2f81f73feac..7f34ea33057 100644 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ b/code/modules/mob/living/silicon/silicon_defense.dm @@ -63,6 +63,7 @@ return 1 return 0 +//ATTACK HAND IGNORING PARENT RETURN VALUE /mob/living/silicon/attack_hand(mob/living/carbon/human/M) switch(M.a_intent) if ("help") diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 274a252cc1e..692933f7575 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -234,8 +234,6 @@ to_chat(user, "They won't fit in, as there is already stuff inside!") return if(T.use(10)) - if(user.s_active) - user.s_active.close(user) var/obj/item/bot_assembly/floorbot/B = new B.toolbox = type user.put_in_hands(B) @@ -312,7 +310,6 @@ qdel(S) qdel(src) - /obj/item/bot_assembly/medbot/attackby(obj/item/W, mob/user, params) ..() switch(build_step) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm index 20062972ecf..c5dd5375d05 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm @@ -12,7 +12,7 @@ icon = 'icons/mob/drone.dmi' icon_state = "drone_maint_hat"//yes reuse the _hat state. layer = BELOW_MOB_LAYER - + var/drone_type = /mob/living/simple_animal/drone //Type of drone that will be spawned var/seasonal_hats = TRUE //If TRUE, and there are no default hats, different holidays will grant different hats var/static/list/possible_seasonal_hats //This is built automatically in build_seasonal_hats() but can also be edited by admins! @@ -39,6 +39,7 @@ GLOB.poi_list -= src . = ..() +//ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/item/drone_shell/attack_ghost(mob/user) if(jobban_isbanned(user,"drone")) return diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm index 2ee268014bc..5e62ec0d4ba 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm @@ -29,6 +29,7 @@ if("Nothing") return +//ATTACK HAND IGNORING PARENT RETURN VALUE /mob/living/simple_animal/drone/attack_hand(mob/user) if(ishuman(user)) if(stat == DEAD || status_flags & GODMODE || !can_be_held) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index ddbbf4c30c4..87b2812194a 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -656,11 +656,9 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians /obj/item/storage/box/syndie_kit/guardian name = "holoparasite injector kit" -/obj/item/storage/box/syndie_kit/guardian/Initialize() - . = ..() +/obj/item/storage/box/syndie_kit/guardian/PopulateContents() new /obj/item/guardiancreator/tech/choose/traitor(src) new /obj/item/paper/guides/antag/guardian(src) - return /obj/item/guardiancreator/carp name = "holocarp fishsticks" diff --git a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm index c2595279ffc..fc25ec5ac6a 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm @@ -88,6 +88,7 @@ /obj/guardian_bomb/attackby(mob/living/user) detonate(user) +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/guardian_bomb/attack_hand(mob/living/user) detonate(user) diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 70377e65c81..823b5322d34 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -73,8 +73,10 @@ to_chat(src, "[directive]") /mob/living/simple_animal/hostile/poison/giant_spider/attack_ghost(mob/user) - if(!humanize_spider(user)) - return ..() + . = ..() + if(.) + return + humanize_spider(user) /mob/living/simple_animal/hostile/poison/giant_spider/proc/humanize_spider(mob/user) if(key || !playable_spider)//Someone is in it or the fun police are shutting it down diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 1cf031b0cce..9ca8dddde8c 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -382,7 +382,9 @@ Difficulty: Very Hard ActivationReaction(speaker, ACTIVATE_SPEECH) /obj/machinery/anomalous_crystal/attack_hand(mob/user) - ..() + . = ..() + if(.) + return ActivationReaction(user, ACTIVATE_TOUCH) /obj/machinery/anomalous_crystal/attackby(obj/item/I, mob/user, params) @@ -576,7 +578,9 @@ Difficulty: Very Hard notify_ghosts("An anomalous crystal has been activated in [get_area(src)]! This crystal can always be used by ghosts hereafter.", enter_link = "(Click to enter)", ghost_sound = 'sound/effects/ghost2.ogg', source = src, action = NOTIFY_ATTACK) /obj/machinery/anomalous_crystal/helpers/attack_ghost(mob/dead/observer/user) - ..() + . = ..() + if(.) + return if(ready_to_deploy) var/be_helper = alert("Become a Lightgeist? (Warning, You can no longer be cloned!)",,"Yes","No") if(be_helper == "Yes" && !QDELETED(src) && isobserver(user)) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 46e5b4f3b19..f968dc78396 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -299,10 +299,10 @@ return /mob/living/simple_animal/parrot/attack_paw(mob/living/carbon/monkey/M) - attack_hand(M) + return attack_hand(M) /mob/living/simple_animal/parrot/attack_alien(mob/living/carbon/alien/M) - attack_hand(M) + return attack_hand(M) //Simple animals /mob/living/simple_animal/parrot/attack_animal(mob/living/simple_animal/M) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 07bb6f7035a..5087825305c 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -232,7 +232,7 @@ var/mob/living/Food = A if(CanFeedon(Food)) Feedon(Food) - ..() + return ..() /mob/living/simple_animal/slime/doUnEquip(obj/item/W) return @@ -278,8 +278,6 @@ discipline_slime(user) return ..() - - /mob/living/simple_animal/slime/attack_hand(mob/living/carbon/human/M) if(buckled) M.do_attack_animation(src, ATTACK_EFFECT_DISARM) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 32c162d06ae..25fe453d542 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -206,26 +206,26 @@ //unset redraw_mob to prevent the mob from being redrawn at the end. /mob/proc/equip_to_slot_if_possible(obj/item/W, slot, qdel_on_fail = FALSE, disable_warning = FALSE, redraw_mob = TRUE, bypass_equip_delay_self = FALSE) if(!istype(W)) - return 0 + return FALSE if(!W.mob_can_equip(src, null, slot, disable_warning, bypass_equip_delay_self)) if(qdel_on_fail) qdel(W) else if(!disable_warning) - to_chat(src, "You are unable to equip that!" ) - return 0 + to_chat(src, "You are unable to equip that!") + return FALSE equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail. - return 1 + return TRUE -//This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't eqip need to be done before! Use mob_can_equip() for that task. +//This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't equip need to be done before! Use mob_can_equip() for that task. //In most cases you will want to use equip_to_slot_if_possible() /mob/proc/equip_to_slot(obj/item/W, slot) return -//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the rounds tarts and when events happen and such. +//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the round starts and when events happen and such. //Also bypasses equip delay checks, since the mob isn't actually putting it on. /mob/proc/equip_to_slot_or_del(obj/item/W, slot) - return equip_to_slot_if_possible(W, slot, 1, 1, 0, 1) + return equip_to_slot_if_possible(W, slot, TRUE, TRUE, FALSE, TRUE) //puts the item "W" into an appropriate slot in a human's inventory //returns 0 if it cannot, 1 if successful @@ -482,7 +482,7 @@ return /mob/MouseDrop(mob/M) - ..() + . = ..() if(M != usr) return if(usr == src) @@ -730,6 +730,10 @@ /mob/proc/can_unbuckle() return 1 +//Can the mob interact() with an atom? +/mob/proc/can_interact_with(atom/A) + return IsAdminGhost(src) || Adjacent(A) + //Can the mob see reagents inside of containers? /mob/proc/can_see_reagents() if(stat == DEAD) //Ghosts and such can always see reagents diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index ce8d8ce4b9d..e6c96e9f62a 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -161,12 +161,15 @@ var/mob/M = usr if((!istype(over_object, /obj/screen)) && usr.canUseTopic(src)) return attack_self(M) - return + return ..() /obj/item/device/modular_computer/attack_ai(mob/user) return attack_self(user) /obj/item/device/modular_computer/attack_ghost(mob/dead/observer/user) + . = ..() + if(.) + return if(enabled) ui_interact(user) else if(IsAdminGhost(user)) @@ -207,7 +210,7 @@ // On-click handling. Turns on the computer if it's off and opens the GUI. -/obj/item/device/modular_computer/attack_self(mob/user) +/obj/item/device/modular_computer/interact(mob/user) if(enabled) ui_interact(user) else diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index c57bf5f4e33..a1ae1b451e2 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -1,3 +1,7 @@ +/obj/item/device/modular_computer/attack_self() + . = ..() + ui_interact() + // Operates TGUI /obj/item/device/modular_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) if(!enabled) diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm index 1618b684782..f0970f3ce02 100644 --- a/code/modules/modular_computers/computers/item/laptop.dm +++ b/code/modules/modular_computers/computers/item/laptop.dm @@ -53,6 +53,7 @@ try_toggle_open(usr) /obj/item/device/modular_computer/laptop/MouseDrop(obj/over_object, src_location, over_location) + . = ..() if(over_object == usr || over_object == src) try_toggle_open(usr) else if(istype(over_object, /obj/screen/inventory/hand)) @@ -65,12 +66,12 @@ M.put_in_hand(src, H.held_index) /obj/item/device/modular_computer/laptop/attack_hand(mob/user) + . = ..() + if(.) + return if(screen_on && isturf(loc)) return attack_self(user) - return ..() - - /obj/item/device/modular_computer/laptop/proc/try_toggle_open(mob/living/user) if(issilicon(user)) return diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm index 03c39ef2774..74ee7b68eaf 100644 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -37,6 +37,9 @@ return ..() /obj/machinery/modular_computer/attack_ghost(mob/dead/observer/user) + . = ..() + if(.) + return if(cpu) cpu.attack_ghost(user) @@ -92,16 +95,19 @@ if(cpu) cpu.AltClick(user) +//ATTACK HAND IGNORING PARENT RETURN VALUE // On-click handling. Turns on the computer if it's off and opens the GUI. -/obj/machinery/modular_computer/attack_hand(mob/user) +/obj/machinery/modular_computer/interact(mob/user) if(cpu) - cpu.attack_self(user) // CPU is an item, that's why we route attack_hand to attack_self + return cpu.interact(user) // CPU is an item, that's why we route attack_hand to attack_self + else + return ..() // Process currently calls handle_power(), may be expanded in future if more things are added. /obj/machinery/modular_computer/process() if(cpu) // Keep names in sync. - cpu.name = src.name + cpu.name = name cpu.process() // Used in following function to reduce copypaste @@ -114,7 +120,6 @@ stat |= NOPOWER update_icon() - // Modular computers can have battery in them, we handle power in previous proc, so prevent this from messing it up for us. /obj/machinery/modular_computer/power_change() if(cpu && cpu.use_power()) // If MC_CPU still has a power source, PC wouldn't go offline. diff --git a/code/modules/modular_computers/laptop_vendor.dm b/code/modules/modular_computers/laptop_vendor.dm index 12f7d403c25..55c88fbfcb4 100644 --- a/code/modules/modular_computers/laptop_vendor.dm +++ b/code/modules/modular_computers/laptop_vendor.dm @@ -222,24 +222,18 @@ return 1 return 0 -/obj/machinery/lapvend/attack_hand(mob/user) - ui_interact(user) - /obj/machinery/lapvend/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) if(stat & (BROKEN | NOPOWER | MAINT)) if(ui) ui.close() return 0 - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) ui = new(user, src, ui_key, "computer_fabricator", "Personal Computer Vendor", 500, 400, state = state) ui.open() ui.set_autoupdate(state = 1) - /obj/machinery/lapvend/attackby(obj/item/I as obj, mob/user as mob) if(istype(I, /obj/item/stack/spacecash)) var/obj/item/stack/spacecash/c = I @@ -250,10 +244,8 @@ visible_message("[usr] inserts [c.value] credits into [src].") qdel(c) return - return ..() - // Simplified payment processing, returns 1 on success. /obj/machinery/lapvend/proc/process_payment() if(total_price > credits) diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 6f7c99dac8c..907fccdc5ba 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -65,12 +65,12 @@ return ..() -/obj/structure/filingcabinet/attack_hand(mob/user) +/obj/structure/filingcabinet/ui_interact(mob/user) + . = ..() if(contents.len <= 0) to_chat(user, "[src] is empty.") return - user.set_machine(src) var/dat = "
" var/i for(i=contents.len, i>=1, i--) @@ -136,7 +136,8 @@ /obj/structure/filingcabinet/security/attack_hand() populate() - ..() + . = ..() + /obj/structure/filingcabinet/security/attack_tk() populate() ..() @@ -165,9 +166,12 @@ P.name = "paper - '[G.fields["name"]]'" virgin = 0 //tabbing here is correct- it's possible for people to try and use it //before the records have been generated, so we do this inside the loop. + +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/structure/filingcabinet/medical/attack_hand() populate() - ..() + . = ..() + /obj/structure/filingcabinet/medical/attack_tk() populate() ..() @@ -205,14 +209,14 @@ GLOBAL_LIST_EMPTY(employmentCabinets) /obj/structure/filingcabinet/employment/proc/addFile(mob/living/carbon/human/employee) new /obj/item/paper/contract/employment(src, employee) -/obj/structure/filingcabinet/employment/attack_hand(mob/user) +/obj/structure/filingcabinet/employment/interact(mob/user) if(!cooldown) if(virgin) fillCurrent() virgin = 0 cooldown = 1 - ..() sleep(100) // prevents the devil from just instantly emptying the cabinet, ensuring an easy win. cooldown = 0 else to_chat(user, "[src] is jammed, give it a few seconds.") + ..() diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm index c3ffc14b803..ccc94273498 100644 --- a/code/modules/paperwork/paper_cutter.dm +++ b/code/modules/paperwork/paper_cutter.dm @@ -66,8 +66,10 @@ return ..() - /obj/item/papercutter/attack_hand(mob/user) + . = ..() + if(.) + return add_fingerprint(user) if(!storedcutter) to_chat(user, "The cutting blade is gone! You can't use [src] now.") @@ -88,8 +90,8 @@ new /obj/item/paperslip(get_turf(src)) update_icon() - /obj/item/papercutter/MouseDrop(atom/over_object) + . = ..() var/mob/M = usr if(M.incapacitated() || !Adjacent(M)) return @@ -102,7 +104,6 @@ M.putItemFromInventoryInHandIfPossible(src, H.held_index) add_fingerprint(M) - /obj/item/paperslip name = "paper slip" desc = "A little slip of paper left over after a larger piece was cut. Whoa." diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 2818f043448..82e7327e8a4 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -40,6 +40,7 @@ ..() /obj/item/paper_bin/MouseDrop(atom/over_object) + . = ..() var/mob/living/M = usr if(!istype(M) || M.incapacitated() || !Adjacent(M)) return @@ -53,11 +54,10 @@ add_fingerprint(M) - /obj/item/paper_bin/attack_paw(mob/user) return attack_hand(user) - +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/paper_bin/attack_hand(mob/user) if(user.lying) return @@ -90,9 +90,8 @@ to_chat(user, "You take [P] out of \the [src].") else to_chat(user, "[src] is empty!") - add_fingerprint(user) - + return ..() /obj/item/paper_bin/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/paper)) @@ -142,12 +141,15 @@ icon_state = "paper_bundle" papertype = /obj/item/paper/natural resistance_flags = FLAMMABLE + /obj/item/paper_bin/bundlenatural/attack_hand(mob/user) ..() if(total_paper < 1) qdel(src) + /obj/item/paper_bin/bundlenatural/fire_act(exposed_temperature, exposed_volume) qdel(src) + /obj/item/paper_bin/bundlenatural/attackby(obj/item/W, mob/user) if(W.is_sharp()) to_chat(user, "You snip \the [src], spilling paper everywhere.") diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 6fa13fe8c3c..5c63c559e38 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -30,15 +30,8 @@ var/mob/living/ass //i can't believe i didn't write a stupid-ass comment about this var when i first coded asscopy. var/busy = FALSE -/obj/machinery/photocopier/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/photocopier/attack_paw(mob/user) - return attack_hand(user) - -/obj/machinery/photocopier/attack_hand(mob/user) - user.set_machine(src) - +/obj/machinery/photocopier/ui_interact(mob/user) + . = ..() var/dat = "Photocopier

" if(copy || photocopy || doccopy || (ass && (ass.loc == src.loc))) dat += "Remove Paper
" diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 19a83f9770b..31bcc537e94 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -466,7 +466,7 @@ var/mob/M = target disk.record.caller_name = M.name disk.record.set_caller_image(M) - else + else return else captureimage(target, user, flag) @@ -552,6 +552,7 @@ to_chat(user, "\The [src] already contains a photo.") ..() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/wallframe/picture/attack_hand(mob/user) if(user.get_inactive_held_item() != src) ..() @@ -562,6 +563,7 @@ to_chat(user, "You carefully remove the photo from \the [src].") displayed = null update_icon() + return ..() /obj/item/wallframe/picture/attack_self(mob/user) user.examinate(src) @@ -631,6 +633,9 @@ ..() /obj/structure/sign/picture_frame/attack_hand(mob/user) + . = ..() + if(.) + return if(framed) framed.show(user) diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm index cfbb3d199bb..96e35164c48 100644 --- a/code/modules/power/antimatter/control.dm +++ b/code/modules/power/antimatter/control.dm @@ -9,6 +9,8 @@ idle_power_usage = 100 active_power_usage = 1000 + interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT | INTERACT_ATOM_REQUIRES_ANCHORED + var/list/obj/machinery/am_shielding/linked_shielding var/list/obj/machinery/am_shielding/linked_cores var/obj/item/am_containment/fueljar @@ -207,10 +209,6 @@ stability -= damage/2 check_stability() -/obj/machinery/power/am_control_unit/attack_hand(mob/user) - if(anchored) - interact(user) - /obj/machinery/power/am_control_unit/proc/add_shielding(obj/machinery/am_shielding/AMS, AMS_linking = 0) if(!istype(AMS)) return 0 @@ -283,13 +281,13 @@ /obj/machinery/power/am_control_unit/proc/reset_stored_core_stability_delay() stored_core_stability_delay = 0 -/obj/machinery/power/am_control_unit/interact(mob/user) +/obj/machinery/power/am_control_unit/ui_interact(mob/user) + . = ..() if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER))) if(!isAI(user)) user.unset_machine() user << browse(null, "window=AMcontrol") return - user.set_machine(src) var/dat = "" dat += "AntiMatter Control Panel
" diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 804276548f0..f764a38d646 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -49,7 +49,7 @@ max_integrity = 200 integrity_failure = 50 resistance_flags = FIRE_PROOF - interact_open = TRUE + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON var/lon_range = 1.5 var/area/area @@ -381,7 +381,7 @@ /obj/machinery/power/apc/attackby(obj/item/W, mob/living/user, params) if(issilicon(user) && get_dist(src,user)>1) - return src.attack_hand(user) + return attack_hand(user) if (istype(W, /obj/item/crowbar)) //Using crowbar if (opened) // a) on open apc if (has_electronics==1) @@ -721,6 +721,9 @@ // attack with hand - remove cell (if cover open) or interact with the APC /obj/machinery/power/apc/attack_hand(mob/user) + . = ..() + if(.) + return if(!user) return if(usr == user && opened && (!issilicon(user))) @@ -734,7 +737,6 @@ return if((stat & MAINT) && !opened) //no board; no interface return - ..() /obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 289c78b7121..94e5f4a28ea 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -533,6 +533,9 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai add_atom_colour(item_color, FIXED_COLOUR_PRIORITY) /obj/item/stack/cable_coil/attack_hand(mob/user) + . = ..() + if(.) + return var/obj/item/stack/cable_coil/new_cable = ..() if(istype(new_cable)) new_cable.item_color = item_color diff --git a/code/modules/power/floodlight.dm b/code/modules/power/floodlight.dm index 74cecf0b1d4..62abcdb4404 100644 --- a/code/modules/power/floodlight.dm +++ b/code/modules/power/floodlight.dm @@ -95,6 +95,9 @@ . = ..() /obj/machinery/power/floodlight/attack_hand(mob/user) + . = ..() + if(.) + return var/current = setting if(current == 1) current = light_setting_list.len @@ -103,10 +106,6 @@ change_setting(current, user) ..() -/obj/machinery/power/floodlight/attack_ai(mob/user) - attack_hand(user) - ..() - /obj/machinery/power/floodlight/obj_break(damage_flag) if(!(flags_1 & NODECONSTRUCT_1)) playsound(loc, 'sound/effects/glassbr3.ogg', 100, 1) diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 4681eabe207..ce9d2de4db1 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -123,12 +123,6 @@ lastgen -= power_output ..() -/obj/machinery/power/generator/attack_hand(mob/user) - if(..()) - user << browse(null, "window=teg") - return - interact(user) - /obj/machinery/power/generator/proc/get_menu(include_link = 1) var/t = "" if(!powernet) @@ -161,15 +155,12 @@ return t -/obj/machinery/power/generator/interact(mob/user) - - user.set_machine(src) +/obj/machinery/power/generator/ui_interact(mob/user) + . = ..() var/datum/browser/popup = new(user, "teg", "Thermo-Electric Generator", 460, 300) popup.set_content(get_menu()) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() - return 1 - /obj/machinery/power/generator/Topic(href, href_list) if(..()) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index cb7c9b1a691..29e4a387274 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -116,7 +116,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne power_channel = ENVIRON sprite_number = 8 use_power = IDLE_POWER_USE - interact_offline = TRUE + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OFFLINE var/on = TRUE var/breaker = 1 var/list/parts = list() @@ -219,12 +219,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne return return ..() - -/obj/machinery/gravity_generator/main/attack_hand(mob/user) - if(!..()) - return interact(user) - -/obj/machinery/gravity_generator/main/interact(mob/user) +/obj/machinery/gravity_generator/main/ui_interact(mob/user) if(stat & BROKEN) return var/dat = "Gravity Generator Breaker: " diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index faad79664eb..68ac434811f 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -568,6 +568,9 @@ // if hands aren't protected and the light is on, burn the player /obj/machinery/light/attack_hand(mob/living/carbon/human/user) + . = ..() + if(.) + return user.changeNext_move(CLICK_CD_MELEE) add_fingerprint(user) diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index dc8e6e07931..cc4000fd42b 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -17,6 +17,8 @@ var/base_icon = "portgen0" var/datum/looping_sound/generator/soundloop + interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT | INTERACT_ATOM_REQUIRES_ANCHORED + /obj/machinery/power/port_gen/Initialize() . = ..() soundloop = new(list(src), active) @@ -53,12 +55,6 @@ update_icon() soundloop.stop() -/obj/machinery/power/port_gen/attack_hand(mob/user) - if(..()) - return - if(!anchored) - return - /obj/machinery/power/port_gen/examine(mob/user) ..() to_chat(user, "It is[!active?"n't":""] running.") @@ -211,28 +207,20 @@ obj_flags |= EMAGGED emp_act(EMP_HEAVY) -/obj/machinery/power/port_gen/pacman/attack_hand(mob/user) - ..() - if (!anchored) - return - - interact(user) - /obj/machinery/power/port_gen/pacman/attack_ai(mob/user) interact(user) /obj/machinery/power/port_gen/pacman/attack_paw(mob/user) interact(user) -/obj/machinery/power/port_gen/pacman/interact(mob/user) +/obj/machinery/power/port_gen/pacman/ui_interact(mob/user) + . = ..() if (get_dist(src, user) > 1 ) if(!isAI(user)) user.unset_machine() user << browse(null, "window=port_gen") return - user.set_machine(src) - var/dat = text("[name]
") if (active) dat += text("Generator: On
") diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm index f88e713dda7..d458fbf7e2d 100644 --- a/code/modules/power/rtg.dm +++ b/code/modules/power/rtg.dm @@ -46,11 +46,11 @@ return return ..() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/machinery/power/rtg/attack_hand(mob/user) if(user.a_intent == INTENT_GRAB && user_buckle_mob(user.pulling, user, check_loc = 0)) return - ..() - + . = ..() /obj/machinery/power/rtg/advanced desc = "An advanced RTG capable of moderating isotope decay, increasing power output but reducing lifetime. It uses plasma-fueled radiation collectors to increase output even further." diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index bd9901460a3..fcbb3661875 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -69,7 +69,8 @@ last_power-=bitcoins_mined /obj/machinery/power/rad_collector/attack_hand(mob/user) - if(..()) + . = ..() + if(.) return if(anchored) if(!src.locked) diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index 70772f74f90..c8153b4a89e 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -9,6 +9,8 @@ density = FALSE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF use_power = NO_POWER_USE + interaction_flags_atom = NONE + interaction_flags_machine = NONE light_range = 4 layer = ABOVE_OBJ_LAYER var/obj/machinery/field/generator/FG1 = null @@ -19,6 +21,7 @@ FG2.fields -= src return ..() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/machinery/field/containment/attack_hand(mob/user) if(get_dist(src, user) > 1) return FALSE diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index fd1989ebf81..d6a27f1483e 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -23,6 +23,7 @@ var/shot_number = 0 var/state = 0 var/locked = FALSE + var/allow_switch_interact = TRUE var/projectile_type = /obj/item/projectile/beam/emitter @@ -101,13 +102,13 @@ icon_state = initial(icon_state) -/obj/machinery/power/emitter/attack_hand(mob/user) - src.add_fingerprint(user) +/obj/machinery/power/emitter/interact(mob/user) + add_fingerprint(user) if(state == 2) if(!powernet) to_chat(user, "The emitter isn't connected to a wire!") return 1 - if(!src.locked) + if(!locked && allow_switch_interact) if(src.active==1) src.active = 0 to_chat(user, "You turn off \the [src].") diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index d160209e0cb..0a113859c35 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -65,6 +65,9 @@ field_generator power level display calc_power() /obj/machinery/field/generator/attack_hand(mob/user) + . = ..() + if(.) + return if(state == FG_WELDED) if(get_dist(src, user) <= 1)//Need to actually touch the thing to turn it on if(active >= FG_CHARGING) diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index 4b4ec71eb68..4cc1143c02b 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -17,10 +17,11 @@ var/energy = 0 var/creation_type = /obj/singularity +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/machinery/the_singularitygen/attack_hand(mob/user) if(user.a_intent == INTENT_GRAB && user_buckle_mob(user.pulling, user, check_loc = 0)) return - ..() + . = ..() /obj/machinery/the_singularitygen/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/wrench)) diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index f6b785b3e17..074f8a18e84 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -93,11 +93,10 @@ /proc/cult_ending_helper(var/no_explosion = 0) Cinematic(CINEMATIC_CULT,world,CALLBACK(GLOBAL_PROC,.ending_helper)) - +//ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/singularity/narsie/large/attack_ghost(mob/dead/observer/user as mob) makeNewConstruct(/mob/living/simple_animal/hostile/construct/harvester, user, cultoverride = TRUE, loc_override = src.loc) - /obj/singularity/narsie/process() if(clashing) return diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index 9d5ff2dd815..4d4eb73687f 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -35,6 +35,9 @@ return ..() /obj/machinery/particle_accelerator/control_box/attack_hand(mob/user) + . = ..() + if(.) + return if(construction_state == PA_CONSTRUCTION_COMPLETE) interact(user) else if(construction_state == PA_CONSTRUCTION_PANEL_OPEN) @@ -223,13 +226,13 @@ return 1 -/obj/machinery/particle_accelerator/control_box/interact(mob/user) +/obj/machinery/particle_accelerator/control_box/ui_interact(mob/user) + . = ..() if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER))) if(!issilicon(user)) user.unset_machine() user << browse(null, "window=pacontrol") return - user.set_machine(src) var/dat = "" dat += "Close

" diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 3c7d00b3fdd..6fcfcce8f5e 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -58,10 +58,9 @@ last_failed_movement = direct return 0 - /obj/singularity/attack_hand(mob/user) consume(user) - return 1 + return TRUE /obj/singularity/attack_paw(mob/user) consume(user) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 81cf66c26a6..f4c11009d10 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -189,10 +189,6 @@ var/tracker = 0 var/glass_type = null -/obj/item/solar_assembly/attack_hand(mob/user) - if(!anchored && isturf(loc)) // You can't pick it up - ..() - // Give back the glass type we were supplied with /obj/item/solar_assembly/proc/give_glass(device_broken) if(device_broken) @@ -430,7 +426,7 @@ A.anchored = TRUE qdel(src) else if(user.a_intent != INTENT_HARM && !(I.flags_1 & NOBLUDGEON_1)) - src.attack_hand(user) + attack_hand(user) else return ..() diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 5ed6b84a18f..abebac2b258 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -512,6 +512,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard) return /obj/machinery/power/supermatter_shard/attack_hand(mob/living/user) + . = ..() + if(.) + return dust_mob(user, cause = "hand") /obj/machinery/power/supermatter_shard/proc/dust_mob(mob/living/nom, vis_msg, mob_msg, cause) diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 90dedfa23f4..d8dbb6d2466 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -71,10 +71,10 @@ return ..() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/machinery/power/tesla_coil/attack_hand(mob/user) if(user.a_intent == INTENT_GRAB && user_buckle_mob(user.pulling, user, check_loc = 0)) - return - ..() + return ..() /obj/machinery/power/tesla_coil/tesla_act(var/power) if(anchored && !panel_open) @@ -180,10 +180,11 @@ return ..() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/machinery/power/grounding_rod/attack_hand(mob/user) if(user.a_intent == INTENT_GRAB && user_buckle_mob(user.pulling, user, check_loc = 0)) return - ..() + . = ..() /obj/machinery/power/grounding_rod/tesla_act(var/power) if(anchored && !panel_open) diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index d7f78635b05..7e73c1c9c18 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -227,13 +227,6 @@ updateDialog() -/obj/machinery/power/turbine/attack_hand(mob/user) - - if(..()) - return - - interact(user) - /obj/machinery/power/turbine/attackby(obj/item/I, mob/user, params) if(default_deconstruction_screwdriver(user, initial(icon_state), initial(icon_state), I)) return @@ -255,7 +248,7 @@ default_deconstruction_crowbar(I) -/obj/machinery/power/turbine/interact(mob/user) +/obj/machinery/power/turbine/ui_interact(mob/user) if(!Adjacent(user) || (stat & (NOPOWER|BROKEN)) && !issilicon(user)) user.unset_machine(src) @@ -321,12 +314,6 @@ else compressor = locate(/obj/machinery/power/compressor) in range(5, src) -/obj/machinery/computer/turbine_computer/attack_hand(var/mob/user as mob) - if(..()) - return - - ui_interact(user) - /obj/machinery/computer/turbine_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index f83a2d9edde..2c36f142452 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -98,13 +98,13 @@ w_class += S.w_class //so pistols do not fit in pockets when suppressed update_icon() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/gun/ballistic/attack_hand(mob/user) if(loc == user) if(suppressed && can_unsuppress) var/obj/item/suppressor/S = suppressed if(!user.is_holding(src)) - ..() - return + return ..() to_chat(user, "You unscrew [suppressed] from [src].") user.put_in_hands(suppressed) fire_sound = S.oldsound @@ -112,7 +112,7 @@ suppressed = null update_icon() return - ..() + return ..() /obj/item/gun/ballistic/attack_self(mob/living/user) var/obj/item/ammo_casing/AC = chambered //Find chambered round diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index f4194f529f9..a174874686a 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -320,7 +320,7 @@ ..() update_icon() - +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/gun/ballistic/automatic/l6_saw/attack_hand(mob/user) if(loc != user) ..() @@ -337,7 +337,6 @@ to_chat(user, "You remove the magazine from [src].") playsound(user, 'sound/weapons/magout.ogg', 60, 1) - /obj/item/gun/ballistic/automatic/l6_saw/attackby(obj/item/A, mob/user, params) if(!cover_open && istype(A, mag_type)) to_chat(user, "[src]'s cover is closed! You can't insert a new mag.") diff --git a/code/modules/projectiles/guns/ballistic/laser_gatling.dm b/code/modules/projectiles/guns/ballistic/laser_gatling.dm index 48bda4a86e6..cc719f98ee0 100644 --- a/code/modules/projectiles/guns/ballistic/laser_gatling.dm +++ b/code/modules/projectiles/guns/ballistic/laser_gatling.dm @@ -29,6 +29,7 @@ /obj/item/minigunpack/process() overheat = max(0, overheat - heat_diffusion) +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/minigunpack/attack_hand(var/mob/living/carbon/user) if(src.loc == user) if(!armed) @@ -57,6 +58,7 @@ user.dropItemToGround(gun, TRUE) /obj/item/minigunpack/MouseDrop(atom/over_object) + . = ..() if(armed) return if(iscarbon(usr)) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index d49c4a6fa0a..5fcb554c7d7 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -51,7 +51,7 @@ var/last_tick = 1 var/addiction_tick = 1 var/list/datum/reagent/addiction_list = new/list() - var/flags + var/reagents_holder_flags /datum/reagents/New(maximum=100) maximum_volume = maximum @@ -315,9 +315,9 @@ /datum/reagents/proc/set_reacting(react = TRUE) if(react) - flags &= ~(REAGENT_NOREACT) + reagents_holder_flags &= ~(REAGENT_NOREACT) else - flags |= REAGENT_NOREACT + reagents_holder_flags |= REAGENT_NOREACT /datum/reagents/proc/conditional_update_move(atom/A, Running = 0) var/list/cached_reagents = reagent_list @@ -337,7 +337,7 @@ var/list/cached_reagents = reagent_list var/list/cached_reactions = GLOB.chemical_reactions_list var/datum/cached_my_atom = my_atom - if(flags & REAGENT_NOREACT) + if(reagents_holder_flags & REAGENT_NOREACT) return //Yup, no reactions here. No siree. var/reaction_occurred = 0 diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 32096125dd6..b6bd9f62ec6 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -7,7 +7,7 @@ icon_state = "dispenser" use_power = IDLE_POWER_USE idle_power_usage = 40 - interact_offline = TRUE + interaction_flags_machine = INTERACT_MACHINE_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OFFLINE resistance_flags = FIRE_PROOF | ACID_PROOF circuit = /obj/item/circuitboard/machine/chem_dispenser var/cell_type = /obj/item/stock_parts/cell/high diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 5930260dab3..3cdaaa0f5f9 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -131,17 +131,8 @@ updateUsrDialog() return FALSE -/obj/machinery/reagentgrinder/attack_paw(mob/user) - return attack_hand(user) - -/obj/machinery/reagentgrinder/attack_ai(mob/user) - return FALSE - -/obj/machinery/reagentgrinder/attack_hand(mob/user) - user.set_machine(src) - interact(user) - -/obj/machinery/reagentgrinder/interact(mob/user) // The microwave Menu //I am reasonably certain that this is not a microwave +/obj/machinery/reagentgrinder/ui_interact(mob/user) // The microwave Menu //I am reasonably certain that this is not a microwave + . = ..() var/is_chamber_empty = FALSE var/is_beaker_ready = FALSE var/processing_chamber = "" diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 62ea18dcd9b..3e7cd539d02 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -36,8 +36,9 @@ mode = !mode update_icon() +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/reagent_containers/syringe/attack_hand() - ..() + . = ..() update_icon() /obj/item/reagent_containers/syringe/attack_paw(mob/user) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index f0c0ecfb684..4b4c786987b 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -146,6 +146,9 @@ to_chat(user, "There are no paper cups left.") /obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/living/user) + . = ..() + if(.) + return if(!paper_cups) to_chat(user, "There aren't any cups left!") return @@ -154,7 +157,6 @@ user.put_in_hands(S) paper_cups-- - /obj/structure/reagent_dispensers/beerkeg name = "beer keg" desc = "Beer is liquid bread, it's good for you..." diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index cca33063c2c..759c048ab63 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -164,9 +164,11 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) // attack with hand, move pulled object onto conveyor /obj/machinery/conveyor/attack_hand(mob/user) + . = ..() + if(.) + return user.Move_Pulled(src) - // make the conveyor broken // also propagate inoperability to any connected conveyor with the same ID /obj/machinery/conveyor/proc/broken() @@ -267,6 +269,9 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) // attack with hand, switch position /obj/machinery/conveyor_switch/attack_hand(mob/user) + . = ..() + if(.) + return add_fingerprint(user) if(position == 0) if(convdir) //is it a oneway switch diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 5b9212339a9..99c2784ebf8 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -9,7 +9,7 @@ armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30) max_integrity = 200 resistance_flags = FIRE_PROOF - interact_open = TRUE + interaction_flags_machine = INTERACT_MACHINE_OPEN var/datum/gas_mixture/air_contents // internal reservoir var/full_pressure = FALSE var/pressure_charging = TRUE diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index a32f5bf576e..a669f23dde6 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -8,7 +8,7 @@ var/giftwrapped = FALSE var/sortTag = 0 -/obj/structure/bigDelivery/attack_hand(mob/user) +/obj/structure/bigDelivery/interact(mob/user) playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, 1) qdel(src) diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 0e66644c6fd..2125d808abf 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -69,7 +69,6 @@ if(initial(tempCheck.icon_state) != null) critical_items += I - /obj/machinery/rnd/experimentor/Initialize() . = ..() @@ -109,8 +108,7 @@ ejectItem() . = ..(O) -/obj/machinery/rnd/experimentor/attack_hand(mob/user) - user.set_machine(src) +/obj/machinery/rnd/experimentor/ui_interact(mob/user) var/list/dat = list("
") if(!linked_console) dat += "Scan for R&D Console" diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 96903c93de4..b8c539b5872 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -1012,13 +1012,8 @@ doesn't have toxins access. updateUsrDialog() -/obj/machinery/computer/rdconsole/attack_hand(mob/user) - if(..()) - return - interact(user) - -/obj/machinery/computer/rdconsole/interact(mob/user) - user.set_machine(src) +/obj/machinery/computer/rdconsole/ui_interact(mob/user) + . = ..() var/datum/browser/popup = new(user, "rndconsole", name, 900, 600) popup.add_stylesheet("techwebs", 'html/browser/techwebs.css') popup.set_content(generate_ui()) diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 0a8659c795d..0ce53f0e071 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -13,7 +13,6 @@ var/console_link = TRUE //allow console link. var/requires_console = TRUE var/disabled = FALSE - var/shocked = FALSE var/obj/machinery/computer/rdconsole/linked_console var/obj/item/loaded_item = null //the item loaded inside the machine (currently only used by experimentor and destructive analyzer) @@ -39,17 +38,7 @@ else return FALSE -/obj/machinery/rnd/attack_hand(mob/user) - if(shocked) - if(shock(user,50)) - return - if(panel_open) - wires.interact(user) - /obj/machinery/rnd/attackby(obj/item/O, mob/user, params) - if (shocked) - if(shock(user,50)) - return TRUE if (default_deconstruction_screwdriver(user, "[initial(icon_state)]_t", initial(icon_state), O)) if(linked_console) disconnect_console() diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 833bcfaeaee..98da69b6464 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -80,13 +80,6 @@ env.merge(removed) air_update_turf() -/obj/machinery/rnd/server/attack_hand(mob/user as mob) // I guess only exists to stop ninjas or hell does it even work I dunno. See also ninja gloves. - if (disabled) - return - if (shocked) - shock(user,50) - return - /proc/fix_noid_research_servers() var/list/no_id_servers = list() var/list/server_ids = list() @@ -138,10 +131,8 @@ updateUsrDialog() return -/obj/machinery/computer/rdservercontrol/attack_hand(mob/user) - if(..()) - return - user.set_machine(src) +/obj/machinery/computer/rdservercontrol/ui_interact(mob/user) + . = ..() var/dat = "" switch(screen) @@ -149,8 +140,7 @@ dat += "Connected Servers:

" for(var/obj/machinery/rnd/server/S in GLOB.machines) - dat += "[S.name] || " - dat += "
" + dat += "[S.name]
" //Mining status here diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 86143559972..ad50f9931aa 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -87,13 +87,13 @@ return else if(istype(O, /obj/item/storage/bag)) var/obj/item/storage/P = O - var/loaded = 0 + var/loaded = FALSE for(var/obj/G in P.contents) if(istype(G, /obj/item/reagent_containers/food/snacks/monkeycube)) - loaded = 1 + loaded = TRUE monkeys++ qdel(G) - if (loaded) + if(loaded) to_chat(user, "You fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored.") return else if(istype(O, /obj/item/slimepotion/slime)) diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm index e5c36d09c4e..cf45b91dfe6 100644 --- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm @@ -84,11 +84,13 @@ else return QDEL_HINT_LETMELIVE +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/structure/necropolis_gate/attack_hand(mob/user) if(locked) to_chat(user, "It's [open ? "stuck open":"locked"].") return toggle_the_gate(user) + return ..() /obj/structure/necropolis_gate/proc/toggle_the_gate(mob/user, legion_damaged) if(changing_openness) @@ -151,6 +153,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) else return QDEL_HINT_LETMELIVE +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/structure/necropolis_gate/legion_gate/attack_hand(mob/user) if(!open && !changing_openness) var/safety = alert(user, "You think this might be a bad idea...", "Knock on the door?", "Proceed", "Abort") @@ -159,7 +162,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) user.visible_message("[user] knocks on [src]...", "You tentatively knock on [src]...") playsound(user.loc, 'sound/effects/shieldbash.ogg', 100, 1) sleep(50) - ..() + return ..() /obj/structure/necropolis_gate/legion_gate/toggle_the_gate(mob/user, legion_damaged) if(open) diff --git a/code/modules/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/ruins/objects_and_mobs/sin_ruins.dm index 384f22282bf..7dde9a0f9fb 100644 --- a/code/modules/ruins/objects_and_mobs/sin_ruins.dm +++ b/code/modules/ruins/objects_and_mobs/sin_ruins.dm @@ -9,7 +9,7 @@ density = TRUE var/win_prob = 5 -/obj/structure/cursed_slot_machine/attack_hand(mob/living/carbon/human/user) +/obj/structure/cursed_slot_machine/interact(mob/living/carbon/human/user) if(!istype(user)) return if(obj_flags & IN_USE) @@ -58,6 +58,9 @@ qdel(src) /obj/structure/cursed_money/attack_hand(mob/living/user) + . = ..() + if(.) + return user.visible_message("[user] opens the bag and \ and removes a die. The bag then vanishes.", "You open the bag...!\n\ diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 4f2d932b1fc..ee491f17be1 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -10,11 +10,8 @@ var/admin_controlled var/no_destination_swap = 0 -/obj/machinery/computer/shuttle/attack_hand(mob/user) - if(..(user)) - return - add_fingerprint(usr) - +/obj/machinery/computer/shuttle/ui_interact(mob/user) + . = ..() var/list/options = params2list(possible_destinations) var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId) var/dat = "Status: [M ? M.getStatusText() : "*Missing*"]

" diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index de669df1437..249cd57f188 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -528,9 +528,6 @@ else to_chat(usr, "The storage unit will only unlock during a Red or Delta security alert.") -/obj/item/storage/pod/attack_hand(mob/user) - return MouseDrop(user) - /obj/docking_port/mobile/emergency/backup name = "backup shuttle" id = "backup" diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index ea603039bc3..fdf054720f7 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -11,6 +11,7 @@ icon_state = "wabbajack_statue" icon_state_on = "wabbajack_statue_on" active = FALSE + allow_switch_interact = FALSE var/list/active_tables = list() var/tables_required = 2 @@ -40,10 +41,6 @@ active = FALSE update_icon() - -/obj/machinery/power/emitter/energycannon/magical/attack_hand(mob/user) - return - /obj/machinery/power/emitter/energycannon/magical/attackby(obj/item/W, mob/user, params) return diff --git a/code/modules/spells/spell_types/spacetime_distortion.dm b/code/modules/spells/spell_types/spacetime_distortion.dm index eebff54d6be..c46e931aa76 100644 --- a/code/modules/spells/spell_types/spacetime_distortion.dm +++ b/code/modules/spells/spell_types/spacetime_distortion.dm @@ -111,6 +111,7 @@ else walk_link(user) +//ATTACK HAND IGNORING PARENT RETURN VALUE /obj/effect/cross_action/spacetime_dist/attack_hand(mob/user) walk_link(user) diff --git a/code/modules/stock_market/computer.dm b/code/modules/stock_market/computer.dm index a6429834be9..0db040bb516 100644 --- a/code/modules/stock_market/computer.dm +++ b/code/modules/stock_market/computer.dm @@ -8,6 +8,7 @@ var/vmode = 1 circuit = /obj/item/circuitboard/computer/stockexchange clockwork = TRUE //it'd look weird + interaction_flags_atom = INTERACT_ATOM_REQUIRES_DEXTERITY | INTERACT_ATOM_UI_INTERACT | INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_REQUIRES_ANCHORED light_color = LIGHT_COLOR_GREEN @@ -20,17 +21,8 @@ return 0 return SSshuttle.points -/obj/machinery/computer/stockexchange/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/computer/stockexchange/attack_robot(mob/user) - return attack_hand(user) - -/obj/machinery/computer/stockexchange/attack_hand(var/mob/user) - if(..()) - return - user.machine = src - +/obj/machinery/computer/stockexchange/ui_interact(mob/user) + . = ..() var/css={"