mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-25 06:07:22 +01:00
Tyr Update 3 (#9688)
This commit is contained in:
@@ -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
|
||||
+411
-618
File diff suppressed because it is too large
Load Diff
+47
-243
@@ -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 \
|
||||
|
||||
+89
-2
@@ -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
|
||||
Reference in New Issue
Block a user