New year new tyr Update (#12196)

This commit is contained in:
FluffMedic
2026-01-02 13:21:36 +01:00
committed by GitHub
parent 5caf3ca826
commit a8bd07daa2
8 changed files with 34650 additions and 34854 deletions
@@ -13,12 +13,12 @@
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
see_in_dark = 3
melee_damage_lower = 16 //6.25 hits unarmored.
melee_damage_upper = 16 //Rng numbers are wierd
melee_damage_lower = 12
melee_damage_upper = 12
attack_sharp = TRUE
attack_edge = 1
meat_amount = 3
meat_amount = 7
meat_type = /obj/item/reagent_containers/food/snacks/tyrant
tame_items = list(/obj/item/reagent_containers/food/snacks/crabmeat = 20)
@@ -59,16 +59,6 @@
B.absorbchance = 0
B.escapechance = 25
/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(\
/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/bronze/apply_melee_effects(atom/A)
..()
@@ -95,10 +85,6 @@
meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/copperant
special_attack_min_range = 0
special_attack_max_range = 2
special_attack_cooldown = 10 SECONDS
/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))
visible_message(span_cult("[P] seems ineffective!."))
@@ -120,6 +106,10 @@
special_attack_max_range = 2
special_attack_cooldown = 10 SECONDS
color = "#FF7D51"
glow_range = 5
glow_intensity = 2
/mob/living/simple_mob/animal/tyr/mineral_ants/agate/do_special_attack(atom/A)
explosion(src.loc, 2, 1, 1, 1)
@@ -134,17 +124,6 @@
meat_amount = 3
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(\
/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/diamond //slower, tankier, more damage
name = "diamond metal ant"
icon_state = "diamond_ant"
@@ -179,34 +158,72 @@
special_attack_max_range = 2
special_attack_cooldown = 5 SECONDS
color = "#91FF91"
glow_range = 5
glow_intensity = 2
/mob/living/simple_mob/animal/tyr/mineral_ants/uranium/do_special_attack(atom/A)
visible_message(span_bolddanger(span_orange("The ant glows bright green!.")))
SSradiation.radiate(src, 15)
/mob/living/simple_mob/animal/tyr/mineral_ants/tritium
name = "tritium ant"
icon_state = "tritium_ant"
icon_living = "tritium_ant"
butchery_loot = list(\
/obj/item/stack/material/tritium = 18\
)
/mob/living/simple_mob/animal/tyr/mineral_ants/mhydro //secondary spawner
name = "mhydro ant"
icon_state = "mhydro_ant"
icon_living = "mhydro_ant"
butchery_loot = list(\
/obj/item/stack/material/mhydrogen = 6\
/obj/item/stack/material/mhydrogen = 12\
)
size_multiplier = 0.5
movement_cooldown = -1
/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(\
/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/painite/apply_melee_effects(atom/A)
..()
if(isliving(A))
var/mob/living/L = A
to_chat(L, span_danger("You've been burned by \the [src]!"))
L.ignite_mob()
/mob/living/simple_mob/animal/tyr/mineral_ants/bronze
name = "bronze metal ant"
icon_state = "bronze_ant"
icon_living = "bronze_ant"
butchery_loot = list(\
/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/bronze/death()
visible_message(span_warning("\The [src]'s abdomen splits as it rolls over, spiderlings crawling from the wound.") )
for(var/i = 1 to 8)
new /obj/effect/spider/spiderling/antling (src.loc)
..()
/mob/living/simple_mob/animal/tyr/mineral_ants/graphite //nothing special here
name = "graphite ant"
icon_state = "graphite_ant"
icon_living = "graphite_ant"
butchery_loot = list(\
/obj/item/stack/material/graphite = 18\
)
/mob/living/simple_mob/animal/tyr/mineral_ants/builder
name = "concrete ant"
name = "tritium ant"
icon_state = "builder_ant"
icon_living = "builder_ant"
butchery_loot = list(\
/obj/item/stack/material/concrete = 6\
/obj/item/stack/material/tritium = 18\
)
nutrition = 150
var/build_type = /obj/random/ant_building
@@ -301,7 +318,7 @@ ANT STRUCTURES
icon_state = "hole"
anchored = TRUE
spawn_delay = 10 MINUTES
spawn_delay = 15 MINUTES
spawn_types = list(
/mob/living/simple_mob/animal/tyr/mineral_ants/bronze = 1,
@@ -312,12 +329,12 @@ ANT STRUCTURES
/mob/living/simple_mob/animal/tyr/mineral_ants/painite = 1,
/mob/living/simple_mob/animal/tyr/mineral_ants/diamond = 1,
/mob/living/simple_mob/animal/tyr/mineral_ants/verdantium = 1,
/mob/living/simple_mob/animal/tyr/mineral_ants/tritium = 1,
/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/mhydro = 1,
/mob/living/simple_mob/animal/tyr/mineral_ants/graphite = 1,
)
simultaneous_spawns = 3
simultaneous_spawns = 5
destructible = 1
health = 50 //Unsure why you would want to break it but you can
@@ -433,9 +450,9 @@ ANT STRUCTURES
/mob/living/simple_mob/animal/tyr/mineral_ants/painite,
/mob/living/simple_mob/animal/tyr/mineral_ants/diamond,
/mob/living/simple_mob/animal/tyr/mineral_ants/verdantium,
/mob/living/simple_mob/animal/tyr/mineral_ants/tritium,
/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/mhydro,
/mob/living/simple_mob/animal/tyr/mineral_ants/graphite)
faction = FACTION_TYR_ANT
/obj/effect/ant_structure/webbarrier
@@ -20,10 +20,13 @@
vore_standing_too = TRUE
unacidable = TRUE
special_attack_min_range = 0
special_attack_max_range = 7
special_attack_max_range = 14
wreckage = /obj/item/prop/tyrlore/gatekeeper
melee_miss_chance = 0
see_in_dark = 14
melee_damage_lower = 20
melee_damage_upper = 20
loot_list = list(/obj/item/gun/energy/tyr_rifle = 30,
/obj/item/tool/wirecutters/hybrid/alien = 30,
@@ -198,21 +201,19 @@
name = "experiment 20"
icon_state = "crystalized"
icon_living = "crystalized"
specialattackprojectile = /obj/item/projectile/arc/fragmentation/tyr_mortar
health = 400
maxHealth = 400 //15ish hits with E sword
wreckage = /obj/item/prop/tyrlore/crystal_boss
melee_damage_lower = 40
melee_damage_upper = 40
attack_armor_pen = 40
melee_attack_delay = 2.5 SECONDS
movement_cooldown = 4
special_attack_cooldown = 8 SECONDS
evasion = 200 //forced to fight in melee lol
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/crystal_boss/do_special_attack(atom/A)
rng_cycle = rand(1,3)
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, 10), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(3)
addtimer(CALLBACK(src, PROC_REF(gattlingfire), A, rng_cycle, 8, 7), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
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"
@@ -298,10 +299,11 @@
icon = 'modular_chomp/icons/mob/hivebot.dmi'
size_multiplier = 3
wreckage = /obj/item/prop/tyrlore/swarm_boss
special_attack_cooldown = 8 SECONDS
melee_damage_lower = 30
melee_damage_upper = 30
movement_cooldown = 4
special_attack_cooldown = 12 SECONDS
melee_damage_lower = 20
melee_damage_upper = 20
attack_armor_pen = 0
movement_cooldown = 8
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/swarm_ai/bullet_act(obj/item/projectile/P)
for(var/i =1 to 3)
@@ -338,8 +340,8 @@
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/medical_bot //tutortial for ADD invul mechanics
name = "medical robot"
desc = "A massive hivebot with medical equipment."
health = 400
maxHealth = 400
health = 1000
maxHealth = 1000
icon_state = "white"
icon_living = "white"
icon = 'icons/mob/hivebot.dmi'
@@ -350,7 +352,7 @@
attack_armor_pen = 80
movement_cooldown = 4
special_attack_cooldown = 12 SECONDS
special_attack_cooldown = 25 SECONDS
var/datum/disease/base_disease = /datum/disease/advance/agate_rot
@@ -360,9 +362,13 @@
H.ContractDisease(base_disease)
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/medical_bot/do_special_attack(atom/A)
for(var/i =1 to 2)
new /mob/living/simple_mob/mechanical/hivebot/tyr/heart(src.loc)
visible_message(span_boldwarning(span_orange("The beast restores itself to a prime condition!.")))
adjustBruteLoss(-1000)
adjustFireLoss(-1000)
adjustToxLoss(-1000)
adjustOxyLoss(-1000)
adjustCloneLoss(-1000)
/*
/mob/living/simple_mob/mechanical/hivebot/tyr/heart
name = "barrier unit"
icon = 'modular_chomp/icons/mob/tyr.dmi'
@@ -374,20 +380,4 @@
melee_damage_upper = 10
attack_armor_pen = 80
movement_cooldown = 4
/mob/living/simple_mob/mechanical/hivebot/tyr/heart/handle_special()
if(stat != DEAD)
untouchable_aura()
..()
/mob/living/simple_mob/mechanical/hivebot/tyr/heart/proc/untouchable_aura()
for(var/mob/living/L in orange(src, 3))
if(L.stat == DEAD || !IIsAlly(L))
continue
L.add_modifier(/datum/modifier/aura/heart_barrier, null, src)
/datum/modifier/aura/heart_barrier
stacks = MODIFIER_STACK_FORBID
mob_overlay_state = "deflect"
incoming_damage_percent = 0
aura_max_distance = 3
*/
@@ -38,9 +38,15 @@
/mob/living/simple_mob/mechanical/hivebot/tyr/meteor
maxHealth = 2 LASERS_TO_KILL // 80 hp
health = 2 LASERS_TO_KILL
ai_holder_type = /datum/ai_holder/hostile/ranged/robust
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/dodge
projectiletype = /obj/item/projectile/energy/agate_lighting/fast
/datum/ai_holder/simple_mob/ranged/kiting/dodge
/datum/ai_holder/simple_mob/ranged/kiting/dodge/post_ranged_attack(atom/A)
holder.IMove(get_step(holder, pick(GLOB.alldirs)))
holder.face_atom(A)
/obj/item/projectile/energy/spikeenergy_ball/boss
damage = 40
armor_penetration = 60
+6 -171
View File
@@ -99,13 +99,7 @@ var/datum/planet/tyr/planet_tyr = null
temperature = 313
allowed_weather_types = list(
WEATHER_CLEAR = new /datum/weather/tyr/clear(),
WEATHER_FIRESTART = new /datum/weather/tyr/firestart(),
WEATHER_FLAMESTORM = new /datum/weather/tyr/flamestorm(),
WEATHER_SANDSTORM = new /datum/weather/tyr/sandstorm(),
WEATHER_HEAVYSANDSTORM = new /datum/weather/tyr/sandstorm_fierce(),
WEATHER_FALLOUT_TEMP = new /datum/weather/tyr/starrynight(),
WEATHER_BLIZZARD = new /datum/weather/tyr/blizzard(),
WEATHER_STORM = new /datum/weather/tyr/storm(),
WEATHER_FOG = new /datum/weather/tyr/fog()
)
@@ -123,8 +117,8 @@ var/datum/planet/tyr/planet_tyr = null
name = "clear"
transition_chances = list(
WEATHER_CLEAR = 80,
WEATHER_SANDSTORM = 20
)
WEATHER_SANDSTORM = 10,
WEATHER_FOG = 10)
transition_messages = list(
"The sky clears up.",
"The sky is visible.",
@@ -134,51 +128,6 @@ var/datum/planet/tyr/planet_tyr = null
observed_message = "The sky is clear."
imminent_transition_message = "The sky is rapidly clearing up."
/datum/weather/tyr/firestart
name = "warm winds"
icon_state = "ashfall_light"
transition_chances = list(
WEATHER_FIRESTART = 50,
WEATHER_FLAMESTORM = 50)
transition_messages = list(
"The sky begins to turn orange."
)
sky_visible = TRUE
observed_message = "The sky is orange."
imminent_transition_message = "The sky flares orange."
/datum/weather/tyr/flamestorm
name = "fire storm"
icon_state = "ashfall_light"
transition_chances = list(
WEATHER_FLAMESTORM = 50,
WEATHER_CLEAR = 50)
transition_messages = list(
"The sky is engulfed by flames."
)
sky_visible = TRUE
observed_message = "The sky is on fire."
imminent_transition_message = "The sky is set ablaze."
effect_flags = HAS_PLANET_EFFECT | EFFECT_ONLY_HUMANS
/datum/weather/tyr/flamestorm/planet_effect(mob/living/carbon/H)
if(H.z in holder.our_planet.expected_z_levels)
var/turf/T = get_turf(H)
if(!T.is_outdoors())
return
var/target_zone = pick(BP_ALL)
var/amount_blocked = H.run_armor_check(target_zone, "bio")
var/damage = rand(1,1)
if(amount_blocked >= 40)
return
H.apply_damage(damage, BURN, target_zone, amount_blocked, used_weapon = "burning ash")
if(show_message)
to_chat(H, effect_message)
/datum/weather/tyr/sandstorm
name = "sandstorm"
@@ -186,7 +135,7 @@ var/datum/planet/tyr/planet_tyr = null
transition_chances = list(
WEATHER_CLEAR = 80,
WEATHER_SANDSTORM = 10,
WEATHER_HEAVYSANDSTORM = 10)
WEATHER_FOG = 10)
transition_messages = list(
"The sky is engulfed by sand."
)
@@ -213,128 +162,14 @@ var/datum/planet/tyr/planet_tyr = null
if(show_message)
to_chat(H, effect_message)
/datum/weather/tyr/sandstorm_fierce
name = "fierce sandstorm"
icon_state = "sandstorm"
transition_chances = list(
WEATHER_CLEAR = 80,
WEATHER_SANDSTORM = 10,
WEATHER_HEAVYSANDSTORM = 10)
transition_messages = list(
"The sky is engulfed by sand."
)
sky_visible = TRUE
observed_message = "The sky is full of sand."
light_color = "#996600"
light_modifier = 0.5
imminent_transition_message = "The sky is blocked out by rock."
effect_flags = HAS_PLANET_EFFECT | EFFECT_ONLY_HUMANS
/datum/weather/tyr/sandstorm_fierce/planet_effect(mob/living/carbon/H)
if(H.z in holder.our_planet.expected_z_levels)
var/turf/T = get_turf(H)
if(!T.is_outdoors())
return
var/target_zone = pick(BP_ALL)
var/amount_blocked = H.run_armor_check(target_zone, "melee")
var/damage = rand(5,5)
if(amount_blocked >= 40)
return
H.apply_damage(damage, BRUTE, target_zone, amount_blocked, used_weapon = "sand")
if(show_message)
to_chat(H, effect_message)
//Anomalous/summonable weather
/datum/weather/tyr/starrynight
name = "unknown"
icon_state = "starry_night"
transition_chances = list(
WEATHER_CLEAR = 50,
WEATHER_FALLOUT_TEMP = 50)
imminent_transition_message = "The sky is rapidly begins to glow."
effect_flags = HAS_PLANET_EFFECT | EFFECT_ONLY_HUMANS
/datum/weather/tyr/starrynight/planet_effect(mob/living/carbon/H)
if(H.z in holder.our_planet.expected_z_levels)
var/turf/T = get_turf(H)
if(!T.is_outdoors())
return
H.add_modifier(/datum/modifier/starrynight_boon, 1 SECONDS, src)
/datum/weather/tyr/blizzard
name = "blizzard"
icon_state = "snowfall_heavy_old"
temp_high = 153.15
temp_low = 130.15
transition_chances = list(
WEATHER_CLEAR = 50,
WEATHER_BLIZZARD = 50)
outdoor_sounds_type = /datum/looping_sound/weather/storm
indoor_sounds_type = /datum/looping_sound/weather/storm/indoors
imminent_transition_message = "The sky is overtaken by snow."
/datum/weather/tyr/storm
icon_state = "fallout"
light_modifier = 0.7
light_color = "#CCFFCC"
temp_high = 233.15
temp_low = 200.15
transition_chances = list(
WEATHER_CLEAR = 50,
WEATHER_STORM = 50)
imminent_transition_message = "Sky and clouds are growing sickly green... Radiation storm is approaching, get to cover!"
outdoor_sounds_type = /datum/looping_sound/weather/wind
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
imminent_transition_message = "The sky is overtaken by green clouds."
// How much radiation a mob gets while on an outside tile.
var/direct_rad_low = RAD_LEVEL_LOW
var/direct_rad_high = RAD_LEVEL_MODERATE
// How much radiation is bursted onto a random tile near a mob.
var/fallout_rad_low = RAD_LEVEL_HIGH
var/fallout_rad_high = RAD_LEVEL_VERY_HIGH
effect_flags = HAS_PLANET_EFFECT | EFFECT_ONLY_LIVING
/datum/weather/tyr/storm/planet_effect(mob/living/L)
if(L.z in holder.our_planet.expected_z_levels)
irradiate_nearby_turf(L)
var/turf/T = get_turf(L)
if(!T.is_outdoors())
return // They're indoors, so no need to irradiate them with fallout.
L.rad_act(rand(direct_rad_low, direct_rad_high))
// This makes random tiles near people radioactive for awhile.
// Tiles far away from people are left alone, for performance.
/datum/weather/tyr/storm/proc/irradiate_nearby_turf(mob/living/L)
if(!istype(L))
return
var/list/turfs = RANGE_TURFS(world.view, L)
var/turf/T = pick(turfs) // We get one try per tick.
if(!istype(T))
return
if(T.is_outdoors())
SSradiation.radiate(T, rand(fallout_rad_low, fallout_rad_high))
/datum/weather/tyr/fog
light_modifier = 0.5
light_color = "#FF0000"
temp_high = 183.15
temp_low = 160.15
transition_chances = list(
WEATHER_CLEAR = 50,
WEATHER_FOG = 50)
WEATHER_CLEAR = 80,
WEATHER_SANDSTORM = 10,
WEATHER_FOG = 10)
imminent_transition_message = "Fog emerges from nowhere."