Fixing, nerfing and buffing the Eclipse (#7283)

This commit is contained in:
FluffMedic
2023-12-01 16:20:43 -05:00
committed by GitHub
parent 338ea5620e
commit 06f859fbb2
2 changed files with 221 additions and 128 deletions

View File

@@ -23,8 +23,8 @@
response_disarm = "shoves"
response_harm = "hits"
health = 50
maxHealth = 50
health = 40
maxHealth = 40
harm_intent_damage = 5
melee_damage_lower = 15 //Tac Knife damage
melee_damage_upper = 15
@@ -34,7 +34,7 @@
projectile_dispersion = 8
projectile_accuracy = -20
armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100) // Simple mob immunuties plus base Eclipse foe stuff
ranged_cooldown = 4
ranged_cooldown = 5
can_be_drop_prey = FALSE //CHOMP Add
pass_flags = PASSTABLE //mostly for the melee mobs.
@@ -58,10 +58,7 @@
reload_max = 7 // Not the best default, but it fits the pistol
ai_holder_type = /datum/ai_holder/simple_mob/merc/eclipse/ranged
// Grenade special attack vars
var/grenade_type = /obj/item/weapon/grenade/shooter/rubber
var/grenade_timer = 50 //CHOMPEdit
special_attack_cooldown = 45 SECONDS
special_attack_cooldown = 15 SECONDS
special_attack_min_range = 2
special_attack_max_range = 7
var/has_heal_droid = FALSE
@@ -81,41 +78,6 @@
if(has_heal_droid)
add_overlay(image(icon = 'modular_chomp/icons/mob/eclipse.dmi', icon_state = "heal_droid"))
////////////////////////////////
// Grenade Attack
////////////////////////////////
// Any merc can use this, just set special_attack_charges to a positive value
// Check if we should bother with the grenade
/mob/living/simple_mob/humanoid/eclipse/should_special_attack(atom/A)
var/mob_count = 0 // Are there enough mobs to consider grenading?
var/turf/T = get_turf(A)
for(var/mob/M in range(T, 2))
if(M.faction == faction) // Don't grenade our friends
return FALSE
if(M in oview(src, special_attack_max_range)) // And lets check if we can actually see at least two people before we throw a grenade
if(!M.stat) // Dead things don't warrant a grenade
mob_count ++
if(mob_count < 2)
return FALSE
else
return TRUE
// Yes? Throw the grenade
/mob/living/simple_mob/humanoid/eclipse/do_special_attack(atom/A)
set waitfor = FALSE
set_AI_busy(TRUE)
var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src))
if(istype(G))
G.throw_at(A, G.throw_range, G.throw_speed, src)
G.det_time = grenade_timer //CHOMPEdit
G.activate(src) //CHOMPEdit
special_attack_charges = max(special_attack_charges-1, 0)
set_AI_busy(FALSE)
////////////////////////////////
// Stealing Merc AI Types
////////////////////////////////
@@ -155,28 +117,54 @@
/mob/living/simple_mob/humanoid/eclipse/solar/teslanoodle
name = "Solar Eclipse Tesla Serpent"
desc = "A naga cladded in strange orange armor, seemingly guarded from lasers and energy based weaponry."
health = 100
maxHealth = 100
health = 40
maxHealth = 40
icon_state = "eclipse_tesla"
icon_living = "eclipse_tesla"
reload_max = 5
movement_cooldown = 1
special_attack_cooldown = 5 SECONDS
special_attack_cooldown = 20 SECONDS
special_attack_min_range = 1
special_attack_max_range = 7
var/grenade_type = /obj/item/weapon/grenade/chem_grenade/incendiary
var/grenade_timer = 20 //CHOMPEdit
projectiletype = /obj/item/projectile/energy/electrode/eclipse
/mob/living/simple_mob/humanoid/eclipse/solar/teslanoodle/should_special_attack(atom/A)
var/mob_count = 0 // Are there enough mobs to consider grenading?
var/turf/T = get_turf(A)
for(var/mob/M in range(T, 2))
if(M.faction == faction) // Don't grenade our friends
return FALSE
if(M in oview(src, special_attack_max_range)) // And lets check if we can actually see at least two people before we throw a grenade
if(!M.stat) // Dead things don't warrant a grenade
mob_count ++
if(mob_count < 2)
return FALSE
else
return TRUE
// Yes? Throw the grenade
/mob/living/simple_mob/humanoid/eclipse/solar/teslanoodle/do_special_attack(atom/A)
var/obj/item/projectile/P = new /obj/item/projectile/energy/electrode/eclipse(get_turf(src))
P.launch_projectile(A, BP_TORSO, src)
set waitfor = FALSE
set_AI_busy(TRUE)
var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src))
if(istype(G))
G.throw_at(A, G.throw_range, G.throw_speed, src)
G.det_time = grenade_timer //CHOMPEdit
G.activate(src) //CHOMPEdit
special_attack_charges = max(special_attack_charges-1, 0)
set_AI_busy(FALSE)
/mob/living/simple_mob/humanoid/eclipse/solar/firemoff
name = "Solar Eclipse Inferno Moth"
desc = "A moth like creature cladded in armor, wisps of flames swirling around it. Protected from lasers and energy."
health = 35
maxHealth = 35
health = 40
maxHealth = 40
icon_state = "eclipse_moth"
icon_living = "eclipse_moth"
reload_max = 10
@@ -195,14 +183,14 @@
/mob/living/simple_mob/humanoid/eclipse/solar/snipertesh
name = "Solar Eclipse Sniper"
desc = "An armored teshari with a sniper, protected from laser and energy based attacks"
health = 25
maxHealth = 25
health = 20
maxHealth = 20
movement_cooldown = -1
icon_state = "eclipse_snipertesh"
icon_living = "eclipse_snipertesh"
projectiletype = /obj/item/projectile/beam/sniper/eclipse
projectiletype = /obj/item/projectile/energy/mob/heavysniper
projectile_accuracy = 100
@@ -253,8 +241,8 @@
/mob/living/simple_mob/humanoid/eclipse/solar/radiation
name = "Solar Eclipse Irradiator"
desc = "A lizard emitting radiation, whilst protected from it, alongside energy and laser based weapons"
health = 75
maxHealth = 75
health = 40
maxHealth = 40
glow_toggle = TRUE
reload_max = 3
@@ -299,8 +287,8 @@
/mob/living/simple_mob/humanoid/eclipse/lunar/silvernoodle //Bouncing bullet extreme
name = "Lunar Eclipse Silver Serpent"
desc = "A hungry looking naga, their strange armor protecting them from ballistics and physical weaponry."
health = 50
maxHealth = 50
health = 40
maxHealth = 40
reload_max = 6
movement_cooldown = 1
@@ -309,54 +297,98 @@
projectiletype = /obj/item/projectile/bullet/pistol/medium/ap/eclipse
/mob/living/simple_mob/humanoid/eclipse/lunar/silvernoodle/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(O.force)
if(prob(15))
visible_message("<span class='danger'>\The [O] is absorbed by the armor!</span>")
if(user)
ai_holder.react_to_attack(user)
return
else
..()
else
to_chat(user, "<span class='warning'>This weapon is ineffective, it does no damage.</span>")
visible_message("<span class='warning'>\The [user] gently taps [src] with \the [O].</span>")
var/grenade_type = /obj/item/weapon/grenade/chem_grenade/teargas
var/grenade_timer = 20
/mob/living/simple_mob/humanoid/eclipse/lunar/silvernoodle/bullet_act(var/obj/item/projectile/Proj)
if(!Proj) return
if(prob(15))
visible_message("<font color='red'><B>The [Proj] is absorbed by the armor!</B></font>")
if(Proj.firer)
ai_holder.react_to_attack(Proj.firer)
return
/mob/living/simple_mob/humanoid/eclipse/lunar/silvernoodle/should_special_attack(atom/A)
var/mob_count = 0 // Are there enough mobs to consider grenading?
var/turf/T = get_turf(A)
for(var/mob/M in range(T, 2))
if(M.faction == faction) // Don't grenade our friends
return FALSE
if(M in oview(src, special_attack_max_range)) // And lets check if we can actually see at least two people before we throw a grenade
if(!M.stat) // Dead things don't warrant a grenade
mob_count ++
if(mob_count < 2)
return FALSE
else
..()
return TRUE
// Yes? Throw the grenade
/mob/living/simple_mob/humanoid/eclipse/lunar/silvernoodle/do_special_attack(atom/A)
set waitfor = FALSE
set_AI_busy(TRUE)
var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src))
if(istype(G))
G.throw_at(A, G.throw_range, G.throw_speed, src)
G.det_time = grenade_timer //CHOMPEdit
G.activate(src) //CHOMPEdit
special_attack_charges = max(special_attack_charges-1, 0)
set_AI_busy(FALSE)
/mob/living/simple_mob/humanoid/eclipse/lunar/shotgunner //wuff with shotgun
name = "Lunar Eclipse Shotgunner"
desc = "A Vulpkanin or the like in a red-purple flashing rigsuit, it defending them from physical damage of close and long ranges."
health = 35
maxHealth = 35
reload_max = 2
health = 40
maxHealth = 40
reload_max = 1
icon_state = "eclipse_shotwuff"
icon_living = "eclipse_shotwuff"
projectiletype = /obj/item/projectile/bullet/shotgun/slow
projectiletype = /obj/item/projectile/bullet/shotgun
ranged_attack_delay = 0.5 SECONDS
/mob/living/simple_mob/humanoid/eclipse/lunar/shotgunner/ranged_pre_animation(atom/A)
Beam(get_turf(A), icon_state = "sniper_beam", time = 0.5 SECONDS, maxdistance = 5)
. = ..()
/mob/living/simple_mob/humanoid/eclipse/lunar/shotgunner/shoot_target(atom/A)
set waitfor = FALSE
if(!istype(A) || QDELETED(A))
return
setClickCooldown(get_attack_speed())
face_atom(A)
var/atom/orig_targ = A
if(ranged_attack_delay)
A = get_turf(orig_targ)
ranged_pre_animation(A)
handle_attack_delay(A, ranged_attack_delay) // This will sleep this proc for a bit, which is why waitfor is false.
if(needs_reload)
if(reload_count >= reload_max)
try_reload()
return FALSE
visible_message("<span class='danger'><b>\The [src]</b> fires at \the [orig_targ]!</span>")
shoot(A)
if(casingtype)
new casingtype(loc)
if(ranged_attack_delay)
ranged_post_animation(A)
return TRUE
/mob/living/simple_mob/humanoid/eclipse/lunar/bulletstorm //tesh got a gun
name = "Lunar Eclipse Judge"
desc = "A teshari wildly wielding a pistol, wearing bullet and sword protective gear."
health = 25
maxHealth = 25
health = 20
maxHealth = 20
icon_state = "eclipse_shottesh"
icon_living = "eclipse_shottesh"
movement_cooldown = -1
projectiletype = /obj/item/projectile/bullet/shotgun/slow
projectiletype = /obj/item/projectile/bullet/shotgun
reload_max = 6
projectile_dispersion = 100
@@ -366,12 +398,12 @@
/mob/living/simple_mob/humanoid/eclipse/lunar/ravanger //Tanky boi. Very deadly melee
name = "Lunar Eclipse Ravanger"
desc = "An individual wearing strange armor that seems to be living, and breathing while providing protection from bullets and swords."
health = 60
maxHealth = 60
health = 40
maxHealth = 40
icon_state = "eclipse_ravanger"
icon_living = "eclipse_ravanger"
attack_armor_pen = 25
attack_armor_pen = 15
melee_damage_lower = 20
melee_damage_upper = 20
@@ -393,14 +425,13 @@
/mob/living/simple_mob/humanoid/eclipse/solar/hellhound
name = "Solar Eclipse Hound"
desc = "A heavily armored creature, flames dancing around it's burn and energy proof armor."
health = 75
maxHealth = 75
health = 70
maxHealth = 70
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
projectiletype = null //Flashing was to much for this mob.
movement_cooldown = -1
melee_damage_lower = 20
melee_damage_upper = 20
attack_armor_pen = 20
icon_state = "eclipse_hound"
icon_living = "eclipse_hound"
size_multiplier = 1.25
@@ -408,14 +439,20 @@
var/poison_per_bite = 4
var/poison_type = "stoxin"
melee_attack_delay = 4
melee_attack_delay = 3
/mob/living/simple_mob/humanoid/eclipse/solar/hellhound/do_special_attack(atom/A)
var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/smoke_spread
s1.set_up(5, 1, A)
var/obj/item/projectile/P = new /obj/item/projectile/energy/fireball(get_turf(src))
P.launch_projectile(A, BP_TORSO, src)
/mob/living/simple_mob/humanoid/eclipse/lunar/wheel
name = "Lunar Eclipse Armadillo"
desc = "A silver armadillo coiled up, and spinning at you, all bullets and close quarters attacks bouncing off."
health = 75
maxHealth = 75
health = 70
maxHealth = 70
melee_damage_lower = 10
melee_damage_upper = 10
attack_armor_pen = 50
@@ -511,7 +548,7 @@
/mob/living/simple_mob/humanoid/eclipse/solar/guardian
name = "Solar Eclipse Guardian"
desc = "A squishy bouncy individual, it seeming to harmlessly absorb lasers and energy in general."
projectiletype = /obj/item/projectile/ion
projectiletype = /obj/item/projectile/energy/mob/ionbeam
icon_state = "eclipse_guardian"
icon_living = "eclipse_guardian"
reload_max = 10
@@ -553,9 +590,6 @@
if(prob(shock_chance))
A.emp_act(4) //The weakest strength of EMP
playsound(src, 'sound/weapons/Egloves.ogg', 75, 1)
L.Weaken(4)
L.Stun(4)
L.stuttering = max(L.stuttering, 4)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, L)
s.start()
@@ -566,12 +600,12 @@
//Freezing winds update
/mob/living/simple_mob/humanoid/eclipse/lunar/aeroblaster //Air sniper
name = "Lunar Eclipse Aeroblaster"
name = "Lunar Eclipse Demodrone"
desc = "A strange somewhat see through floating jellyfish."
health = 25
maxHealth = 25
ai_holder_type = /datum/ai_holder/simple_mob/merc/eclipse/ranged/sniper
projectiletype = /obj/item/projectile/bullet/rifle/a145/aero
health = 30
maxHealth = 30
ai_holder_type = /datum/ai_holder/simple_mob/merc/eclipse/ranged
projectiletype = /obj/item/projectile/bullet/srmrocket
icon_state = "aeroblaster"
icon_living = "aeroblaster"
@@ -582,8 +616,39 @@
ranged_attack_delay = 1.5 SECONDS
hovering = TRUE
var/exploded = FALSE
var/explosion_dev_range = 0
var/explosion_heavy_range = 1
var/explosion_light_range = 2
var/explosion_flash_range = 3 // This doesn't do anything iirc.
var/explosion_delay_lower = 5 SECOND // Lower bound for explosion delay.
var/explosion_delay_upper = 10 SECONDS // Upper bound.
/mob/living/simple_mob/humanoid/eclipse/lunar/aeroblaster/death()
visible_message(span("critical", "\The [src]'s body begins to rupture!"))
var/delay = rand(explosion_delay_lower, explosion_delay_upper)
spawn(0)
// Flash black and red as a warning.
for(var/i = 1 to delay)
if(i % 2 == 0)
color = "#000000"
else
color = "#FF0000"
sleep(1)
spawn(delay)
// The actual boom.
if(src && !exploded)
visible_message(span("danger", "\The [src]'s body detonates!"))
exploded = TRUE
explosion(src.loc, explosion_dev_range, explosion_heavy_range, explosion_light_range, explosion_flash_range)
return ..()
/mob/living/simple_mob/humanoid/eclipse/lunar/aeroblaster/ranged_pre_animation(atom/A)
Beam(get_turf(A), icon_state = "sniper_beam", time = 1 SECONDS, maxdistance = 15)
Beam(get_turf(A), icon_state = "sniper_beam", time = 1.5 SECONDS, maxdistance = 5)
. = ..()
/mob/living/simple_mob/humanoid/eclipse/lunar/aeroblaster/shoot_target(atom/A)
@@ -618,19 +683,12 @@
return TRUE
/obj/item/projectile/bullet/rifle/a145/aero
damage = 10
stun = 0
weaken = 0
penetrating = 10
armor_penetration = 90
hud_state = "sniper_flak"
/mob/living/simple_mob/humanoid/eclipse/lunar/miner //Confusion?
name = "Lunar Eclipse Miner"
desc = "A slime creature in red and blue armor."
health = 50
maxHealth = 50
health = 30
maxHealth = 30
projectiletype = /obj/item/projectile/energy/excavate/weak
special_attack_cooldown = 50 SECONDS
special_attack_min_range = 4
@@ -649,8 +707,8 @@
/mob/living/simple_mob/humanoid/eclipse/solar/froststalker //teleporting stalker
name = "Solar Eclipse Froststalker"
health = 50
maxHealth = 50
health = 30
maxHealth = 30
desc = "A somewhat see through being wearing a burn resistaint coat."
alpha = 180
melee_damage_lower = 20
@@ -719,10 +777,11 @@
reload_max = 5
icon_state = "cryo"
icon_living = "cryo"
grenade_type = /obj/item/weapon/grenade/chem_grenade/frost
cold_resist = 1.0
has_heal_droid = TRUE
ai_holder_type = /datum/ai_holder/simple_mob/merc/eclipse/ranged/cyro
var/grenade_type = /obj/item/weapon/grenade/chem_grenade/frost
var/grenade_timer = 20 //CHOMPEdit
ranged_attack_delay = 1.5 SECONDS
@@ -731,6 +790,33 @@
armor_soak = list(melee = 0, bullet = 0, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0)
/mob/living/simple_mob/humanoid/eclipse/solar/cryomancer/should_special_attack(atom/A)
var/mob_count = 0 // Are there enough mobs to consider grenading?
var/turf/T = get_turf(A)
for(var/mob/M in range(T, 2))
if(M.faction == faction) // Don't grenade our friends
return FALSE
if(M in oview(src, special_attack_max_range)) // And lets check if we can actually see at least two people before we throw a grenade
if(!M.stat) // Dead things don't warrant a grenade
mob_count ++
if(mob_count < 2)
return FALSE
else
return TRUE
// Yes? Throw the grenade
/mob/living/simple_mob/humanoid/eclipse/solar/cryomancer/do_special_attack(atom/A)
set waitfor = FALSE
set_AI_busy(TRUE)
var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src))
if(istype(G))
G.throw_at(A, G.throw_range, G.throw_speed, src)
G.det_time = grenade_timer //CHOMPEdit
G.activate(src) //CHOMPEdit
special_attack_charges = max(special_attack_charges-1, 0)
set_AI_busy(FALSE)
/obj/item/weapon/grenade/chem_grenade/frost
name = "frost grenade"

View File

@@ -81,27 +81,26 @@
//Eclipse mob stuff
/obj/item/projectile/energy/blob/moth
damage = 20
armor_penetration = 25
damage = 15
armor_penetration = 15
my_chems = list("fuel", "mold")
flammability = 0.25
modifier_type_to_apply = /datum/modifier/fire
modifier_duration = 6 SECONDS
color = "#38b9ff"
speed = 2.6
speed = 3.2
/obj/item/projectile/bullet/pistol/medium/ap/eclipse
armor_penetration = 20
ricochets = 1
ricochets_max = 8
ricochet_chance = 100
speed = 2.6
speed = 3.2
/obj/item/projectile/energy/electrode/eclipse
damage = 20
damage_type = BURN
color = "#38b9ff"
speed = 2.6
speed = 3.2
/obj/item/projectile/arc/fragmentation/moth
name = "solar mortar"
@@ -113,16 +112,24 @@
fragment_amount = 3 // Same as a grenade.
spread_range = 7
/obj/item/projectile/beam/sniper/eclipse
armor_penetration = 50
damage = 50
/obj/item/projectile/energy/mob/heavysniper
armor_penetration = 40
damage = 40
speed = 1.2
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
name = "sniper beam"
icon_state = "impact_xray"
/obj/item/projectile/energy/declone/burn
damage = 15
armor_penetration = 10
nodamage = 0
speed = 2.6
irradiate = 60
speed = 3.2
irradiate = 30
/obj/item/projectile/bullet/shotgun/slow
speed = 2.0
/obj/item/projectile/energy/mob/ionbeam
name = "Ion Burst"
damage = 10
damage_type = ELECTROMAG
light_color = "#00CCFF"
icon_state = "impact_blue"
fire_sound = 'sound/weapons/Laser.ogg'