mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 03:57:13 +01:00
Ports TG Hierophant trophy, and TG colossus changes. (#18666)
* Ports TG Hierophant trophy, colossus changes. * Runechat / unneeded check * makes colossus not control the time stream. Co-authored-by: Charlie <69320440+hal9000PR@users.noreply.github.com> * lewc's changes * fuck Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Co-authored-by: Charlie <69320440+hal9000PR@users.noreply.github.com> Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
This commit is contained in:
co-authored by
Charlie
AffectedArc07
parent
0266a0bd85
commit
a08468ac21
@@ -442,17 +442,12 @@
|
||||
denied_type = /obj/item/crusher_trophy/vortex_talisman
|
||||
|
||||
/obj/item/crusher_trophy/vortex_talisman/effect_desc()
|
||||
return "mark detonation to create a barrier you can pass"
|
||||
return "mark detonation to create a homing hierophant chaser"
|
||||
|
||||
/obj/item/crusher_trophy/vortex_talisman/on_mark_detonation(mob/living/target, mob/living/user)
|
||||
var/turf/T = get_turf(user)
|
||||
new /obj/effect/temp_visual/hierophant/wall/crusher(T, user) //a wall only you can pass!
|
||||
var/turf/otherT = get_step(T, turn(user.dir, 90))
|
||||
if(otherT)
|
||||
new /obj/effect/temp_visual/hierophant/wall/crusher(otherT, user)
|
||||
otherT = get_step(T, turn(user.dir, -90))
|
||||
if(otherT)
|
||||
new /obj/effect/temp_visual/hierophant/wall/crusher(otherT, user)
|
||||
var/obj/effect/temp_visual/hierophant/chaser/chaser = new(get_turf(user), user, target, 3, TRUE)
|
||||
chaser.monster_damage_boost = FALSE // Weaker due to no cooldown
|
||||
chaser.damage = 20 //But also stronger due to AI / mining mob resistance
|
||||
|
||||
/obj/effect/temp_visual/hierophant/wall/crusher
|
||||
duration = 75
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
#define RANDOM_SHOTS "Wrath"
|
||||
#define BLAST "Retribution"
|
||||
#define DIR_SHOTS "Lament"
|
||||
|
||||
/*
|
||||
|
||||
COLOSSUS
|
||||
@@ -42,6 +46,7 @@ Difficulty: Very Hard
|
||||
ranged = TRUE
|
||||
pixel_x = -32
|
||||
del_on_death = TRUE
|
||||
universal_speak = TRUE
|
||||
internal_type = /obj/item/gps/internal/colossus
|
||||
medal_type = BOSS_MEDAL_COLOSSUS
|
||||
score_type = COLOSSUS_SCORE
|
||||
@@ -53,6 +58,8 @@ Difficulty: Very Hard
|
||||
/datum/action/innate/megafauna_attack/aoe_attack,
|
||||
/datum/action/innate/megafauna_attack/shotgun,
|
||||
/datum/action/innate/megafauna_attack/alternating_cardinals)
|
||||
/// Have we used our final attack yet?
|
||||
var/final_available = TRUE
|
||||
|
||||
/datum/action/innate/megafauna_attack/spiral_attack
|
||||
name = "Spiral Shots"
|
||||
@@ -82,6 +89,10 @@ Difficulty: Very Hard
|
||||
chosen_message = "<span class='colossus'>You are now firing in alternating cardinal directions.</span>"
|
||||
chosen_attack_num = 4
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null, filterproof = null)
|
||||
. = ..(("<span class='colossus'><b>[uppertext(message)]</b></span>"), sanitize = FALSE, ignore_speech_problems = TRUE, ignore_atmospherics = TRUE)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/OpenFire()
|
||||
anger_modifier = clamp(((maxHealth - health)/50),0,20)
|
||||
ranged_cooldown = world.time + 120
|
||||
@@ -100,7 +111,7 @@ Difficulty: Very Hard
|
||||
|
||||
if(enrage(target))
|
||||
if(move_to_delay == initial(move_to_delay))
|
||||
visible_message("<span class='colossus'>\"<b>You can't dodge.</b>\"</span>")
|
||||
say("You can't dodge")
|
||||
ranged_cooldown = world.time + 30
|
||||
telegraph()
|
||||
dir_shots(GLOB.alldirs)
|
||||
@@ -109,7 +120,10 @@ Difficulty: Very Hard
|
||||
else
|
||||
move_to_delay = initial(move_to_delay)
|
||||
|
||||
if(prob(20+anger_modifier)) //Major attack
|
||||
if(health <= maxHealth / 10 && final_available) //One time use final attack
|
||||
final_available = FALSE
|
||||
final_attack()
|
||||
else if(prob(20 + anger_modifier)) //Major attack
|
||||
select_spiral_attack()
|
||||
else if(prob(20))
|
||||
random_shots()
|
||||
@@ -127,6 +141,8 @@ Difficulty: Very Hard
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/proc/alternating_dir_shots()
|
||||
ranged_cooldown = world.time + 40
|
||||
telegraph(DIR_SHOTS)
|
||||
SLEEP_CHECK_DEATH(1.5 SECONDS)
|
||||
dir_shots(GLOB.diagonals)
|
||||
SLEEP_CHECK_DEATH(10)
|
||||
dir_shots(GLOB.cardinal)
|
||||
@@ -136,20 +152,22 @@ Difficulty: Very Hard
|
||||
dir_shots(GLOB.cardinal)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/proc/select_spiral_attack()
|
||||
telegraph()
|
||||
if(health < maxHealth/3)
|
||||
return double_spiral()
|
||||
visible_message("<span class='colossus'>\"<b>Judgement.</b>\"</span>")
|
||||
say("Judgement.")
|
||||
telegraph()
|
||||
SLEEP_CHECK_DEATH(1.5 SECONDS)
|
||||
return spiral_shoot()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/proc/double_spiral()
|
||||
visible_message("<span class='colossus'>\"<b>Die.</b>\"</span>")
|
||||
|
||||
SLEEP_CHECK_DEATH(10)
|
||||
say("Die.")
|
||||
telegraph()
|
||||
SLEEP_CHECK_DEATH(2.5 SECONDS)
|
||||
INVOKE_ASYNC(src, .proc/spiral_shoot, FALSE)
|
||||
INVOKE_ASYNC(src, .proc/spiral_shoot, TRUE)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/proc/spiral_shoot(negative = pick(TRUE, FALSE), counter_start = 8)
|
||||
icon_state = "eva_attack"
|
||||
var/turf/start_turf = get_step(src, pick(GLOB.alldirs))
|
||||
var/counter = counter_start
|
||||
for(var/i in 1 to 80)
|
||||
@@ -164,6 +182,7 @@ Difficulty: Very Hard
|
||||
shoot_projectile(start_turf, counter * 22.5)
|
||||
playsound(get_turf(src), 'sound/magic/clockwork/invoke_general.ogg', 20, TRUE)
|
||||
SLEEP_CHECK_DEATH(1)
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/proc/shoot_projectile(turf/marker, set_angle)
|
||||
if(!isnum(set_angle) && (!marker || marker == loc))
|
||||
@@ -177,16 +196,22 @@ Difficulty: Very Hard
|
||||
P.original = target
|
||||
P.fire(set_angle)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/proc/random_shots()
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/proc/random_shots(do_sleep = TRUE)
|
||||
ranged_cooldown = world.time + 30
|
||||
if(do_sleep)
|
||||
telegraph(RANDOM_SHOTS)
|
||||
SLEEP_CHECK_DEATH(1.5 SECONDS)
|
||||
var/turf/U = get_turf(src)
|
||||
playsound(U, 'sound/magic/clockwork/invoke_general.ogg', 300, TRUE, 5)
|
||||
for(var/T in RANGE_TURFS(12, U) - U)
|
||||
if(prob(5))
|
||||
shoot_projectile(T)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/proc/blast(set_angle)
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/proc/blast(set_angle, do_sleep = TRUE)
|
||||
ranged_cooldown = world.time + 20
|
||||
if(do_sleep)
|
||||
telegraph(BLAST)
|
||||
SLEEP_CHECK_DEATH(1.5 SECONDS)
|
||||
var/turf/target_turf = get_turf(target)
|
||||
playsound(src, 'sound/magic/clockwork/invoke_general.ogg', 200, TRUE, 2)
|
||||
newtonian_move(get_dir(target_turf, src))
|
||||
@@ -205,12 +230,49 @@ Difficulty: Very Hard
|
||||
var/turf/E = get_step(src, d)
|
||||
shoot_projectile(E)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/proc/telegraph()
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/proc/telegraph(mode)
|
||||
for(var/mob/M in range(10, src))
|
||||
M.flash_screen_color("#C80000", 1)
|
||||
shake_camera(M, 4, 3)
|
||||
playsound(src, 'sound/magic/narsie_attack.ogg', 200, TRUE)
|
||||
if(mode)
|
||||
say("[mode]")
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/proc/final_attack()
|
||||
icon_state = "eva_attack"
|
||||
say("PERISH MORTAL!")
|
||||
telegraph()
|
||||
ranged_cooldown = world.time + 20 SECONDS // Yeah let us NOT have people get triple attacked
|
||||
SLEEP_CHECK_DEATH(2.5 SECONDS) //run
|
||||
|
||||
var/finale_counter = 10
|
||||
for(var/i in 1 to 20)
|
||||
if(finale_counter > 4)
|
||||
telegraph()
|
||||
blast(do_sleep = FALSE)
|
||||
|
||||
if(finale_counter > 1)
|
||||
finale_counter--
|
||||
|
||||
var/turf/start_turf = get_turf(src)
|
||||
for(var/turf/target_turf in RANGE_TURFS(12, start_turf))
|
||||
if(prob(min(finale_counter, 2)) && target_turf != get_turf(src))
|
||||
shoot_projectile(target_turf)
|
||||
|
||||
SLEEP_CHECK_DEATH(finale_counter + 0.2 SECONDS) //Doubled from TG, this was insane
|
||||
|
||||
for(var/i in 1 to 3)
|
||||
telegraph()
|
||||
random_shots(do_sleep = FALSE)
|
||||
finale_counter += 6
|
||||
SLEEP_CHECK_DEATH(finale_counter)
|
||||
|
||||
for(var/i in 1 to 3)
|
||||
telegraph()
|
||||
dir_shots()
|
||||
SLEEP_CHECK_DEATH(1 SECONDS)
|
||||
icon_state = initial(icon_state)
|
||||
ranged_cooldown = world.time + 4 SECONDS
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/devour(mob/living/L)
|
||||
visible_message("<span class='colossus'>[src] disintegrates [L]!</span>")
|
||||
@@ -273,3 +335,7 @@ Difficulty: Very Hard
|
||||
gpstag = "Angelic Signal"
|
||||
desc = "Get in the fucking robot."
|
||||
invisibility = 100
|
||||
|
||||
#undef RANDOM_SHOTS
|
||||
#undef BLAST
|
||||
#undef DIR_SHOTS
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 217 KiB After Width: | Height: | Size: 233 KiB |
Reference in New Issue
Block a user