Tyr Update (#10780)

This commit is contained in:
FluffMedic
2025-04-27 08:02:33 -04:00
committed by GitHub
parent f9fd0a9525
commit 4f90d2f057
20 changed files with 18896 additions and 21226 deletions

View File

@@ -87,3 +87,82 @@
center_of_mass_y= 16 //CHOMPEdit
nutriment_amt = 3
nutriment_desc = list(REAGENT_ID_PROTEIN = 24)
//ant meats
/obj/item/reagent_containers/food/snacks/copperant
name = "Bronze Ant Slice"
desc = "A slice from a ant"
icon_state = "meat"
center_of_mass_x = 17 //CHOMPEdit
center_of_mass_y= 16 //CHOMPEdit
nutriment_amt = 3
nutriment_desc = list(REAGENT_ID_PROTEIN = 3, REAGENT_ID_SHOCKCHEM = 3)
bitesize = 1
/obj/item/reagent_containers/food/snacks/copperant/Initialize(mapload)
. = ..()
reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
reagents.add_reagent(REAGENT_ID_SHOCKCHEM, 3)
/obj/item/reagent_containers/food/snacks/painiteant
name = "Painite Ant Slice"
desc = "A slice from a ant"
icon_state = "meat"
center_of_mass_x = 17 //CHOMPEdit
center_of_mass_y= 16 //CHOMPEdit
nutriment_amt = 3
nutriment_desc = list(REAGENT_ID_PROTEIN = 3, REAGENT_ID_NEOLIQUIDFIRE = 3)
bitesize = 1
/obj/item/reagent_containers/food/snacks/painiteant/Initialize(mapload)
. = ..()
reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
reagents.add_reagent(REAGENT_ID_NEOLIQUIDFIRE, 3)
/obj/item/reagent_containers/food/snacks/bronzeant
name = "Bronze Ant Slice"
desc = "A slice from a ant"
icon_state = "meat"
center_of_mass_x = 17 //CHOMPEdit
center_of_mass_y= 16 //CHOMPEdit
nutriment_amt = 3
nutriment_desc = list(REAGENT_ID_PROTEIN = 3, REAGENT_ID_LIQUIDFIRE = 3)
bitesize = 1
/obj/item/reagent_containers/food/snacks/bronzeant/Initialize(mapload)
. = ..()
reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
reagents.add_reagent(REAGENT_ID_LIQUIDFIRE, 3)
/obj/item/reagent_containers/food/snacks/quartzant
name = "Bronze Ant Slice"
desc = "A slice from a ant"
icon_state = "meat"
center_of_mass_x = 17 //CHOMPEdit
center_of_mass_y= 16 //CHOMPEdit
nutriment_amt = 3
nutriment_desc = list(REAGENT_ID_PROTEIN = 3, REAGENT_ID_DEATHBLOOD = 3)
bitesize = 1
/obj/item/reagent_containers/food/snacks/quartzant/Initialize(mapload)
. = ..()
reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
reagents.add_reagent(REAGENT_ID_DEATHBLOOD, 3)
/obj/item/reagent_containers/food/snacks/agateant
name = "Bronze Ant Slice"
desc = "A slice from a ant"
icon_state = "meat"
center_of_mass_x = 17 //CHOMPEdit
center_of_mass_y= 16 //CHOMPEdit
nutriment_amt = 3
nutriment_desc = list(REAGENT_ID_PROTEIN = 3, REAGENT_ID_LIQUIDLIFE = 3)
bitesize = 1
/obj/item/reagent_containers/food/snacks/agateant/Initialize(mapload)
. = ..()
reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
reagents.add_reagent(REAGENT_ID_LIQUIDLIFE, 3)

View File

@@ -1,18 +1,18 @@
/mob/living/simple_mob/animal/tyr/mineral_ants
name = "metal ant"
desc = "A large ant."
icon_state = "normal_ant"
icon_dead = "dead_ant"
icon_state = "ne_ant"
icon_dead = "dead_new"
maxHealth = 25 //two hits with agate sword, three with spear, one with hammer, four with bow
health = 25
pass_flags = PASSTABLE
movement_cooldown = 1
ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
see_in_dark = 12
melee_damage_lower = 8 //12.5 hits unarmored. 15.625 with the tribal armor
melee_damage_upper = 8 //Rng numbers are wierd
see_in_dark = 3
melee_damage_lower = 16 //6.25 hits unarmored.
melee_damage_upper = 16 //Rng numbers are wierd
attack_sharp = TRUE
attack_edge = 1
@@ -57,35 +57,56 @@
B.absorbchance = 0
B.escapechance = 25
/mob/living/simple_mob/animal/tyr/mineral_ants/bronze
/mob/living/simple_mob/animal/tyr/mineral_ants/bronze //shockers
icon_state = "bronze_ant"
icon_living = "bronze_ant"
butchery_loot = list(\
/obj/item/stack/material/bronze = 6\
/obj/item/stack/material/bronze = 18\
)
meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/bronzeant
/mob/living/simple_mob/animal/tyr/mineral_ants/copper
icon_state = "copper_ant"
icon_living = "copper_ant"
butchery_loot = list(\
/obj/item/stack/material/copper = 6\
/obj/item/stack/material/copper = 18\
)
meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/copperant
/mob/living/simple_mob/animal/tyr/mineral_ants/agate
/mob/living/simple_mob/animal/tyr/mineral_ants/agate //shockers
icon_state = "agate_ant"
icon_living = "agate_ant"
butchery_loot = list(\
/obj/item/stack/material/weathered_agate = 6\
/obj/item/stack/material/weathered_agate = 18\
)
meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/agateant
/mob/living/simple_mob/animal/tyr/mineral_ants/quartz
icon_state = "quartz_ant"
icon_living = "quartz_ant"
butchery_loot = list(\
/obj/item/stack/material/quartz = 6\
/obj/item/stack/material/quartz = 18\
)
meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/quartzant
/mob/living/simple_mob/animal/tyr/mineral_ants/painite
icon_state = "painite_ant"
icon_living = "painite_ant"
butchery_loot = list(\
/obj/item/stack/material/painite = 6\
/obj/item/stack/material/painite = 18\
)
meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/painiteant
/mob/living/simple_mob/animal/tyr/mineral_ants/builder
icon_state = "builder_ant"
icon_living = "builder_ant"
butchery_loot = list(\
/obj/item/stack/material/concrete = 6\
)
@@ -185,13 +206,12 @@ ANT STRUCTURES
spawn_delay = 10 MINUTES
spawn_types = list(
/mob/living/simple_mob/animal/tyr/mineral_ants = 1,
/mob/living/simple_mob/animal/tyr/mineral_ants/bronze = 1,
/mob/living/simple_mob/animal/tyr/mineral_ants/bronze = 5,
/mob/living/simple_mob/animal/tyr/mineral_ants/builder = 7,
/mob/living/simple_mob/animal/tyr/mineral_ants/copper = 1,
/mob/living/simple_mob/animal/tyr/mineral_ants/agate = 3,
/mob/living/simple_mob/animal/tyr/mineral_ants/quartz = 1,
/mob/living/simple_mob/animal/tyr/mineral_ants/painite = 1,
/mob/living/simple_mob/animal/tyr/mineral_ants/builder = 1
/mob/living/simple_mob/animal/tyr/mineral_ants/agate = 1,
/mob/living/simple_mob/animal/tyr/mineral_ants/painite = 5
)
simultaneous_spawns = 5
@@ -303,13 +323,12 @@ ANT STRUCTURES
anchored = FALSE
layer = HIDING_LAYER
health = 3
grow_as = list(/mob/living/simple_mob/animal/tyr/mineral_ants,
/mob/living/simple_mob/animal/tyr/mineral_ants/bronze,
grow_as = list(/mob/living/simple_mob/animal/tyr/mineral_ants/bronze,
/mob/living/simple_mob/animal/tyr/mineral_ants/builder,
/mob/living/simple_mob/animal/tyr/mineral_ants/copper,
/mob/living/simple_mob/animal/tyr/mineral_ants/agate,
/mob/living/simple_mob/animal/tyr/mineral_ants/quartz,
/mob/living/simple_mob/animal/tyr/mineral_ants/painite,
/mob/living/simple_mob/animal/tyr/mineral_ants/builder)
/mob/living/simple_mob/animal/tyr/mineral_ants/agate,
/mob/living/simple_mob/animal/tyr/mineral_ants/painite)
faction = FACTION_TYR
/obj/effect/ant_structure/webbarrier

View File

@@ -32,7 +32,7 @@
attack_edge = 1
attacktext = list("slashed", "stabbed")
projectile_dispersion = 0
ranged_cooldown = 10
ranged_cooldown = 40
armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100) // Simple mob immunuties plus base Eclipse foe stuff
can_be_drop_prey = FALSE //CHOMP Add
@@ -54,8 +54,8 @@
projectilesound = 'sound/weapons/Gunshot_light.ogg'
needs_reload = TRUE
reload_max = 7 // Not the best default, but it fits the pistol
reload_time = 1.5 SECONDS
reload_max = 4
reload_time = 2.5 SECONDS
ai_holder_type = /datum/ai_holder/simple_mob/intentional/eclipse
special_attack_cooldown = 15 SECONDS
@@ -138,7 +138,7 @@
visible_message(span_cult("[P] seems ineffective!."))
/mob/living/simple_mob/humanoid/eclipse/solar/snipertesh
name = "Solar Eclipse Sniper"
name = "Solar Eclipse Breaker"
desc = "An armored teshari with a sniper, protected from laser and energy based attacks"
health = 50 //old 20
maxHealth = 50
@@ -153,7 +153,7 @@
reload_max = 1
reload_time = 2.5 SECONDS
ranged_attack_delay = 1.5 SECONDS
ranged_attack_delay = 2 SECONDS
var/cloaked_alpha = 60 // Lower = Harder to see.
var/cloak_cooldown = 5 SECONDS // Amount of time needed to re-cloak after losing it.
var/last_uncloak = 0
@@ -467,9 +467,9 @@
projectiletype = /obj/item/projectile/bullet/crystalineburst
reload_max = 1
reload_time = 2.5 SECONDS
ranged_attack_delay = 1.5 SECONDS
ranged_attack_delay = 2 SECONDS
var/cloaked_alpha = 40 // Lower = Harder to see.
var/cloak_cooldown = 1 SECONDS // Amount of time needed to re-cloak after losing it.
var/cloak_cooldown = 1 SECOND // Amount of time needed to re-cloak after losing it.
var/last_uncloak = 0
loot_list = list(/obj/item/slime_extract/sepia = 1,
@@ -653,9 +653,10 @@
icon_state = "eclipse_gravliz"
icon_living = "eclipse_gravliz"
reload_max = 1
reload_time = 3 SECONDS
movement_cooldown = 1
special_attack_cooldown = 7 SECONDS
special_attack_cooldown = 15 SECONDS
special_attack_min_range = 1
special_attack_max_range = 7
@@ -717,7 +718,7 @@
projectiletype = /obj/item/projectile/ion/pistol
icon_state = "eclipse_diver" //note to self try to redo this sprite sometime
reload_max = 1
reload_time = 1.5 SECOND
reload_time = 5 SECONDS
specialattackprojectile = /obj/item/projectile/energy/mechahack
@@ -780,13 +781,172 @@
/mob/living/simple_mob/humanoid/eclipse/proc/gravity_pull(mob/living/L)
if(!L)
return
L.throw_at(src, 2, 4) // Just yoinked.
for(L in view(src, 7))
L.throw_at(src, 2, 4) // Just yoinked.
/mob/living/simple_mob/humanoid/eclipse/proc/itemyoink(mob/living/carbon/human/H)
if(!H)
return
var/obj/item/I = H.get_active_hand()
H.drop_item()
if(I)
I.throw_at(src, 2, 4) // Just yoinked.
src.visible_message(span_danger("The [name] heaves, pulling \the [H]'s weapon from their hands!"))
if(H in view(src, 7))
H.drop_item()
if(I)
I.throw_at(src, 2, 4) // Just yoinked.
src.visible_message(span_danger("The [name] heaves, pulling \the [H]'s weapon from their hands!"))
//new tyr mobs
/mob/living/simple_mob/humanoid/eclipse/lunar/heavyshark //melee shork, anti-flesh
name = "Lunar Eclipse Brusier"
desc = "A akula in a strange eriee red and black armor. Bullets and melee armaments seem ineffective."
icon_state = "aegis_shark"
icon_living = "aegis_shark"
projectiletype = null
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
melee_damage_lower = 30
melee_damage_upper = 30
attack_armor_pen = 30
loot_list = list(/obj/item/slime_extract/sepia = 1,
/obj/item/bone/skull = 100,
/obj/item/soulstone = 30,
/obj/item/melee/cursedblade = 15
)
/mob/living/simple_mob/humanoid/eclipse/lunar/heavyshark/apply_melee_effects(var/atom/A) //maybe replace this with Doom lite
if(isliving(A))
var/mob/living/L = A
L.add_modifier(/datum/modifier/deep_wounds, 10 SECONDS)
/mob/living/simple_mob/humanoid/eclipse/lunar/cultfanatic //A semi tough creature
name = "Lunar Eclipse Fanatic"
desc = "A furry creature with stolen and modified cult attire. Seemingly swapped high energy resistance for brunt and sharp."
icon_state = "return"
icon_living = "return"
projectiletype = /obj/item/projectile/bullet/crystaline
loot_list = list(/obj/item/slime_extract/sepia = 1,
/obj/item/bone/skull = 100,
/obj/item/clothing/suit/cultrobes/alt = 40,
/obj/item/clothing/head/culthood/alt = 40
)
/mob/living/simple_mob/humanoid/eclipse/lunar/cultfanatic/do_special_attack(atom/A)
teleport(A)
/mob/living/simple_mob/humanoid/eclipse/lunar/cultfanatic/attackby(var/obj/item/O as obj, var/mob/user as mob) //I question why you are meleeing the meleeing resisting mob but funny shield flavour
if(O.force)
if(prob(70))
visible_message(span_danger("\The [src] blocks \the [O] with its shield!"))
if(user)
ai_holder.react_to_attack(user)
return
else
..()
else
to_chat(user, span_warning("This weapon is ineffective, it does no damage."))
visible_message(span_warning("\The [user] gently taps [src] with \the [O]."))
/mob/living/simple_mob/humanoid/eclipse/lunar/changeling //A wierd creature
name = "Lunar Eclipse Bio-Weapon"
desc = "A horror of twisted and armored flesh. Whilst bullets and blades bounce off, perhaps it still burns."
icon_state = "horror"
icon_living = "horror"
projectiletype = /obj/item/projectile/energy/blob/acid
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
melee_damage_lower = 20
melee_damage_upper = 20
attack_armor_pen = 40
specialattackprojectile = /obj/item/projectile/arc/spore
/mob/living/simple_mob/humanoid/eclipse/lunar/changeling/do_special_attack(atom/A)
Beam(A, icon_state = "tentacle", time = 3 SECONDS, maxdistance = INFINITY)
addtimer(CALLBACK(src, PROC_REF(special_projectile), A), 3.5 SECONDS, TIMER_DELETE_ME)
/mob/living/simple_mob/humanoid/eclipse/solar/clockspear //Melee creature
name = "Solar Eclipse Spearmaster"
desc = "A furry creature wearing modified artifact armor, protecting itself from burns and energy."
icon_state = "clock_spear"
icon_living = "clock_spear"
projectiletype = null
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
melee_damage_lower = 30
melee_damage_upper = 30
attack_armor_pen = 60
melee_attack_delay = 3 SECONDS
loot_list = list(/obj/item/slime_extract/sepia = 1,
/obj/item/bone/skull = 100,
/obj/item/rig/ch/clockwork = 10,
/obj/item/ratvarian_spear = 30
)
/mob/living/simple_mob/humanoid/eclipse/solar/clockspear/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
A.emp_act(4) //The weakest strength of EMP
playsound(src, 'sound/weapons/Egloves.ogg', 75, 1)
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()
/mob/living/simple_mob/humanoid/eclipse/solar/clocksgun //Melee creature
name = "Solar Eclipse Artificer"
desc = "A furry creature wearing modified artifact armor, protecting itself from burns and energy."
icon_state = "clock_gun"
icon_living = "clock_gun"
projectiletype = /obj/item/projectile/bullet/rifle/clockwork
ranged_cooldown = 20
reload_max = 10
reload_time = 5 SECONDS
specialattackprojectile = /obj/item/projectile/beam/shock/clockwork
loot_list = list(/obj/item/slime_extract/sepia = 1,
/obj/item/bone/skull = 100,
/obj/item/rig/ch/clockwork = 10,
/obj/item/gun/energy/clockwork = 30
)
/mob/living/simple_mob/humanoid/eclipse/solar/clocksgun/do_special_attack(atom/A)
Beam(A, icon_state = "volt_ray", time = 5 SECONDS, maxdistance = INFINITY)
addtimer(CALLBACK(src, PROC_REF(special_projectile), A), 5.5 SECONDS, TIMER_DELETE_ME)
/mob/living/simple_mob/humanoid/eclipse/solar/zaddat //Melee creature
name = "Solar Eclipse Spacer"
desc = "A zaddat wearing orange armor, shielding itself from lasers and energy."
icon_state = "zaddat_spacer"
icon_living = "zaddat_spacer"
reload_max = 3
reload_time = 3 SECONDS
loot_list = list(/obj/item/slime_extract/sepia = 1,
/obj/item/bone/skull = 100,
/obj/item/clothing/head/helmet/space/void/zaddat = 30,
/obj/item/clothing/suit/space/void/zaddat = 30,
/obj/item/material/fishing_rod/modern = 30
)
/mob/living/simple_mob/humanoid/eclipse/solar/zaddat/bullet_act(obj/item/projectile/P)
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
var/reflect_prob = P.damage
if(prob(reflect_prob))
visible_message(span_danger("The [P.name] gets reflected by [src]'s armor!"), \
span_userdanger("The [P.name] gets reflected by [src]'s armor!"))
// Find a turf near or on the original location to bounce to
if(P.starting)
var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
var/turf/curloc = get_turf(src)
// redirect the projectile
P.redirect(new_x, new_y, curloc, src)
P.reflected = 1
return -1 // complete projectile permutation
return (..(P))

View File

@@ -24,6 +24,7 @@
has_heal_droid = TRUE
specialattackprojectile = /obj/item/projectile/bullet/dragon
loot_list = list(/obj/item/gun/energy/flamegun = 100,
/obj/item/prop/tyrlore/neonsec = 100,
/obj/item/bone/skull = 100
)
@@ -140,6 +141,11 @@
special_attack_max_range = 8
projectiletype = /obj/item/projectile/energy/homing_bolt
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
loot_list = list(/obj/item/prop/tyrlore/baseneon = 100,
/obj/item/disposable_teleporter = 100,
/obj/item/hand_tele = 10,
/obj/item/bone/skull = 100
)
var/fullshield = 4
var/shieldrage = 4
@@ -188,7 +194,8 @@
/obj/item/material/twohanded/fireaxe = 60,
/obj/item/storage/toolbox/syndicate/powertools = 60,
/obj/item/rig/ce = 60,
/obj/item/rig_module/teleporter = 5
/obj/item/rig_module/teleporter = 5,
/obj/item/prop/tyrlore/neonengi = 100
)
/mob/living/simple_mob/humanoid/eclipse/head/engineer/Initialize(mapload)
@@ -215,6 +222,7 @@
/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/prop/tyrlore/neonmedi = 100,
/obj/item/ammo_casing/microbattery/medical/omni3 = 5
)

View File

@@ -790,7 +790,7 @@
upfour_leftfour(target)
upfour_leftthree(target)
upfour_lefttwo(target)
if(prob(50))
if(prob(20))
addtimer(CALLBACK(src, PROC_REF(beglaser), target, next_cycle), 1 SECOND, TIMER_DELETE_ME)
else
attackcycle = next_cycle
@@ -828,39 +828,11 @@
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt //The final boss
name = "Eclipse Expirmental Janus"
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 80, bio = 100, rad = 100)
specialattackprojectile = /obj/item/projectile/energy/darkspike
specialattackprojectile = /obj/item/projectile/energy/eclipse/janusjavelin
pilot_type = /mob/living/simple_mob/humanoid/eclipse/head/tyrlead
icon_state = "eclipse_janus"
attackcycle = 1
/obj/item/projectile/energy/darkspike //This will end you
name = "gravity well"
icon = 'modular_chomp/icons/obj/guns/precursor/tyr.dmi'
icon_state = "gravity_well"
damage = 60
armor_penetration = 30
speed = 15 //Note to self, may need to slow down even further.
/obj/item/projectile/energy/infernosphere
name = "burning plasma"
icon = 'modular_chomp/icons/obj/guns/precursor/tyr.dmi'
icon_state = "plasma"
damage = 60
armor_penetration = 30
speed = 15
/obj/item/projectile/energy/infernosphere/Move()
. = ..()
if(prob(20))
new /obj/fire(src.loc)
/obj/item/projectile/bullet/eclipsejanus
use_submunitions = 1
range = 0
embed_chance = 0
submunition_spread_max = 900
submunition_spread_min = 100
submunitions = list(/obj/item/projectile/energy/darkspike = 3, /obj/item/projectile/energy/infernosphere = 3)
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/bullet_act(obj/item/projectile/P)
.= ..()
@@ -878,76 +850,58 @@
switch(a_intent)
if(I_DISARM) // Phase 3
if(attackcycle == 1)
phasethree_cycleone(A)
specialattackprojectile = /obj/item/projectile/arc/explosive_rocket
attackcycle = 0
if(prob(50))
addtimer(CALLBACK(src, PROC_REF(miniburst_a), A, 1), 0.5 SECONDS, TIMER_DELETE_ME)
else
addtimer(CALLBACK(src, PROC_REF(miniburst_b), A, 1), 0.5 SECONDS, TIMER_DELETE_ME)
else if(attackcycle == 2)
phasethree_cycletwo(A)
addtimer(CALLBACK(src, PROC_REF(random_firing), A, 10, 2, 0.75 SECONDS), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 3)
phasethree_cyclethree(A)
say("Hypercharge laser burst!")
specialattackprojectile = /obj/item/projectile/beam/heavylaser
addtimer(CALLBACK(src, PROC_REF(burst), A, 3), 6 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 4)
specialattackprojectile = /obj/item/projectile/energy/eclipse/janusjavelin
addtimer(CALLBACK(src, PROC_REF(random_firing), A, 10, 1, 0.75 SECONDS), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(I_HURT) // Phase 1
specialattackprojectile = /obj/item/projectile/energy/eclipse/janusjavelin
if(attackcycle == 1)
phaseone_cycleone(A)
addtimer(CALLBACK(src, PROC_REF(spin_to_win), A, 2), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 2)
phaseone_cycletwo(A)
addtimer(CALLBACK(src, PROC_REF(random_firing), A, 10, 3, 0.75 SECONDS), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 3)
phaseone_cyclethree(A)
addtimer(CALLBACK(src, PROC_REF(beglaser), A, 4), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 4)
addtimer(CALLBACK(src, PROC_REF(random_firing), A, 10, 1, 0.75 SECONDS), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(I_GRAB) // Phase 2
if(attackcycle == 1)
phasetwo_cycleone(A)
addtimer(CALLBACK(src, PROC_REF(teleport_attack), A, 2), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 2)
phasetwo_cycletwo(A)
say("Activating laser surge")
specialattackprojectile = /obj/item/projectile/energy/burninglaser/boss
addtimer(CALLBACK(src, PROC_REF(miniburst_a), A, 2), 3 SECONDS, TIMER_DELETE_ME)
else if(attackcycle == 3)
phasetwo_cyclethree(A)
//Phase One. Appears random but isn't. Scales higher.
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/proc/phaseone_cycleone(atom/target)
specialattackprojectile = /obj/item/projectile/energy/darkspike
addtimer(CALLBACK(src, PROC_REF(spin_to_win), target, 2), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/proc/phaseone_cycletwo(atom/target)
specialattackprojectile = /obj/item/projectile/energy/darkspike
addtimer(CALLBACK(src, PROC_REF(beglaser), target, 3), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/proc/phaseone_cyclethree(atom/target)
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
//Phase Two where we change things up a bit.
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/proc/phasetwo_cycleone(atom/target) //shows a laser then fires a rockect
specialattackprojectile = /obj/item/projectile/energy/infernosphere
addtimer(CALLBACK(src, PROC_REF(spin_to_win), target, 2), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/proc/phasetwo_cycletwo(atom/target) //summon the most useless horde
specialattackprojectile = /obj/item/projectile/energy/infernosphere
addtimer(CALLBACK(src, PROC_REF(beglaser), target, 3), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/proc/phasetwo_cyclethree(atom/target) //turns out the horde is meant to be a shield for the next attack.
specialattackprojectile = /obj/item/projectile/energy/infernosphere
addtimer(CALLBACK(src, PROC_REF(random_firing), target, 20, 1, 0.2 SECONDS), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
//Phase three 2 wierd patterns, and 1 strange attack.
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/proc/phasethree_cycleone(atom/target)
specialattackprojectile = /obj/item/projectile/bullet/eclipsejanus
addtimer(CALLBACK(src, PROC_REF(spin_to_win), target, 2), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/proc/phasethree_cycletwo(atom/target)
specialattackprojectile = /obj/item/projectile/energy/homing_bolt
addtimer(CALLBACK(src, PROC_REF(beglaser), target, 3), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/proc/phasethree_cyclethree(atom/target) //eight spinning death beams
specialattackprojectile = /obj/item/projectile/bullet/eclipsejanus
addtimer(CALLBACK(src, PROC_REF(random_firing), target, 20, 1, 0.2 SECONDS), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
specialattackprojectile = /obj/item/projectile/energy/eclipse/janusjavelin
addtimer(CALLBACK(src, PROC_REF(random_firing), A, 10, 4, 0.75 SECONDS), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 4)
specialattackprojectile = /obj/item/projectile/bullet/gyro
Beam(A, icon_state = "solar_beam", time = 2.5 SECONDS, maxdistance = INFINITY)
addtimer(CALLBACK(src, PROC_REF(singleproj), A, 1), 3 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/engimecha
name = "Eclipse Expirmental Mining Mecha"
name = "Eclipse Expirmental Enginering Mecha"
health = 300
maxHealth = 300
specialattackprojectile = /obj/item/projectile/energy/excavate/weak
@@ -1496,3 +1450,25 @@
s2.start()
attackcycle = next_cycle
/mob/living/simple_mob/mechanical/mecha/eclipse/sniper
name = "Eclipse Lead Pilot"
icon_state = "captian"
icon_living = "captian"
health = 100
maxHealth = 100
ai_holder_type = /datum/ai_holder/simple_mob/intentional/three_phases
armor = list(melee = 70, bullet = 70, laser = 70, energy = 70, bomb = 50, bio = 100, rad = 100)
specialattackprojectile = /obj/item/projectile/arc/explosive_rocket
wreckage = /obj/item/prop/tyrlore/monodisc
/mob/living/simple_mob/mechanical/mecha/eclipse/sniper/do_special_attack(atom/A)
. = TRUE // So we don't fire a bolt as well.
if(attackcycle == 1)
addtimer(CALLBACK(src, PROC_REF(teleport_attack), A, 2), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 2)
specialattackprojectile = /obj/item/projectile/beam/heavylaser/cannon
Beam(A, icon_state = "solar_beam", time = 0.75 SECONDS, maxdistance = INFINITY)
addtimer(CALLBACK(src, PROC_REF(singleproj), A, 1), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0

View File

@@ -3,10 +3,11 @@
vore_capacity = 2
vore_max_size = RESIZE_HUGE
vore_min_size = RESIZE_SMALL
vore_pounce_chance = 0 // Beat them into crit before eating.
vore_pounce_chance = 30
vore_icons = null
can_be_drop_prey = FALSE //CHOMP Add
can_be_drop_prey = FALSE
can_be_drop_pred = TRUE
/mob/living/simple_mob/humanoid/eclipse/Login()
. = ..()

View File

@@ -482,19 +482,6 @@
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/powertower
name = "automated remote handless testing unit"
desc = "A large, very important looking robot."
icon_state = "powertower"
size_multiplier = 2
maxHealth = 1000
health = 1000
glow_toggle = TRUE
glow_override = TRUE
glow_color = "#FFA723"
glow_range = 16
wreckage = /obj/item/prop/nanoweave/terraformers
/*
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/green/do_special_attack(atom/A)
. = TRUE // So we don't fire a bolt as well.

View File

@@ -14,3 +14,73 @@
/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege
projectiletype = /obj/item/projectile/arc //Polaris, don't make the same mob twice.
/mob/living/simple_mob/mechanical/hivebot/tyr
name = "terraforming hivebot"
maxHealth = 1.5 LASERS_TO_KILL // 60 hp
health = 1.5 LASERS_TO_KILL
icon = 'modular_chomp/icons/mob/hivebot.dmi'
desc = "A robot with strange gardening looking gear."
loot_list = list(/obj/structure/foamedmetal = 100
)
pass_flags = PASSTABLE
movement_cooldown = -3
icon_state = "janitor"
icon_living = "janitor"
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/tyr
name = "ai control center"
desc = "A large, very important looking ai. Plating appears similiar to albative plating."
icon_state = "powertower"
icon_living = "powertower"
movement_cooldown = 7
size_multiplier = 2
maxHealth = 500
health = 500
wreckage = /obj/item/prop/tyrlore/reddisc
ai_holder_type = /datum/ai_holder/simple_mob/intentional/three_phases/nomove
anchored = 1
armor = list(melee = 40, bullet = 40, laser = 80, energy = 80, bomb = 50, bio = 100, rad = 100)
/datum/ai_holder/simple_mob/intentional/three_phases/nomove/walk_to_destination()
return
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/tyr/do_special_attack(atom/A)
. = TRUE // So we don't fire a bolt as well.
if(attackcycle == 1)
addtimer(CALLBACK(src, PROC_REF(summon_janitor), A, 5, 2), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 2)
say("Prepare. Area. Cleanse. Radiation.")
specialattackprojectile = /obj/item/projectile/beam/gamma
addtimer(CALLBACK(src, PROC_REF(burst), A, 3), 6 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 3)
specialattackprojectile = /obj/item/projectile/energy/spikeenergy_ball/boss
addtimer(CALLBACK(src, PROC_REF(alpha_slash), A, 4), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 4)
specialattackprojectile = /obj/item/projectile/energy/spikeenergy_ball/boss
addtimer(CALLBACK(src, PROC_REF(omega), A, 5), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 5)
specialattackprojectile = /obj/item/projectile/energy/spikeenergy_ball/boss
addtimer(CALLBACK(src, PROC_REF(random_firing), A, 12, 1, 0.5 SECONDS), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/tyr/proc/summon_janitor(atom/target, var/amount, var/next_cycle)
if(!target)
return
new /mob/living/simple_mob/mechanical/combat_drone/artillery
amount--
if(amount > 0)
addtimer(CALLBACK(src, PROC_REF(summon_drones), target, amount, next_cycle), 0.5 SECONDS, TIMER_DELETE_ME)
else
attackcycle = next_cycle
/obj/item/projectile/energy/spikeenergy_ball/boss
damage = 40
armor_penetration = 60
speed = 10

View File

@@ -197,7 +197,7 @@
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/omega_three(atom/target, var/next_cycle)
if(!target)
return
addtimer(CALLBACK(src, PROC_REF(omega_three), target, next_cycle), 1.5 SECONDS, TIMER_DELETE_ME)
addtimer(CALLBACK(src, PROC_REF(omega_four), target, next_cycle), 1.5 SECONDS, TIMER_DELETE_ME)
uptwo_leftfour(target)
downtwo_leftfour(target)
uptwo_rightfour(target)

View File

@@ -33,26 +33,26 @@ var/datum/planet/tyr/planet_tyr = null
switch(sun_position)
if(0 to 0.20) // Night
low_brightness = 0.1
low_brightness = 0.4
low_color = "#0A0028"
high_brightness = 0.3
high_brightness = 0.7
high_color = "#21007F"
min = 0
min = 0.3
if(0.20 to 0.30) // Twilight
low_brightness = 0.35
low_brightness = 0.65
low_color = "#310D54"
high_brightness = 0.5
high_brightness = 0.8
high_color = "#58389E"
min = 0.40
min = 0.50
if(0.30 to 0.40) // Sunrise/set
low_brightness = 0.5
low_brightness = 0.8
low_color = "#19277F"
high_brightness = 0.6
high_brightness = 0.9
high_color = "#2437B5"
min = 0.50
@@ -122,8 +122,8 @@ var/datum/planet/tyr/planet_tyr = null
/datum/weather/tyr/clear
name = "clear"
transition_chances = list(
WEATHER_CLEAR = 50,
WEATHER_SANDSTORM = 50
WEATHER_CLEAR = 80,
WEATHER_SANDSTORM = 20
)
transition_messages = list(
"The sky clears up.",
@@ -188,9 +188,9 @@ var/datum/planet/tyr/planet_tyr = null
name = "sandstorm"
icon_state = "sandstorm"
transition_chances = list(
WEATHER_CLEAR = 60,
WEATHER_SANDSTORM = 20,
WEATHER_HEAVYSANDSTORM = 20)
WEATHER_CLEAR = 80,
WEATHER_SANDSTORM = 10,
WEATHER_HEAVYSANDSTORM = 10)
transition_messages = list(
"The sky is engulfed by sand."
)
@@ -225,9 +225,9 @@ var/datum/planet/tyr/planet_tyr = null
name = "fierce sandstorm"
icon_state = "sandstorm"
transition_chances = list(
WEATHER_CLEAR = 60,
WEATHER_SANDSTORM = 20,
WEATHER_HEAVYSANDSTORM = 20)
WEATHER_CLEAR = 80,
WEATHER_SANDSTORM = 10,
WEATHER_HEAVYSANDSTORM = 10)
transition_messages = list(
"The sky is engulfed by sand."
)

View File

@@ -216,7 +216,7 @@
nodamage = 1
damage_type = HALLOSS
speed = 2
var/power = 35 //How hard it will hit for with electrocute_act(), decreases with each bounce.
var/power = 20 //How hard it will hit for with electrocute_act(), decreases with each bounce.
/obj/item/projectile/energy/lightingspark/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier=0)
//First we shock the guy we just hit.
@@ -247,17 +247,17 @@
//The normal laser is easier to guard, but can chain screw ups easier
/obj/item/projectile/energy/eclipse/lorge
damage = 50
armor_penetration = 20
damage = 30
armor_penetration = 60
eyeblur = 3
icon_state = "mega_laser"
speed = 15
speed = 10
/obj/item/projectile/energy/eclipse/lorgealien
damage = 50
armor_penetration = 40
armor_penetration = 60
icon_state = "mega_laser_p"
speed = 15
speed = 10
/obj/item/projectile/bullet/crystalineburst
use_submunitions = 1
@@ -267,3 +267,12 @@
submunition_spread_max = 120
submunition_spread_min = 60
submunitions = list(/obj/item/projectile/bullet/crystaline = 5)
/obj/item/projectile/energy/eclipse/janusjavelin //This will end you
name = "energy javelin"
icon_state = "javelin"
damage_type = SEARING
check_armour = "bullet"
damage = 90
armor_penetration = 50
speed = 10

View File

@@ -52,7 +52,7 @@
/obj/item/projectile/beam/precursor_tyr
name = "laser"
icon_state = "laser"
damage = 20
damage = 15
armor_penetration = 30
penetrating = 20
damage_type = BURN