mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-24 21:57:53 +01:00
Base Neon Moving (#11429)
This commit is contained in:
+41
@@ -953,5 +953,46 @@
|
||||
new artidrop(dropspot)
|
||||
attackcycle = next_cycle
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/rising_star(atom/target, var/next_cycle, var/fire_delay)
|
||||
bullet_heck(target, 7, 0)
|
||||
bullet_heck(target, -7, 0)
|
||||
bullet_heck(target, 0, 7)
|
||||
bullet_heck(target, 0, -7)
|
||||
bullet_heck(target, 7, 7)
|
||||
bullet_heck(target, 7, -7)
|
||||
bullet_heck(target, -7, 7)
|
||||
bullet_heck(target, -7, -7)
|
||||
addtimer(CALLBACK(src, PROC_REF(rising_starA), target, next_cycle, fire_delay), fire_delay, TIMER_DELETE_ME)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/rising_starA(atom/target, var/next_cycle, var/fire_delay)
|
||||
bullet_heck(target, 7, -4)
|
||||
bullet_heck(target, -7, 4)
|
||||
bullet_heck(target, 4, 7)
|
||||
bullet_heck(target, -4, -7)
|
||||
bullet_heck(target, 7, -4)
|
||||
bullet_heck(target, -7, 4)
|
||||
bullet_heck(target, 4, 7)
|
||||
bullet_heck(target, -4, -7)
|
||||
addtimer(CALLBACK(src, PROC_REF(rising_starB), target, next_cycle, fire_delay), fire_delay, TIMER_DELETE_ME)
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/rising_starB(atom/target, var/next_cycle, var/fire_delay)
|
||||
bullet_heck(target, 7, -1)
|
||||
bullet_heck(target, -7, 1)
|
||||
bullet_heck(target, 1, 7)
|
||||
bullet_heck(target, -1, -7)
|
||||
bullet_heck(target, 5, 7)
|
||||
bullet_heck(target, 7, -5)
|
||||
bullet_heck(target, -5, 7)
|
||||
bullet_heck(target, -7, -5)
|
||||
attackcycle = next_cycle
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/gattlingfire(atom/target, var/next_cycle, var/amount, var/fire_delay)
|
||||
if(!target)
|
||||
return
|
||||
var/obj/item/projectile/P = new specialattackprojectile(get_turf(src))
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
amount--
|
||||
if(amount > 0)
|
||||
addtimer(CALLBACK(src, PROC_REF(gattlingfire), target, next_cycle, fire_delay, amount), fire_delay, TIMER_DELETE_ME)
|
||||
else
|
||||
attackcycle = next_cycle
|
||||
|
||||
+1
-32
@@ -391,40 +391,9 @@
|
||||
/obj/item/xenobio/monkey_gun = 15
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/solar/medicalsquish/bullet_act(var/obj/item/projectile/P, var/def_zone)
|
||||
if(reflectmode == 1)
|
||||
if(istype(P,/obj/item/projectile/beam) || istype(P, /obj/item/projectile/energy))
|
||||
visible_message(span_danger("\The [src] reflects \the [P]!"))
|
||||
|
||||
// Find a turf near or on the original location to bounce to
|
||||
var/new_x = P.starting.x + pick(0, 0, 0, -1, 1, -2, 2)
|
||||
var/new_y = P.starting.y + pick(0, 0, 0, -1, 1, -2, 2)
|
||||
var/turf/curloc = get_turf(src)
|
||||
|
||||
// redirect the projectile
|
||||
P.redirect(new_x, new_y, curloc, src)
|
||||
P.reflected = TRUE
|
||||
return PROJECTILE_CONTINUE // complete projectile permutation
|
||||
else
|
||||
..()
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/solar/medicalsquish/do_special_attack(atom/A)
|
||||
. = TRUE // So we don't fire a bolt as well.
|
||||
switch(a_intent)
|
||||
if(I_DISARM)
|
||||
visible_message(span_warning("\The [src] turns silver!!"))
|
||||
icon_state = "silver"
|
||||
icon_living = "silver"
|
||||
reflectmode = 1
|
||||
addtimer(CALLBACK(src, PROC_REF(change_back), A), 5 SECONDS, TIMER_DELETE_ME)
|
||||
else
|
||||
visible_message(span_warning("\The [src] regenerates!!")) //completly lying the mob does nothing in single player mode
|
||||
visible_message(span_warning("\The [src] regenerates!!")) //completly lying the mob does nothing in single player mode
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/solar/medicalsquish/proc/change_back()
|
||||
icon_state = "guardian"
|
||||
icon_living = "guardian"
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/solar/medicalsquish/handle_special()
|
||||
if(stat != DEAD)
|
||||
|
||||
@@ -566,3 +566,199 @@
|
||||
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
|
||||
movement_cooldown = 40
|
||||
swallowTime = 0.5 SECONDS
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
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/projectile/energy/wp_shotgun = 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/tyrvault = 0.01,
|
||||
/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/tankyboss/load_default_bellies()
|
||||
. = ..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.name = "stomach"
|
||||
B.mode_flags = DM_FLAG_THICKBELLY | DM_FLAG_NUMBING
|
||||
B.digest_brute = 1
|
||||
B.digest_burn = 1
|
||||
B.digestchance = 0
|
||||
B.absorbchance = 0
|
||||
B.escapechance = 25
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chambera //poison boss
|
||||
name = "expirement 20"
|
||||
specialattackprojectile = /obj/item/projectile/energy/eclipse/poisonwind
|
||||
icon_state = "poison_boss"
|
||||
icon_living = "poison_boss"
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chambera/apply_melee_effects(var/atom/A)
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
L.add_modifier(/datum/modifier/poisoned, 120 SECONDS)
|
||||
|
||||
/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 = "expirement 3"
|
||||
specialattackprojectile = /obj/item/projectile/knockback/slow
|
||||
icon_state = "sonic_boss"
|
||||
icon_living = "sonic_boss"
|
||||
projectiletype = /obj/item/projectile/knockback/slow
|
||||
|
||||
/obj/item/projectile/knockback/slow
|
||||
speed = 10
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberb/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, 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 = "expirement 7"
|
||||
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
|
||||
var/fullshield = 300
|
||||
var/shieldrage = 3
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberc/bullet_act(obj/item/projectile/P) //Projectiles will be absorbed by the shield. Note to self do funky sprite. 4 hits to remove
|
||||
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)
|
||||
var/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/chamberd //the wall
|
||||
name = "expirement 12"
|
||||
health = 600 //summoner boss so reduced health
|
||||
maxHealth = 600 //summoner boss so reduced health
|
||||
specialattackprojectile = /obj/item/projectile/arc/explosive_rocket/big
|
||||
artidrop = /mob/living/simple_mob/mechanical/hivebot/tyr
|
||||
icon_state = "spawn_boss"
|
||||
icon_living = "spawn_boss"
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberd/do_special_attack(atom/A)
|
||||
var/rng_cycle = rand(1,5)
|
||||
if(attackcycle == 1)
|
||||
specialattackprojectile = /obj/item/projectile/arc/explosive_rocket/big
|
||||
addtimer(CALLBACK(src, PROC_REF(singleproj), A, rng_cycle), 1 SECOND, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
else if(attackcycle == 2)
|
||||
specialattackprojectile = /obj/item/projectile/arc/explosive_rocket/big
|
||||
addtimer(CALLBACK(src, PROC_REF(cross_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
else if(attackcycle == 3)
|
||||
artidrop = /mob/living/simple_mob/mechanical/hivebot/tyr
|
||||
addtimer(CALLBACK(src, PROC_REF(bomb_chaos), A, rng_cycle), 1.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
else if(attackcycle == 4)
|
||||
artidrop = /obj/item/material/barbedwire/plastic/active
|
||||
addtimer(CALLBACK(src, PROC_REF(bomb_chaos), A, rng_cycle), 1.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
else if(attackcycle == 5)
|
||||
specialattackprojectile = /obj/item/projectile/energy/eclipse/tyrjavelin
|
||||
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 25), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
|
||||
+7
-9
@@ -28,13 +28,14 @@
|
||||
movement_cooldown = -3
|
||||
icon_state = "janitor"
|
||||
icon_living = "janitor"
|
||||
faction = FACTION_TYR
|
||||
|
||||
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/tyr
|
||||
name = "ai control center"
|
||||
desc = "A large, very important looking ai. Plating appears similiar to albative plating."
|
||||
icon_state = "powertower"
|
||||
icon_living = "powertower"
|
||||
faction = FACTION_HIVEBOT
|
||||
faction = FACTION_TYR
|
||||
movement_cooldown = 10
|
||||
size_multiplier = 2
|
||||
maxHealth = 500
|
||||
@@ -50,18 +51,15 @@
|
||||
/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(summon_janitor), A, 5, 2), 0.5 SECONDS, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
else if(attackcycle == 2)
|
||||
say("Prepare. Area. Cleanse. Radiation.")
|
||||
specialattackprojectile = /obj/item/projectile/beam/gamma
|
||||
addtimer(CALLBACK(src, PROC_REF(giant_burst), A, 3), 6 SECONDS, TIMER_DELETE_ME)
|
||||
addtimer(CALLBACK(src, PROC_REF(giant_burst), A, 2), 6 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/spikeenergy_ball/boss
|
||||
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, 4, 20), 1 SECOND, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
else if(attackcycle == 4)
|
||||
specialattackprojectile = /obj/item/projectile/energy/spikeenergy_ball/boss
|
||||
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 12, 1, 0.5 SECONDS), 1 SECOND, TIMER_DELETE_ME)
|
||||
attackcycle = 0
|
||||
|
||||
@@ -297,3 +297,26 @@
|
||||
speed = 10
|
||||
excavation_amount = 100
|
||||
|
||||
//technically not eclipse but honary
|
||||
|
||||
/obj/item/projectile/energy/eclipse/poisonwind
|
||||
name = "anomalous winds"
|
||||
icon_state = "ice_wind"
|
||||
damage = 10
|
||||
armor_penetration = 70
|
||||
speed = 10
|
||||
color = "#003300"
|
||||
modifier_type_to_apply = /datum/modifier/poisoned //main threat right here, Will two tap most players if untreated
|
||||
modifier_duration = 1 MINUTE
|
||||
|
||||
/obj/item/projectile/energy/eclipse/tyrjavelin //Four hits ought to end you
|
||||
name = "energy javelin"
|
||||
icon_state = "javelin"
|
||||
damage_type = SEARING
|
||||
check_armour = "bullet"
|
||||
damage = 20
|
||||
armor_penetration = 60
|
||||
speed = 10
|
||||
color = "#FF6600"
|
||||
modifier_type_to_apply = /datum/modifier/deep_wounds //reduced healing
|
||||
modifier_duration = 1 MINUTE
|
||||
|
||||
Reference in New Issue
Block a user