Tyr Update 3 (#9688)

This commit is contained in:
FluffMedic
2025-01-02 16:55:53 +01:00
committed by GitHub
parent 52ea336513
commit 1c07e54746
21 changed files with 4476 additions and 3720 deletions
@@ -54,8 +54,8 @@
vore_bump_emote = "slurps up" //Not really a good way to make the grammar work with a passive vore plant.
vore_active = 1
vore_capacity = 1
vore_pounce_chance = 0 //Plants only eat people who stumble into them.
swallowTime = 3 //3 deciseconds. This is intended to be nearly instant, e.g. victim trips and falls in.
vore_pounce_chance = 100
swallowTime = 3
vore_ignores_undigestable = 0
vore_default_mode = DM_DIGEST
@@ -110,6 +110,7 @@
spawn_types = list(
/mob/living/simple_mob/animal/tyr/electronic_beetle = 1,
/mob/living/simple_mob/animal/tyr/explode_beetle = 1,
/mob/living/simple_mob/animal/tyr/glowing_beetle = 1,
)
simultaneous_spawns = 2
@@ -122,8 +123,8 @@
desc = "A large insect."
icon_state = "lighting_beetle"
icon_dead = "beetle_dead"
maxHealth = 40
health = 40
maxHealth = 18
health = 18
pass_flags = PASSTABLE //flying bug
movement_cooldown = 1
@@ -155,8 +156,8 @@
desc = "A large insect."
icon_state = "fire_beetle"
icon_dead = "beetle_dead"
maxHealth = 40
health = 40
maxHealth = 18
health = 18
pass_flags = PASSTABLE //flying bug
movement_cooldown = 1
@@ -177,3 +178,29 @@
if(isliving(A))
var/mob/living/L = A
L.add_modifier(/datum/modifier/fire, 3 SECONDS)
/mob/living/simple_mob/animal/tyr/glowing_beetle
name = "glowing beetle"
desc = "A large insect."
icon_state = "green_beetle"
icon_dead = "beetle_dead"
maxHealth = 18
health = 18
pass_flags = PASSTABLE
movement_cooldown = 1
ai_holder_type = /datum/ai_holder/hostile/ranged/robust
projectiletype = /obj/item/projectile/arc/spore
meat_type = /obj/item/reagent_containers/food/snacks/deathclawmeat
meat_amount = 2
butchery_loot = list(\
/obj/item/stack/material/chitin = 1\
)
see_in_dark = 3
melee_damage_lower = 16
melee_damage_upper = 16
ranged_cooldown = 30
File diff suppressed because it is too large Load Diff
@@ -20,81 +20,28 @@
special_attack_cooldown = 10 SECONDS
special_attack_min_range = 1
special_attack_max_range = 8
has_heal_droid = TRUE
specialattackprojectile = /obj/item/projectile/bullet/dragon
loot_list = list(/obj/item/gun/energy/flamegun = 100,
/obj/item/bone/skull = 100
)
/mob/living/simple_mob/humanoid/eclipse/head/security/updatehealth()
. = ..()
if(vore_fullness == 1)
ranged_cooldown = 8
projectiletype = /obj/item/projectile/energy/flamecrystal
else if(vore_fullness == 2)
ranged_cooldown = 12
projectiletype = /obj/item/projectile/energy/fireball
else if (vore_fullness > 2)
ranged_cooldown = 16
projectiletype = /obj/item/projectile/energy/fireball
else
ranged_cooldown = 5
/mob/living/simple_mob/humanoid/eclipse/head/security/do_special_attack(atom/A)
if(vore_fullness < 2)
if(vore_fullness > 3)
bomb_chaos(A)
else if(vore_fullness > 0)
visible_message(span_warning("\The [src]'s maw glows!"))
Beam(A, icon_state = "sat_beam", time = 2.5 SECONDS, maxdistance = INFINITY)
addtimer(CALLBACK(src, PROC_REF(special_projectile), A), 3 SECONDS, TIMER_DELETE_ME)
else
if(prob(50))
rapidfire(A)
visible_message(span_warning("\The [src] throws out a chain!"))
Beam(A, icon_state = "chain", time = 3 SECONDS, maxdistance = INFINITY)
addtimer(CALLBACK(src, PROC_REF(gravity_pull), A), 3 SECOND, TIMER_DELETE_ME)
else
tornado_maw(A)
else if(vore_fullness == 2)
tornado_maw(A)
else if(vore_fullness > 2)
if(prob(50))
deathtoll(A)
else
tornado_maw(A)
/mob/living/simple_mob/humanoid/eclipse/head/security/proc/rapidfire(atom/A)
var/obj/item/projectile/P = new /obj/item/projectile/energy/flamecrystal(get_turf(src))
P.launch_projectile(A, BP_TORSO, src)
sleep(1)
P.launch_projectile(A, BP_TORSO, src)
sleep(1)
P.launch_projectile(A, BP_TORSO, src)
sleep(1)
P.launch_projectile(A, BP_TORSO, src)
sleep(1)
P.launch_projectile(A, BP_TORSO, src)
/mob/living/simple_mob/humanoid/eclipse/head/security/proc/tornado_maw(atom/A)
var/turf/T = get_turf(src)
var/datum/effect/effect/system/grav_pull/s1 = new /datum/effect/effect/system/grav_pull
s1.set_up(5, 1, T)
s1.start()
/mob/living/simple_mob/humanoid/eclipse/head/security/proc/deathtoll(atom/A)
var/list/potential_targets = ai_holder.list_targets()
for(var/atom/entry in potential_targets)
if(istype(entry, /mob/living/simple_mob/humanoid/eclipse))
potential_targets -= entry
if(potential_targets.len)
var/iteration = clamp(potential_targets.len, 1, 3)
for(var/i = 0, i < iteration, i++)
if(!(potential_targets.len))
break
var/mob/target = pick(potential_targets)
potential_targets -= target
deathtollfollow(target)
/mob/living/simple_mob/humanoid/eclipse/head/security/proc/deathtollfollow(atom/target)
var/list/bomb_range = block(locate(target.x-6, target.y-6, target.z), locate(target.x+6, target.y+6, target.z))
var/obj/item/projectile/P = new /obj/item/projectile/bullet/flamegun(get_turf(src))
bomb_range -= get_turf(target)
for(var/i = 0, i < 4, i++)
var/turf/T = pick(bomb_range)
P.launch_projectile(target, BP_TORSO, src)
bomb_range -= T
visible_message(span_warning("\The [src] throws out a chain!"))
Beam(A, icon_state = "chain", time = 3 SECONDS, maxdistance = INFINITY)
addtimer(CALLBACK(src, PROC_REF(itemyoink), A), 3 SECOND, TIMER_DELETE_ME)
/obj/item/projectile/energy/flamecrystal
name = "Flame Crystal"
@@ -132,9 +79,11 @@
special_attack_max_range = 10
projectiletype = /obj/item/projectile/bullet/pistol/ap
loot_list = list(/obj/item/circuitboard/mecha/hades/targeting = 100,
/obj/item/circuitboard/mecha/hades/peripherals = 100,
/obj/item/circuitboard/mecha/hades/main = 100,
loot_list = list(/obj/item/circuitboard/mecha/imperion/targeting = 60,
/obj/item/circuitboard/mecha/gygax/peripherals = 60,
/obj/item/prop/alien/phasecoil = 60,
/obj/item/circuitboard/mecha/durand/peripherals = 60,
/obj/item/bluespace_harpoon = 10,
/obj/item/bone/skull = 100
)
@@ -173,184 +122,18 @@
/mob/living/simple_mob/mechanical/hivebot/swarm/eclipse
faction = FACTION_ECLIPSE
/mob/living/simple_mob/mechanical/combat_drone/artillery
faction = FACTION_ECLIPSE
projectiletype = /obj/item/projectile/arc/blue_energy
/mob/living/simple_mob/humanoid/eclipse/head/captain
name = "Eclipse Expedition Leader"
icon_state = "captain"
loot_list = list(/obj/item/slime_extract/dark = 20,
/obj/item/prop/alien/junk = 60,
/obj/random/tool/alien = 60,
/obj/random/tool/alien = 60,
/obj/item/cell/device/weapon/recharge/alien = 60,
/obj/random/tool/alien = 60,
/obj/item/cell/device/weapon/recharge/alien = 60,
/obj/item/bluespace_harpoon = 60,
/obj/item/flame/lighter/supermatter/syndismzippo = 60,
/obj/item/gun/energy/medigun = 60,
/obj/item/bone/skull = 100
)
var/obj/item/shield_projector/shield1 = null
/mob/living/simple_mob/humanoid/eclipse/head/captain/Initialize(mapload)
shield1 = new /obj/item/shield_projector/rectangle/automatic/eclipse/big(src)
/mob/living/simple_mob/humanoid/eclipse/head/captain/updatehealth() //This is a mistake
. = ..()
if(vore_fullness == 1)
ranged_cooldown = 4
projectiletype = /obj/item/projectile/energy/frostsphere
movement_cooldown = 1
melee_attack_delay = 1.3
melee_damage_lower = 20
melee_damage_upper = 35
armor = list(melee = 35, bullet = 35, laser = 35, energy = 35, bomb = 100, bio = 100, rad = 100)
armor_soak = list(melee = 7, bullet = 7, laser = 7, energy = 7, bomb = 0, bio = 0, rad = 0)
special_attack_cooldown = 15
else if(vore_fullness == 2)
ranged_cooldown = 0.5
projectiletype = /obj/item/projectile/energy/muckblob
movement_cooldown = 2
melee_attack_delay = 1.8
melee_damage_lower = 20
melee_damage_upper = 40
armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100)
armor_soak = list(melee = 6, bullet = 6, laser = 6, energy = 6, bomb = 0, bio = 0, rad = 0)
special_attack_cooldown = 20
else if (vore_fullness > 2)
ranged_cooldown = 16
projectiletype = /obj/item/projectile/energy/mob/ionbeam
movement_cooldown = 3
melee_attack_delay = 2
melee_damage_lower = 30
melee_damage_upper = 40
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 100, bio = 100, rad = 100)
armor_soak = list(melee = 5, bullet = 5, laser = 5, energy = 5, bomb = 0, bio = 0, rad = 0)
special_attack_cooldown = 30
else
ranged_cooldown = 8
projectiletype = /obj/item/projectile/bullet/flamegun
movement_cooldown = 0
melee_attack_delay = 1.1
melee_damage_lower = 20
melee_damage_upper = 25
armor = list(melee = 20, bullet = 20, laser = 20, energy = 20, bomb = 100, bio = 100, rad = 100)
armor_soak = list(melee = 7, bullet = 7, laser = 7, energy = 7, bomb = 0, bio = 0, rad = 0)
special_attack_cooldown = 10
/mob/living/simple_mob/humanoid/eclipse/head/captain/do_special_attack(atom/A) //note to self, try to make fullness alts for this attacks
if(prob(20))
invokesec(A)
else if(prob(20))
invokesci(A)
else if(prob(20))
invokeengi(A)
else if(prob(20))
invokemedical(A)
else
invokecargo(A)
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/invokesec(atom/A)
var/list/potential_targets = ai_holder.list_targets()
for(var/atom/entry in potential_targets)
if(istype(entry, /mob/living/simple_mob/humanoid/eclipse))
potential_targets -= entry
if(potential_targets.len)
var/iteration = clamp(potential_targets.len, 1, 3)
for(var/i = 0, i < iteration, i++)
if(!(potential_targets.len))
break
var/mob/target = pick(potential_targets)
potential_targets -= target
secattack(target)
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/secattack(atom/target)
var/list/bomb_range = block(locate(target.x-4, target.y-4, target.z), locate(target.x+4, target.y+4, target.z))
var/obj/item/projectile/P = new /obj/item/projectile/energy/flamecrystal(get_turf(src))
bomb_range -= get_turf(target)
for(var/i = 0, i < 4, i++)
var/turf/T = pick(bomb_range)
P.launch_projectile(target, BP_TORSO, src)
bomb_range -= T
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/invokecargo(atom/A)
visible_message(span_warning("\The [src] calls for their help on radio!"))
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/invokeengi(atom/A) //place holdery
var/obj/item/projectile/P = new /obj/item/projectile/temp(get_turf(src))
P.launch_projectile(A, BP_TORSO, src)
var/obj/item/projectile/P2 = new /obj/item/projectile/temp/hot(get_turf(src))
P2.launch_projectile(A, BP_TORSO, src)
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/invokesci(atom/A)
visible_message(span_warning("\The [src] begins to fabricate drones!"))
sleep(3)
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/invokemedical(atom/A)
visible_message(span_warning("\The [src] begins to tend to their wounds!"))
sleep(3)
adjustBruteLoss(-12)
adjustFireLoss(-12)
adjustToxLoss(-12)
adjustOxyLoss(-12)
adjustCloneLoss(-12)
/mob/living/simple_mob/humanoid/eclipse/head/shade
name = "???"
icon_state = "shade"
health = 300
maxHealth = 300 //18 20 damage shots
armor = list(melee = 20, bullet = 20, laser = 20, energy = 20, bomb = 100, bio = 100, rad = 100)
projectiletype = /obj/item/projectile/bullet/lightingburst
special_attack_cooldown = 10 SECONDS
special_attack_min_range = 0
special_attack_max_range = 7
loot_list = list(/obj/item/gun/energy/pulseglove = 100
)
/mob/living/simple_mob/humanoid/eclipse/head/shade/do_special_attack(atom/A)
var/list/potential_targets = ai_holder.list_targets()
for(var/atom/entry in potential_targets)
if(istype(entry, /mob/living/simple_mob/humanoid/eclipse))
potential_targets -= entry
if(potential_targets.len)
var/iteration = clamp(potential_targets.len, 1, 5)
for(var/i = 0, i < iteration, i++)
if(!(potential_targets.len))
break
var/mob/target = pick(potential_targets)
potential_targets -= target
bullethell(target)
/mob/living/simple_mob/humanoid/eclipse/head/shade/proc/bullethell(atom/target)
var/list/bomb_range = block(locate(target.x-6, target.y-6, target.z), locate(target.x+6, target.y+6, target.z))
var/obj/item/projectile/P = new /obj/item/projectile/bullet/meteorstorm(get_turf(src))
bomb_range -= get_turf(target)
for(var/i = 0, i < 4, i++)
var/turf/T = pick(bomb_range)
P.launch_projectile(target, BP_TORSO, src)
bomb_range -= T
/mob/living/simple_mob/mechanical/combat_drone/artillery
faction = FACTION_ECLIPSE
projectiletype = /obj/item/projectile/arc/blue_energy
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead
name = "Eclipse Precursor Overseer"
icon_state = "overseer_shield"
icon_living = "overseer_shield"
special_attack_cooldown = 4 SECONDS
special_attack_min_range = 1
special_attack_max_range = 8
@@ -392,18 +175,29 @@
/mob/living/simple_mob/humanoid/eclipse/head/engineer //teshari
name = "Eclipse Chief Engineer"
icon_state = "engi"
icon_living = "engi"
health = 50
maxHealth = 50
melee_damage_lower = 60 //Durasteel fireaxe
melee_damage_upper = 60
projectiletype = null
loot_list = list(/obj/item/stock_parts/matter_bin/omni = 60,
/obj/item/material/twohanded/fireaxe = 60,
/obj/item/storage/toolbox/syndicate/powertools = 60,
/obj/item/rig/ce = 60,
/obj/item/rig_module/teleporter = 5
)
/mob/living/simple_mob/humanoid/eclipse/head/engineer/Initialize()
add_modifier(/datum/modifier/technomancer/haste, null, src) // tesh goes nyooooom
return ..()
/mob/living/simple_mob/humanoid/eclipse/head/medical //noodl
/mob/living/simple_mob/humanoid/eclipse/head/medical
name = "Eclipse Chief Medical Officer"
icon_state = "medi"
icon_living = "medi"
health = 150
maxHealth = 150
special_attack_cooldown = 5 SECONDS
@@ -413,6 +207,16 @@
melee_damage_upper = 15
attack_armor_pen = 60
projectiletype = null
loot_list = list(/obj/item/rig_module/atmos_shield = 60,
/obj/item/rig_module/rad_shield/advanced = 60,
/obj/item/rig/baymed = 60,
/obj/item/ammo_casing/microbattery/medical/brute3 = 15,
/obj/item/ammo_casing/microbattery/medical/burn3 = 15,
/obj/item/ammo_casing/microbattery/medical/toxin3 = 15,
/obj/item/ammo_casing/microbattery/medical/omni3 = 5
)
var/cloaked_alpha = 45 // Lower = Harder to see.
var/cloak_cooldown = 5 SECONDS // Amount of time needed to re-cloak after losing it.
var/last_uncloak = 0 // world.time
@@ -685,4 +489,4 @@
if(!L.apply_damage(70, BURN, target_zone, blocked, soaked))
break
playsound(src, 'sound/effects/clang2.ogg', 50, 1)
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), 0.25 SECONDS, TIMER_DELETE_ME)
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), 0.25 SECONDS, TIMER_DELETE_ME)
@@ -9,34 +9,6 @@
value = CATALOGUER_REWARD_TRIVIAL
unlocked_by_any = list(/datum/category_item/catalogue/fauna/eclipse)
// Obtained by scanning all X.
/datum/category_item/catalogue/fauna/all_eclipse
name = "Collection - Eclipse"
desc = "You have scanned a large array of different types of eclipse memebers, \
and therefore you have been granted a large sum of points, through this \
entry."
value = CATALOGUER_REWARD_SUPERHARD
unlocked_by_all = list(
/datum/category_item/catalogue/fauna/eclipse/teslanoodle,
/datum/category_item/catalogue/fauna/eclipse/firemoff,
/datum/category_item/catalogue/fauna/eclipse/snipertesh,
/datum/category_item/catalogue/fauna/eclipse/radiation,
/datum/category_item/catalogue/fauna/eclipse/silvernoodle,
/datum/category_item/catalogue/fauna/eclipse/shotgunner,
/datum/category_item/catalogue/fauna/eclipse/bulletstorm,
/datum/category_item/catalogue/fauna/eclipse/ravanger,
/datum/category_item/catalogue/fauna/eclipse/hellhound,
/datum/category_item/catalogue/fauna/eclipse/wheel,
/datum/category_item/catalogue/fauna/eclipse/guardian,
/datum/category_item/catalogue/fauna/eclipse/pummler,
/datum/category_item/catalogue/fauna/eclipse/aeroblaster,
/datum/category_item/catalogue/fauna/eclipse/miner,
/datum/category_item/catalogue/fauna/eclipse/froststalker,
/datum/category_item/catalogue/fauna/eclipse/cryomancer
)
/mob/living/simple_mob/humanoid/eclipse/solar/teslanoodle
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/teslanoodle)
/datum/category_item/catalogue/fauna/eclipse/teslanoodle
name = "The Tesla Armor"
@@ -45,9 +17,6 @@
random. This creation seems to be in a prototype phase."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/eclipse/solar/firemoff
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/firemoff)
/datum/category_item/catalogue/fauna/eclipse/firemoff
name = "Eclipse Shielding"
desc = "Eclipse armor and uniform is unlike most others, seeming wide \
@@ -58,9 +27,6 @@
diverse apperance."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/eclipse/solar/snipertesh
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/snipertesh)
/datum/category_item/catalogue/fauna/eclipse/snipertesh
name = "Cult-like rituals"
desc = "The Eclipse started off as a strange mixutre of a friendly \
@@ -70,8 +36,6 @@
mixed results, rarely resulting in in-fighting."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/eclipse/solar/radiation
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/radiation)
/datum/category_item/catalogue/fauna/eclipse/radiation
name = "Nuclear Failures"
@@ -82,8 +46,6 @@
power sources to radiation field generators."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/eclipse/lunar/silvernoodle
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/silvernoodle)
/datum/category_item/catalogue/fauna/eclipse/silvernoodle
name = "Failed Selling"
@@ -94,8 +56,7 @@
medication are one of the few reasons they have not wiped themselves out."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/eclipse/lunar/shotgunner
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/shotgunner)
/datum/category_item/catalogue/fauna/eclipse/shotgunner
name = "Specialized Arms"
@@ -105,8 +66,6 @@
Although this leads to weapon failures, or creation accidents."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/eclipse/lunar/bulletstorm
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/bulletstorm)
/datum/category_item/catalogue/fauna/eclipse/bulletstorm
name = "Open Joining"
@@ -115,9 +74,6 @@
high mortality rates, mutations, and body modification expermintation."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/eclipse/lunar/ravanger
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/ravanger)
/datum/category_item/catalogue/fauna/eclipse/ravanger
name = "Resleeving Failures"
desc = "The Eclipse has precourdered many bits of resleeving equipment \
@@ -127,9 +83,6 @@
such as shaping them into ravanger units."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/eclipse/solar/hellhound
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/hellhound)
/datum/category_item/catalogue/fauna/eclipse/hellhound
name = "Hellhound Units"
desc = "Equiped with specialized armor, the systems of the suit pairing \
@@ -139,9 +92,6 @@
hunting, and frontal assualt."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/eclipse/lunar/wheel
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/wheel)
/datum/category_item/catalogue/fauna/eclipse/wheel
name = "Armadillo"
desc = "With several strange creatures among their ranks, the Eclipse \
@@ -150,9 +100,6 @@
a rolling motion into an offensive force."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/eclipse/solar/guardian
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/guardian)
/datum/category_item/catalogue/fauna/eclipse/guardian
name = "Slime Pits"
desc = "Another potential of failed resleeves are the slime pits, \
@@ -162,9 +109,6 @@
renamants of the donator's DNA."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/eclipse/lunar/pummler
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/pummler)
/datum/category_item/catalogue/fauna/eclipse/pummler
name = "Hunter Unit - Pummler"
desc = "Another drone like creation, meld with alien sea life, and traces \
@@ -174,9 +118,6 @@
targets across any and all terrains."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/eclipse/lunar/aeroblaster
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/pummler)
/datum/category_item/catalogue/fauna/eclipse/aeroblaster
name = "Eclipse Drones"
desc = "Sometimes, the failed resleeves only leave the fragments of a mind \
@@ -185,9 +126,6 @@
their drones."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/eclipse/lunar/miner
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/miner)
/datum/category_item/catalogue/fauna/eclipse/miner
name = "Bio-tech Unit"
desc = "One benefit of the slime units is they're able to easily interface \
@@ -196,8 +134,6 @@
both being able to flee or alter plans as soon as either noitces."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/eclipse/solar/froststalker
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/froststalker)
/datum/category_item/catalogue/fauna/eclipse/froststalker
name = "Mindless Ice"
@@ -207,9 +143,6 @@
of ice. Their minds sometimes lost alongside their orginal form."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/humanoid/eclipse/solar/cryomancer
catalogue_data = list(/datum/category_item/catalogue/fauna/eclipse/cryomancer)
/datum/category_item/catalogue/fauna/eclipse/cryomancer
name = "Cryomancers"
desc = "One of the few success in the Pluto Intitative, but one that \
@@ -268,7 +268,7 @@
specialattackprojectile = /obj/item/projectile/beam/midlaser
armor = list(melee = 90, bullet = 90, laser = 90, energy = 90, bomb = 90, bio = 100, rad = 100)
damage_threshold = 0 //So the wierd armor mechanic works
icon_state = "gygax_adv"
icon_state = "orb"
wreckage = /obj/structure/loot_pile/mecha/odd_gygax
special_attack_cooldown = 320
@@ -958,4 +958,91 @@
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/proc/phasethree_cyclethree(atom/target) //eight spinning death beams
specialattackprojectile = /obj/item/projectile/energy/darkspike
addtimer(CALLBACK(src, PROC_REF(random_firing), target, 20, 1, 0.2 SECONDS), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/engimecha
name = "Eclipse Expirmental Mining Mecha"
health = 300
maxHealth = 300
specialattackprojectile = /obj/item/projectile/energy/excavate/weak
armor = list(melee = 30, bullet = 30, laser = 30, energy = 40, bomb = 90, bio = 100, rad = 100)
armor_soak = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
icon_state = "engi_spider"
shock_resist = 1
projectiletype = /obj/item/projectile/beam/chain_lightning
reload_max = 1
reload_time = 0.5 SECONDS
ranged_attack_delay = 2 SECONDS
glow_color = "#14ff20"
light_color = "#14ff20"
glow_range = 5
glow_intensity = 3
special_attack_cooldown = 120
pilot_type = /mob/living/simple_mob/humanoid/eclipse/head/engineer
var/rads = 5
/mob/living/simple_mob/mechanical/mecha/eclipse/engimecha/do_special_attack(atom/A)
rads += 15
/mob/living/simple_mob/mechanical/mecha/eclipse/engimecha/handle_special()
if(stat != DEAD)
irradiate()
..()
/mob/living/simple_mob/mechanical/mecha/eclipse/engimecha/proc/irradiate()
SSradiation.radiate(src, rads)
/mob/living/simple_mob/mechanical/mecha/eclipse/engimecha/ranged_pre_animation(atom/A)
Beam(get_turf(A), icon_state = "sniper_beam", time = 2 SECONDS, maxdistance = 15)
. = ..()
/mob/living/simple_mob/mechanical/mecha/eclipse/engimecha/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
/*
* CHOMP Addition: This section here is (duplicated) special snowflake code because sniper does not call parent. Basically, this is a non-stupid version of the above intended for ranged mobs.
* ranged_attack_delay is stupid because it sleeps the entire mob.
* This new ranged_cooldown_time is smarter in the sense that it is an internalized timer. Try not to confuse the names.
*/
if(ranged_cooldown_time) //If you have a non-zero number in a mob's variables, this pattern begins.
if(ranged_cooldown <= world.time) //Further down, a timer keeps adding to the ranged_cooldown variable automatically.
visible_message(span_bolddanger("\The [src]") + " fires at \the [A]!") //Leave notice of shooting.
shoot(A) //Perform the shoot action
if(casingtype) //If the mob is designated to leave casings...
new casingtype(loc) //... leave the casing.
ranged_cooldown = world.time + ranged_cooldown_time + ((injury_level / 2) SECONDS) //Special addition here. This is a timer. Keeping updating the time after shooting. Add that ranged cooldown time specified in the mob to the world time.
return TRUE //End these commands here.
// CHOMPAddition End
visible_message(span_bolddanger("\The [src]") + " fires at \the [orig_targ]!")
shoot(A)
if(casingtype)
new casingtype(loc)
if(ranged_attack_delay)
ranged_post_animation(A)
return TRUE