From 5ba193f52ee18573e8f77bfe763cfae389d427a7 Mon Sep 17 00:00:00 2001 From: FluffMedic <109300046+FluffMedic@users.noreply.github.com> Date: Sun, 5 Oct 2025 19:25:56 -0400 Subject: [PATCH] More Printable Tyr Items --- .../code/modules/exploration/bossloots.dm | 46 +- .../modules/exploration/tyr_tribal_gear.dm | 18 +- .../subtypes/humanoid/eclipse/mechas.dm | 532 ++++++++++++++++++ .../mechanical/hivebot/orginalAlts.dm | 24 + .../modules/research/tg/designs/tyrstuff.dm | 66 +++ .../research/tg/techweb/nodes/exploration.dm | 16 + .../icons/obj/guns/precursor/lefthand.dmi | Bin 0 -> 2161 bytes .../icons/obj/guns/precursor/righthand.dmi | Bin 0 -> 2179 bytes 8 files changed, 684 insertions(+), 18 deletions(-) create mode 100644 modular_chomp/code/modules/research/tg/designs/tyrstuff.dm create mode 100644 modular_chomp/code/modules/research/tg/techweb/nodes/exploration.dm create mode 100644 modular_chomp/icons/obj/guns/precursor/lefthand.dmi create mode 100644 modular_chomp/icons/obj/guns/precursor/righthand.dmi diff --git a/modular_chomp/code/modules/exploration/bossloots.dm b/modular_chomp/code/modules/exploration/bossloots.dm index a388c70a55b..352d661a23d 100644 --- a/modular_chomp/code/modules/exploration/bossloots.dm +++ b/modular_chomp/code/modules/exploration/bossloots.dm @@ -53,6 +53,7 @@ maxcharge = 10000 charge_amount = 1000 +<<<<<<< HEAD //Starry Nights /obj/item/gun/energy/astarrail name = "Astral Slicer" @@ -120,22 +121,45 @@ /obj/item/melee/midnightblade name = "midnight blade" icon_state = "katana" +======= +//Reworking an old weapon into Tyr melee loot. Old Weapon was the Midnight Blade +//E sword has 30 damage, 50 AP, and 65% projectile block +//Midnightblade has less AP, and less projectile block chance +//In exchange it has special charatisics on melee hits, and higher melee block +/obj/item/melee/energy/tyr_sabre + name = "tyrian energy blade" +>>>>>>> 860b850999 (More Printable Tyr Items (#11779)) slot_flags = SLOT_BELT | SLOT_BACK //should make a proper sprite some time but spriting energy is hard - desc = "A sword where the blade appears to be wreathed in rippling shadows." - force = 32 //I don't think weakning melee/speed, or weaking healing is quite the same vaule as 50% block/deflect chance. - armor_penetration = 50 - -/obj/item/melee/midnightblade/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) - if(user.a_intent == I_HURT) //Anti-Heal mode + desc = "A forgien blade made via techniques of ages old. Gains a diffrent effect base off your stance." + description_info = "Attacking whilst on grab intent weakens the target's healing, attacking whilst on disarm weakens the target's melee potential, and attacking whilst on harm has a 2% chance to deal guarnteed massive damage." + active_force = 30 + active_armourpen = 30 + projectile_parry_chance = 20 + defend_chance = 20 + + icon = 'modular_chomp/icons/mob/tribal_gear.dmi' + icon_state = "topshield" + item_state = "topshield" + + item_icons = list( + 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/melee/energy/tyr_sabre/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) + if(user.a_intent == I_GRAB) //Anti-Heal mode . = ..() - target.add_modifier(/datum/modifier/grievous_wounds, 20) + if(active) + target.add_modifier(/datum/modifier/grievous_wounds, 20) else if(user.a_intent == I_DISARM) //weaken mode . = ..() - target.add_modifier(/datum/modifier/berserk_exhaustion, 3) - else if(user.a_intent == I_GRAB) //The meme mode. 1/1000000 to apply an instant kill debuff....that takes 2 mins to kill. + if(active) + target.add_modifier(/datum/modifier/berserk_exhaustion, 3) + else if(user.a_intent == I_HURT) //Tiny Chance to crit . = ..() - if(prob(0.0001)) - target.add_modifier(/datum/modifier/doomed, 120) + if(active && prob(2)) + target.adjustBruteLoss(-50) + playsound(src, "blade1", 50, 1) //A wierd beaker /obj/item/reagent_containers/glass/beaker/gilded //Soo technically a good item but cumbersome to use. diff --git a/modular_chomp/code/modules/exploration/tyr_tribal_gear.dm b/modular_chomp/code/modules/exploration/tyr_tribal_gear.dm index 88d02af0bcb..03493711cac 100644 --- a/modular_chomp/code/modules/exploration/tyr_tribal_gear.dm +++ b/modular_chomp/code/modules/exploration/tyr_tribal_gear.dm @@ -246,7 +246,7 @@ //Rad Storm /obj/item/pickaxe/diamonddrill/alien - name = "strane mining drill" + name = "alien mining drill" icon_state = "diamonddrill" item_state = "jackhammer" digspeed = 6 @@ -270,12 +270,16 @@ defend_chance = 65 -//Five player check -/obj/item/shield_projector/rectangle/automatic/tyrvault - shield_health = 250 - max_shield_health = 250 - shield_regen_delay = 600 SECONDS - shield_regen_amount = 50 +/obj/item/shield_projector/rectangle/automatic/tyrbarrier + name = "tyrian energy barrier" + desc = "An automatic shield generator made from tyr tech. Wearable as a belt." + description_info = "The barrier has 150 health, and does not benefit from armor. It will fully regenerate every 180 seconds." + shield_health = 125 + max_shield_health = 125 + shield_regen_delay = 180 SECONDS + shield_regen_amount = 125 + w_class = ITEMSIZE_NO_CONTAINER + slot_flags = SLOT_BELT size_x = 4 size_y = 4 color = "#FF3300" diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/mechas.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/mechas.dm index 4586099accc..4f54dce5cfe 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/mechas.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/humanoid/eclipse/mechas.dm @@ -1472,3 +1472,535 @@ addtimer(CALLBACK(src, PROC_REF(singleproj), A, 1), 1 SECOND, TIMER_DELETE_ME) attackcycle = 0 +<<<<<<< HEAD +======= +/mob/living/simple_mob/mechanical/mecha/eclipse/battle_top + name = "eclipse cryo top" + icon_state = "mecha_top" + icon_living = "mecha_top" + 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.." + +/mob/living/simple_mob/mechanical/mecha/eclipse/battle_top/do_special_attack(atom/A) + var/rng_cycle + 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) + frozen_aura() + ..() + +/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" + desc = "A unathi wearing what appears to be a modified breacher suit. Something seems off though" + icon_state = "cursor_guard" + icon_living = "cursor_guard" + armor = list(melee = 80, bullet = 80, laser = 80, energy = 80, bomb = 80, bio = 100, rad = 100) + wreckage = /obj/item/prop/tyrlore/stolenbreacher + specialattackprojectile = /obj/item/projectile/energy/eclipse/mining + desc = "A being wearing what appears to be a modified breacher outfit." + projectiletype = /obj/item/projectile/arc/explosive_rocket + ranged_cooldown = 50 + + +/mob/living/simple_mob/mechanical/mecha/eclipse/excavate_head/updatehealth() + . = ..() + if(health < maxHealth*0.3) + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100) + else if(health < maxHealth*0.6) + armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 30, bio = 100, rad = 100) + else if (health < maxHealth*0.9) + armor = list(melee = 60, bullet = 60, laser = 60, energy = 50, bomb = 60, bio = 100, rad = 100) + + +/mob/living/simple_mob/mechanical/mecha/eclipse/excavate_head/do_special_attack(atom/A) + var/rng_cycle + switch(a_intent) + if(I_DISARM) //phase3 + if(attackcycle == 1) + rng_cycle = rand(1,3) + addtimer(CALLBACK(src, PROC_REF(random_firing), A, 20, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 2) + rng_cycle = rand(1,3) + addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 3) + rng_cycle = rand(1,3) + Beam(A, icon_state = "solar_beam", time = 2 SECONDS, maxdistance = INFINITY) + addtimer(CALLBACK(src, PROC_REF(singleproj), A, rng_cycle), 2 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, 8, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 2) + rng_cycle = rand(1,3) + addtimer(CALLBACK(src, PROC_REF(cross_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 3) + rng_cycle = rand(1,3) + Beam(A, icon_state = "solar_beam", time = 2 SECONDS, maxdistance = INFINITY) + addtimer(CALLBACK(src, PROC_REF(singleproj), A, rng_cycle), 2 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + if(I_GRAB) // Phase 2 + if(attackcycle == 1) + rng_cycle = rand(1,3) + addtimer(CALLBACK(src, PROC_REF(random_firing), A, 12, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 2) + rng_cycle = rand(1,3) + addtimer(CALLBACK(src, PROC_REF(cross_spin), A, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 3) + rng_cycle = rand(1,3) + Beam(A, icon_state = "solar_beam", time = 1.5 SECONDS, maxdistance = INFINITY) + addtimer(CALLBACK(src, PROC_REF(singleproj), A, rng_cycle), 1 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + +//Awoken Tyr Update +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss + health = 1000 + maxHealth = 1000 //I don't like four digits, but the intended weapon has 30 damage, and desired player count is 3 with a length of 3 mins, doing the math adds up to 1080 but going to do 1k + faction = FACTION_TYR + armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 30, bio = 100, rad = 100) + movement_cooldown = 40 + icon = 'modular_chomp/icons/mob/tyr.dmi' + size_multiplier = 2 + swallowTime = 0.5 SECONDS + vore_active = 1 + vore_capacity = 5 + vore_bump_chance = 10 + vore_stomach_name = "Stomach" + vore_default_item_mode = IM_DIGEST + vore_pounce_chance = 50 + vore_pounce_cooldown = 10 + vore_pounce_successrate = 75 + vore_pounce_falloff = 0 + vore_pounce_maxhealth = 100 + vore_standing_too = TRUE + unacidable = TRUE + + loot_list = list(/obj/item/gun/energy/curse_tyrshotgun = 30, + /obj/item/gun/energy/energyballchain = 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/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, + /obj/item/reagent_containers/food/snacks/meat = 100, + /obj/item/melee/energy/tyr_sabre = 30 + ) + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chambera //poison boss + name = "experiment 20" + desc = "A strange furball fused with plant life." + icon_state = "poison_boss" + icon_living = "poison_boss" + wreckage = /obj/item/prop/tyrlore/basicflora + size_multiplier = 0.8 + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chambera/load_default_bellies() + . = ..() + var/obj/belly/B = vore_selected + B.name = "flora gut" + B.desc = "You have been devoured by the vulpakin like plant beast. A mix of flesh and flora surrond you, purple bubbling fluid soaking into your body. The beast effortlessly carrying your body, it's motions seemingly exaggerated, alien words spoken, the beast trying to taunt you." + B.digest_brute = 1 + B.digest_burn = 1 + B.digestchance = 0 + B.absorbchance = 0 + B.escapechance = 15 + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberc/bullet_act(obj/item/projectile/P) + if(istype(P,/obj/item/projectile/beam) || istype(P, /obj/item/projectile/energy)) + nutrition += 5 + if(size_multiplier > 1.95) + visible_message(span_boldwarning(span_orange("[P] heals the beast!."))) + adjustBruteLoss(-nutrition) + adjustFireLoss(-nutrition) + nutrition -= 5 + else + size_multiplier += 0.05 + ..() + else + ..() + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chambera/do_special_attack(atom/A) + var/rng_cycle = rand(1,6) + if(attackcycle == 1) + 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) + addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 3) + addtimer(CALLBACK(src, PROC_REF(cross_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 4) + addtimer(CALLBACK(src, PROC_REF(hole_in_wall), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 5) + addtimer(CALLBACK(src, PROC_REF(bomb_lines), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 6) + addtimer(CALLBACK(src, PROC_REF(bomb_chaos), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberb //knock back boss + name = "experiment 3" + desc = "A strange furball, the air vibrating around it." + specialattackprojectile = /obj/item/projectile/knockback/slow + icon_state = "sonic_boss" + icon_living = "sonic_boss" + projectiletype = /obj/item/projectile/knockback/slow + wreckage = /obj/item/prop/tyrlore/basicsonic + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberb/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/chamberb/do_special_attack(atom/A) + rng_cycle = rand(1,6) + if(attackcycle == 1) + addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 2) + addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 5), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 3) + addtimer(CALLBACK(src, PROC_REF(cross_spin), A, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 4) + addtimer(CALLBACK(src, PROC_REF(hole_in_wall), A, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 5) + addtimer(CALLBACK(src, PROC_REF(bomb_lines), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 6) + addtimer(CALLBACK(src, PROC_REF(bomb_chaos), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberc //wierd shields + name = "experiment 7" + desc = "A strange furball gaurded by a transparent barrier." + specialattackprojectile = /obj/item/projectile/energy/eclipse/tyrjavelin + health = 400 + maxHealth = 400 //shield mechanic + icon_state = "UPshield_boss" + icon_living = "UPshield_boss" + projectiletype = /obj/item/projectile/energy/eclipse/tyrjavelin + wreckage = /obj/item/prop/tyrlore/basicshield + var/fullshield = 300 + var/shieldrage = 3 + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberc/load_default_bellies() + . = ..() + var/obj/belly/B = vore_selected + B.name = "alien gut" + B.desc = "You are dunked into a multi-colored, or maybe multi-fluid, stew. Blues, purples, oranges, and greens, all swishing around you as the alien creature contunies it's mindless guarding.." + B.digest_brute = 0.5 + B.digest_burn = 1.5 + B.digestchance = 0 + B.absorbchance = 0 + B.escapechance = 15 + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberc/bullet_act(obj/item/projectile/P) + if(fullshield > 0) + fullshield -= P.damage + if(P == /obj/item/projectile/ion) + fullshield = 0 + visible_message(span_boldwarning(span_orange("[P] breaks the shield!!."))) + icon_state = "shield_boss" + if(fullshield > 0) + visible_message(span_boldwarning(span_orange("[P] is absorbed by the shield!."))) + else + visible_message(span_boldwarning(span_orange("[P] breaks the shield!!."))) + icon_state = "shield_boss" + else + ..() + shieldrage-- + if(shieldrage == 0) + shieldrage = 3 + fullshield = 300 + visible_message(span_boldwarning(span_orange("The shield reactivates!!."))) + icon_state = "UPshield_boss" + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberc/do_special_attack(atom/A) + rng_cycle = rand(1,5) + if(attackcycle == 1) + 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) + addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 3) + addtimer(CALLBACK(src, PROC_REF(hole_in_wall), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 4) + addtimer(CALLBACK(src, PROC_REF(rising_star), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 4) + attackcycle = 0 + addtimer(CALLBACK(src, PROC_REF(gattlingfire), A, rng_cycle, 8, 7), 0.5 SECONDS, TIMER_DELETE_ME) + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chambere + name = "defense automaton" + desc = "A large, very important looking ai. Plating appears similiar to albative plating." + icon = 'modular_chomp/icons/mob/hivebot.dmi' + icon_state = "cyan" + icon_living = "cyan" + size_multiplier = 3 + projectiletype = /obj/item/projectile/arc/blue_energy + wreckage = /obj/item/prop/tyrlore/ants + specialattackprojectile = /obj/item/projectile/energy/eclipse/tyrjavelin + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chambere/do_special_attack(atom/A) + rng_cycle = rand(1,6) + if(attackcycle == 1) + 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) + addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 3) + addtimer(CALLBACK(src, PROC_REF(hole_in_wall), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 4) + addtimer(CALLBACK(src, PROC_REF(rising_star), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 4) + attackcycle = 0 + addtimer(CALLBACK(src, PROC_REF(gattlingfire), A, rng_cycle, 8, 7), 0.5 SECONDS, TIMER_DELETE_ME) + else if(attackcycle == 5) + attackcycle = 0 + addtimer(CALLBACK(src, PROC_REF(cutoff), A, rng_cycle, 5, 15), 0.5 SECONDS, TIMER_DELETE_ME) + else if(attackcycle == 6) + attackcycle = 0 + addtimer(CALLBACK(src, PROC_REF(cutoff_ulti), A, rng_cycle, 5, 15), 0.5 SECONDS, TIMER_DELETE_ME) + + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberf + name = "engineering automaton" + desc = "A large important looking robot, crackling with lighting." + icon = 'modular_chomp/icons/mob/hivebot.dmi' + icon_state = "yellow" + icon_living = "yellow" + size_multiplier = 3 + wreckage = /obj/item/prop/tyrlore/basicpower + specialattackprojectile = /obj/item/projectile/energy/lightingspark/nanoweave + projectiletype = /obj/item/projectile/energy/lightingspark/nanoweave + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberf/do_special_attack(atom/A) + rng_cycle = rand(1,6) + if(attackcycle == 1) + 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) + addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 3) + addtimer(CALLBACK(src, PROC_REF(hole_in_wall), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 4) + addtimer(CALLBACK(src, PROC_REF(rising_star), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 4) + attackcycle = 0 + addtimer(CALLBACK(src, PROC_REF(gattlingfire), A, rng_cycle, 8, 7), 0.5 SECONDS, TIMER_DELETE_ME) + else if(attackcycle == 5) + attackcycle = 0 + addtimer(CALLBACK(src, PROC_REF(cutoff), A, rng_cycle, 5, 15), 0.5 SECONDS, TIMER_DELETE_ME) + else if(attackcycle == 6) + attackcycle = 0 + addtimer(CALLBACK(src, PROC_REF(cutoff_ulti), A, rng_cycle, 5, 15), 0.5 SECONDS, TIMER_DELETE_ME) + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberg //wierd shields + name = "expirement 28" + desc = "A strange furball gaurded by a transparent barrier." + specialattackprojectile = /obj/item/projectile/energy/eclipse/tyrjavelin + resistance = 10 + icon_state = "UPshield_boss" + icon_living = "UPshield_boss" + color = "#FF0000" + wreckage = /obj/item/prop/tyrlore/advanceshield + projectiletype = /obj/item/projectile/energy/eclipse/tyrjavelin + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberg/do_special_attack(atom/A) + rng_cycle = rand(1,6) + if(attackcycle == 1) + 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) + addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 3) + addtimer(CALLBACK(src, PROC_REF(hole_in_wall), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 4) + addtimer(CALLBACK(src, PROC_REF(rising_star), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 4) + attackcycle = 0 + addtimer(CALLBACK(src, PROC_REF(gattlingfire), A, rng_cycle, 8, 7), 0.5 SECONDS, TIMER_DELETE_ME) + else if(attackcycle == 5) + attackcycle = 0 + addtimer(CALLBACK(src, PROC_REF(cutoff), A, rng_cycle, 5, 15), 0.5 SECONDS, TIMER_DELETE_ME) + else if(attackcycle == 6) + attackcycle = 0 + addtimer(CALLBACK(src, PROC_REF(cutoff_ulti), A, rng_cycle, 5, 15), 0.5 SECONDS, TIMER_DELETE_ME) + else if(attackcycle == 7) + addtimer(CALLBACK(src, PROC_REF(bomb_chaos), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 8) + addtimer(CALLBACK(src, PROC_REF(bomb_lines), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberg/bullet_act(obj/item/projectile/P) + if((P == /obj/item/projectile/ion) && (resistance > 0)) + resistance = 0 + say("Shields destroyed, rerouting power") + specialattackprojectile = /obj/item/projectile/energy/eclipse/tyrjavelin/speed + projectiletype = /obj/item/projectile/energy/eclipse/tyrjavelin/speed + icon_state = "shield_boss" + icon_living = "shield_boss" + ..() + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/massswarm + name = "swarm controler" + desc = "A massive hivebot that has shifting bits of metal upon it's body." + health = 600 + maxHealth = 600 + icon_state = "bright_green" + icon_living = "bright_green" + icon = 'modular_chomp/icons/mob/hivebot.dmi' + size_multiplier = 3 + wreckage = /obj/item/prop/tyrlore/drones + special_attack_min_range = 1 + special_attack_max_range = 7 + special_attack_cooldown = 5 SECONDS + melee_damage_lower = 25 + melee_damage_upper = 25 + attack_armor_pen = 50 + grab_resist = 100 + movement_cooldown = 3 + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/massswarm/bullet_act(obj/item/projectile/P) + for(var/i =1 to 3) + new /mob/living/simple_mob/mechanical/hivebot/nanoevent/bright_green/tyr(src.loc) + ..() + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/massswarm/attackby(var/obj/item/O as obj, var/mob/user as mob) + for(var/i =1 to 3) + new /mob/living/simple_mob/mechanical/hivebot/nanoevent/bright_green/tyr(src.loc) + ..() + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/massswarm/do_special_attack(atom/A) + for(var/i =1 to 3) + new /mob/living/simple_mob/mechanical/hivebot/nanoevent/bright_green/tyr(src.loc) + +/* +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/finale //finale + name = "guardian program" + health = 1200 + maxHealth = 1200 + specialattackprojectile = /obj/item/projectile/bullet/astral_blade + icon_state = "guardian" + icon_living = "guardian" + wreckage = /obj/item/prop/tyrlore/drones + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/finale/bullet_act(obj/item/projectile/P) + if(P == /obj/item/projectile/bullet/astral_blade) //no friendly fire + return + else + ..() + + +/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/finale/do_special_attack(atom/A) + rng_cycle = rand(1,4) + if(attackcycle == 1) + addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 2) + addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 5), 0.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 3) + addtimer(CALLBACK(src, PROC_REF(bomb_chaos), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 + else if(attackcycle == 4) + addtimer(CALLBACK(src, PROC_REF(bomb_lines), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME) + attackcycle = 0 +*/ +>>>>>>> 860b850999 (More Printable Tyr Items (#11779)) diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/orginalAlts.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/orginalAlts.dm index c6145fa073c..05b58479bc9 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/orginalAlts.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/orginalAlts.dm @@ -40,7 +40,31 @@ wreckage = /obj/item/prop/tyrlore/reddisc ai_holder_type = /datum/ai_holder/simple_mob/intentional/three_phases/nomove anchored = 1 +<<<<<<< HEAD armor = list(melee = 40, bullet = 40, laser = 80, energy = 80, bomb = 50, bio = 100, rad = 100) +======= + 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, + ) + +>>>>>>> 860b850999 (More Printable Tyr Items (#11779)) /datum/ai_holder/simple_mob/intentional/three_phases/nomove/walk_to_destination() return diff --git a/modular_chomp/code/modules/research/tg/designs/tyrstuff.dm b/modular_chomp/code/modules/research/tg/designs/tyrstuff.dm new file mode 100644 index 00000000000..94b7adc2029 --- /dev/null +++ b/modular_chomp/code/modules/research/tg/designs/tyrstuff.dm @@ -0,0 +1,66 @@ +/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" + 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 + category = list( + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_RANGED + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + + +/datum/design_techweb/magnet_belt + name = "Magnet Belt" + id = "magnet_belt" + build_type = PROTOLATHE + materials = list(MAT_BRONZE = 12000,MAT_DIAMOND = 700,MAT_COPPER = 3000,MAT_METALHYDROGEN = 1000,MAT_QUARTZ = 5000,MAT_WEATHERED_AGATE = 8000) + build_path = /obj/item/personal_shield_generator/belt/magnetbelt + category = list( + RND_CATEGORY_EQUIPMENT + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design_techweb/tyr_sabre + name = "Tyrian Energy Blade" + id = "tyr_sabre" + build_type = PROTOLATHE + materials = list(MAT_BRONZE = 10000,MAT_DIAMOND = 6000,MAT_COPPER = 8000,MAT_METALHYDROGEN = 2000,MAT_QUARTZ = 2000,MAT_WEATHERED_AGATE = 6000) + build_path = /obj/item/melee/energy/tyr_sabre + category = list( + RND_CATEGORY_EQUIPMENT + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design_techweb/tyr_barrierbelt + name = "Tyrian Barrier Bubble" + id = "tyr_barrier" + build_type = PROTOLATHE + materials = list(MAT_BRONZE = 20000,MAT_DIAMOND = 15000,MAT_COPPER = 15000,MAT_METALHYDROGEN = 20000,MAT_QUARTZ = 50000,MAT_WEATHERED_AGATE = 60000) + build_path = /obj/item/shield_projector/rectangle/automatic/tyrbarrier + category = list( + RND_CATEGORY_EQUIPMENT + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE diff --git a/modular_chomp/code/modules/research/tg/techweb/nodes/exploration.dm b/modular_chomp/code/modules/research/tg/techweb/nodes/exploration.dm new file mode 100644 index 00000000000..5829cc27785 --- /dev/null +++ b/modular_chomp/code/modules/research/tg/techweb/nodes/exploration.dm @@ -0,0 +1,16 @@ +/datum/techweb_node/tyr_loot + id = TECHWEB_NODE_TYRGOODS + display_name = "Tyrian Tech" + description = "By utilizing advanced scanning technolgy, reverse enginer tyrian tech.." + prereq_ids = list(TECHWEB_NODE_MOD_ANOMALY_SUIT) + design_ids = list( + "tyr_rifle", + "tyr_shotgun", + "tyr_meleegun", + "magnet_belt", + "tyr_sabre", + "tyr_barrier", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + required_experiments = list(/datum/experiment/scanning/points/tyr_precursor_study) + announce_channels = list(CHANNEL_SECURITY, CHANNEL_SCIENCE) diff --git a/modular_chomp/icons/obj/guns/precursor/lefthand.dmi b/modular_chomp/icons/obj/guns/precursor/lefthand.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b4b632a5302597ff8eee8e4b435ee4f3b6e56bfa GIT binary patch literal 2161 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 N7bkbemY@AE{RJYJGP?i( literal 0 HcmV?d00001 diff --git a/modular_chomp/icons/obj/guns/precursor/righthand.dmi b/modular_chomp/icons/obj/guns/precursor/righthand.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6371dfe8c45383aa3b8bd89ef4c1841c68f4b338 GIT binary patch literal 2179 zcmaKtdpy(oAICo%W^y_1$1RLbZYi~7C@Wb_NphW#OSzR?h81$lgqE!Or5u+jQ+Bi@ zN-2%QkCZk`Mh55=lk={a&kN~aG_02CAygh4<{ON+q}PXt&t8_t9ighJ2;g2W$*2Y@ut0HAew zpe+&Hmyt;j`t5GwVPP3~k{!7_|c8 zmF#C2v@`lW`jBqH(DkP4uDULaO{`*!KHA&>mqkJUR#m1(zeYhb4YymUH0^4-yTiuF zVEb<>FXD^MjTn|$H+ApH?K-3T`!GcjJ%4@fZKY;FY5;PFof@Iwwkx?&_EN|nv(I~| zhdmp*ITBhi;8e8_n9b6y006zF?{_(M!)#z6mztcr;FF6bF-VUG!X9O=fA@ z_mYlFjflI3lYC_A-xKR%wG=9kN$*5LHl`OGT592tif z>Ig7?zLvz*v6??ik;ww-j-kC{Zo1Y2KPR&Cx2X!#NCLU5B$VG!jAR@gO)e^{mFSo6 zELo~RL?$J1517NNdstClJ62h;14Bb|bB{G(e|>L2w1;U3H=hqsa=ujq^FDFHO&@tX zC8#`*?=?`GO|1<>M8?Ld?0_+=(8I~354LN^7!)?}5qn)eiyPHh@fxTX@Mrv|Jr+Aw z=f8+Q-#W_tqj?v!Z8-*QsRKUAR6{&=zl5NAb z>x5WXz5nYaskZQ4!Y?8F@Cwct=F8Tr;s^1GAJ=NsCt@lr{1*^=31ns6gW+E?FX_-f zv*Pkocf;x$OqEqp3vo3Dl21@{?QWUL<+ObY&Sf?2yp*S0$uvE>O~=Ygh;WvFp*lG- zJQA~0P@*uIb7-UBMq#>S${~tO%gJGEo}a%$=MHEg_j4ha#iA7p%DM)-I4RAozG6f3 z^Bsag(LW}5DGV-cP>`vd>MQN^7LoIn@82SffYmmZr7hWhkqX~5UQjCVyzfM&^5|lqKT-?Fea*gR!USjqP zX>p_;ig?CnC2^7F{Z%H?2poRTupHmAz_Ci#BX=1v8*7%N!;c<%`Ll8 z^uPo9!&q@F0dgv=(yXt~h7fOur(D^rG>k=TV?v`t+>Vj)h;ZHna0m|o&RHEyfD#m^RD+XMoS2h^I?Na;D5Ctc)d&vRHPe?q=rxm%EVU10r=Ys2@q|)I2o0J(3l}9fh+Ve4{ z)X>BATgTTERZsqO^{mWT^E&AS`v)8mFh9AO7!h%k5)Rj;+f04({M~V4GqAnf-lr}} z(nO*pUKfsjwY#WC|KHt$M4iT$H=KQfnajl3@+9!9u>Mtv;tX-c&S8TYWZ%v@Y1E$h z$s%2~uE8QB9{+K2|E=JWXW!fJ(2V=>D=TSyzV9L}wf5f3)m6F5m6f_+a78B)$>z*h zibe8^_P;nwj7C42B~#-k&Bg5aff*!L#N#UIM?W&DwXVZn(WW2FQQaH2VSYq}J0uCX zQ83w5D(~g)3WhqN;>=KmH7VCVU@=J`Gw3Z));1Hw)H^|_L e^!3UG6?(bMZig=>#)?qk2KG2dyN9-Z7yky<8vi%| literal 0 HcmV?d00001