Tyr Update attempt 2 (#11191)

This commit is contained in:
FluffMedic
2025-07-14 18:20:49 -04:00
committed by GitHub
parent 110e5c2587
commit 659a4304cb
7 changed files with 4829 additions and 4052 deletions

View File

@@ -303,3 +303,43 @@
slot_l_hand_str = 'modular_chomp/icons/obj/guns/precursor/lefthand.dmi',
slot_r_hand_str = 'modular_chomp/icons/obj/guns/precursor/righthand.dmi',
)
/obj/item/clothing/suit/armor/tyr_alien
name = "expirmental biosuit"
desc = "It's a strange piece of what appears to be a suit of some sort."
description_info = "Organic users of the suit will be slowly healed, and given nutrition."
icon_state = "lingchameleon"
body_parts_covered = CHEST
armor = list(melee = 60, bullet = 50, laser = 40, energy = 40, bomb = 0, bio = 80, rad = 80)
siemens_coefficient = 0.4
/obj/item/clothing/suit/armor/tyr_alien/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
/obj/item/clothing/suit/armor/tyr_alien/Destroy()
wearer = null
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/clothing/suit/armor/tyr_alien/process()
var/mob/living/carbon/human/H = wearer?.resolve()
if(!ishuman(H) || H.isSynthetic() || H.stat == DEAD || H.nutrition <= 10)
return // Robots and dead people don't have a metabolism.
if(H.getBruteLoss())
H.adjustBruteLoss(-0.2)
H.nutrition = max(H.nutrition + 5, 0)
if(H.getFireLoss())
H.adjustFireLoss(-0.2)
H.nutrition = max(H.nutrition + 5, 0)
if(H.getToxLoss())
H.adjustToxLoss(-0.2)
H.nutrition = max(H.nutrition + 5, 0)
if(H.getOxyLoss())
H.adjustOxyLoss(-0.2)
H.nutrition = max(H.nutrition + 5, 0)
if(H.getCloneLoss())
H.adjustCloneLoss(-0.2)
H.nutrition = max(H.nutrition + 5, 0)

View File

@@ -953,3 +953,103 @@
return -1 // complete projectile permutation
return (..(P))
//mining zone
/mob/living/simple_mob/humanoid/eclipse/solar/miner
name = "Solar Eclipse Miner"
desc = "A miner wearing orange armor, shielding itself from lasers and energy."
icon_state = "solar_miner"
icon_state = "solar_miner"
projectiletype = null
melee_damage_lower = 20
melee_damage_upper = 20
attack_armor_pen = 30
loot_list = list(/obj/item/slime_extract/sepia = 1,
/obj/item/bone/skull = 100,
/obj/item/plastique = 10,
/obj/item/pickaxe/anamolous = 30
)
/mob/living/simple_mob/humanoid/eclipse/solar/miner/do_special_attack(atom/A)
summon_drones(A, 2, 1)
/mob/living/simple_mob/humanoid/eclipse/solar/xenoarch
name = "Solar Eclipse Antiquarian"
desc = "An indivual wearing orange armor, shielding itself from lasers and energy. Lighting is crackling around them"
icon_state = "solar_anomalous"
icon_living = "solar_anomalous"
projectiletype = /obj/item/projectile/energy/lightingspark
specialattackprojectile = /obj/item/projectile/beam/lightning/slime
reload_max = 2
reload_time = 3 SECONDS
loot_list = list(/obj/item/slime_extract/sepia = 1,
/obj/item/bone/skull = 100,
/obj/item/research_sample/rare = 10,
/obj/item/stack/nanopaste/advanced = 30
)
/mob/living/simple_mob/humanoid/eclipse/solar/xenoarch/do_special_attack(atom/A)
Beam(A, icon_state = "holo_beam", 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/xenoarch/bullet_act(obj/item/projectile/P, atom/A)
..()
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
special_projectile(A)
/mob/living/simple_mob/humanoid/eclipse/lunar/miner
name = "Lunar Eclipse Drill Tech"
desc = "An indivual wearing red and purple armor, shielding itself from bullets and physical trauma."
icon_state = "lunar_miner"
icon_state = "lunar_miner"
projectiletype = null
melee_damage_lower = 20
melee_damage_upper = 20
attack_armor_pen = 30
specialattackprojectile = /obj/item/projectile/energy/eclipse/mining
loot_list = list(/obj/item/slime_extract/sepia = 1,
/obj/item/bone/skull = 100,
/obj/item/stack/material/void_opal = 10,
/obj/item/stack/material/mhydrogen = 70
)
/mob/living/simple_mob/humanoid/eclipse/lunar/miner/do_special_attack(atom/A)
Beam(A, icon_state = "holo_beam", time = 1 SECOND, maxdistance = INFINITY)
addtimer(CALLBACK(src, PROC_REF(special_projectile), A), 1.5 SECONDS, TIMER_DELETE_ME)
/mob/living/simple_mob/humanoid/eclipse/lunar/xenoarch
name = "Lunar Eclipse Xenoarcholgist"
desc = "An indivual wearing red and purple armor, shielding itself from bullets and physical trauma."
icon_state = "lunar_anomalous"
icon_living = "lunar_anomalous"
loot_list = list(/obj/item/slime_extract/sepia = 1,
/obj/item/bone/skull = 100,
/obj/item/research_sample/rare = 10,
/obj/item/extraction_pack = 30
)
/mob/living/simple_mob/humanoid/eclipse/lunar/xenoarch/do_special_attack(atom/A)
Beam(A, icon_state = "drain_life_grey", time = 1 SECOND, maxdistance = 4)
addtimer(CALLBACK(src, PROC_REF(blood_siphon), A), 1.5 SECONDS, TIMER_DELETE_ME)
/mob/living/simple_mob/humanoid/eclipse/proc/blood_siphon(atom/A, var/mob/living/carbon/human/M)
if(!A)
return
if(A in view(src, 4))
if(ishuman(M))
var/target = pick(M.organs_by_name)
M.apply_damage(rand(5, 10), SEARING, target)
to_chat(M, span_critical("The skin on your [parse_zone(target)] feels like it's ripping apart, and a stream of blood flies out."))
var/blood_to_remove = (rand(10,30))
M.remove_blood(blood_to_remove)

View File

@@ -12,10 +12,18 @@
special_attack_cooldown = 10 //This things attack soley via speical attacks hence basically no cooldown
grab_resist = 100
shock_resist = -0.2
deflect_chance = 0
movement_cooldown = 10
var/specialattackprojectile = /obj/item/projectile/energy/phase/bolt
var/attackcycle = 1
/mob/living/simple_mob/mechanical/mecha/eclipse/handle_special()
if(stat != DEAD)
src.SetStunned(0)
src.SetWeakened(0)
src.SetParalysis(0)
..()
/mob/living/simple_mob/mechanical/mecha/eclipse/do_special_attack(atom/A)
bullet_heck(A, 3, 3)
@@ -424,7 +432,6 @@
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
deflect_chance = 100 //yes, this looks absurd
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.."
@@ -440,16 +447,15 @@
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/battle_top/bullet_act(obj/item/projectile/P)
/mob/living/simple_mob/mechanical/mecha/eclipse/battle_top/handle_special()
if(stat != DEAD)
frozen_aura()
..()
if(deflect_chance > 30)
visible_message(span_cult("The mecha is deflecting most projectiles!."))
/mob/living/simple_mob/mechanical/mecha/eclipse/battle_top/attackby(var/obj/item/O as obj, var/mob/user as mob) //but melees lowers the deflect chance
.=..()
if(deflect_chance > 10)
to_chat(user, span_cult("The strike slows down the mecha!."))
deflect_chance -= 10
/mob/living/simple_mob/mechanical/mecha/eclipse/battle_top/proc/frozen_aura()
for(var/mob/living/L in view(src, 14))
if(!IIsAlly(L))
L.add_modifier(/datum/modifier/chilled, 3, src)
/mob/living/simple_mob/mechanical/mecha/eclipse/excavate_head
name = "Xenoarch Lead"

View File

@@ -24,6 +24,7 @@
loot_list = list(/obj/structure/foamedmetal = 100
)
pass_flags = PASSTABLE
hovering = TRUE
movement_cooldown = -3
icon_state = "janitor"
icon_living = "janitor"
@@ -39,7 +40,7 @@
maxHealth = 500
health = 500
wreckage = /obj/item/prop/tyrlore/reddisc
ai_holder_type = /datum/ai_holder/simple_mob/intentional/three_phases/nomove
ai_holder_type = /datum/ai_holder/simple_mob/intentional/three_phases
anchored = 1
armor = list(melee = 40, bullet = 40, laser = 80, energy = 80, bomb = 50, bio = 100, rad = 100)

View File

@@ -12,7 +12,7 @@ var/datum/planet/tyr/planet_tyr = null
/datum/planet/tyr/New()
..()
planet_thor = src
planet_tyr = src
weather_holder = new /datum/weather_holder/tyr(src)
/datum/planet/tyr/update_sun()
@@ -393,6 +393,23 @@ var/datum/planet/tyr/planet_tyr = null
name = "vast desert"
alpha = 0
/turf/simulated/tyracid
name = "fuel"
icon = 'icons/goonstation/turf/timeholefull.dmi'
icon_state = "timehole"
color = "#FF3100"
var/acidlevel = 1
/turf/simulated/tyracid/Entered(atom/movable/AM, atom/oldloc)
if(isliving(AM))
var/mob/living/L = AM
if(L.hovering || L.flying || L.throwing || L.is_incorporeal())
return 0
acidlevel *= 1 - L.get_water_protection()
if(acidlevel > 0)
L.adjustFireLoss(acidlevel)
/*
WEATHER_BLIZZARD = new (),
WEATHER_STORM = new(),

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because it is too large Load Diff