mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Tyr Misc Changes (#11245)
This commit is contained in:
@@ -507,3 +507,19 @@
|
||||
scavanging is to be done at that site."
|
||||
value = CATALOGUER_REWARD_HARD
|
||||
|
||||
|
||||
/obj/item/material/barbedwire/plastic/active
|
||||
anchored = 1
|
||||
icon_state = "barbedwire-out"
|
||||
|
||||
|
||||
/obj/item/material/barbedwire/vopal
|
||||
name = "crystal shards"
|
||||
default_material = MAT_VOPAL
|
||||
|
||||
/obj/item/material/barbedwire/vopal/active
|
||||
anchored = 1
|
||||
icon_state = "barbedwire-out"
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
|
||||
|
||||
//ant meats
|
||||
/obj/item/reagent_containers/food/snacks/copperant
|
||||
/obj/item/reagent_containers/food/snacks/tyrant
|
||||
name = "Bronze Ant Slice"
|
||||
desc = "A slice from a ant"
|
||||
icon_state = "meat"
|
||||
@@ -105,6 +105,21 @@
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
|
||||
reagents.add_reagent(REAGENT_ID_SHOCKCHEM, 3)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/copperant
|
||||
name = "Copper 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"
|
||||
@@ -137,7 +152,7 @@
|
||||
reagents.add_reagent(REAGENT_ID_LIQUIDFIRE, 3)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/quartzant
|
||||
name = "Bronze Ant Slice"
|
||||
name = "Quartz Ant Slice"
|
||||
desc = "A slice from a ant"
|
||||
icon_state = "meat"
|
||||
center_of_mass_x = 17 //CHOMPEdit
|
||||
@@ -152,7 +167,7 @@
|
||||
reagents.add_reagent(REAGENT_ID_DEATHBLOOD, 3)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/agateant
|
||||
name = "Bronze Ant Slice"
|
||||
name = "Agate Ant Slice"
|
||||
desc = "A slice from a ant"
|
||||
icon_state = "meat"
|
||||
center_of_mass_x = 17 //CHOMPEdit
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
attack_edge = 1
|
||||
|
||||
meat_amount = 3
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/ant
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/tyrant
|
||||
|
||||
tame_items = list(/obj/item/reagent_containers/food/snacks/crabmeat = 20)
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
B.absorbchance = 0
|
||||
B.escapechance = 25
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/bronze //shockers
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/bronze //knock back ant
|
||||
name = "bronze metal ant"
|
||||
icon_state = "bronze_ant"
|
||||
icon_living = "bronze_ant"
|
||||
butchery_loot = list(\
|
||||
@@ -62,7 +63,24 @@
|
||||
meat_amount = 3
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/bronzeant
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/copper
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/bronze/apply_melee_effects(atom/A)
|
||||
..()
|
||||
|
||||
if(isliving(A) && a_intent == I_HURT)
|
||||
var/mob/living/L = A
|
||||
if(L.mob_size <= MOB_MEDIUM)
|
||||
visible_message(span_danger("\The [src] sends \the [L] flying with the impact!"))
|
||||
playsound(src, "punch", 50, 1)
|
||||
L.Weaken(1)
|
||||
var/throwdir = get_dir(src, L)
|
||||
L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src)
|
||||
else
|
||||
to_chat(L, span_warning("\The [src] hits you with incredible force, but you remain in place."))
|
||||
visible_message(span_danger("\The [src] hits \the [L] with incredible force, to no visible effect!")) // CHOMPEdit: Visible/audible feedback for *resisting* the slam.
|
||||
playsound(src, "punch", 50, 1) // CHOMPEdit: Visible/audible feedback for *resisting* the slam.
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/copper //emp ants
|
||||
name = "copper metal ant"
|
||||
icon_state = "copper_ant"
|
||||
icon_living = "copper_ant"
|
||||
butchery_loot = list(\
|
||||
@@ -71,18 +89,34 @@
|
||||
meat_amount = 3
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/copperant
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/agate //shockers
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/copper/apply_melee_effects(var/atom/A)
|
||||
if(isliving(A))
|
||||
A.emp_act(4) //The weakest strength of EMP
|
||||
playsound(src, 'sound/weapons/Egloves.ogg', 75, 1)
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/agate //rushes at you and explodes
|
||||
name = "agate metal ant"
|
||||
icon_state = "agate_ant"
|
||||
icon_living = "agate_ant"
|
||||
movement_cooldown = -3
|
||||
butchery_loot = list(\
|
||||
/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
|
||||
special_attack_min_range = 1
|
||||
special_attack_max_range = 2
|
||||
special_attack_cooldown = 10 SECONDS
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/agate/do_special_attack(atom/A)
|
||||
explosion(src.loc, 2, 1, 1, 1)
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/quartz //irl quartz is apparently tough?
|
||||
name = "quartz metal ant"
|
||||
icon_state = "quartz_ant"
|
||||
icon_living = "quartz_ant"
|
||||
armor = list(melee = 60, bullet = 50, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100)
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/quartz = 18\
|
||||
)
|
||||
@@ -90,6 +124,8 @@
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/quartzant
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/painite
|
||||
name = "painite metal ant"
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
|
||||
icon_state = "painite_ant"
|
||||
icon_living = "painite_ant"
|
||||
butchery_loot = list(\
|
||||
@@ -99,7 +135,7 @@
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/painiteant
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/diamond
|
||||
name = " cyan metal ant"
|
||||
name = "diamond metal ant"
|
||||
icon_state = "diamond_ant"
|
||||
icon_living = "diamond_ant"
|
||||
butchery_loot = list(\
|
||||
@@ -115,14 +151,17 @@
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/uranium
|
||||
name = "lime metal ant"
|
||||
name = "glowing metal ant"
|
||||
icon_state = "rad_ant"
|
||||
icon_living = "rad_ant"
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/uranium = 18\
|
||||
)
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/uranium/do_special_attack(atom/A)
|
||||
SSradiation.radiate(src, 15)
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/tritium
|
||||
name = "ritium ant"
|
||||
icon_state = "tritium_ant"
|
||||
icon_living = "tritium_ant"
|
||||
butchery_loot = list(\
|
||||
@@ -130,6 +169,7 @@
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/builder
|
||||
name = "concrete ant"
|
||||
icon_state = "builder_ant"
|
||||
icon_living = "builder_ant"
|
||||
butchery_loot = list(\
|
||||
|
||||
@@ -843,4 +843,107 @@
|
||||
bullet_heck(target, -4, 7)
|
||||
attackcycle = next_cycle
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/bomb_lines(atom/A, var/next_cycle)
|
||||
if(!A)
|
||||
return
|
||||
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
|
||||
spawn_lines(target, next_cycle)
|
||||
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/spawn_lines(atom/target, var/next_cycle)
|
||||
var/alignment = rand(1,2) // 1 for vertical, 2 for horizontal
|
||||
var/list/line_range = list()
|
||||
var/turf/T = get_turf(target)
|
||||
line_range += T
|
||||
for(var/i = 1, i <= 7, i++)
|
||||
switch(alignment)
|
||||
if(1)
|
||||
if(T.x-i > 0)
|
||||
line_range += locate(T.x-i, T.y-i, T.z)
|
||||
if(T.x+i <= world.maxx)
|
||||
line_range += locate(T.x+i, T.y+i, T.z)
|
||||
if(T.y-i > 0)
|
||||
line_range += locate(T.x+i, T.y-i, T.z)
|
||||
if(T.y+i <= world.maxy)
|
||||
line_range += locate(T.x-i, T.y+i, T.z)
|
||||
if(2)
|
||||
if(T.x-i > 0)
|
||||
line_range += locate(T.x-i, T.y, T.z)
|
||||
if(T.x+i <= world.maxx)
|
||||
line_range += locate(T.x+i, T.y, T.z)
|
||||
if(T.y-i > 0)
|
||||
line_range += locate(T.x, T.y-i, T.z)
|
||||
if(T.y+i <= world.maxy)
|
||||
line_range += locate(T.x, T.y+i, T.z)
|
||||
for(var/turf/dropspot in line_range)
|
||||
new artidrop(dropspot)
|
||||
attackcycle = next_cycle
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/bomb_chaos(atom/A, var/next_cycle)
|
||||
if(!A)
|
||||
return
|
||||
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
|
||||
chaos_lines(target, next_cycle)
|
||||
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/chaos_lines(atom/target, var/next_cycle)
|
||||
var/alignment = rand(1,2)
|
||||
var/list/line_range = list()
|
||||
var/turf/T = get_turf(target)
|
||||
line_range += T
|
||||
for(var/i = 1, i <= 7, i++)
|
||||
switch(alignment)
|
||||
if(1)
|
||||
if(T.x-i > 0)
|
||||
var/zed = rand(1,3)
|
||||
line_range += locate(T.x+zed, T.y-i, T.z)
|
||||
if(T.x+i <= world.maxx)
|
||||
var/zed = rand(1,3)
|
||||
line_range += locate(T.x+zed, T.y+i, T.z)
|
||||
if(T.y-i > 0)
|
||||
var/zed = rand(1,3)
|
||||
line_range += locate(T.x+i, T.y+zed, T.z)
|
||||
if(T.y+i <= world.maxy)
|
||||
var/zed = rand(1,3)
|
||||
line_range += locate(T.x-i, T.y+zed, T.z)
|
||||
if(2)
|
||||
if(T.x-i > 0)
|
||||
var/zed = rand(1,3)
|
||||
line_range += locate(T.x-i, T.y-zed, T.z)
|
||||
if(T.x+i <= world.maxx)
|
||||
var/zed = rand(1,3)
|
||||
line_range += locate(T.x+i, T.y-zed, T.z)
|
||||
if(T.y-i > 0)
|
||||
var/zed = rand(1,3)
|
||||
line_range += locate(T.x-zed, T.y-i, T.z)
|
||||
if(T.y+i <= world.maxy)
|
||||
var/zed = rand(1,3)
|
||||
line_range += locate(T.x-zed, T.y+i, T.z)
|
||||
for(var/turf/dropspot in line_range)
|
||||
new artidrop(dropspot)
|
||||
attackcycle = next_cycle
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -147,12 +147,12 @@
|
||||
/obj/item/hand_tele = 10,
|
||||
/obj/item/bone/skull = 100
|
||||
)
|
||||
var/fullshield = 4
|
||||
var/shieldrage = 4
|
||||
var/fullshield = 140
|
||||
var/shieldrage = 3
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead/bullet_act(obj/item/projectile/P) //Projectiles will be absorbed by the shield. Note to self do funky sprite. 4 hits to remove
|
||||
if(fullshield > 0)
|
||||
fullshield--
|
||||
fullshield -= P.damage
|
||||
if(P == /obj/item/projectile/ion)
|
||||
fullshield = 0
|
||||
visible_message(span_boldwarning(span_orange("[P] breaks the shield!!.")))
|
||||
@@ -166,8 +166,8 @@
|
||||
..()
|
||||
shieldrage--
|
||||
if(shieldrage == 0)
|
||||
shieldrage = 4
|
||||
fullshield = 4
|
||||
shieldrage = 3
|
||||
fullshield = 140
|
||||
visible_message(span_boldwarning(span_orange("The shield reactivates!!.")))
|
||||
icon_state = "overseer_shield"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse
|
||||
health = 875
|
||||
maxHealth = 875
|
||||
health = 600
|
||||
maxHealth = 600
|
||||
faction = FACTION_ECLIPSE
|
||||
icon = 'modular_chomp/icons/mob/eclipse.dmi'
|
||||
has_repair_droid = TRUE
|
||||
@@ -16,6 +16,7 @@
|
||||
movement_cooldown = 10
|
||||
var/specialattackprojectile = /obj/item/projectile/energy/phase/bolt
|
||||
var/attackcycle = 1
|
||||
var/artidrop = /obj/effect/artillery_attack
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/handle_special()
|
||||
if(stat != DEAD)
|
||||
@@ -370,8 +371,8 @@
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/phasetwo //we ain't done yet
|
||||
name = "Collapsing Janus"
|
||||
armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 80, bio = 100, rad = 100) //our shielding is gone
|
||||
health = 425
|
||||
maxHealth = 425
|
||||
health = 400
|
||||
maxHealth = 400
|
||||
desc = "The mecha is smoking, it's drone and shield is broken, but it's pilot is pushing it further."
|
||||
specialattackprojectile = /obj/item/projectile/energy/eclipse/janusjavelin
|
||||
wreckage = /obj/item/prop/tyrlore/neonjanus
|
||||
@@ -431,21 +432,57 @@
|
||||
name = "eclipse cryo top"
|
||||
icon_state = "mecha_top"
|
||||
icon_living = "mecha_top"
|
||||
armor = list(melee = 20, bullet = 20, laser = 20, energy = 20, bomb = 80, bio = 100, rad = 100) //Smol armor to compensate for the gimmick
|
||||
wreckage = /obj/item/melee/energy/sword/top_shield
|
||||
specialattackprojectile = /obj/item/projectile/energy/eclipse/chillingwind
|
||||
desc = "It appears to be spinning at rapid speeds; enough to deflect projectiles. The air around it feels frigid.."
|
||||
artidrop = /obj/item/material/barbedwire/vopal/active
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/battle_top/do_special_attack(atom/A)
|
||||
var/rng_cycle
|
||||
if(attackcycle == 1)
|
||||
rng_cycle = rand(1,2)
|
||||
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 25), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
else if(attackcycle == 2)
|
||||
rng_cycle = rand(1,2)
|
||||
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
switch(a_intent)
|
||||
if(I_DISARM) //phase3
|
||||
if(attackcycle == 1)
|
||||
rng_cycle = rand(1,3)
|
||||
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 20), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
else if(attackcycle == 2)
|
||||
rng_cycle = rand(1,3)
|
||||
addtimer(CALLBACK(src, PROC_REF(bomb_chaos), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
else if(attackcycle == 3)
|
||||
rng_cycle = rand(1,3)
|
||||
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
|
||||
if(I_HURT) //phase1
|
||||
if(attackcycle == 1)
|
||||
rng_cycle = rand(1,3)
|
||||
addtimer(CALLBACK(src, PROC_REF(random_firing), A, 20, rng_cycle, 20), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
else if(attackcycle == 2)
|
||||
rng_cycle = rand(1,3)
|
||||
addtimer(CALLBACK(src, PROC_REF(bomb_lines), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
else if(attackcycle == 3)
|
||||
rng_cycle = rand(1,3)
|
||||
addtimer(CALLBACK(src, PROC_REF(cross_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
|
||||
if(I_GRAB) // Phase 2
|
||||
if(attackcycle == 1)
|
||||
rng_cycle = rand(1,3)
|
||||
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 25), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
else if(attackcycle == 2)
|
||||
rng_cycle = rand(1,3)
|
||||
addtimer(CALLBACK(src, PROC_REF(bomb_lines), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
else if(attackcycle == 3)
|
||||
rng_cycle = rand(1,3)
|
||||
addtimer(CALLBACK(src, PROC_REF(cross_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/battle_top/handle_special()
|
||||
if(stat != DEAD)
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
attackcycle = 0
|
||||
else if(attackcycle == 3)
|
||||
specialattackprojectile = /obj/item/projectile/energy/spikeenergy_ball/boss
|
||||
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, 4, 25), 1 SECOND, TIMER_DELETE_ME)
|
||||
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, 4, 20), 1 SECOND, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
else if(attackcycle == 4)
|
||||
specialattackprojectile = /obj/item/projectile/energy/spikeenergy_ball/boss
|
||||
|
||||
Reference in New Issue
Block a user