Tyr Update (#12045)

This commit is contained in:
FluffMedic
2025-12-01 11:54:31 +01:00
committed by GitHub
parent 101dd347e0
commit e8ba2765ac
18 changed files with 7304 additions and 6631 deletions
@@ -0,0 +1,60 @@
/obj/structure/blob/core/living_agate
desired_blob_type = /datum/blob_type/living_agate
/datum/blob_type/living_agate
name = "agate hive"
desc = "A tide of precursor technolgy gone wrong, energerized agate taking on an aggressive desire to spread and consume."
effect_desc = "Spreads much faster than average"
ai_desc = "genocidal"
difficulty = BLOB_DIFFICULTY_SUPERHARD // Fastest spread of them all and has snowballing capabilities.
color = "#FF3300"
complementary_color = "#FF5125"
spread_modifier = 1.0
slow_spread_with_size = FALSE
ai_aggressiveness = 95
can_build_resources = TRUE
attack_message = "The tide tries to swallow you"
attack_message_living = ", and you feel your skin dissolve"
attack_message_synth = ", and your external plating dissolves"
faction = FACTION_TYR
damage_type = SEARING
armor_check = "melee"
armor_pen = 30
damage_lower = 35
damage_upper = 35
brute_multiplier = 0.5
burn_multiplier = 0.5
can_build_factories = TRUE
can_build_resources = TRUE
can_build_nodes = TRUE
ranged_spores = TRUE
spore_range = 7
spore_projectile = /obj/item/projectile/energy/eclipse/tyrjavelin
spore_type = /mob/living/simple_mob/blob/spore/infesting
/datum/blob_type/living_agate/on_received_damage(var/obj/structure/blob/B, damage, damage_type, mob/living/attacker)
if(damage > 0 && attacker && get_dist(B, attacker) <= 1)
B.visible_message(span_danger("The [name] retaliates, lashing out at \the [attacker]!"))
B.blob_attack_animation(attacker, B.overmind)
attacker.blob_act(B)
return ..()
/datum/blob_type/living_agate/on_attack(obj/structure/blob/B, mob/living/victim, def_zone)
victim.electrocute_act(10, src, 1, def_zone)
victim.stun_effect_act(0, 40, BP_TORSO, src, electric = TRUE)
/datum/blob_type/living_agate/on_spore_death(mob/living/simple_mob/blob/spore/S)
if(S.is_infesting)
return // Don't make blobs if they were on someone's head.
var/turf/T = get_turf(S)
var/obj/structure/blob/B = locate(/obj/structure/blob) in T
if(B) // Is there already a blob here? If so, just heal it.
B.adjust_integrity(10)
else
B = new /obj/structure/blob/normal(T, S.overmind) // Otherwise spread it.
B.visible_message(span_danger("\A [B] forms on \the [T] as \the [S] bursts!"))
@@ -97,9 +97,11 @@
special_attack_max_range = 2
special_attack_cooldown = 10 SECONDS
/mob/living/simple_mob/animal/tyr/mineral_ants/copper/do_special_attack(atom/A)
empulse(src.loc, 1, 2, 3, 4)
playsound(src, 'sound/weapons/Egloves.ogg', 75, 1)
/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!."))
else
..()
/mob/living/simple_mob/animal/tyr/mineral_ants/agate //rushes at you and explodes
name = "agate metal ant"
@@ -22,11 +22,10 @@
/mob/living/simple_mob/mechanical/mecha/eclipse/do_special_attack(atom/A)
bullet_heck(A, 3, 3)
/mob/living/simple_mob/mechanical/mecha/eclipse/bullet_act(obj/item/projectile/P) //removal of E net cheese
/mob/living/simple_mob/mechanical/mecha/eclipse/hitby(obj/item/projectile/P) //removal of E net cheese
if(P == /obj/item/projectile/beam/energy_net)
return
else
..()
..()
/datum/ai_holder/simple_mob/intentional/three_phases
use_astar = TRUE
@@ -49,3 +48,9 @@
else
holder.a_intent = I_HURT
/datum/ai_holder/simple_mob/intentional/three_phases/no_movement
/datum/ai_holder/simple_mob/intentional/three_phases/no_movement/move_once()
return
@@ -0,0 +1,106 @@
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/tyr
name = "ai control center"
desc = "A large, very important looking ai. It sparks as it moves to attacks."
icon_state = "powertower"
icon_living = "powertower"
faction = FACTION_TYR
movement_cooldown = 10
size_multiplier = 2
maxHealth = 500
health = 500
wreckage = /obj/item/prop/tyrlore/gatekeeper
ai_holder_type = /datum/ai_holder/simple_mob/intentional/three_phases/no_movement
anchored = 1
armor = list(melee = 40, bullet = 40, laser = 40, energy = 40, bomb = 50, bio = 100, rad = 100)
loot_list = list(/obj/item/tool/wirecutters/hybrid/alien = 10,
/obj/item/tool/wrench/hybrid/alien = 10,
/obj/item/tool/crowbar/hybrid/alien = 10,
/obj/item/tool/screwdriver/hybrid/alien = 10,
/obj/item/pickaxe/diamonddrill/alien = 10,
/obj/item/melee/energy/sword/dualsaber = 10,
/obj/item/shield_projector/rectangle/automatic/tyrbarrier = 0.1,
/obj/item/stock_parts/scanning_module/omni = 80,
/obj/item/stock_parts/micro_laser/omni = 80,
/obj/item/stock_parts/capacitor/omni = 80,
/obj/item/stock_parts/manipulator/omni = 80,
/obj/item/stock_parts/matter_bin/omni = 80,
/obj/item/stock_parts/scanning_module/hyper = 80,
/obj/item/stock_parts/micro_laser/hyper = 80,
/obj/item/stock_parts/capacitor/hyper = 80,
/obj/item/stock_parts/manipulator/hyper = 80,
/obj/item/stock_parts/matter_bin/hyper = 80,
)
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/tyr/do_special_attack(atom/A)
. = TRUE // So we don't fire a bolt as well.
switch(attackcycle)
if(1)
addtimer(CALLBACK(src, PROC_REF(bomb_lines), A, 2), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(2)
specialattackprojectile = /obj/item/projectile/energy/spikeenergy_ball/boss
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, 3, 15), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
if(3)
specialattackprojectile = /obj/item/projectile/energy/eclipse/tyrjavelin
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 12, 1, 0.5 SECONDS), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/nanoweavetower
name = "ai control center"
desc = "A large, very important looking ai."
icon_state = "bluetower"
icon_living = "bluetower"
faction = FACTION_HIVEBOT
movement_cooldown = 10
size_multiplier = 2
maxHealth = 500
health = 500
wreckage = /obj/structure/loot_pile/surface/alien/engineering
ai_holder_type = /datum/ai_holder/simple_mob/intentional/three_phases/no_movement
anchored = 1
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 50, bio = 100, rad = 100)
loot_list = list(/obj/item/prop/alien/junk = 100,
/obj/item/multitool/alien = 30,
/obj/item/stack/cable_coil/alien = 30,
/obj/item/tool/crowbar/alien = 30,
/obj/item/tool/screwdriver/alien = 30,
/obj/item/weldingtool/alien = 30,
/obj/item/tool/wirecutters/alien = 30,
/obj/item/tool/wrench/alien = 30,
/obj/item/cell/device/weapon/recharge/alien = 40,
/obj/item/prop/nanoweave/terraformers = 50,
/obj/item/prop/nanoweave/cyan = 50,
/obj/item/prop/nanoweave/lime = 50,
/obj/item/perfect_tele/alien = 100
)
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/nanoweavetower/do_special_attack(atom/A)
. = TRUE // So we don't fire a bolt as well.
switch(attackcycle)
if(1)
specialattackprojectile = /obj/item/projectile/beam/midlaser/shortrange
rng_cycle = rand(1,4)
direct_say("PROTOCOL: CROSS X.")
addtimer(CALLBACK(src, PROC_REF(star_burst), A, rng_cycle), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(2)
specialattackprojectile = /obj/item/projectile/energy/wallbreaker/boss
rng_cycle = rand(1,4)
direct_say("PROTOCOL: PRECISION. SWEEP.")
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 25), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(3)
specialattackprojectile = /obj/item/projectile/energy/lightingspark/nanoweave
rng_cycle = rand(1,4)
direct_say("PROTOCOL: DISCHARGE.")
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 12, rng_cycle, 15), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
if(4)
specialattackprojectile = /obj/item/projectile/arc/explosive_rocket/big
rng_cycle = rand(1,4)
Beam(A, icon_state = "r_beam", time = 1 SECOND, maxdistance = INFINITY)
direct_say("PROTOCOL: MISSILE.")
addtimer(CALLBACK(src, PROC_REF(singleproj), A, rng_cycle), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
@@ -32,7 +32,7 @@
icon_state = "drop_marker"
mouse_opacity = 0 //no touching the attack
spread_range = 3
var/fuse_time = 2 SECONDS
var/fuse_time = 3.5 SECONDS
/obj/item/grenade/shooter/auto_explode/Initialize(mapload)
..()
@@ -21,17 +21,15 @@
unacidable = TRUE
special_attack_min_range = 0
special_attack_max_range = 7
wreckage = /obj/item/prop/tyrlore/drones
wreckage = /obj/item/prop/tyrlore/gatekeeper
loot_list = list(/obj/item/gun/energy/curse_tyrshotgun = 30,
/obj/item/gun/energy/energyballchain = 30,
loot_list = list(/obj/item/gun/energy/tyr_rifle = 30,
/obj/item/tool/wirecutters/hybrid/alien = 30,
/obj/item/tool/wrench/hybrid/alien = 30,
/obj/item/tool/crowbar/hybrid/alien = 30,
/obj/item/tool/screwdriver/hybrid/alien = 30,
/obj/item/pickaxe/diamonddrill/alien = 30,
/obj/item/melee/energy/sword/dualsaber = 30,
/obj/item/shield_projector/rectangle/automatic/tyrbarrier = 1,
/obj/item/shield_projector/rectangle/automatic/tyrbarrier = 0.1,
/obj/item/stock_parts/scanning_module/omni = 80,
/obj/item/stock_parts/micro_laser/omni = 80,
/obj/item/stock_parts/capacitor/omni = 80,
@@ -51,7 +49,7 @@
desc = "A strange furball fused with plant life."
icon_state = "poison_boss"
icon_living = "poison_boss"
wreckage = /obj/item/prop/tyrlore/basicflora
wreckage = /obj/item/prop/tyrlore/acid_boss
projectiletype = /obj/item/projectile/bullet/astral_blade
specialattackprojectile = /obj/item/projectile/energy/neurotoxin/toxic/tyr_flora
var/regeneration_strength = -30
@@ -100,7 +98,7 @@
icon_state = "sonic_boss"
icon_living = "sonic_boss"
projectiletype = /obj/item/projectile/knockback/slow
wreckage = /obj/item/prop/tyrlore/basicsonic
wreckage = /obj/item/prop/tyrlore/sonic_boss
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/sonic_boss/load_default_bellies()
. = ..()
@@ -141,7 +139,7 @@
icon_state = "UPshield_boss"
icon_living = "UPshield_boss"
projectiletype = /obj/item/projectile/energy/eclipse/tyrjavelin
wreckage = /obj/item/prop/tyrlore/basicshield
wreckage = /obj/item/prop/tyrlore/shield_boss
var/fullshield = 200
var/shieldrage = 200
@@ -198,6 +196,7 @@
icon_state = "crystalized"
icon_living = "crystalized"
specialattackprojectile = /obj/item/projectile/arc/fragmentation/tyr_mortar
wreckage = /obj/item/prop/tyrlore/crystal_boss
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/crystal_boss/do_special_attack(atom/A)
rng_cycle = rand(1,3)
@@ -216,6 +215,7 @@
name = "experiment 25"
icon_state = "naga_boss"
icon_living = "naga_boss"
wreckage = /obj/item/prop/tyrlore/gravity_boss
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/naga_boss/do_special_attack(atom/A)
rng_cycle = rand(1,3)
@@ -239,7 +239,7 @@
icon_living = "cyan"
size_multiplier = 3
projectiletype = /obj/item/projectile/bullet/tyr_bladeburst
wreckage = /obj/item/prop/tyrlore/ants
wreckage = /obj/item/prop/tyrlore/shotgun
specialattackprojectile = /obj/item/projectile/bullet/astral_blade
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/defense_ai/do_special_attack(atom/A)
@@ -265,7 +265,7 @@
icon_state = "yellow"
icon_living = "yellow"
size_multiplier = 3
wreckage = /obj/item/prop/tyrlore/basicpower
wreckage = /obj/item/prop/tyrlore/engi_boss
specialattackprojectile = /obj/item/projectile/energy/agate_lighting
projectiletype = /obj/item/projectile/energy/agate_lighting
@@ -293,7 +293,7 @@
icon_living = "bright_green"
icon = 'modular_chomp/icons/mob/hivebot.dmi'
size_multiplier = 3
wreckage = /obj/item/prop/tyrlore/drones
wreckage = /obj/item/prop/tyrlore/swarm_boss
special_attack_cooldown = 8 SECONDS
melee_damage_lower = 20
melee_damage_upper = 20
@@ -323,8 +323,66 @@
size_multiplier = 3
specialattackprojectile = /obj/item/projectile/arc/blue_energy/precusor
projectiletype = /obj/item/projectile/arc/blue_energy/precusor
wreckage = /obj/item/prop/tyrlore/meteor_boss
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/meteor_ai/do_special_attack(atom/A, var/strike_downx, var/strikedowny)
strike_downx = rand(-7,7)
strikedowny = rand(-7,7)
bullet_heck(A, strike_downx, strikedowny)
wreckage = bullet_heck(A, strike_downx, strikedowny)
//the add tutortial
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/medical_bot
name = "medical robot"
desc = "A massive hivebot with medical equipment."
health = 600
maxHealth = 600
icon_state = "white"
icon_living = "wite"
icon = 'icons/mob/hivebot.dmi'
size_multiplier = 3
wreckage = /obj/item/prop/tyrlore/medical_boss
special_attack_cooldown = 8 SECONDS
melee_damage_lower = 20
melee_damage_upper = 20
attack_armor_pen = 50
movement_cooldown = 4
special_attack_cooldown = 10 SECONDS
var/datum/disease/base_disease = /datum/disease/advance/agate_rot
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/medical_bot/apply_melee_effects(atom/A)
if(ishuman(A) && prob(25))
var/mob/living/carbon/human/H = A
H.ContractDisease(base_disease)
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/swarm_ai/do_special_attack(atom/A)
for(var/i =1 to 3)
new /mob/living/simple_mob/mechanical/hivebot/tyr/heart(src.loc)
/mob/living/simple_mob/mechanical/hivebot/tyr/heart
name = "barrier unit"
icon = 'modular_chomp/icons/mob/tyr.dmi'
icon_state = "guardian"
icon_living = "guardian"
maxHealth = 2.5 LASERS_TO_KILL // 100 hp
health = 2.5 LASERS_TO_KILL
melee_damage_lower = 10
melee_damage_upper = 10
attack_armor_pen = 80
/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
mob_overlay_state = "deflect"
incoming_damage_percent = 0
aura_max_distance = 3
@@ -629,7 +629,7 @@
special_attack_min_range = 1
special_attack_max_range = 7
projectiletype = /obj/item/projectile/energy/wp_shotgun //using the weapon found upon tyr
projectiletype = /obj/item/projectile/energy/tyr_rifle //using the weapon found upon tyr
specialattackprojectile = /obj/item/projectile/arc/microsingulo
loot_list = list(/obj/item/slime_extract/sepia = 1,
@@ -22,7 +22,7 @@
icon = 'modular_chomp/icons/mob/hivebot.dmi'
pass_flags = PASSTABLE
hovering = TRUE
movement_cooldown = -3
movement_cooldown = 1
faction = FACTION_TYR
melee_damage_lower = 12
melee_damage_upper = 12
@@ -30,8 +30,8 @@
icon_living = "orange"
/mob/living/simple_mob/mechanical/hivebot/tyr/swarm
maxHealth = 1
health = 1
maxHealth = 3
health = 3
icon_state = "bright_green"
icon_living = "bright_green"
@@ -41,122 +41,12 @@
ai_holder_type = /datum/ai_holder/hostile/ranged/robust
projectiletype = /obj/item/projectile/energy/agate_lighting/fast
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/tyr
name = "ai control center"
desc = "A large, very important looking ai. It sparks as it moves to attacks."
icon_state = "powertower"
icon_living = "powertower"
faction = FACTION_TYR
movement_cooldown = 10
size_multiplier = 2
maxHealth = 500
health = 500
wreckage = /obj/item/prop/tyrlore/reddisc
ai_holder_type = /datum/ai_holder/simple_mob/intentional/three_phases
anchored = 1
armor = list(melee = 40, bullet = 40, laser = 40, energy = 40, bomb = 50, bio = 100, rad = 100)
loot_list = list(/obj/item/tool/wirecutters/hybrid/alien = 10,
/obj/item/tool/wrench/hybrid/alien = 10,
/obj/item/tool/crowbar/hybrid/alien = 10,
/obj/item/tool/screwdriver/hybrid/alien = 10,
/obj/item/pickaxe/diamonddrill/alien = 10,
/obj/item/melee/energy/sword/dualsaber = 10,
/obj/item/shield_projector/rectangle/automatic/tyrbarrier = 1,
/obj/item/stock_parts/scanning_module/omni = 80,
/obj/item/stock_parts/micro_laser/omni = 80,
/obj/item/stock_parts/capacitor/omni = 80,
/obj/item/stock_parts/manipulator/omni = 80,
/obj/item/stock_parts/matter_bin/omni = 80,
/obj/item/stock_parts/scanning_module/hyper = 80,
/obj/item/stock_parts/micro_laser/hyper = 80,
/obj/item/stock_parts/capacitor/hyper = 80,
/obj/item/stock_parts/manipulator/hyper = 80,
/obj/item/stock_parts/matter_bin/hyper = 80,
)
/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(bomb_lines), A, 2), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 2)
specialattackprojectile = /obj/item/projectile/energy/spikeenergy_ball/boss
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, 3, 15), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 3)
specialattackprojectile = /obj/item/projectile/energy/eclipse/tyrjavelin
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 12, 1, 0.5 SECONDS), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
/obj/item/projectile/energy/spikeenergy_ball/boss
damage = 40
armor_penetration = 60
speed = 10
crawl_destroy = TRUE
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/nanoweavetower
name = "ai control center"
desc = "A large, very important looking ai."
icon_state = "bluetower"
icon_living = "bluetower"
faction = FACTION_HIVEBOT
movement_cooldown = 10
size_multiplier = 2
maxHealth = 500
health = 500
wreckage = /obj/structure/loot_pile/surface/alien/engineering
ai_holder_type = /datum/ai_holder/simple_mob/intentional/three_phases/nomove
anchored = 1
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 50, bio = 100, rad = 100)
loot_list = list(/obj/item/prop/alien/junk = 100,
/obj/item/multitool/alien = 30,
/obj/item/stack/cable_coil/alien = 30,
/obj/item/tool/crowbar/alien = 30,
/obj/item/tool/screwdriver/alien = 30,
/obj/item/weldingtool/alien = 30,
/obj/item/tool/wirecutters/alien = 30,
/obj/item/tool/wrench/alien = 30,
/obj/item/cell/device/weapon/recharge/alien = 40,
/obj/item/prop/nanoweave/terraformers = 50,
/obj/item/prop/nanoweave/cyan = 50,
/obj/item/prop/nanoweave/lime = 50,
/obj/item/perfect_tele/alien = 100
)
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/nanoweavetower/do_special_attack(atom/A)
. = TRUE // So we don't fire a bolt as well.
var/rng_cycle
if(attackcycle == 1)
specialattackprojectile = /obj/item/projectile/beam/midlaser/shortrange
rng_cycle = rand(1,4)
say("PROTOCOL: CROSS X.")
addtimer(CALLBACK(src, PROC_REF(star_burst), A, rng_cycle), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 2)
specialattackprojectile = /obj/item/projectile/energy/wallbreaker/boss
rng_cycle = rand(1,4)
say("PROTOCOL: PRECISION. SWEEP.")
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 25), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 3)
specialattackprojectile = /obj/item/projectile/energy/lightingspark/nanoweave
rng_cycle = rand(1,4)
say("PROTOCOL: DISCHARGE.")
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 12, rng_cycle, 15), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 4)
specialattackprojectile = /obj/item/projectile/arc/explosive_rocket/big
rng_cycle = rand(1,4)
Beam(A, icon_state = "r_beam", time = 1 SECOND, maxdistance = INFINITY)
say("PROTOCOL: MISSILE.")
addtimer(CALLBACK(src, PROC_REF(singleproj), A, rng_cycle), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/hivebot/eclipse
name = "repurposed hivebot"
@@ -80,19 +80,8 @@
icon_living = "rex"
/mob/living/simple_mob/vore/fossiltank/do_special_attack(atom/A)
if(health < maxHealth*0.25)
visible_message(span_bolddanger(span_orange("The fossil tank begins self repairs!.")))
addtimer(CALLBACK(src, PROC_REF(cycle_heal), 8), 1 SECOND, TIMER_DELETE_ME)
else
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/cycle_heal(var/healamount)
adjustBruteLoss(-100)
adjustFireLoss(-100)
if(healamount > 0)
healamount -= 1
addtimer(CALLBACK(src, PROC_REF(cycle_heal), 8), 1 SECOND, TIMER_DELETE_ME)
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)
@@ -126,7 +115,7 @@
icon = 'modular_chomp/icons/mob/tyr.dmi'
icon_state = "jellyfish"
icon_living = "jellyfish"
icon_dead = "jelltdish_dead"
icon_dead = "jellyfish_dead"
movement_cooldown = 1
damage_fatigue_mult = 0 //It's a mutant jellyfish boss mob.
melee_attack_delay = 1.5 SECOND
@@ -25,28 +25,12 @@
check_armour = "melee"
damage_type = BRUTE
/obj/item/projectile/energy/wp_shotgun
name = "laser blast"
icon = 'modular_chomp/icons/obj/guns/precursor/tyr.dmi'
icon_state = "shotgun_blast"
damage = 25
range = 5
check_armour = "bullet"
damage_type = BRUTE
/obj/item/projectile/energy/wp_shotgun/on_hit(var/atom/movable/target, var/blocked = 0)
if(isliving(target))
var/mob/living/L = target
var/throwdir = get_dir(firer,L)
L.throw_at(get_edge_target_turf(L, throwdir), 3, 10)
return 1
/obj/item/projectile/energy/wp_blaster
/obj/item/projectile/energy/tyr_rifle
name = "laser blast"
icon = 'modular_chomp/icons/obj/guns/precursor/tyr.dmi'
icon_state = "blaster_blast"
damage = 35
range = 5
range = 6
penetrating = 2
check_armour = "laser"
@@ -58,7 +42,7 @@
penetrating = 2
damage_type = BURN
check_armour = "laser"
range = 5
range = 4
eyeblur = 0 //no no no no no
hitscan = 1
hud_state = "laser"
@@ -69,36 +53,12 @@
range = 0
embed_chance = 0
spread_submunition_damage = FALSE
submunition_spread_max = 150
submunition_spread_min = 60
submunitions = list(/obj/item/projectile/beam/precursor_tyr = 5)
submunition_spread_max = 180
submunition_spread_min = 80
submunitions = list(/obj/item/projectile/beam/precursor_tyr = 7)
/obj/item/gun/energy/energyballchain
name = "tyrian energy club"
desc = "A strange alien weapon from tyr."
icon = 'modular_chomp/icons/obj/guns/precursor/tyr.dmi'
icon_state = "violence"
item_state = "violence"
wielded_item_state = "placeholder"
origin_tech = list(TECH_COMBAT = 6, TECH_POWER = 5, TECH_PRECURSOR = 3)
charge_cost = 625 //Uses all it's charge in a single shot.
battery_lock = 1 //No changing
accept_cell_type = /obj/item/cell/device
cell_type = /obj/item/cell/device/weapon/recharge/alien/tyr
projectile_type = /obj/item/projectile/energy/spikeenergy_ball
force = 45 //functions as a melee weapon too! Ain't great, but still works.
recoil_mode = 0
charge_meter = 1
move_delay = 0
one_handed_penalty = 50
/obj/item/gun/energy/curse_tyrshotgun
name = "tyrian enforcer firearm"
/obj/item/gun/energy/tyr_rifle
name = "tyrian longarm"
desc = "A strange alien weapon from tyr."
icon = 'modular_chomp/icons/obj/guns/precursor/tyr.dmi'
icon_state = "shotgun"
@@ -111,41 +71,21 @@
accept_cell_type = /obj/item/cell/device
cell_type = /obj/item/cell/device/weapon/recharge/alien/tyr
projectile_type = /obj/item/projectile/energy/wp_shotgun
projectile_type = /obj/item/projectile/energy/tyr_rifle
force = 35
recoil_mode = 0
charge_meter = 1
firemodes = list(
list(mode_name="explosive", projectile_type=/obj/item/projectile/energy/wp_shotgun, charge_cost = 625),
list(mode_name="spray", projectile_type=/obj/item/projectile/bullet/tyrshotburst, charge_cost = 625),
list(mode_name="single", projectile_type=/obj/item/projectile/energy/tyr_rifle, charge_cost = 250),
list(mode_name="area", projectile_type=/obj/item/projectile/bullet/tyrshotburst, charge_cost = 500),
)
move_delay = 0
one_handed_penalty = 50
/obj/item/gun/energy/curse_blaster
name = "tyrian infantry firearm"
desc = "A strange alien weapon from tyr."
icon = 'modular_chomp/icons/obj/guns/precursor/tyr.dmi'
icon_state = "solider_blaster"
item_state = "solider_blaster"
wielded_item_state = "placeholder"
origin_tech = list(TECH_COMBAT = 6, TECH_POWER = 5, TECH_PRECURSOR = 3)
charge_cost = 250
battery_lock = 1 //No changing
accept_cell_type = /obj/item/cell/device
cell_type = /obj/item/cell/device/weapon/recharge/alien/tyr
projectile_type = /obj/item/projectile/energy/wp_blaster
recoil_mode = 0
charge_meter = 1
move_delay = 0
one_handed_penalty = 50
/obj/item/cell/device/weapon/recharge/alien/tyr
name = "odd cell"
icon = 'icons/obj/abductor.dmi'
@@ -182,7 +122,7 @@
icon_state = "astral_sea_blade"
icon = 'modular_chomp/icons/obj/guns/precursor/tyr.dmi'
damage = 30 //21 with intended armor
armor_penetration = 20
armor_penetration = 10
damage_type = BRUTE
check_armour = "melee"
embed_chance = 0
@@ -191,8 +131,9 @@
crawl_destroy = TRUE
/obj/item/projectile/bullet/astral_blade/short
damage = 20
speed = 0.3
range = 4
range = 2
/obj/item/projectile/bullet/tyr_bladeburst
use_submunitions = 1
@@ -3,14 +3,15 @@
description = "A scientist or explorer will need to obtain data discs from Tyr!"
required_points = 3
required_atoms = list(
/obj/item/prop/tyrlore/reddisc = 1,
/obj/item/prop/tyrlore/purpledisc = 1,
/obj/item/prop/tyrlore/greendisc = 1,
/obj/item/prop/tyrlore/basicflora = 1,
/obj/item/prop/tyrlore/basicshield = 1,
/obj/item/prop/tyrlore/advanceshield = 1,
/obj/item/prop/tyrlore/basicsonic = 1,
/obj/item/prop/tyrlore/basicpower = 1,
/obj/item/prop/tyrlore/ants = 1,
/obj/item/prop/tyrlore/drones = 1,
/obj/item/prop/tyrlore/acid_boss = 1,
/obj/item/prop/tyrlore/sonic_boss = 1,
/obj/item/prop/tyrlore/shield_boss = 1,
/obj/item/prop/tyrlore/crystal_boss = 1,
/obj/item/prop/tyrlore/gravity_boss = 1,
/obj/item/prop/tyrlore/gatekeeper = 1,
/obj/item/prop/tyrlore/shotgun = 1,
/obj/item/prop/tyrlore/engi_boss = 1,
/obj/item/prop/tyrlore/meteor_boss = 1,
/obj/item/prop/tyrlore/swarm_boss = 1,
/obj/item/prop/tyrlore/medical_boss = 1.
)
@@ -1,31 +1,9 @@
/datum/design_techweb/tyrenergyballchain
name = "Tyrian Melee Weapon"
id = "tyr_meleegun"
build_type = PROTOLATHE
materials = list(MAT_BRONZE = 12000,MAT_DIAMOND = 4000,MAT_URANIUM = 3000,MAT_COPPER = 3000,MAT_GOLD = 3000,MAT_METALHYDROGEN = 3000,MAT_QUARTZ = 3000,MAT_EAGATE = 3000)
build_path = /obj/item/gun/energy/energyballchain
category = list(
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_RANGED
)
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
/datum/design_techweb/tyrenergyshotgun
name = "Tyrian Enforcer Firearm"
id = "tyr_shotgun"
build_type = PROTOLATHE
materials = list(MAT_BRONZE = 12000,MAT_DIAMOND = 4000,MAT_URANIUM = 3000,MAT_COPPER = 3000,MAT_GOLD = 3000,MAT_METALHYDROGEN = 3000,MAT_QUARTZ = 3000,MAT_EAGATE = 3000)
build_path = /obj/item/gun/energy/curse_tyrshotgun
category = list(
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_RANGED
)
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
/datum/design_techweb/tyrenergyrifle
name = "Tyrian Infantry Firearm"
name = "Tyrian Longarm"
id = "tyr_rifle"
build_type = PROTOLATHE
materials = list(MAT_BRONZE = 12000,MAT_DIAMOND = 4000,MAT_URANIUM = 3000,MAT_COPPER = 3000,MAT_GOLD = 3000,MAT_METALHYDROGEN = 3000,MAT_QUARTZ = 3000,MAT_EAGATE = 3000)
build_path = /obj/item/gun/energy/curse_blaster
build_path = /obj/item/gun/energy/tyr_rifle
category = list(
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_RANGED
)
@@ -5,8 +5,6 @@
prereq_ids = list(TECHWEB_NODE_MOD_ANOMALY_SUIT)
design_ids = list(
"tyr_rifle",
"tyr_shotgun",
"tyr_meleegun",
"magnet_belt",
"tyr_sabre",
"tyr_barrier",