diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 9bc5b4de20af..99f1d4c03a3a 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -99,18 +99,17 @@ return txt -/obj/item/mecha_parts/mecha_equipment/proc/is_ranged()//add a distance restricted equipment. Why not? - return range & MECHA_RANGED - -/obj/item/mecha_parts/mecha_equipment/proc/is_melee() - return range & MECHA_MELEE - - /obj/item/mecha_parts/mecha_equipment/proc/action_checks(atom/target) if(!target) return FALSE if(!chassis) return FALSE + if(chassis.Adjacent(target)) + if(!(range & MECHA_MELEE)) + chassis.default_melee_attack(target) + return FALSE + else if(!(range & MECHA_RANGED)) + return FALSE if(!equip_ready) return FALSE if(energy_drain && !chassis.has_charge(energy_drain)) diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 93e079ea1db8..421992738614 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -49,8 +49,6 @@ return 0 /obj/item/mecha_parts/mecha_equipment/medical/sleeper/action(mob/living/carbon/target) - if(!action_checks(target)) - return if(!istype(target)) return if(!patient_insertion_check(target)) @@ -288,8 +286,6 @@ return /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/action(atom/movable/target) - if(!action_checks(target)) - return if(istype(target, /obj/item/reagent_containers/syringe)) return load_syringe(target) if(istype(target, /obj/item/storage))//Loads syringes from boxes diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm index a9fe241237a4..0a2199aaf96b 100644 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -22,11 +22,12 @@ . = ..() AddComponent(/datum/component/butchering, 50, 100) -/obj/item/mecha_parts/mecha_equipment/drill/action(atom/target) - if(!action_checks(target)) - return +/obj/item/mecha_parts/mecha_equipment/drill/action_checks(atom/target) if(isspaceturf(target)) - return + return FALSE + return ..() + +/obj/item/mecha_parts/mecha_equipment/drill/action(atom/target) if(isobj(target)) var/obj/target_obj = target if(target_obj.resistance_flags & UNACIDABLE) diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index f31e6928c5b9..6afacfe22572 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -12,9 +12,14 @@ energy_drain = 1000 range = MECHA_RANGED +/obj/item/mecha_parts/mecha_equipment/teleporter/action_checks(atom/target) + var/area/start_area = get_area(chassis) + var/area/end_area = get_area(target) + if((start_area.area_flags|end_area.area_flags) & NOTELEPORT) + return FALSE + return ..() + /obj/item/mecha_parts/mecha_equipment/teleporter/action(atom/target) - if(!action_checks(target) || is_centcom_level(loc.z)) - return var/turf/T = get_turf(target) if(T) do_teleport(chassis, T, 4, channel = TELEPORT_CHANNEL_BLUESPACE) @@ -32,10 +37,14 @@ energy_drain = 300 range = MECHA_RANGED +/obj/item/mecha_parts/mecha_equipment/wormhole_generator/action_checks(atom/target) + var/area/start_area = get_area(chassis) + var/area/end_area = get_area(target) + if((start_area.area_flags|end_area.area_flags) & NOTELEPORT) + return FALSE + return ..() /obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(atom/target) - if(!action_checks(target) || is_centcom_level(loc.z)) - return var/list/theareas = get_areas_in_range(100, chassis) if(!theareas.len) return @@ -82,8 +91,6 @@ return ..() /obj/item/mecha_parts/mecha_equipment/gravcatapult/action(atom/movable/target, mob/living/user, params) - if(!action_checks(target)) - return var/list/modifiers = params2list(params) if(modifiers[RIGHT_CLICK]) if(locked) diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 343d647ac6a0..637c7adf90e1 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -51,8 +51,6 @@ tool_behaviour = 0 /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/action(atom/target, mob/living/user, params) - if(!action_checks(target)) - return if(!cargo_holder) return @@ -133,8 +131,6 @@ real_clamp = TRUE /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/action(atom/target, mob/living/user, params) - if(!action_checks(target)) - return if(!cargo_holder) return if(isobj(target)) @@ -220,9 +216,6 @@ reagents.add_reagent(/datum/reagent/firefighting_foam, 1000) /obj/item/mecha_parts/mecha_equipment/extinguisher/action(atom/target) //copypasted from extinguisher. TODO: Rewrite from scratch. - if(!action_checks(target)) - return - if(istype(target, /obj/structure/reagent_dispensers/foamtank) && get_dist(chassis,target) <= 1) var/obj/structure/reagent_dispensers/WT = target WT.reagents.trans_to(src, 1000) @@ -494,8 +487,6 @@ return ..() /obj/item/mecha_parts/mecha_equipment/cable_layer/action(obj/item/stack/cable_coil/target) - if(!action_checks(target)) - return if(istype(target) && target.amount) var/cur_amount = cable? cable.amount : 0 var/to_load = max(max_cable - cur_amount,0) diff --git a/code/game/mecha/equipment/weapons/melee_weapons.dm b/code/game/mecha/equipment/weapons/melee_weapons.dm index d1a273dd2b7e..80104fb2bc06 100644 --- a/code/game/mecha/equipment/weapons/melee_weapons.dm +++ b/code/game/mecha/equipment/weapons/melee_weapons.dm @@ -72,9 +72,6 @@ //Melee weapon attacks are a little different in that they'll override the standard melee attack /obj/item/mecha_parts/mecha_equipment/melee_weapon/action(atom/target, mob/living/user, params) - if(!action_checks(target)) - return 0 - var/turf/curloc = get_turf(chassis) var/turf/targloc = get_turf(target) if (!targloc || !istype(targloc) || !curloc) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 3ae6b4815af8..1054fd1b38c0 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -33,9 +33,6 @@ return projectiles_per_shot /obj/item/mecha_parts/mecha_equipment/weapon/action(atom/target, mob/living/user, params) - if(!action_checks(target)) - return 0 - var/turf/curloc = get_turf(chassis) var/turf/targloc = get_turf(target) if (!targloc || !istype(targloc) || !curloc) @@ -240,8 +237,6 @@ return 0 /obj/item/mecha_parts/mecha_equipment/weapon/honker/action(target, params) - if(!action_checks(target)) - return playsound(chassis, 'sound/items/airhorn.ogg', 100, 1) chassis.occupant_message("HONK") for(var/mob/living/carbon/M in ohearers(6, chassis)) @@ -452,8 +447,6 @@ var/diags_first = FALSE /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/action(target) - if(!action_checks(target)) - return var/obj/O = new projectile(chassis.loc) playsound(chassis, fire_sound, 50, 1) log_message("Launched a [O.name] from [name], targeting [target].", LOG_MECHA) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 38fb69797c34..849b16dad26f 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -547,11 +547,11 @@ for(var/obj/item/mecha_parts/mecha_equipment/weapon/W in equipment) if(!W.equip_ready && (W.equip_cooldown < MECHA_MAX_COOLDOWN)) return - - if(Adjacent(target) && !selected?.is_melee()) + + if(!selected && Adjacent(target)) default_melee_attack(target) return - if(selected?.action(target, user, params)) + if(selected.action_checks(target) && selected.action(target, user, params)) selected.start_cooldown() /obj/mecha/proc/default_melee_attack(atom/target) diff --git a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm index 703b9dafa180..de788c581b0a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm +++ b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm @@ -163,7 +163,7 @@ var/list/possible_weapons = get_mecha_equip_by_flag(MECHA_RANGED) if(possible_weapons.len) var/obj/item/mecha_parts/mecha_equipment/ME = pick(possible_weapons) //so we don't favor mecha.equipment[1] forever - if(ME.action(A)) + if(ME.action_checks(A) && ME.action(A)) ME.start_cooldown() return