fixes broken marked one spin attack and proc and removes crusher from arena (#17060)

* sleep check death

* They called me a madman

* Bob Joga never changes

* Why did Bob space code like this

* Two Popeyes biscuits no drink

* golden code review

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>

* code doc gaming

* woo

* proc doc

* berk

Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
This commit is contained in:
dawsonkeyes
2022-10-29 15:31:04 +01:00
committed by GitHub
co-authored by GoldenAlpharex
parent a61b486f38
commit fcfbe52d77
2 changed files with 67 additions and 28 deletions
@@ -85,7 +85,6 @@
"cN" = (
/obj/structure/stone_tile/slab,
/obj/effect/gibspawner/human,
/obj/item/kinetic_crusher,
/turf/open/lava/smooth/lava_land_surface{
slowdown = 0
},
@@ -84,7 +84,7 @@
break
/mob/living/simple_animal/hostile/megafauna/gladiator/Found(atom/A)
//We only attac when pissed off
//We only attack when pissed off
if(!anger_timer_id)
return FALSE
return ..()
@@ -94,7 +94,8 @@
return list()
return ..()
/mob/living/simple_animal/hostile/megafauna/gladiator/examine() //is it really any secret what this does
/// Adds the text descriptor of what phase the Marked One is in, or tells you he's a corpse if he's dead as fuck
/mob/living/simple_animal/hostile/megafauna/gladiator/examine()
if(stat >= DEAD)
. = ..()
. += span_boldwarning("Unearthly energies bind the body to it's place of defeat. You cannot move it.")
@@ -102,7 +103,8 @@
. = ..()
. += span_boldwarning("They are currently in Phase [phase].")
/mob/living/simple_animal/hostile/megafauna/gladiator/adjustHealth(amount, updating_health, forced) //gets him mad at you if you're a species he's not racist towards, only once he takes damage
/// Gets him mad at you if you're a species he's not racist towards, and provides the 25% chance to block attacks in the first phase
/mob/living/simple_animal/hostile/megafauna/gladiator/adjustHealth(amount, updating_health, forced)
get_angry()
if(spinning)
visible_message(span_danger("[src] brushes off all incoming attacks with his spinning blade!"))
@@ -126,7 +128,8 @@
if(. && prob(5 * phase))
INVOKE_ASYNC(src, .proc/teleport, target)
/mob/living/simple_animal/hostile/megafauna/gladiator/Move(atom/newloc, dir, step_x, step_y) //chasms are for sissies
/// As the marked one is only theoretically capable of ignoring gravity, this makes him not walk on chasms, and prevents him from moving if spinning or stunned. It also figures out if he hits a wall while charging!
/mob/living/simple_animal/hostile/megafauna/gladiator/Move(atom/newloc, dir, step_x, step_y)
if(spinning || stunned)
return FALSE
if(ischasm(newloc))
@@ -174,7 +177,8 @@
if(chargetiles >= chargerange)
INVOKE_ASYNC(src, .proc/discharge)
/mob/living/simple_animal/hostile/megafauna/gladiator/Bump(atom/A) //used for charge-induced ass-tappage
/// Fucks up the day of whoever he walks into, so long as he's charging and the mob is alive. If he walks into a wall, he gets stunned instead!
/mob/living/simple_animal/hostile/megafauna/gladiator/Bump(atom/A)
. = ..()
if(!charging)
return
@@ -186,21 +190,24 @@
discharge()
else if(istype(A, /turf/closed))
visible_message(span_danger("[src] crashes headfirst into [A]!"))
discharge(1.33)
discharge(1.5)
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/get_angry() //GET MAD! I DON'T WANT YOUR DAMN LEMONS WHAT THE HELL AM I SUPPOSED TO DO WITH THESE
/// Makes the Marked One unhappy and more befitting of his "hostile" subtype status.
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/get_angry()
if(stat >= DEAD)
return
if(anger_timer_id)
deltimer(anger_timer_id)
anger_timer_id = addtimer(CALLBACK(src, .proc/get_calm), MARKED_ONE_ANGER_DURATION, TIMER_STOPPABLE)
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/get_calm() //I'M THE MAN THAT'S GONNA BURN YOUR HOUSE DOWN! With the lemons!
/// Makes the Marked One a sleepy boy that don't wanna hurt nobody. He starts like this and progresses to his hostile state after seeing an ash walker or being punched in the noggin.
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/get_calm()
if(anger_timer_id)
deltimer(anger_timer_id)
anger_timer_id = null
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/introduction(mob/living/target) //monologue.txt
/// Proc that makes the Marked One spout a morally grey/absurdly racist one-liner dependong on who his target is
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/introduction(mob/living/target)
if(ishuman(target))
var/mob/living/carbon/human/human_target = target
var/datum/species/targetspecies = human_target.dna.species
@@ -242,10 +249,11 @@
GiveTarget(target)
else
//simplemobs beware
say("FRESH MEAT!")
say("It's berserkin' time!")
introduced |= WEAKREF(target)
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/update_phase() //this checks against his current health and updates his phase accordingly
/// Checks against the Marked One's current health and updates his phase accordingly. Uses variable shitcode to make sure his phase updates only ever happen *once*
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/update_phase()
var/healthpercentage = 100 * (health/maxHealth)
if(src.stat >= DEAD)
return
@@ -288,7 +296,8 @@
if(charging)
move_to_delay = move_to_delay_charge
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/spinattack() //SPEEEEN
/// Proc name speaks for itself. Vinesauce Joel
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/spinattack()
var/turf/our_turf = get_turf(src)
if(!istype(our_turf))
return
@@ -309,7 +318,7 @@
spinning = TRUE
for(var/turf/targeted as anything in spinningturfs)
dir = get_dir(src, targeted)
var/obj/effect/temp_visual/small_smoke/halfsecond/smonk = new /obj/effect/temp_visual/small_smoke/halfsecond(targeted)
var/obj/effect/temp_visual/small_smoke/smonk = new /obj/effect/temp_visual/small_smoke(targeted)
QDEL_IN(smonk, 0.5 SECONDS)
for(var/mob/living/slapped in targeted)
if(!faction_check(faction, slapped.faction) && !(slapped in hit_things))
@@ -322,16 +331,13 @@
hit_things |= slapped
if(!spinning)
break
addtimer(CALLBACK(src, .proc/animate_speen), 0.5 SECONDS)
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/animate_speen()
sleep(0.75) //addtimer(CALLBACK(src, .proc/convince_zonespace_to_let_me_use_sleeps), 2 WEEKS)
animate(src, color = initial(color), 3)
addtimer(CALLBACK(src, .proc/stop_speen), 0.5 SECONDS)
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/stop_speen()
sleep(3)
spinning = FALSE
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/charge(atom/target, range = 1) //the marked one's charge has an instant travel time, but takes a moment to power-up, allowing you to get behind cover to stun him
/// The Marked One's charge has an instant travel time, but takes a moment to power-up, allowing you to get behind cover to stun him if he hits a wall. Only ever called when a phase change occurs, as it hardstuns if it lands
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/charge(atom/target, range = 1)
face_atom(target)
visible_message(span_userdanger("[src] lifts his arm, and prepares to charge!"))
animate(src, color = "#ff6666", 3)
@@ -341,7 +347,8 @@
charging = TRUE
update_phase()
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/discharge(modifier = 1) //discharge is a proc that occurs when the marked one charges into a solid turf on his way to your ass, causing a stun
/// Discharge damages the Marked One and stuns him when he slams into a wall whilst charging
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/discharge(modifier = 1)
stunned = TRUE
charging = FALSE
minimum_distance = initial(minimum_distance)
@@ -351,7 +358,8 @@
sleep(CEILING(MARKED_ONE_STUN_DURATION * modifier, 1))
stunned = FALSE
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/teleport(atom/target) //teleport is a proc that makes him teleport
/// Teleport makes him teleport. woah.
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/teleport(atom/target)
var/turf/targeted = get_step(target, target.dir)
new /obj/effect/temp_visual/small_smoke/halfsecond(get_turf(src))
SLEEP_CHECK_DEATH(4, src)
@@ -369,20 +377,52 @@
new /obj/effect/temp_visual/small_smoke/halfsecond(targeted)
forceMove(targeted)
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/bone_knife_throw(atom/target) //bone_knife_throw is a proc that throws bone knives
/// Bone Knife Throw makes him throw bone knives. woah.
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/bone_knife_throw(atom/target)
var/obj/item/knife/combat/bone/boned = new /obj/item/knife/combat/bone(get_turf(src))
boned.throwforce = 35
playsound(src, 'sound/weapons/bolathrow.ogg', 60, 0)
boned.throw_at(target, 7, 3, thrower = src)
QDEL_IN(boned, 3 SECONDS)
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/swordslam() //this kills the crab
wendigo_slam(src, 5, 1 SECONDS, 8)
/// Effectively just a copied and pasted version of the wendigo ground slam. Used to create radiating shockwaves that force quick thinking and repositioning, and must be defined here because *someone* un-globaled the shit out of this proc
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/ground_pound(range, delay, throw_range)
var/turf/origin = get_turf(src)
if(!origin)
return
var/list/all_turfs = RANGE_TURFS(range, origin)
for(var/sound_range = 0 to range)
playsound(origin,'sound/effects/bamf.ogg', 600, TRUE, 10)
for(var/turf/stomp_turf in all_turfs)
if(get_dist(origin, stomp_turf) > sound_range)
continue
new /obj/effect/temp_visual/small_smoke/halfsecond(stomp_turf)
for(var/mob/living/target in stomp_turf)
if(target == src || target.throwing)
continue
to_chat(target, span_userdanger("[src]'s ground slam shockwave sends you flying!"))
var/turf/thrownat = get_ranged_target_turf_direct(src, target, throw_range, rand(-10, 10))
target.throw_at(thrownat, 8, 2, null, TRUE, force = MOVE_FORCE_OVERPOWERING, gentle = TRUE)
target.apply_damage(20, BRUTE, wound_bonus=CANT_WOUND)
shake_camera(target, 2, 1)
all_turfs -= stomp_turf
sleep(delay)
/// Large radius but slow-to-move radiating ground slam
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/swordslam()
ground_pound(5, 1 SECONDS, 8)
/// Sort range slam with faster shockwave travel
/mob/living/simple_animal/hostile/megafauna/gladiator/proc/stomp()
wendigo_slam(src, 2, 0.5 SECONDS, 3)
ground_pound(2, 0.5 SECONDS, 3)
/mob/living/simple_animal/hostile/megafauna/gladiator/OpenFire() //used to actually decide what attacks he does. abandon all hope ye who enter here
/// Used to determine what attacks the Marked One actually uses. This works by making him a ranged mob without a projectile. Shitcode? Maybe! But it woooorks.
/mob/living/simple_animal/hostile/megafauna/gladiator/OpenFire()
if(!COOLDOWN_FINISHED(src, ranged_cooldown))
return FALSE
if(spinning || stunned || charging)