mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-26 14:47:50 +01:00
Small Tyr Update (#12526)
This commit is contained in:
@@ -90,94 +90,79 @@
|
||||
|
||||
|
||||
//ant meats
|
||||
/obj/item/reagent_containers/food/snacks/tyrant
|
||||
name = "Bronze Ant Slice"
|
||||
/obj/item/reagent_containers/food/snacks/tyrant_shock
|
||||
name = "Shocking 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)
|
||||
nutriment_desc = list(REAGENT_ID_PROTEIN = 5, REAGENT_ID_SHOCKCHEM = 5)
|
||||
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)
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 5)
|
||||
reagents.add_reagent(REAGENT_ID_SHOCKCHEM, 5)
|
||||
|
||||
/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
|
||||
/obj/item/reagent_containers/food/snacks/tyrant_neoburn
|
||||
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)
|
||||
nutriment_desc = list(REAGENT_ID_PROTEIN = 5, REAGENT_ID_NEOLIQUIDFIRE = 5)
|
||||
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)
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 5)
|
||||
reagents.add_reagent(REAGENT_ID_NEOLIQUIDFIRE, 5)
|
||||
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/bronzeant
|
||||
/obj/item/reagent_containers/food/snacks/tyrant_burn
|
||||
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)
|
||||
nutriment_desc = list(REAGENT_ID_PROTEIN = 5, REAGENT_ID_LIQUIDFIRE = 5)
|
||||
bitesize = 1
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/bronzeant/Initialize(mapload)
|
||||
/obj/item/reagent_containers/food/snacks/tyrant_burn/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
|
||||
reagents.add_reagent(REAGENT_ID_LIQUIDFIRE, 3)
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 5)
|
||||
reagents.add_reagent(REAGENT_ID_LIQUIDFIRE, 5)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/quartzant
|
||||
/obj/item/reagent_containers/food/snacks/tyrant_radiation
|
||||
name = "Quartz 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)
|
||||
nutriment_desc = list(REAGENT_ID_PROTEIN = 5, REAGENT_ID_DEATHBLOOD = 5)
|
||||
bitesize = 1
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/quartzant/Initialize(mapload)
|
||||
/obj/item/reagent_containers/food/snacks/tyrant_radiation/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
|
||||
reagents.add_reagent(REAGENT_ID_DEATHBLOOD, 3)
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 5)
|
||||
reagents.add_reagent(REAGENT_ID_DEATHBLOOD, 5)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/agateant
|
||||
/obj/item/reagent_containers/food/snacks/tyrant_bonus
|
||||
name = "Agate 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)
|
||||
nutriment_desc = list(REAGENT_ID_PROTEIN = 5, REAGENT_ID_LIQUIDLIFE = 5)
|
||||
bitesize = 1
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/agateant/Initialize(mapload)
|
||||
/obj/item/reagent_containers/food/snacks/tyrant_bonus/Initialize(mapload)
|
||||
. = ..()
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
|
||||
reagents.add_reagent(REAGENT_ID_LIQUIDLIFE, 3)
|
||||
reagents.add_reagent(REAGENT_ID_PROTEIN, 5)
|
||||
reagents.add_reagent(REAGENT_ID_LIQUIDLIFE, 5)
|
||||
|
||||
|
||||
@@ -19,9 +19,7 @@
|
||||
attack_edge = 1
|
||||
|
||||
meat_amount = 7
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/tyrant
|
||||
|
||||
tame_items = list(/obj/item/reagent_containers/food/snacks/crabmeat = 20)
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_shock
|
||||
|
||||
faction = FACTION_TYR_ANT
|
||||
|
||||
@@ -33,6 +31,10 @@
|
||||
/obj/item/reagent_containers/food/snacks/jellyfishcore = 70
|
||||
)
|
||||
|
||||
harvest_tool = /obj/item/weldingtool
|
||||
harvest_cooldown = 10 MINUTES
|
||||
harvest_delay = 30 SECONDS
|
||||
|
||||
//I know very little of this
|
||||
swallowTime = 3 SECONDS
|
||||
vore_active = 1
|
||||
@@ -82,8 +84,11 @@
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/copper = 18\
|
||||
)
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/copper = 10
|
||||
)
|
||||
meat_amount = 3
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/copperant
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_burn
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/copper/bullet_act(obj/item/projectile/P)
|
||||
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
|
||||
@@ -99,8 +104,11 @@
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/weathered_agate = 18\
|
||||
)
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/weathered_agate = 10
|
||||
)
|
||||
meat_amount = 3
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/agateant
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_bonus
|
||||
|
||||
special_attack_min_range = 0
|
||||
special_attack_max_range = 2
|
||||
@@ -122,8 +130,11 @@
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/quartz = 18\
|
||||
)
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/quartz = 10
|
||||
)
|
||||
meat_amount = 3
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/quartzant
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_radiation
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/diamond //slower, tankier, more damage
|
||||
name = "diamond metal ant"
|
||||
@@ -134,27 +145,38 @@
|
||||
melee_damage_lower = 24
|
||||
melee_damage_upper = 24
|
||||
movement_cooldown = 3
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_neoburn
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/diamond = 18\
|
||||
)
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/diamond = 10
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/verdantium
|
||||
name = "green metal ant"
|
||||
evasion = 50
|
||||
icon_state = "verdantium_ant"
|
||||
icon_living = "verdantium_ant"
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_radiation
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/verdantium = 18\
|
||||
)
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/verdantium = 10
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/uranium //if it melees, it unleashes rads
|
||||
name = "glowing metal ant"
|
||||
icon_state = "rad_ant"
|
||||
icon_living = "rad_ant"
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_radiation
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/uranium = 18\
|
||||
)
|
||||
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/uranium = 10
|
||||
)
|
||||
special_attack_min_range = 1
|
||||
special_attack_max_range = 2
|
||||
special_attack_cooldown = 5 SECONDS
|
||||
@@ -172,9 +194,13 @@
|
||||
name = "mhydro ant"
|
||||
icon_state = "mhydro_ant"
|
||||
icon_living = "mhydro_ant"
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_radiation
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/mhydrogen = 12\
|
||||
)
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/mhydrogen = 4
|
||||
)
|
||||
size_multiplier = 0.5
|
||||
movement_cooldown = -1
|
||||
|
||||
@@ -186,8 +212,11 @@
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/painite = 18\
|
||||
)
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/painite = 10
|
||||
)
|
||||
meat_amount = 3
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/painiteant
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_neoburn
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/painite/apply_melee_effects(atom/A)
|
||||
..()
|
||||
@@ -203,8 +232,10 @@
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/bronze = 18\
|
||||
)
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/bronze = 10
|
||||
)
|
||||
meat_amount = 3
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/bronzeant
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/bronze/death()
|
||||
visible_message(span_warning("\The [src]'s abdomen splits as it rolls over, spiderlings crawling from the wound.") )
|
||||
@@ -216,9 +247,13 @@
|
||||
name = "graphite ant"
|
||||
icon_state = "graphite_ant"
|
||||
icon_living = "graphite_ant"
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_neoburn
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/graphite = 18\
|
||||
)
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/graphite = 10
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/builder
|
||||
name = "tritium ant"
|
||||
@@ -227,6 +262,9 @@
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/tritium = 18\
|
||||
)
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/tritium = 10
|
||||
)
|
||||
nutrition = 150
|
||||
var/build_type = /obj/random/ant_building
|
||||
|
||||
@@ -263,6 +301,62 @@
|
||||
new build_type(T)
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/silver
|
||||
name = "silver ant"
|
||||
icon_state = "silver_ant"
|
||||
icon_living = "silver_ant"
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_neoburn
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/silver = 18\
|
||||
)
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/silver = 10
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/silver/bullet_act(obj/item/projectile/P)
|
||||
if(prob(45))
|
||||
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))
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/gold
|
||||
name = "gold ant"
|
||||
icon_state = "gold_ant"
|
||||
icon_living = "gold_ant"
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_burn
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/gold = 18\
|
||||
)
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/gold = 10
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/gold/apply_melee_effects(var/atom/A)
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(prob(33))
|
||||
A.emp_act(4) //The weakest strength of EMP
|
||||
playsound(src, 'sound/weapons/egloves.ogg', 75, 1)
|
||||
L.Weaken(4)
|
||||
L.Stun(4)
|
||||
L.stuttering = max(L.stuttering, 4)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(5, 1, L)
|
||||
s.start()
|
||||
visible_message(span_danger("The grub releases a powerful shock!"))
|
||||
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/queen //the nurses of the ants
|
||||
name = "queen ant"
|
||||
@@ -334,6 +428,8 @@ ANT STRUCTURES
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/uranium = 1,
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/mhydro = 1,
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/graphite = 1,
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/silver = 1,
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/gold = 1,
|
||||
)
|
||||
|
||||
simultaneous_spawns = 5
|
||||
@@ -341,6 +437,8 @@ ANT STRUCTURES
|
||||
destructible = 1
|
||||
health = 50 //Unsure why you would want to break it but you can
|
||||
|
||||
/obj/structure/mob_spawner/ant_hill/creatable
|
||||
simultaneous_spawns = 2
|
||||
|
||||
/obj/effect/ant_structure
|
||||
name = "organic structure"
|
||||
@@ -419,6 +517,29 @@ ANT STRUCTURES
|
||||
icon_state = "slow_trap"
|
||||
modifiertype = /datum/modifier/chilled
|
||||
|
||||
/obj/effect/ant_structure/trap/confusion
|
||||
icon_state = "confusion_trap"
|
||||
//No modifier.
|
||||
|
||||
/obj/effect/ant_structure/trap/confusion/attack_mob(mob/living/L)
|
||||
playsound(src, 'sound/effects/ghost2.ogg', 20, 1)
|
||||
if(L.get_ear_protection() == 0)
|
||||
L.Confuse(10)
|
||||
|
||||
/obj/effect/ant_structure/trap/poison
|
||||
icon_state = "knock_trap"
|
||||
|
||||
/obj/effect/ant_structure/trap/poison/attack_mob(mob/living/L)
|
||||
to_chat(L, span_warning("You feel a sharp stabbing in your foot."))
|
||||
L.reagents.add_reagent(REAGENT_ID_STOXIN, 12)
|
||||
|
||||
|
||||
/obj/effect/ant_structure/trap/trip
|
||||
icon_state = "trip_trap"
|
||||
|
||||
/obj/effect/ant_structure/trap/poison/attack_mob(mob/living/L)
|
||||
L.Weaken(3)
|
||||
|
||||
/obj/effect/ant_structure/wall
|
||||
name = "Metant wall"
|
||||
icon_state = "wall"
|
||||
@@ -431,9 +552,12 @@ ANT STRUCTURES
|
||||
icon_state = "tool"
|
||||
|
||||
/obj/random/ant_building/item_to_spawn()
|
||||
return pick(/obj/effect/ant_structure/wall,
|
||||
return pick(/obj/effect/ant_structure/trap/poison,
|
||||
/obj/effect/ant_structure/trap/burn,
|
||||
/obj/effect/ant_structure/trap/slowdown)
|
||||
/obj/effect/ant_structure/trap/slowdown,
|
||||
/obj/effect/ant_structure/trap/confusion,
|
||||
/obj/effect/ant_structure/trap/trip,
|
||||
/obj/structure/mob_spawner/ant_hill/creatable)
|
||||
|
||||
|
||||
/obj/effect/spider/spiderling/antling
|
||||
@@ -454,20 +578,7 @@ ANT STRUCTURES
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/verdantium,
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/uranium,
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/mhydro,
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/graphite)
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/graphite,
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/silver,
|
||||
/mob/living/simple_mob/animal/tyr/mineral_ants/gold)
|
||||
faction = FACTION_TYR_ANT
|
||||
|
||||
/obj/effect/ant_structure/webbarrier
|
||||
name = "weblike barrier"
|
||||
icon_state = "web"
|
||||
|
||||
/obj/effect/ant_structure/webbarrier/CanPass(atom/movable/mover, turf/target)
|
||||
if(istype(mover, /mob/living/simple_mob/animal/tyr/mineral_ants))
|
||||
return TRUE
|
||||
else if(istype(mover, /mob/living))
|
||||
if(prob(80))
|
||||
to_chat(mover, span_warning("You get stuck in \the [src] for a moment."))
|
||||
return FALSE
|
||||
else if(istype(mover, /obj/item/projectile))
|
||||
return prob(30)
|
||||
return TRUE
|
||||
|
||||
@@ -92,45 +92,6 @@
|
||||
addtimer(CALLBACK(src, PROC_REF(bullet_blossom), A, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/sonic_boss
|
||||
name = "experiment 10"
|
||||
desc = "A strange furball, the air vibrating around it."
|
||||
specialattackprojectile = /obj/item/projectile/energy/eclipse_boss/tyrjavelin
|
||||
icon_state = "sonic_boss"
|
||||
icon_living = "sonic_boss"
|
||||
projectiletype = /obj/item/projectile/knockback/slow
|
||||
wreckage = /obj/item/prop/tyrlore/sonic_boss
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/sonic_boss/load_default_bellies()
|
||||
. = ..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.name = "alien gut"
|
||||
B.desc = "Your ears ring as the stomach groans to life around you. The constant ringing mixing with acidic gurgling, and gutteral groans. Silver flesh kneading at your figure, whilst the beast ignores you stewing in it's gut."
|
||||
B.digest_brute = 1.5
|
||||
B.digest_burn = 0.5
|
||||
B.digestchance = 0
|
||||
B.absorbchance = 0
|
||||
B.escapechance = 15
|
||||
|
||||
/obj/item/projectile/knockback/slow
|
||||
speed = 10
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/sonic_boss/do_special_attack(atom/A)
|
||||
rng_cycle = rand(1,4)
|
||||
switch(attackcycle)
|
||||
if(1)
|
||||
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
if(2)
|
||||
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 5), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
if(3)
|
||||
addtimer(CALLBACK(src, PROC_REF(rising_star), A, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
if(4)
|
||||
addtimer(CALLBACK(src, PROC_REF(hole_in_wall), A, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/shield_boss
|
||||
name = "experiment 15"
|
||||
desc = "A strange furball gaurded by a transparent barrier."
|
||||
@@ -229,26 +190,6 @@
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/crystal_boss/do_special_attack(atom/A)
|
||||
addtimer(CALLBACK(src, PROC_REF(bomb_chaos), A, 4), 1.5 SECONDS, TIMER_DELETE_ME)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/naga_boss
|
||||
name = "experiment 25"
|
||||
icon_state = "naga_boss"
|
||||
icon_living = "naga_boss"
|
||||
wreckage = /obj/item/prop/tyrlore/gravity_boss
|
||||
specialattackprojectile = /obj/item/projectile/energy/eclipse_boss/tyrjavelin
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/naga_boss/do_special_attack(atom/A)
|
||||
rng_cycle = rand(1,3)
|
||||
switch(attackcycle)
|
||||
if(1)
|
||||
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 5), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
if(2)
|
||||
addtimer(CALLBACK(src, PROC_REF(gravity_surge), A, rng_cycle, 7, 1), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
if(3)
|
||||
addtimer(CALLBACK(src, PROC_REF(rising_star), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
|
||||
//The Ai control units of Tyr
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/defense_ai
|
||||
name = "defense automaton"
|
||||
|
||||
+19
-16
@@ -86,7 +86,9 @@
|
||||
/obj/random/material/refined = 50,
|
||||
/obj/random/material/precious = 40,
|
||||
/obj/random/janusmodule = 3,
|
||||
/obj/item/dnainjector/random_verybad = 10,
|
||||
/obj/item/slime_extract/bluespace = 10,
|
||||
/obj/item/slime_extract/ruby = 10,
|
||||
/obj/item/slime_extract/sapphire = 10,
|
||||
/obj/item/stock_parts/scanning_module/omni = 10,
|
||||
/obj/item/stock_parts/micro_laser/omni = 10,
|
||||
/obj/item/stock_parts/capacitor/omni = 10,
|
||||
@@ -120,7 +122,7 @@
|
||||
evasion = 20
|
||||
|
||||
/datum/modifier/astralcollect_regen
|
||||
mob_overlay_state = "poisoned"
|
||||
mob_overlay_state = "pink_sparkles"
|
||||
|
||||
/datum/modifier/astralcollect_regen/tick()
|
||||
holder.adjustBruteLoss(-8)
|
||||
@@ -226,16 +228,16 @@
|
||||
health = 200
|
||||
maxHealth = 200
|
||||
|
||||
special_attack_cooldown = 3 SECONDS
|
||||
special_attack_cooldown = 7 SECONDS
|
||||
special_attack_min_range = 0
|
||||
special_attack_max_range = 14
|
||||
special_attack_max_range = 4
|
||||
|
||||
/mob/living/simple_mob/humanoid/astral_collective/purity/do_special_attack(atom/A)
|
||||
adjustBruteLoss(-3)
|
||||
adjustFireLoss(-3)
|
||||
adjustToxLoss(-3)
|
||||
adjustOxyLoss(-3)
|
||||
adjustCloneLoss(-3)
|
||||
playsound(src, 'sound/effects/ghost2.ogg', 20, 1)
|
||||
for(var/mob/living/M in orange(src, 4))
|
||||
if(M.get_ear_protection() == 0)
|
||||
M.Confuse(10)
|
||||
|
||||
|
||||
//the ranged mobs
|
||||
/mob/living/simple_mob/humanoid/astral_collective/ranged
|
||||
@@ -255,7 +257,7 @@
|
||||
projectiletype = /obj/item/projectile/energy/astral_collective/anti_mecha
|
||||
|
||||
/mob/living/simple_mob/humanoid/astral_collective/ranged/noodle/do_special_attack(atom/A)
|
||||
if((health / maxHealth) <= 0.5)
|
||||
if((health / maxHealth) <= 0.3)
|
||||
alpha = 180
|
||||
teleport_self(A)
|
||||
|
||||
@@ -304,8 +306,9 @@
|
||||
movement_cooldown = -1
|
||||
|
||||
/mob/living/simple_mob/humanoid/astral_collective/ranged/tesh/do_special_attack(atom/A)
|
||||
if((health / maxHealth) <= 0.5)
|
||||
selfexplode_attack(A)
|
||||
if((health / maxHealth) <= 0.3)
|
||||
visible_message(span_boldwarning(span_orange("The teshari holds up a grenade.")))
|
||||
addtimer(CALLBACK(src, PROC_REF(selfexplode_attack), A), 1.5 SECONDS, TIMER_DELETE_ME)
|
||||
else
|
||||
teleport_attack(A)
|
||||
|
||||
@@ -338,7 +341,7 @@
|
||||
movement_cooldown = 3
|
||||
|
||||
/mob/living/simple_mob/humanoid/astral_collective/ranged/lizard/do_special_attack(atom/A)
|
||||
if((health / maxHealth) <= 0.5)
|
||||
if((health / maxHealth) <= 0.3)
|
||||
repair_self(A)
|
||||
air_strike(A)
|
||||
|
||||
@@ -358,7 +361,7 @@
|
||||
if(!Proj)
|
||||
return
|
||||
if(prob(60))
|
||||
visible_message(span_bolddanger("[Proj] is blocked by the shield."))
|
||||
visible_message(span_boldwarning(span_orange("[Proj] is blocked by the shield.")))
|
||||
if(Proj.firer)
|
||||
ai_holder.react_to_attack(Proj.firer)
|
||||
return
|
||||
@@ -396,7 +399,7 @@
|
||||
/mob/living/simple_mob/humanoid/astral_collective/proc/selfexplode_attack(atom/target)
|
||||
if(!target)
|
||||
return FALSE
|
||||
explosion(src.loc, 2, 3, 4, 5)
|
||||
explosion(src.loc, 1, 1, 1, 1)
|
||||
|
||||
/mob/living/simple_mob/humanoid/astral_collective/proc/gravity_surge(atom/target)
|
||||
if(!target)
|
||||
@@ -410,7 +413,7 @@
|
||||
return FALSE
|
||||
for(var/mob/living/L in orange(src, 14))
|
||||
if(IIsAlly(L))
|
||||
Beam(L, icon_state = "purple_lightning", time = 2.5 SECONDS, maxdistance = INFINITY)
|
||||
Beam(L, icon_state = "g_beam", time = 2.5 SECONDS, maxdistance = INFINITY)
|
||||
L.adjustBruteLoss(-30)
|
||||
L.adjustFireLoss(-30)
|
||||
|
||||
|
||||
+14
-6
@@ -15,10 +15,7 @@
|
||||
/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 = "tyrian hivebot"
|
||||
maxHealth = 0.5 LASERS_TO_KILL // 20 hp
|
||||
health = 0.5 LASERS_TO_KILL
|
||||
/mob/living/simple_mob/mechanical/hivebot/tyr //not a hivebot but stealing the 'oil puddle on death' thing
|
||||
icon = 'modular_chomp/icons/mob/hivebot.dmi'
|
||||
pass_flags = PASSTABLE
|
||||
hovering = TRUE
|
||||
@@ -30,17 +27,28 @@
|
||||
icon_living = "orange"
|
||||
|
||||
/mob/living/simple_mob/mechanical/hivebot/tyr/swarm
|
||||
name = "replicating swarmer"
|
||||
maxHealth = 3
|
||||
health = 3
|
||||
icon_state = "bright_green"
|
||||
icon_living = "bright_green"
|
||||
|
||||
/mob/living/simple_mob/mechanical/hivebot/tyr/meteor
|
||||
maxHealth = 2 LASERS_TO_KILL // 80 hp
|
||||
health = 2 LASERS_TO_KILL
|
||||
name = "repair drone"
|
||||
icon = 'modular_chomp/icons/mob/tyr.dmi'
|
||||
maxHealth = 6 LASERS_TO_KILL // 240 hp
|
||||
health = 6 LASERS_TO_KILL // 240 hp
|
||||
icon_state = "guardian"
|
||||
icon_living = "guardian"
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/dodge
|
||||
projectiletype = /obj/item/projectile/energy/agate_lighting/fast
|
||||
|
||||
/mob/living/simple_mob/mechanical/hivebot/tyr/meteor/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(!Proj)
|
||||
return
|
||||
projectiletype = Proj
|
||||
..()
|
||||
|
||||
/datum/ai_holder/simple_mob/ranged/kiting/dodge
|
||||
|
||||
/datum/ai_holder/simple_mob/ranged/kiting/dodge/post_ranged_attack(atom/A)
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
/mob/living/simple_mob/vore/fossiltank //slow but endless hunter
|
||||
name = "rolling crematorium"
|
||||
desc = "A large metal tank."
|
||||
health = 500
|
||||
maxHealth = 500
|
||||
armor = list(melee = 40, bullet = 40, laser = 40, energy = 40, bomb = 50, bio = 100, rad = 100) //No thematics but I like boss critters to take a bit
|
||||
health = 200
|
||||
maxHealth = 200
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 80, bio = 100, rad = 100) //High armor, relativly low HP
|
||||
icon_state = "rex"
|
||||
melee_attack_delay = 2 SECONDS
|
||||
melee_damage_lower = 40
|
||||
melee_damage_upper = 40
|
||||
attack_armor_pen = 40
|
||||
melee_attack_delay = 2.5 SECONDS
|
||||
melee_damage_lower = 50
|
||||
melee_damage_upper = 50
|
||||
attack_armor_pen = 50
|
||||
damage_fatigue_mult = 1 //Does slowly pick up speed.
|
||||
injury_enrages = TRUE
|
||||
movement_cooldown = 7 //Kind of slow.
|
||||
@@ -20,7 +20,7 @@
|
||||
icon = 'modular_chomp/icons/mob/tyr.dmi'
|
||||
special_attack_min_range = 1
|
||||
special_attack_max_range = 20 //The special attacks are more meant to pin you down or provide a healing to this tank.
|
||||
special_attack_cooldown = 10 SECONDS
|
||||
special_attack_cooldown = 8 SECONDS //1 fire ticks a second
|
||||
swallowTime = 1.5 SECONDS
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
@@ -36,11 +36,24 @@
|
||||
devourable = FALSE
|
||||
faction = FACTION_ECLIPSE
|
||||
size_multiplier = 2
|
||||
var/regenration_rate = -15
|
||||
|
||||
loot_list = list(/obj/item/personal_shield_generator/belt/fossiltank = 100,
|
||||
/obj/item/prop/tyrlore/fossiltank = 100,
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vore/fossiltank/emp_act
|
||||
regenration_rate = 0
|
||||
|
||||
/mob/living/simple_mob/vore/fossiltank/handle_special()
|
||||
if(stat != DEAD)
|
||||
regenration()
|
||||
..()
|
||||
|
||||
/mob/living/simple_mob/vore/fossiltank/proc/regenration()
|
||||
adjustBruteLoss(regenration_rate)
|
||||
adjustFireLoss(regenration_rate)
|
||||
|
||||
/mob/living/simple_mob/vore/fossiltank/load_default_bellies()
|
||||
. = ..()
|
||||
var/obj/belly/B = vore_selected
|
||||
@@ -79,31 +92,10 @@
|
||||
icon_living = "rex"
|
||||
|
||||
/mob/living/simple_mob/vore/fossiltank/do_special_attack(atom/A)
|
||||
Beam(A, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY)
|
||||
addtimer(CALLBACK(src, PROC_REF(sniper_shot), A), 4 SECONDS, TIMER_DELETE_ME)
|
||||
|
||||
/mob/living/simple_mob/vore/fossiltank/proc/sniper_shot(atom/target)
|
||||
if(!target)
|
||||
return
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/bullet/srmrocket(get_turf(src))
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
|
||||
/obj/item/projectile/bullet/fossilrockect
|
||||
name ="Fossil Rocket"
|
||||
desc = "Boom"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "missile"
|
||||
damage = 5 //damage is focused on the explosion
|
||||
does_spin = 0
|
||||
|
||||
/obj/item/projectile/bullet/fossilrockect/on_hit(atom/target, blocked=0)
|
||||
explosion(target, 2, 3, 4, 5)
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/bullet/fossilrockect/throw_impact(atom/target)
|
||||
explosion(target, 2, 3, 4, 5)
|
||||
qdel(src)
|
||||
|
||||
for(var/mob/living/L in orange(src, 14))
|
||||
if(L.stat != DEAD && !IIsAlly(L))
|
||||
L.adjust_fire_stacks(9)
|
||||
L.ignite_mob()
|
||||
|
||||
/mob/living/simple_mob/vore/boss_jellyfish
|
||||
name = "expirmental jellyfish"
|
||||
|
||||
Reference in New Issue
Block a user