From 8fdfb1bc53ffe5febe249f62e434aa94406b8a7e Mon Sep 17 00:00:00 2001 From: Neerti Date: Fri, 15 Jun 2018 18:15:24 -0400 Subject: [PATCH] Pre master pull commit --- code/modules/mob/_modifiers/auras.dm | 4 +- .../mechanical/hivebot/ranged_damage.dm | 61 ++++++++++++++++++- .../subtypes/mechanical/hivebot/support.dm | 4 +- code/modules/projectiles/projectile/arc.dm | 34 ----------- 4 files changed, 63 insertions(+), 40 deletions(-) diff --git a/code/modules/mob/_modifiers/auras.dm b/code/modules/mob/_modifiers/auras.dm index 37dc6561cc..fcc023ee2e 100644 --- a/code/modules/mob/_modifiers/auras.dm +++ b/code/modules/mob/_modifiers/auras.dm @@ -14,5 +14,5 @@ making it not expire ever, which is likely not what you want. if(istype(A)) // Make sure we're not null. if(get_dist(holder, A) > aura_max_distance) expire() - expire() // Source got deleted or something. - + else + expire() // Source got deleted or something. diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage.dm index 9f9094b3d2..2ada79408d 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage.dm @@ -66,13 +66,31 @@ /obj/item/projectile/fire name = "ember" - icon_state = "fireball" + icon = 'icons/effects/effects.dmi' + icon_state = "explosion_particle" modifier_type_to_apply = /datum/modifier/fire modifier_duration = 6 SECONDS // About 15 damage per stack, as Life() ticks every two seconds. damage = 0 nodamage = TRUE +// Close to mid-ranged shooter that arcs over other things, ideal if allies are in front of it. +// Difference from siege hivebots is that siege hivebots have limited charges for their attacks, are very long range, and \ +// the projectiles have an AoE component, where as backline hivebots do not. +/mob/living/simple_mob/mechanical/hivebot/ranged_damage/backline + name = "backline hivebot" + desc = "A robot that can fire short-ranged projectiles over their allies." + projectiletype = /obj/item/projectile/arc/blue_energy + projectilesound = 'sound/weapons/Laser.ogg' + player_msg = "Your attacks are short-ranged, but can arc over obstructions such as allies \ + or barriers." + +/obj/item/projectile/arc/blue_energy + name = "energy missile" + icon_state = "force_missile" + damage = 15 // A bit stronger since arcing projectiles are much easier to avoid than traditional ones. + damage_type = BURN + // Very long ranged hivebot that rains down hell. // Their projectiles arc, meaning they go over everything until it hits the ground. // This means they're somewhat easier to avoid, but go over most defenses (like allies, or barriers), @@ -93,14 +111,55 @@ desc = "A large robot capable of annihilating electronics from a long distance." projectiletype = /obj/item/projectile/arc/emp_blast +/obj/item/projectile/arc/emp_blast + name = "emp blast" + icon_state = "bluespace" + +/obj/item/projectile/arc/emp_blast/on_impact(turf/T) + empulse(T, 2, 4, 7, 10) // Normal EMP grenade. + return ..() + +/obj/item/projectile/arc/emp_blast/weak/on_impact(turf/T) + empulse(T, 1, 2, 3, 4) // Sec EMP grenade. + return ..() + + // Fires shots that irradiate the tile hit. /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/radiation name = "desolator hivebot" desc = "A large robot capable of irradiating a large area from afar." projectiletype = /obj/item/projectile/arc/radioactive +/obj/item/projectile/arc/radioactive + name = "radiation blast" + icon_state = "green_pellet" + icon_scale = 2 + var/rad_power = 50 + +/obj/item/projectile/arc/radioactive/on_impact(turf/T) + radiation_repository.radiate(T, rad_power) + + // Essentially a long ranged frag grenade. /mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/fragmentation name = "anti-personnel artillery hivebot" desc = "A large robot capable of delivering fragmentation shells to rip apart their fleshy enemies." projectiletype = /obj/item/projectile/arc/fragmentation + +/obj/item/projectile/arc/fragmentation + name = "fragmentation shot" + icon_state = "shell" + var/list/fragment_types = list( + /obj/item/projectile/bullet/pellet/fragment, /obj/item/projectile/bullet/pellet/fragment, \ + /obj/item/projectile/bullet/pellet/fragment, /obj/item/projectile/bullet/pellet/fragment/strong + ) + var/fragment_amount = 63 // Same as a grenade. + var/spread_range = 7 + +/obj/item/projectile/arc/fragmentation/on_impact(turf/T) + fragmentate(T, fragment_amount, spread_range, fragment_types) + + + + + diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support.dm index 4aa9b4051e..fefaab3338 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support.dm @@ -18,12 +18,10 @@ You are otherwise very weak offensively." /mob/living/simple_mob/mechanical/hivebot/support/commander/handle_special() - world << "Wew" - for(var/mob/living/L in range(4)) + for(var/mob/living/L in range(4, src)) if(L == src) continue // Don't buff ourselves. if(L.faction == src.faction && L.isSynthetic()) // Don't buff enemies. - world << "Adding modifier." L.add_modifier(/datum/modifier/aura/hivebot_commander_buff, null, src) // Modifier added to friendly hivebots nearby. diff --git a/code/modules/projectiles/projectile/arc.dm b/code/modules/projectiles/projectile/arc.dm index 28e0c39a12..d80b738e9c 100644 --- a/code/modules/projectiles/projectile/arc.dm +++ b/code/modules/projectiles/projectile/arc.dm @@ -90,38 +90,4 @@ // Subtypes -/obj/item/projectile/arc/emp_blast - name = "emp blast" - icon_state = "bluespace" -/obj/item/projectile/arc/emp_blast/on_impact(turf/T) - empulse(T, 2, 4, 7, 10) // Normal EMP grenade. - return ..() - -/obj/item/projectile/arc/emp_blast/weak/on_impact(turf/T) - empulse(T, 1, 2, 3, 4) // Sec EMP grenade. - return ..() - - -/obj/item/projectile/arc/radioactive - name = "radiation blast" - icon_state = "green_pellet" - icon_scale = 2 - var/rad_power = 50 - -/obj/item/projectile/arc/radioactive/on_impact(turf/T) - radiation_repository.radiate(T, rad_power) - - -/obj/item/projectile/arc/fragmentation - name = "fragmentation shot" - icon_state = "shell" - var/list/fragment_types = list( - /obj/item/projectile/bullet/pellet/fragment, /obj/item/projectile/bullet/pellet/fragment, \ - /obj/item/projectile/bullet/pellet/fragment, /obj/item/projectile/bullet/pellet/fragment/strong - ) - var/fragment_amount = 63 // Same as a grenade. - var/spread_range = 7 - -/obj/item/projectile/arc/fragmentation/on_impact(turf/T) - fragmentate(T, fragment_amount, spread_range, fragment_types)